UNPKG

laif-ds

Version:

Design System di Laif con componenti React basati su principi di Atomic Design

257 lines (256 loc) 8.23 kB
"use client"; import { getListMultiSelectFilterOptions as v, getListSingleSelectFilterOptions as D, getDateTimeFilterOptions as A, getDateFilterOptions as F, getBooleanFilterOptions as b, getNumberFilterOptions as T, getStringFilterOptions as k } from "./data-table-constants.js"; import { defaultDataTableI18n as m } from "./data-table-i18n.js"; function L(e, s = "string") { const r = (o) => { switch (o) { case "string": return k(m)?.[0]?.value ?? "like"; case "number": return T(m)?.[0]?.value ?? "eq"; case "boolean": return b(m)?.[0]?.value ?? "eq"; case "date": return F(m)?.[0]?.value ?? "eq"; case "datetime": return A(m)?.[0]?.value ?? "date_time_before"; case "list_single_select": return D(m)?.[0]?.value ?? "array_overlap"; case "list_multi_select": return v(m)?.[0]?.value ?? "array_overlap"; default: return "eq"; } }; return { id: crypto.randomUUID(), columnId: e?.id || "", columnLabel: e?.column.columnDef.meta?.headerLabel || (typeof e?.column.columnDef.header == "string" ? e.column.columnDef.header : "") || e?.id || "", columnAccessorKey: (e?.column.columnDef && "accessorKey" in e.column.columnDef && typeof e.column.columnDef.accessorKey == "string" ? e.column.columnDef.accessorKey : e?.id) || "", columnType: e?.column.columnDef.meta?.type || s, operator: r( e?.column.columnDef.meta?.type ), listOptions: e?.column.columnDef.meta?.listOptions }; } function O() { const e = () => crypto.randomUUID(); return { id: e(), rootGroup: { id: e(), logicalOperator: "AND", conditions: [ { id: e(), columnId: "", columnAccessorKey: "", columnLabel: "", columnType: "string", operator: "eq", value: void 0 } ], groups: [] } }; } function I(e, s) { const r = e.filter((n) => n.operator === "eq_null" || n.operator === "n_eq_null" || n.operator === "checked" || n.operator === "unchecked" ? !0 : n.value === void 0 || n.value === "" ? !1 : n.columnType === "list_multi_select" ? (Array.isArray(n.value) ? n.value.filter((i) => i !== void 0) : [n.value].filter((i) => i !== void 0)).length > 0 : !0), u = s ? ((n) => { const p = (i) => { const y = i.conditions.filter((a) => !a.columnId || !a.operator ? !1 : a.operator === "eq_null" || a.operator === "n_eq_null" || a.operator === "checked" || a.operator === "unchecked" ? !0 : a.value === void 0 ? !1 : a.columnType === "list_multi_select" ? (Array.isArray(a.value) ? a.value.filter((_) => _ !== void 0) : [a.value].filter((_) => _ !== void 0)).length > 0 : !0).map((a) => ({ [a.columnAccessorKey]: { operator: a.operator, value: a.operator === "eq_null" || a.operator === "n_eq_null" || a.operator === "checked" || a.operator === "unchecked" ? !0 : a.columnType === "list_single_select" ? Array.isArray(a.value) ? a.value.filter((f) => f !== void 0) : [a.value].filter((f) => f !== void 0) : a.value } })), g = i.groups?.map(p).filter(Boolean) || [], d = [ ...y, ...g ]; return d.length === 0 ? null : d.length === 1 ? d[0] : i.logicalOperator === "AND" ? { _and: d } : { _or: d }; }; return p(n.rootGroup); })(s) : null, c = r.map( (n) => ({ [n.columnAccessorKey]: { operator: n.operator, value: n.operator === "eq_null" || n.operator === "n_eq_null" || n.operator === "checked" || n.operator === "unchecked" ? !0 : n.columnType === "list_single_select" ? Array.isArray(n.value) ? n.value.filter((p) => p !== void 0) : [n.value].filter((p) => p !== void 0) : n.value ?? "" } }) ), t = [ ...u ? [u] : [], ...c ]; return t.length > 0 ? t.length === 1 ? t[0] : { _and: t } : {}; } function H(e, s) { const { rowHeight: r = 1, headerHeight: o = 1, containerHeight: u = 1, onPageChange: c, setPagination: t } = s, l = e?.offsetHeight || u, n = Math.floor( (l - o) / r ), p = n > 1 ? n : 1; t((i) => { if (i.pageSize !== p) { if (c) { const y = Math.max( 0, Math.ceil(i.pageSize * (i.pageIndex + 1) / p) - 1 ), g = Math.min(i.pageIndex, y); c(g, p); } return { ...i, pageSize: p }; } return i; }); } function q(e, s, r) { if (e == null) switch (s) { case "eq_null": return !0; case "n_eq_null": return !1; default: return !1; } const o = (t) => t == null || typeof t == "string" ? t : String(t), u = o(e), c = o(r); switch (s) { case "eq": return u === c; case "ne": return u !== c; case "lt": return typeof e == "number" && typeof r == "number" ? e < r : u < c; case "le": return typeof e == "number" && typeof r == "number" ? e <= r : u <= c; case "gt": return typeof e == "number" && typeof r == "number" ? e > r : u > c; case "ge": return typeof e == "number" && typeof r == "number" ? e >= r : u >= c; case "like": return u?.toLowerCase().includes(c?.toLowerCase()); case "n_like": return !u?.toLowerCase().includes(c?.toLowerCase()); case "starts_with": return u?.toLowerCase().startsWith(c?.toLowerCase()); case "ends_with": return u?.toLowerCase().endsWith(c?.toLowerCase()); case "eq_null": return e == null || e === ""; case "n_eq_null": return e != null && e !== ""; case "array_overlap": return Array.isArray(e) && Array.isArray(r) ? r.length === 0 ? !0 : e.length === 0 ? !1 : r.some( (t) => e.some( (l) => o(l) === o(t) ) ) : !1; case "n_array_overlap": return Array.isArray(e) && Array.isArray(r) ? r.length === 0 || e.length === 0 ? !0 : !r.some( (t) => e.some( (l) => o(l) === o(t) ) ) : !0; case "checked": return e === !0; case "unchecked": return e === !1; case "date_before": try { const t = new Date(e), l = new Date(r); return t.setHours(0, 0, 0, 0), l.setHours(0, 0, 0, 0), t < l; } catch { return !1; } case "date_after": try { const t = new Date(e), l = new Date(r); return t.setHours(0, 0, 0, 0), l.setHours(0, 0, 0, 0), t > l; } catch { return !1; } case "date_time_before": try { const t = new Date(e), l = new Date(r); return t < l; } catch { return !1; } case "date_time_after": try { const t = new Date(e), l = new Date(r); return t > l; } catch { return !1; } default: return console.warn(`Unknown filter operator: ${s}`), !0; } } function h(e, s) { if (!s || Object.keys(s).length === 0) return !0; if ("_and" in s && Array.isArray(s._and)) return s._and.every( (r) => h(e, r) ); if ("_or" in s && Array.isArray(s._or)) return s._or.some( (r) => h(e, r) ); for (const [r, o] of Object.entries(s)) if (!r.startsWith("_") && typeof o == "object" && o !== null && "operator" in o) { const u = e.getValue(r); if (!q( u, o.operator, o.value )) return !1; } return !0; } function K(e, s) { let r; return function(...o) { clearTimeout(r), r = setTimeout(() => { e(...o); }, s); }; } function M(e) { switch (e) { case "string": return "CaseUpper"; case "number": return "Binary"; case "boolean": return "ToggleRight"; case "date": return "Calendar1"; case "datetime": return "CalendarClock"; case "list_single_select": return "List"; case "list_multi_select": return "ListTodo"; case "other": return "FileQuestionMark"; default: return "FileQuestionMark"; } } export { q as applyClientSideFilter, h as applySearchFilterToRow, I as buildSearchFilter, L as createBadgeFilterFromHeader, O as createDefaultAdvancedFilter, K as debounce, M as getIconFromColumnType, H as updatePageSizeFromContainer };