@leancodepl/utils
Version:
Common utility functions and React hooks for web applications
139 lines (138 loc) • 3.06 kB
JavaScript
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
};