UNPKG

@wener/ui

Version:

36 lines 1.25 kB
"use strict"; 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