П
Size: a a a
П
fe
fe
AV
<button onClick={() => {
if (address) {
next();
} else {
showAddressDialog({ onSuccess: next });
}
}} />showAddressDialog и по итогу принимать другие действияП
<>
{address && <button onClick={next}>next</button>}
{!address && <button onClick={showAddressDialog}>show dialog</button>}
</>
fe
fe
<>
{address && <button onClick={next}>next</button>}
{!address && <button onClick={showAddressDialog}>show dialog</button>}
</>
П
П
fe
П
fe
П
<form>
{!address && <button onClick={showAddressDialog}>show dialog</button>}
<button onClick={next} disabled={!Boolean(address)}>next</button>
</form>
fe
<form>
{!address && <button onClick={showAddressDialog}>show dialog</button>}
<button onClick={next} disabled={!Boolean(address)}>next</button>
</form>
AV
<form>
{!address && <button onClick={showAddressDialog}>show dialog</button>}
<button onClick={next} disabled={!Boolean(address)}>next</button>
</form>
DS
export const setAddress = createEvent<string | null>();
export const address = restore(setAddress, null);
export const next = createEvent();
const requireAddress = createEvent();
export const requireAddressFx = createEffect({
handler: () => {
requireAddress();
const unsub = address.subscribe(value => {
if (value) {
next();
unsub();
}
});
},
});
export const addressDialogDismiss = createEvent();
guard({
source: sample(address, next),
filter: address.map(x => !x),
target: requireAddressFx,
});
export const awaitingAddress = createStore(false)
.on(requireAddress, () => true)
.on(addressDialogDismiss, () => false)
.on(address, (_, payload) => !payload);
guard, sample, merge, event.prepend), потому что каждый из этих методов\функций возвращает ивент.NB
fe
guard, sample, merge, event.prepend), потому что каждый из этих методов\функций возвращает ивент.П
fe