laif-ds
Version:
Design System di Laif con componenti React basati su principi di Atomic Design
257 lines (256 loc) • 8.23 kB
JavaScript
"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
};