stocky-mechanic-87541
12/17/2021, 1:08 PMadamant-exabyte-92636
12/17/2021, 1:10 PMstocky-mechanic-87541
12/17/2021, 1:12 PMadamant-exabyte-92636
12/17/2021, 1:14 PMstocky-mechanic-87541
12/17/2021, 1:14 PMstocky-dentist-80693
12/17/2021, 1:23 PMstocky-mechanic-87541
12/17/2021, 1:35 PMsend ew:state_changed to closest .edwh-messagebus
And then we listen to it using
hx-trigger="ew:state_changed from:closest .edwh-messagebus"mysterious-toddler-20573
12/17/2021, 2:20 PM.edwh-messagebus element stable or does it get replaced?mysterious-toddler-20573
12/17/2021, 2:21 PMmysterious-toddler-20573
12/17/2021, 2:22 PMmysterious-toddler-20573
12/17/2021, 2:23 PMjsx
import React from 'react'
import { useAsyncExtendedState, usePromise } from '../../hooks'
import { update } from '../../API/resource/thing'
import { types } from '../../API/resource/thing'
export const Editor = () => {
const [ state, setState, extendState ] = useAsyncExtendedState<types.Props>({
id: `733e26aa-97ea-46d7-b4d4-e556a5f37d68`,
createdAt: `2021-12-17T12:32:13.981Z`,
updatedAt: `2021-12-17T12:32:13.981Z`,
description: `This is a simple but powerful design pattern!`
})
const [ updateRequest, requestUpdate ] = usePromise((updateProps: types.UpdateProps) => (
update(state.id, updateProps).then(response => response.data.props)
))
return (
<div>
<div>
{`Created thing: ${new Date(state.createdAt).toLocaleString()}`}
</div>
<div>
{`Updated thing: ${new Date(state.updatedAt).toLocaleString()}`}
</div>
<textarea
value={state.description}
onChange={event => extendState({ description: event.target.value })}
/>
<button onClick={() => extendState(requestUpdate({ description: state.description }))}>
{updateRequest.status === `pending` ? `Updating thing...` : `Update thing`}
</button>
{updateRequest.cancel && (
<button onClick={() => updateRequest.cancel(`cancelled`)}>
Cancel update
</button>
)}
{updateRequest.status && (
<div>
{`Request status: ${updateRequest.status}`}
</div>
)}
{updateRequest.error && (
<div style={{ color: `red` }}>
{`Error: ${updateRequest.error.message}`}
</div>
)}
</div>
)stocky-mechanic-87541
12/17/2021, 4:01 PMmysterious-toddler-20573
12/17/2021, 4:04 PMmysterious-toddler-20573
12/17/2021, 4:04 PMmysterious-toddler-20573
12/17/2021, 4:04 PMmysterious-toddler-20573
12/17/2021, 4:05 PMstocky-mechanic-87541
12/17/2021, 4:13 PMgorgeous-airport-54386
12/17/2021, 4:13 PMon.mysterious-toddler-20573
12/17/2021, 4:15 PMon handlerstocky-mechanic-87541
12/17/2021, 4:15 PMon htmx:afterSettle (do some UI stuff) or e.g. on htmx:afterSettle log 'settled' but sometimes the component does show up, but nothing is changed on the UI or loggedmysterious-toddler-20573
12/17/2021, 4:15 PMstocky-mechanic-87541
12/17/2021, 4:16 PMmysterious-toddler-20573
12/17/2021, 4:19 PMhtmx:afterSettle on the settled content: https://github.com/bigskysoftware/htmx/blob/e3c0dadbe7de09fde4df32fb7d730ab8385379b4/src/htmx.js#L2592mysterious-toddler-20573
12/17/2021, 4:19 PMstocky-mechanic-87541
12/17/2021, 4:19 PMmysterious-toddler-20573
12/17/2021, 4:20 PMstocky-mechanic-87541
12/17/2021, 4:20 PMmysterious-toddler-20573
12/17/2021, 4:20 PMmysterious-toddler-20573
12/17/2021, 4:21 PMmysterious-toddler-20573
12/17/2021, 4:22 PM