@thisisagile/easy-react
Version:
Straightforward library building micro applications in react
88 lines • 2.18 kB
JavaScript
// src/utils/Hooks.ts
import { isPageList, ofGet, toList, toPageList } from "@thisisagile/easy";
import { useState } from "react";
function useSwitch(...states) {
const [state, setState] = useState(states[0]);
const next = () => setState((s) => states[(states.indexOf(s) + 1) % states.length]);
const isState = (t) => state === t;
function ifState(t, yes, no) {
return ofGet(state === t ? yes : no, t);
}
return { state, next, states, isState, ifState };
}
var useA = (item = {}) => {
const [state, setState] = useState({ isValid: false, ...item });
return [
state,
(e) => {
setState(e);
return e;
}
];
};
var useAn = useA;
var useOptional = (item) => {
const [state, setState] = useState(item);
const set = (e) => {
setState(e);
return e;
};
return [state, set, () => set()];
};
var useEntity = useA;
var useList = (...items) => {
const [state, setState] = useState(toList(...items));
return [
state,
(e) => {
setState(e);
return e;
}
];
};
var usePageList = (...items) => {
const [pages, setPages] = useState(toPageList(items));
return [
pages,
(e) => {
setPages(e);
return e;
}
];
};
var usePaging = (f, options) => {
const [list, setList] = usePageList();
const [skip, setSkip] = useState(options?.skip ?? 0);
const [take] = useState(options?.take ?? 5);
const next = (options2 = { skip, take }) => f(options2).then((items) => {
setSkip(skip + take);
return setList(toPageList(list.add(items), items));
});
return [list, next, list.length < (list?.total ?? 0), skip, take];
};
var useGet = (f, initial) => {
const [item, setItem] = useState(initial ?? {});
const getter = () => f().then((i) => {
setItem(i);
return i;
});
return [item, getter];
};
var useGetList = (f) => {
const [list, setList] = usePageList();
const getter = () => f().then((l) => setList(isPageList(l) ? l : toPageList(l, { total: l.length })));
return [list, getter];
};
export {
useA,
useAn,
useEntity,
useGet,
useGetList,
useList,
useOptional,
usePageList,
usePaging,
useSwitch
};
//# sourceMappingURL=Hooks.mjs.map