UNPKG

@leancodepl/utils

Version:

Common utility functions and React hooks for web applications

139 lines (138 loc) 3.06 kB
import a from "tiny-invariant"; import { jsx as p } from "react/jsx-runtime"; import { useState as c, useCallback as u, useMemo as d, createContext as m, useEffect as f, useContext as y } from "react"; function g() { const [n, t] = c(0), e = u(async (r) => { t((o) => o + 1); try { return await r(); } finally { t((o) => o - 1); } }, []); return [n > 0, e]; } function I(n) { const [t, e] = g(), r = d( () => n ? (...o) => e(() => n(...o)) : void 0, [n, e] ); return [t, r]; } function k(n) { return [u(() => n(!0), [n]), u(() => n(!1), [n])]; } function L(n) { const [t, e] = c(!1), [r, o] = k(e), i = u(() => { o(), n && setTimeout(n); }, [o, n]); return { isDialogOpen: t, openDialog: r, closeDialog: i }; } function N(n) { const t = []; for (const e in n) { const r = n[e]; (Array.isArray(r) ? r.some((o) => o !== null) : r !== null) && t.push(e); } return t; } function v(n, t, e) { const [r, o] = c(n); (e ? !e(n, r) : n !== r) && (o(n), t(n)); } function w(n, t) { return Object.fromEntries(Object.entries(n).map(([e, r]) => [`${t}${e}`, r])); } function D(n, t) { a(n !== void 0, t); } function x(n, t) { a(n != null, t); } function C(n, t) { a(n !== null, t); } function R(n, t = {}) { if (typeof n == "string") { const { name: e } = t, r = document.createElement("a"); r.href = n, r.target = "_blank", e && (r.download = e), r.click(); } else { const e = URL.createObjectURL(n); R(e, t), URL.revokeObjectURL(e); } } function z(n, t) { return D(n, t), n; } function E(n, t) { return x(n, t), n; } function O(n, t) { return C(n, t), n; } function l(n, t) { return n.length === 0 ? "" : t(n[0]) + n.slice(1); } function T(n) { return l(n, (t) => t.toLowerCase()); } function h(n) { return l(n, (t) => t.toUpperCase()); } function s(n, t) { if (n != null) { if (Array.isArray(n)) return n.map((e) => s(e, t)); if (typeof n == "object") { const e = t === "capitalize" ? h : T; return Object.entries(n).reduce( (r, [o, i]) => ({ ...r, [e(o)]: s(i, t) }), {} ); } return n; } } function P(n) { return s(n, "uncapitalize"); } function U(n) { return s(n, "capitalize"); } function V() { const n = m([void 0, () => { }]); function t() { return y(n); } return t.Provider = function({ children: r, initialValue: o }) { const i = c(o); return /* @__PURE__ */ p(n.Provider, { value: i, children: r }); }, t.set = function(r) { const [, o] = t(); f(() => { o(r); }, [o, r]), f(() => () => o(void 0), [o]); }, t; } export { w as addPrefix, D as assertDefined, x as assertNotEmpty, C as assertNotNull, U as capitalizeDeep, R as downloadFile, z as ensureDefined, E as ensureNotEmpty, O as ensureNotNull, V as mkValueContext, T as toLowerFirst, h as toUpperFirst, P as uncapitalizeDeep, I as useBoundRunInTask, L as useDialog, N as useKeyByRoute, g as useRunInTask, k as useSetUnset, v as useSyncState };