@wener/ui
Version:
36 lines • 1.25 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.usePromiseEffect = void 0;
const react_1 = __importDefault(require("react"));
function isPromise(v) {
return v && v.then && v.catch;
}
function usePromiseEffect(v) {
const [state, setState] = react_1.default.useState(() => {
if (isPromise(v)) {
return { loading: true };
}
return { loading: false, data: v };
});
react_1.default.useEffect(() => {
if (isPromise(v)) {
setState((state) => ({ ...state, loading: true, error: undefined }));
v.then((data) => setState({ loading: false, data })).catch((error) => setState({ loading: false, error }));
}
else {
// prevent useless state change
setState((state) => {
if (state.data === v) {
return state;
}
return { loading: false, data: v };
});
}
}, [v]);
return state;
}
exports.usePromiseEffect = usePromiseEffect;
//# sourceMappingURL=usePromiseEffect.js.map