solid-awesome-hooks
Version:
A collection of awesome hooks for solid-js
32 lines (31 loc) • 882 B
JavaScript
import { createSignal, batch } from "solid-js";
export const useAsyncAction = () => {
const [actionState, setActionState] = createSignal("ready");
const [errorMessage, setErrorMessage] = createSignal();
const tryAsync = async (action) => {
batch(() => {
setActionState("pending");
setErrorMessage(undefined);
});
try {
const data = await action();
setActionState("resolved");
return data;
}
catch (error) {
setActionState("errored");
throw error;
}
};
const reset = () => batch(() => {
setActionState("ready");
setErrorMessage(undefined);
});
return {
setErrorMessage,
try: tryAsync,
state: actionState,
errorMessage,
reset,
};
};