next-recomponents 1.9.5 → 1.9.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +7 -5
- package/dist/index.d.ts +7 -5
- package/dist/index.js +139 -20
- package/dist/index.mjs +139 -20
- package/package.json +1 -1
- package/src/table/filters.tsx +32 -0
- package/src/table3/body.tsx +57 -41
- package/src/table3/filter.tsx +69 -7
- package/src/table3/footer.tsx +10 -2
- package/src/table3/head.tsx +6 -0
- package/src/table3/index.tsx +14 -7
- package/src/table3/tr.tsx +10 -1
package/dist/index.d.mts
CHANGED
|
@@ -201,18 +201,20 @@ type Props = {
|
|
|
201
201
|
};
|
|
202
202
|
declare function DocumentViewer({ item }: Props): react_jsx_runtime.JSX.Element;
|
|
203
203
|
|
|
204
|
-
interface Table3Props extends DetailedHTMLProps<TableHTMLAttributes<HTMLTableElement>, HTMLTableElement> {
|
|
205
|
-
data:
|
|
204
|
+
interface Table3Props<T extends Record<string, any>> extends DetailedHTMLProps<TableHTMLAttributes<HTMLTableElement>, HTMLTableElement> {
|
|
205
|
+
data: T[];
|
|
206
206
|
selectItems?: boolean;
|
|
207
207
|
maxItems?: number;
|
|
208
208
|
onSave?: (e: any) => void;
|
|
209
209
|
exportName?: string;
|
|
210
|
-
colSizes?: Record<
|
|
210
|
+
colSizes?: Partial<Record<keyof T, number>>;
|
|
211
211
|
modal?: React$1.ReactNode;
|
|
212
|
-
footer?: Record<
|
|
212
|
+
footer?: Partial<Record<keyof T, "sum" | "count" | "avg">>;
|
|
213
213
|
header?: React$1.ReactNode;
|
|
214
214
|
onChange?: (e: any) => any;
|
|
215
|
+
symbols?: Partial<Record<keyof T, React$1.ReactNode>>;
|
|
216
|
+
sortBy?: Partial<Record<keyof T, "asc" | "desc">>;
|
|
215
217
|
}
|
|
216
|
-
declare function Table3({ data, selectItems, maxItems, onSave, exportName, colSizes, modal, header, footer, onChange, ...props }: Table3Props): react_jsx_runtime.JSX.Element | null;
|
|
218
|
+
declare function Table3<T extends Record<string, any>>({ data, selectItems, maxItems, onSave, exportName, colSizes, modal, header, footer, onChange, symbols, sortBy, ...props }: Table3Props<T>): react_jsx_runtime.JSX.Element | null;
|
|
217
219
|
|
|
218
220
|
export { Alert, Button, Container, DocumentViewer, Form, Input, Modal, MyCalendar, Pre, Select, Table, Table3, type TableEventProps, TextArea, regularExpresions, useDates, useExcel, useFormValues, useResources };
|
package/dist/index.d.ts
CHANGED
|
@@ -201,18 +201,20 @@ type Props = {
|
|
|
201
201
|
};
|
|
202
202
|
declare function DocumentViewer({ item }: Props): react_jsx_runtime.JSX.Element;
|
|
203
203
|
|
|
204
|
-
interface Table3Props extends DetailedHTMLProps<TableHTMLAttributes<HTMLTableElement>, HTMLTableElement> {
|
|
205
|
-
data:
|
|
204
|
+
interface Table3Props<T extends Record<string, any>> extends DetailedHTMLProps<TableHTMLAttributes<HTMLTableElement>, HTMLTableElement> {
|
|
205
|
+
data: T[];
|
|
206
206
|
selectItems?: boolean;
|
|
207
207
|
maxItems?: number;
|
|
208
208
|
onSave?: (e: any) => void;
|
|
209
209
|
exportName?: string;
|
|
210
|
-
colSizes?: Record<
|
|
210
|
+
colSizes?: Partial<Record<keyof T, number>>;
|
|
211
211
|
modal?: React$1.ReactNode;
|
|
212
|
-
footer?: Record<
|
|
212
|
+
footer?: Partial<Record<keyof T, "sum" | "count" | "avg">>;
|
|
213
213
|
header?: React$1.ReactNode;
|
|
214
214
|
onChange?: (e: any) => any;
|
|
215
|
+
symbols?: Partial<Record<keyof T, React$1.ReactNode>>;
|
|
216
|
+
sortBy?: Partial<Record<keyof T, "asc" | "desc">>;
|
|
215
217
|
}
|
|
216
|
-
declare function Table3({ data, selectItems, maxItems, onSave, exportName, colSizes, modal, header, footer, onChange, ...props }: Table3Props): react_jsx_runtime.JSX.Element | null;
|
|
218
|
+
declare function Table3<T extends Record<string, any>>({ data, selectItems, maxItems, onSave, exportName, colSizes, modal, header, footer, onChange, symbols, sortBy, ...props }: Table3Props<T>): react_jsx_runtime.JSX.Element | null;
|
|
217
219
|
|
|
218
220
|
export { Alert, Button, Container, DocumentViewer, Form, Input, Modal, MyCalendar, Pre, Select, Table, Table3, type TableEventProps, TextArea, regularExpresions, useDates, useExcel, useFormValues, useResources };
|
package/dist/index.js
CHANGED
|
@@ -12007,6 +12007,36 @@ function FilterOffIcon() {
|
|
|
12007
12007
|
}
|
|
12008
12008
|
);
|
|
12009
12009
|
}
|
|
12010
|
+
function OrderDesc() {
|
|
12011
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
12012
|
+
"svg",
|
|
12013
|
+
{
|
|
12014
|
+
stroke: "currentColor",
|
|
12015
|
+
fill: "currentColor",
|
|
12016
|
+
strokeWidth: "0",
|
|
12017
|
+
viewBox: "0 0 448 512",
|
|
12018
|
+
height: "20px",
|
|
12019
|
+
width: "20px",
|
|
12020
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
12021
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { d: "M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm112-128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 65.63V48a16 16 0 0 0-16-16H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 190.37V208a16 16 0 0 0 16 16zm159.06 234.62l-59.27-160A16 16 0 0 0 372.72 288h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 480h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 480H432a16 16 0 0 0 15.06-21.38zM335.61 400L352 352l16.39 48z" })
|
|
12022
|
+
}
|
|
12023
|
+
);
|
|
12024
|
+
}
|
|
12025
|
+
function OrderAsc() {
|
|
12026
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
12027
|
+
"svg",
|
|
12028
|
+
{
|
|
12029
|
+
stroke: "currentColor",
|
|
12030
|
+
fill: "currentColor",
|
|
12031
|
+
strokeWidth: "0",
|
|
12032
|
+
viewBox: "0 0 448 512",
|
|
12033
|
+
height: "20px",
|
|
12034
|
+
width: "20px",
|
|
12035
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
12036
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { d: "M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm240-64H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 446.37V464a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 321.63V304a16 16 0 0 0-16-16zm31.06-85.38l-59.27-160A16 16 0 0 0 372.72 32h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 224h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 224H432a16 16 0 0 0 15.06-21.38zM335.61 144L352 96l16.39 48z" })
|
|
12037
|
+
}
|
|
12038
|
+
);
|
|
12039
|
+
}
|
|
12010
12040
|
function EditIcon() {
|
|
12011
12041
|
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
12012
12042
|
"svg",
|
|
@@ -45596,7 +45626,9 @@ function Filter({
|
|
|
45596
45626
|
setObjectData,
|
|
45597
45627
|
setPage,
|
|
45598
45628
|
colSizes,
|
|
45599
|
-
data
|
|
45629
|
+
data,
|
|
45630
|
+
sort,
|
|
45631
|
+
setSort
|
|
45600
45632
|
}) {
|
|
45601
45633
|
const [visible, setVisible] = (0, import_react33.useState)(false);
|
|
45602
45634
|
const [text, setText] = (0, import_react33.useState)("");
|
|
@@ -45661,14 +45693,15 @@ function Filter({
|
|
|
45661
45693
|
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
45662
45694
|
"div",
|
|
45663
45695
|
{
|
|
45664
|
-
style: {
|
|
45665
|
-
minWidth: "
|
|
45666
|
-
maxWidth: `${(
|
|
45667
|
-
width: `${colSizes
|
|
45668
|
-
},
|
|
45669
|
-
className: `resize-x overflow-
|
|
45696
|
+
style: (colSizes == null ? void 0 : colSizes[h]) ? {
|
|
45697
|
+
minWidth: "100%",
|
|
45698
|
+
maxWidth: `${(colSizes[h] || 0) + 300}px`,
|
|
45699
|
+
width: `${colSizes[h]}px`
|
|
45700
|
+
} : { minWidth: "100%", maxWidth: "500px" },
|
|
45701
|
+
className: `resize-x overflow-hidden text-center flex justify-evenly p-1 items-center gap-2`,
|
|
45670
45702
|
onClick: (e) => setVisible(!visible),
|
|
45671
45703
|
children: [
|
|
45704
|
+
sort && Object.keys(sort)[0] == h && ((sort == null ? void 0 : sort[h]) == "asc" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "text-green-300", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(OrderAsc, {}) }) : (sort == null ? void 0 : sort[h]) == "desc" && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "text-green-300", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(OrderDesc, {}) })),
|
|
45672
45705
|
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { children: h }),
|
|
45673
45706
|
selected.length < items.length && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "text-red-500 ", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(FilterOffIcon, {}) })
|
|
45674
45707
|
]
|
|
@@ -45680,6 +45713,48 @@ function Filter({
|
|
|
45680
45713
|
className: "border shadow rounded bg-white p-1 absolute left-0 text-black",
|
|
45681
45714
|
style: { zIndex: 9999 },
|
|
45682
45715
|
children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex flex-col gap-1 w-[300px] min-w-[300px] resize-x overflow-auto", children: [
|
|
45716
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
45717
|
+
"div",
|
|
45718
|
+
{
|
|
45719
|
+
onClick: (e) => {
|
|
45720
|
+
const newSort = __spreadValues({}, sort);
|
|
45721
|
+
newSort[h] = "asc";
|
|
45722
|
+
const reorderedSort = __spreadValues({
|
|
45723
|
+
[h]: "asc"
|
|
45724
|
+
}, Object.fromEntries(
|
|
45725
|
+
Object.entries(newSort).filter(([key]) => key !== h)
|
|
45726
|
+
));
|
|
45727
|
+
setSort(reorderedSort);
|
|
45728
|
+
setVisible(false);
|
|
45729
|
+
},
|
|
45730
|
+
className: "flex items-center gap-2 border p-1 hover:bg-blue-100",
|
|
45731
|
+
children: [
|
|
45732
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(OrderAsc, {}),
|
|
45733
|
+
" Ordenar de la A a la Z"
|
|
45734
|
+
]
|
|
45735
|
+
}
|
|
45736
|
+
),
|
|
45737
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
45738
|
+
"div",
|
|
45739
|
+
{
|
|
45740
|
+
onClick: (e) => {
|
|
45741
|
+
const newSort = __spreadValues({}, sort);
|
|
45742
|
+
newSort[h] = "desc";
|
|
45743
|
+
const reorderedSort = __spreadValues({
|
|
45744
|
+
[h]: "desc"
|
|
45745
|
+
}, Object.fromEntries(
|
|
45746
|
+
Object.entries(newSort).filter(([key]) => key !== h)
|
|
45747
|
+
));
|
|
45748
|
+
setSort(reorderedSort);
|
|
45749
|
+
setVisible(false);
|
|
45750
|
+
},
|
|
45751
|
+
className: "flex items-center gap-2 border p-1 hover:bg-blue-100",
|
|
45752
|
+
children: [
|
|
45753
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(OrderDesc, {}),
|
|
45754
|
+
"Ordenar de la Z a la A"
|
|
45755
|
+
]
|
|
45756
|
+
}
|
|
45757
|
+
),
|
|
45683
45758
|
selected.length < items.length && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
45684
45759
|
"div",
|
|
45685
45760
|
{
|
|
@@ -45794,7 +45869,9 @@ function TableHead({
|
|
|
45794
45869
|
data,
|
|
45795
45870
|
maxItems,
|
|
45796
45871
|
colSizes,
|
|
45797
|
-
modal
|
|
45872
|
+
modal,
|
|
45873
|
+
sort,
|
|
45874
|
+
setSort
|
|
45798
45875
|
}) {
|
|
45799
45876
|
return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("tr", { className: "bg-blue-500 text-white font-bold", children: [
|
|
45800
45877
|
modal && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("th", { children: "-" }),
|
|
@@ -45834,7 +45911,9 @@ function TableHead({
|
|
|
45834
45911
|
setObjectData,
|
|
45835
45912
|
setPage,
|
|
45836
45913
|
colSizes,
|
|
45837
|
-
data
|
|
45914
|
+
data,
|
|
45915
|
+
sort,
|
|
45916
|
+
setSort
|
|
45838
45917
|
},
|
|
45839
45918
|
h
|
|
45840
45919
|
);
|
|
@@ -45863,7 +45942,8 @@ function TR({
|
|
|
45863
45942
|
index,
|
|
45864
45943
|
selected,
|
|
45865
45944
|
setSelected,
|
|
45866
|
-
onChange
|
|
45945
|
+
onChange,
|
|
45946
|
+
symbols
|
|
45867
45947
|
}) {
|
|
45868
45948
|
const color2 = selected == index ? "bg-blue-600 text-white hover:bg-blue-800" : index % 2 == 0 ? "bg-white" : "bg-blue-50";
|
|
45869
45949
|
return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
|
|
@@ -45937,7 +46017,18 @@ function TR({
|
|
|
45937
46017
|
}, {})));
|
|
45938
46018
|
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("td", { className: `text-black `, children: cloned }, h);
|
|
45939
46019
|
}
|
|
45940
|
-
return
|
|
46020
|
+
return symbols && (symbols == null ? void 0 : symbols[h]) ? /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
|
|
46021
|
+
"td",
|
|
46022
|
+
{
|
|
46023
|
+
className: `text-center border max-w-[${colSize}px] flex items-center gap-1`,
|
|
46024
|
+
children: [
|
|
46025
|
+
symbols[h],
|
|
46026
|
+
" ",
|
|
46027
|
+
row[h]
|
|
46028
|
+
]
|
|
46029
|
+
},
|
|
46030
|
+
h
|
|
46031
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("td", { className: `text-center border max-w-[${colSize}px]`, children: row[h] }, h);
|
|
45941
46032
|
})
|
|
45942
46033
|
]
|
|
45943
46034
|
},
|
|
@@ -45960,10 +46051,23 @@ function TableBody({
|
|
|
45960
46051
|
modalRef,
|
|
45961
46052
|
dialogRow,
|
|
45962
46053
|
setDialogRow,
|
|
45963
|
-
onChange
|
|
46054
|
+
onChange,
|
|
46055
|
+
symbols,
|
|
46056
|
+
sort
|
|
45964
46057
|
}) {
|
|
45965
46058
|
const [selected, setSelected] = (0, import_react35.useState)(-1);
|
|
45966
|
-
|
|
46059
|
+
const sorted = Object.entries(objectData).sort(([, a], [, b]) => {
|
|
46060
|
+
for (const [key, order] of Object.entries(
|
|
46061
|
+
sort || { id: "desc", _id: "desc" }
|
|
46062
|
+
)) {
|
|
46063
|
+
const valA = a[key];
|
|
46064
|
+
const valB = b[key];
|
|
46065
|
+
if (valA === valB) continue;
|
|
46066
|
+
const comparison = valA > valB ? 1 : valA < valB ? -1 : 0;
|
|
46067
|
+
return order === "desc" ? -comparison : comparison;
|
|
46068
|
+
}
|
|
46069
|
+
return 0;
|
|
46070
|
+
}).filter(([id3, row]) => {
|
|
45967
46071
|
var _a;
|
|
45968
46072
|
return ((_a = objectData[id3]) == null ? void 0 : _a._visible) === true;
|
|
45969
46073
|
}).filter((_id, key) => {
|
|
@@ -45971,7 +46075,7 @@ function TableBody({
|
|
|
45971
46075
|
const start = (page - 1) * maxItems;
|
|
45972
46076
|
const end = page * maxItems;
|
|
45973
46077
|
return key >= start && key < end;
|
|
45974
|
-
}).map((id3, index) => {
|
|
46078
|
+
}).map(([id3, k], index) => {
|
|
45975
46079
|
const row = objectData[id3];
|
|
45976
46080
|
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
45977
46081
|
TR,
|
|
@@ -45987,6 +46091,7 @@ function TableBody({
|
|
|
45987
46091
|
modal,
|
|
45988
46092
|
modalRef,
|
|
45989
46093
|
dialogRow,
|
|
46094
|
+
symbols,
|
|
45990
46095
|
setDialogRow,
|
|
45991
46096
|
setSelected,
|
|
45992
46097
|
selected,
|
|
@@ -45994,7 +46099,8 @@ function TableBody({
|
|
|
45994
46099
|
}),
|
|
45995
46100
|
id3
|
|
45996
46101
|
);
|
|
45997
|
-
})
|
|
46102
|
+
});
|
|
46103
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("tbody", { children: sorted });
|
|
45998
46104
|
}
|
|
45999
46105
|
|
|
46000
46106
|
// src/table3/panel.tsx
|
|
@@ -46081,7 +46187,8 @@ function TableFooter({
|
|
|
46081
46187
|
headers,
|
|
46082
46188
|
footer,
|
|
46083
46189
|
selectItems,
|
|
46084
|
-
modal
|
|
46190
|
+
modal,
|
|
46191
|
+
symbols
|
|
46085
46192
|
}) {
|
|
46086
46193
|
function operacion(tipo, header) {
|
|
46087
46194
|
switch (tipo) {
|
|
@@ -46106,7 +46213,11 @@ function TableFooter({
|
|
|
46106
46213
|
if (header.startsWith("_")) {
|
|
46107
46214
|
return null;
|
|
46108
46215
|
} else if (footer == null ? void 0 : footer[header]) {
|
|
46109
|
-
return /* @__PURE__ */ (0, import_jsx_runtime33.
|
|
46216
|
+
return symbols && (symbols == null ? void 0 : symbols[header]) ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("th", { className: "flex items-center gap-1", children: [
|
|
46217
|
+
symbols[header],
|
|
46218
|
+
" ",
|
|
46219
|
+
operacion(footer[header], header)
|
|
46220
|
+
] }, header) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("th", { children: operacion(footer[header], header) }, header);
|
|
46110
46221
|
}
|
|
46111
46222
|
return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("th", {}, header);
|
|
46112
46223
|
})
|
|
@@ -46183,7 +46294,9 @@ function Table3(_a) {
|
|
|
46183
46294
|
modal,
|
|
46184
46295
|
header,
|
|
46185
46296
|
footer,
|
|
46186
|
-
onChange
|
|
46297
|
+
onChange,
|
|
46298
|
+
symbols,
|
|
46299
|
+
sortBy
|
|
46187
46300
|
} = _b, props = __objRest(_b, [
|
|
46188
46301
|
"data",
|
|
46189
46302
|
"selectItems",
|
|
@@ -46194,7 +46307,9 @@ function Table3(_a) {
|
|
|
46194
46307
|
"modal",
|
|
46195
46308
|
"header",
|
|
46196
46309
|
"footer",
|
|
46197
|
-
"onChange"
|
|
46310
|
+
"onChange",
|
|
46311
|
+
"symbols",
|
|
46312
|
+
"sortBy"
|
|
46198
46313
|
]);
|
|
46199
46314
|
const [handlers, setHandlers] = (0, import_react37.useState)({});
|
|
46200
46315
|
const [page, setPage] = (0, import_react37.useState)(1);
|
|
@@ -46251,6 +46366,7 @@ function Table3(_a) {
|
|
|
46251
46366
|
if (!objectData) return 0;
|
|
46252
46367
|
return maxItems ? Math.ceil(Object.keys(objectData).length / maxItems) : 1;
|
|
46253
46368
|
}, [objectData, maxItems]);
|
|
46369
|
+
const [sort, setSort] = (0, import_react37.useState)(sortBy);
|
|
46254
46370
|
const modalRef = (0, import_react37.useRef)(null);
|
|
46255
46371
|
const [dialogRow, setDialogRow] = (0, import_react37.useState)({});
|
|
46256
46372
|
const context = __spreadValues({
|
|
@@ -46273,7 +46389,10 @@ function Table3(_a) {
|
|
|
46273
46389
|
header,
|
|
46274
46390
|
footer,
|
|
46275
46391
|
onChange,
|
|
46276
|
-
data
|
|
46392
|
+
data,
|
|
46393
|
+
symbols,
|
|
46394
|
+
sort,
|
|
46395
|
+
setSort
|
|
46277
46396
|
}, props);
|
|
46278
46397
|
(0, import_react37.useEffect)(() => {
|
|
46279
46398
|
if ((dialogRow == null ? void 0 : dialogRow.id) || (dialogRow == null ? void 0 : dialogRow._id)) {
|
package/dist/index.mjs
CHANGED
|
@@ -11988,6 +11988,36 @@ function FilterOffIcon() {
|
|
|
11988
11988
|
}
|
|
11989
11989
|
);
|
|
11990
11990
|
}
|
|
11991
|
+
function OrderDesc() {
|
|
11992
|
+
return /* @__PURE__ */ jsx9(
|
|
11993
|
+
"svg",
|
|
11994
|
+
{
|
|
11995
|
+
stroke: "currentColor",
|
|
11996
|
+
fill: "currentColor",
|
|
11997
|
+
strokeWidth: "0",
|
|
11998
|
+
viewBox: "0 0 448 512",
|
|
11999
|
+
height: "20px",
|
|
12000
|
+
width: "20px",
|
|
12001
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
12002
|
+
children: /* @__PURE__ */ jsx9("path", { d: "M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm112-128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 65.63V48a16 16 0 0 0-16-16H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 190.37V208a16 16 0 0 0 16 16zm159.06 234.62l-59.27-160A16 16 0 0 0 372.72 288h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 480h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 480H432a16 16 0 0 0 15.06-21.38zM335.61 400L352 352l16.39 48z" })
|
|
12003
|
+
}
|
|
12004
|
+
);
|
|
12005
|
+
}
|
|
12006
|
+
function OrderAsc() {
|
|
12007
|
+
return /* @__PURE__ */ jsx9(
|
|
12008
|
+
"svg",
|
|
12009
|
+
{
|
|
12010
|
+
stroke: "currentColor",
|
|
12011
|
+
fill: "currentColor",
|
|
12012
|
+
strokeWidth: "0",
|
|
12013
|
+
viewBox: "0 0 448 512",
|
|
12014
|
+
height: "20px",
|
|
12015
|
+
width: "20px",
|
|
12016
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
12017
|
+
children: /* @__PURE__ */ jsx9("path", { d: "M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm240-64H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 446.37V464a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 321.63V304a16 16 0 0 0-16-16zm31.06-85.38l-59.27-160A16 16 0 0 0 372.72 32h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 224h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 224H432a16 16 0 0 0 15.06-21.38zM335.61 144L352 96l16.39 48z" })
|
|
12018
|
+
}
|
|
12019
|
+
);
|
|
12020
|
+
}
|
|
11991
12021
|
function EditIcon() {
|
|
11992
12022
|
return /* @__PURE__ */ jsx9(
|
|
11993
12023
|
"svg",
|
|
@@ -45593,7 +45623,9 @@ function Filter({
|
|
|
45593
45623
|
setObjectData,
|
|
45594
45624
|
setPage,
|
|
45595
45625
|
colSizes,
|
|
45596
|
-
data
|
|
45626
|
+
data,
|
|
45627
|
+
sort,
|
|
45628
|
+
setSort
|
|
45597
45629
|
}) {
|
|
45598
45630
|
const [visible, setVisible] = useState12(false);
|
|
45599
45631
|
const [text, setText] = useState12("");
|
|
@@ -45658,14 +45690,15 @@ function Filter({
|
|
|
45658
45690
|
/* @__PURE__ */ jsxs18(
|
|
45659
45691
|
"div",
|
|
45660
45692
|
{
|
|
45661
|
-
style: {
|
|
45662
|
-
minWidth: "
|
|
45663
|
-
maxWidth: `${(
|
|
45664
|
-
width: `${colSizes
|
|
45665
|
-
},
|
|
45666
|
-
className: `resize-x overflow-
|
|
45693
|
+
style: (colSizes == null ? void 0 : colSizes[h]) ? {
|
|
45694
|
+
minWidth: "100%",
|
|
45695
|
+
maxWidth: `${(colSizes[h] || 0) + 300}px`,
|
|
45696
|
+
width: `${colSizes[h]}px`
|
|
45697
|
+
} : { minWidth: "100%", maxWidth: "500px" },
|
|
45698
|
+
className: `resize-x overflow-hidden text-center flex justify-evenly p-1 items-center gap-2`,
|
|
45667
45699
|
onClick: (e) => setVisible(!visible),
|
|
45668
45700
|
children: [
|
|
45701
|
+
sort && Object.keys(sort)[0] == h && ((sort == null ? void 0 : sort[h]) == "asc" ? /* @__PURE__ */ jsx27("div", { className: "text-green-300", children: /* @__PURE__ */ jsx27(OrderAsc, {}) }) : (sort == null ? void 0 : sort[h]) == "desc" && /* @__PURE__ */ jsx27("div", { className: "text-green-300", children: /* @__PURE__ */ jsx27(OrderDesc, {}) })),
|
|
45669
45702
|
/* @__PURE__ */ jsx27("div", { children: h }),
|
|
45670
45703
|
selected.length < items.length && /* @__PURE__ */ jsx27("div", { className: "text-red-500 ", children: /* @__PURE__ */ jsx27(FilterOffIcon, {}) })
|
|
45671
45704
|
]
|
|
@@ -45677,6 +45710,48 @@ function Filter({
|
|
|
45677
45710
|
className: "border shadow rounded bg-white p-1 absolute left-0 text-black",
|
|
45678
45711
|
style: { zIndex: 9999 },
|
|
45679
45712
|
children: /* @__PURE__ */ jsxs18("div", { className: "flex flex-col gap-1 w-[300px] min-w-[300px] resize-x overflow-auto", children: [
|
|
45713
|
+
/* @__PURE__ */ jsxs18(
|
|
45714
|
+
"div",
|
|
45715
|
+
{
|
|
45716
|
+
onClick: (e) => {
|
|
45717
|
+
const newSort = __spreadValues({}, sort);
|
|
45718
|
+
newSort[h] = "asc";
|
|
45719
|
+
const reorderedSort = __spreadValues({
|
|
45720
|
+
[h]: "asc"
|
|
45721
|
+
}, Object.fromEntries(
|
|
45722
|
+
Object.entries(newSort).filter(([key]) => key !== h)
|
|
45723
|
+
));
|
|
45724
|
+
setSort(reorderedSort);
|
|
45725
|
+
setVisible(false);
|
|
45726
|
+
},
|
|
45727
|
+
className: "flex items-center gap-2 border p-1 hover:bg-blue-100",
|
|
45728
|
+
children: [
|
|
45729
|
+
/* @__PURE__ */ jsx27(OrderAsc, {}),
|
|
45730
|
+
" Ordenar de la A a la Z"
|
|
45731
|
+
]
|
|
45732
|
+
}
|
|
45733
|
+
),
|
|
45734
|
+
/* @__PURE__ */ jsxs18(
|
|
45735
|
+
"div",
|
|
45736
|
+
{
|
|
45737
|
+
onClick: (e) => {
|
|
45738
|
+
const newSort = __spreadValues({}, sort);
|
|
45739
|
+
newSort[h] = "desc";
|
|
45740
|
+
const reorderedSort = __spreadValues({
|
|
45741
|
+
[h]: "desc"
|
|
45742
|
+
}, Object.fromEntries(
|
|
45743
|
+
Object.entries(newSort).filter(([key]) => key !== h)
|
|
45744
|
+
));
|
|
45745
|
+
setSort(reorderedSort);
|
|
45746
|
+
setVisible(false);
|
|
45747
|
+
},
|
|
45748
|
+
className: "flex items-center gap-2 border p-1 hover:bg-blue-100",
|
|
45749
|
+
children: [
|
|
45750
|
+
/* @__PURE__ */ jsx27(OrderDesc, {}),
|
|
45751
|
+
"Ordenar de la Z a la A"
|
|
45752
|
+
]
|
|
45753
|
+
}
|
|
45754
|
+
),
|
|
45680
45755
|
selected.length < items.length && /* @__PURE__ */ jsxs18(
|
|
45681
45756
|
"div",
|
|
45682
45757
|
{
|
|
@@ -45791,7 +45866,9 @@ function TableHead({
|
|
|
45791
45866
|
data,
|
|
45792
45867
|
maxItems,
|
|
45793
45868
|
colSizes,
|
|
45794
|
-
modal
|
|
45869
|
+
modal,
|
|
45870
|
+
sort,
|
|
45871
|
+
setSort
|
|
45795
45872
|
}) {
|
|
45796
45873
|
return /* @__PURE__ */ jsx28("thead", { children: /* @__PURE__ */ jsxs19("tr", { className: "bg-blue-500 text-white font-bold", children: [
|
|
45797
45874
|
modal && /* @__PURE__ */ jsx28("th", { children: "-" }),
|
|
@@ -45831,7 +45908,9 @@ function TableHead({
|
|
|
45831
45908
|
setObjectData,
|
|
45832
45909
|
setPage,
|
|
45833
45910
|
colSizes,
|
|
45834
|
-
data
|
|
45911
|
+
data,
|
|
45912
|
+
sort,
|
|
45913
|
+
setSort
|
|
45835
45914
|
},
|
|
45836
45915
|
h
|
|
45837
45916
|
);
|
|
@@ -45860,7 +45939,8 @@ function TR({
|
|
|
45860
45939
|
index,
|
|
45861
45940
|
selected,
|
|
45862
45941
|
setSelected,
|
|
45863
|
-
onChange
|
|
45942
|
+
onChange,
|
|
45943
|
+
symbols
|
|
45864
45944
|
}) {
|
|
45865
45945
|
const color2 = selected == index ? "bg-blue-600 text-white hover:bg-blue-800" : index % 2 == 0 ? "bg-white" : "bg-blue-50";
|
|
45866
45946
|
return /* @__PURE__ */ jsxs20(
|
|
@@ -45934,7 +46014,18 @@ function TR({
|
|
|
45934
46014
|
}, {})));
|
|
45935
46015
|
return /* @__PURE__ */ jsx29("td", { className: `text-black `, children: cloned }, h);
|
|
45936
46016
|
}
|
|
45937
|
-
return
|
|
46017
|
+
return symbols && (symbols == null ? void 0 : symbols[h]) ? /* @__PURE__ */ jsxs20(
|
|
46018
|
+
"td",
|
|
46019
|
+
{
|
|
46020
|
+
className: `text-center border max-w-[${colSize}px] flex items-center gap-1`,
|
|
46021
|
+
children: [
|
|
46022
|
+
symbols[h],
|
|
46023
|
+
" ",
|
|
46024
|
+
row[h]
|
|
46025
|
+
]
|
|
46026
|
+
},
|
|
46027
|
+
h
|
|
46028
|
+
) : /* @__PURE__ */ jsx29("td", { className: `text-center border max-w-[${colSize}px]`, children: row[h] }, h);
|
|
45938
46029
|
})
|
|
45939
46030
|
]
|
|
45940
46031
|
},
|
|
@@ -45957,10 +46048,23 @@ function TableBody({
|
|
|
45957
46048
|
modalRef,
|
|
45958
46049
|
dialogRow,
|
|
45959
46050
|
setDialogRow,
|
|
45960
|
-
onChange
|
|
46051
|
+
onChange,
|
|
46052
|
+
symbols,
|
|
46053
|
+
sort
|
|
45961
46054
|
}) {
|
|
45962
46055
|
const [selected, setSelected] = useState13(-1);
|
|
45963
|
-
|
|
46056
|
+
const sorted = Object.entries(objectData).sort(([, a], [, b]) => {
|
|
46057
|
+
for (const [key, order] of Object.entries(
|
|
46058
|
+
sort || { id: "desc", _id: "desc" }
|
|
46059
|
+
)) {
|
|
46060
|
+
const valA = a[key];
|
|
46061
|
+
const valB = b[key];
|
|
46062
|
+
if (valA === valB) continue;
|
|
46063
|
+
const comparison = valA > valB ? 1 : valA < valB ? -1 : 0;
|
|
46064
|
+
return order === "desc" ? -comparison : comparison;
|
|
46065
|
+
}
|
|
46066
|
+
return 0;
|
|
46067
|
+
}).filter(([id3, row]) => {
|
|
45964
46068
|
var _a;
|
|
45965
46069
|
return ((_a = objectData[id3]) == null ? void 0 : _a._visible) === true;
|
|
45966
46070
|
}).filter((_id, key) => {
|
|
@@ -45968,7 +46072,7 @@ function TableBody({
|
|
|
45968
46072
|
const start = (page - 1) * maxItems;
|
|
45969
46073
|
const end = page * maxItems;
|
|
45970
46074
|
return key >= start && key < end;
|
|
45971
|
-
}).map((id3, index) => {
|
|
46075
|
+
}).map(([id3, k], index) => {
|
|
45972
46076
|
const row = objectData[id3];
|
|
45973
46077
|
return /* @__PURE__ */ jsx30(
|
|
45974
46078
|
TR,
|
|
@@ -45984,6 +46088,7 @@ function TableBody({
|
|
|
45984
46088
|
modal,
|
|
45985
46089
|
modalRef,
|
|
45986
46090
|
dialogRow,
|
|
46091
|
+
symbols,
|
|
45987
46092
|
setDialogRow,
|
|
45988
46093
|
setSelected,
|
|
45989
46094
|
selected,
|
|
@@ -45991,7 +46096,8 @@ function TableBody({
|
|
|
45991
46096
|
}),
|
|
45992
46097
|
id3
|
|
45993
46098
|
);
|
|
45994
|
-
})
|
|
46099
|
+
});
|
|
46100
|
+
return /* @__PURE__ */ jsx30("tbody", { children: sorted });
|
|
45995
46101
|
}
|
|
45996
46102
|
|
|
45997
46103
|
// src/table3/panel.tsx
|
|
@@ -46078,7 +46184,8 @@ function TableFooter({
|
|
|
46078
46184
|
headers,
|
|
46079
46185
|
footer,
|
|
46080
46186
|
selectItems,
|
|
46081
|
-
modal
|
|
46187
|
+
modal,
|
|
46188
|
+
symbols
|
|
46082
46189
|
}) {
|
|
46083
46190
|
function operacion(tipo, header) {
|
|
46084
46191
|
switch (tipo) {
|
|
@@ -46103,7 +46210,11 @@ function TableFooter({
|
|
|
46103
46210
|
if (header.startsWith("_")) {
|
|
46104
46211
|
return null;
|
|
46105
46212
|
} else if (footer == null ? void 0 : footer[header]) {
|
|
46106
|
-
return /* @__PURE__ */
|
|
46213
|
+
return symbols && (symbols == null ? void 0 : symbols[header]) ? /* @__PURE__ */ jsxs22("th", { className: "flex items-center gap-1", children: [
|
|
46214
|
+
symbols[header],
|
|
46215
|
+
" ",
|
|
46216
|
+
operacion(footer[header], header)
|
|
46217
|
+
] }, header) : /* @__PURE__ */ jsx32("th", { children: operacion(footer[header], header) }, header);
|
|
46107
46218
|
}
|
|
46108
46219
|
return /* @__PURE__ */ jsx32("th", {}, header);
|
|
46109
46220
|
})
|
|
@@ -46180,7 +46291,9 @@ function Table3(_a) {
|
|
|
46180
46291
|
modal,
|
|
46181
46292
|
header,
|
|
46182
46293
|
footer,
|
|
46183
|
-
onChange
|
|
46294
|
+
onChange,
|
|
46295
|
+
symbols,
|
|
46296
|
+
sortBy
|
|
46184
46297
|
} = _b, props = __objRest(_b, [
|
|
46185
46298
|
"data",
|
|
46186
46299
|
"selectItems",
|
|
@@ -46191,7 +46304,9 @@ function Table3(_a) {
|
|
|
46191
46304
|
"modal",
|
|
46192
46305
|
"header",
|
|
46193
46306
|
"footer",
|
|
46194
|
-
"onChange"
|
|
46307
|
+
"onChange",
|
|
46308
|
+
"symbols",
|
|
46309
|
+
"sortBy"
|
|
46195
46310
|
]);
|
|
46196
46311
|
const [handlers, setHandlers] = useState14({});
|
|
46197
46312
|
const [page, setPage] = useState14(1);
|
|
@@ -46248,6 +46363,7 @@ function Table3(_a) {
|
|
|
46248
46363
|
if (!objectData) return 0;
|
|
46249
46364
|
return maxItems ? Math.ceil(Object.keys(objectData).length / maxItems) : 1;
|
|
46250
46365
|
}, [objectData, maxItems]);
|
|
46366
|
+
const [sort, setSort] = useState14(sortBy);
|
|
46251
46367
|
const modalRef = useRef8(null);
|
|
46252
46368
|
const [dialogRow, setDialogRow] = useState14({});
|
|
46253
46369
|
const context = __spreadValues({
|
|
@@ -46270,7 +46386,10 @@ function Table3(_a) {
|
|
|
46270
46386
|
header,
|
|
46271
46387
|
footer,
|
|
46272
46388
|
onChange,
|
|
46273
|
-
data
|
|
46389
|
+
data,
|
|
46390
|
+
symbols,
|
|
46391
|
+
sort,
|
|
46392
|
+
setSort
|
|
46274
46393
|
}, props);
|
|
46275
46394
|
useEffect11(() => {
|
|
46276
46395
|
if ((dialogRow == null ? void 0 : dialogRow.id) || (dialogRow == null ? void 0 : dialogRow._id)) {
|
package/package.json
CHANGED
package/src/table/filters.tsx
CHANGED
|
@@ -13,6 +13,38 @@ export function FilterOffIcon() {
|
|
|
13
13
|
</svg>
|
|
14
14
|
);
|
|
15
15
|
}
|
|
16
|
+
|
|
17
|
+
export function OrderDesc() {
|
|
18
|
+
return (
|
|
19
|
+
<svg
|
|
20
|
+
stroke="currentColor"
|
|
21
|
+
fill="currentColor"
|
|
22
|
+
strokeWidth="0"
|
|
23
|
+
viewBox="0 0 448 512"
|
|
24
|
+
height="20px"
|
|
25
|
+
width="20px"
|
|
26
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
27
|
+
>
|
|
28
|
+
<path d="M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm112-128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 65.63V48a16 16 0 0 0-16-16H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 190.37V208a16 16 0 0 0 16 16zm159.06 234.62l-59.27-160A16 16 0 0 0 372.72 288h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 480h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 480H432a16 16 0 0 0 15.06-21.38zM335.61 400L352 352l16.39 48z"></path>
|
|
29
|
+
</svg>
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function OrderAsc() {
|
|
34
|
+
return (
|
|
35
|
+
<svg
|
|
36
|
+
stroke="currentColor"
|
|
37
|
+
fill="currentColor"
|
|
38
|
+
strokeWidth="0"
|
|
39
|
+
viewBox="0 0 448 512"
|
|
40
|
+
height="20px"
|
|
41
|
+
width="20px"
|
|
42
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
43
|
+
>
|
|
44
|
+
<path d="M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm240-64H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 446.37V464a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 321.63V304a16 16 0 0 0-16-16zm31.06-85.38l-59.27-160A16 16 0 0 0 372.72 32h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 224h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 224H432a16 16 0 0 0 15.06-21.38zM335.61 144L352 96l16.39 48z"></path>
|
|
45
|
+
</svg>
|
|
46
|
+
);
|
|
47
|
+
}
|
|
16
48
|
export function EditIcon() {
|
|
17
49
|
return (
|
|
18
50
|
<svg
|
package/src/table3/body.tsx
CHANGED
|
@@ -15,6 +15,8 @@ export default function TableBody({
|
|
|
15
15
|
dialogRow,
|
|
16
16
|
setDialogRow,
|
|
17
17
|
onChange,
|
|
18
|
+
symbols,
|
|
19
|
+
sort,
|
|
18
20
|
}: {
|
|
19
21
|
objectData: any;
|
|
20
22
|
setObjectData: any;
|
|
@@ -23,53 +25,67 @@ export default function TableBody({
|
|
|
23
25
|
selectItems?: boolean;
|
|
24
26
|
page: number;
|
|
25
27
|
maxItems?: number;
|
|
26
|
-
colSizes?: Record<string, number
|
|
28
|
+
colSizes?: Partial<Record<string, number>>;
|
|
27
29
|
modal?: React.ReactNode;
|
|
28
30
|
modalRef: React.RefObject<HTMLDialogElement>;
|
|
29
31
|
dialogRow: any;
|
|
30
32
|
setDialogRow: any;
|
|
31
33
|
onChange?: any;
|
|
34
|
+
symbols?: Record<string, React.ReactNode>;
|
|
35
|
+
sort: any;
|
|
32
36
|
}) {
|
|
33
37
|
const [selected, setSelected] = useState(-1);
|
|
38
|
+
const sorted = Object.entries(objectData)
|
|
39
|
+
.sort(([, a]: any, [, b]: any) => {
|
|
40
|
+
for (const [key, order] of Object.entries(
|
|
41
|
+
sort || { id: "desc", _id: "desc" }
|
|
42
|
+
)) {
|
|
43
|
+
const valA = a[key];
|
|
44
|
+
const valB = b[key];
|
|
34
45
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
46
|
+
if (valA === valB) continue; // pasa al siguiente criterio
|
|
47
|
+
|
|
48
|
+
const comparison = valA > valB ? 1 : valA < valB ? -1 : 0;
|
|
49
|
+
|
|
50
|
+
return order === "desc" ? -comparison : comparison;
|
|
51
|
+
}
|
|
52
|
+
return 0;
|
|
53
|
+
})
|
|
54
|
+
.filter(([id, row]) => {
|
|
55
|
+
return objectData[id]?._visible === true;
|
|
56
|
+
})
|
|
57
|
+
.filter((_id, key) => {
|
|
58
|
+
if (!maxItems || maxItems == Infinity) return true;
|
|
59
|
+
const start = (page - 1) * maxItems; // ej: 0 en la página 1
|
|
60
|
+
const end = page * maxItems; // ej: 10 en la página 1
|
|
61
|
+
return key >= start && key < end; // 👈 usamos < en vez de <=
|
|
62
|
+
})
|
|
63
|
+
.map(([id, k], index) => {
|
|
64
|
+
const row = objectData[id];
|
|
65
|
+
return (
|
|
66
|
+
<TR
|
|
67
|
+
key={id}
|
|
68
|
+
{...{
|
|
69
|
+
headers,
|
|
70
|
+
index,
|
|
71
|
+
setObjectData,
|
|
72
|
+
id,
|
|
73
|
+
row,
|
|
74
|
+
handlers,
|
|
75
|
+
selectItems,
|
|
76
|
+
colSizes,
|
|
77
|
+
modal,
|
|
78
|
+
modalRef,
|
|
79
|
+
dialogRow,
|
|
80
|
+
symbols,
|
|
81
|
+
setDialogRow,
|
|
82
|
+
setSelected,
|
|
83
|
+
selected,
|
|
84
|
+
onChange,
|
|
85
|
+
}}
|
|
86
|
+
/>
|
|
87
|
+
);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
return <tbody>{sorted}</tbody>;
|
|
75
91
|
}
|
package/src/table3/filter.tsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useEffect, useMemo, useState } from "react";
|
|
3
|
-
import { FilterOffIcon } from "../../src/table/filters";
|
|
3
|
+
import { FilterOffIcon, OrderAsc, OrderDesc } from "../../src/table/filters";
|
|
4
4
|
|
|
5
5
|
export default function Filter({
|
|
6
6
|
h,
|
|
@@ -9,6 +9,8 @@ export default function Filter({
|
|
|
9
9
|
setPage,
|
|
10
10
|
colSizes,
|
|
11
11
|
data,
|
|
12
|
+
sort,
|
|
13
|
+
setSort,
|
|
12
14
|
}: {
|
|
13
15
|
h: any;
|
|
14
16
|
objectData: any;
|
|
@@ -16,6 +18,8 @@ export default function Filter({
|
|
|
16
18
|
setPage: any;
|
|
17
19
|
colSizes?: Record<string, number>;
|
|
18
20
|
data: any[];
|
|
21
|
+
sort: any;
|
|
22
|
+
setSort: any;
|
|
19
23
|
}) {
|
|
20
24
|
const [visible, setVisible] = useState(false);
|
|
21
25
|
const [text, setText] = useState("");
|
|
@@ -101,14 +105,31 @@ export default function Filter({
|
|
|
101
105
|
</div>
|
|
102
106
|
<div className="relative w-full justify-center flex">
|
|
103
107
|
<div
|
|
104
|
-
style={
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
style={
|
|
109
|
+
colSizes?.[h]
|
|
110
|
+
? {
|
|
111
|
+
minWidth: "100%",
|
|
112
|
+
maxWidth: `${(colSizes[h] || 0) + 300}px`,
|
|
113
|
+
width: `${colSizes[h]}px`,
|
|
114
|
+
}
|
|
115
|
+
: { minWidth: "100%", maxWidth: "500px" }
|
|
116
|
+
}
|
|
117
|
+
className={`resize-x overflow-hidden text-center flex justify-evenly p-1 items-center gap-2`}
|
|
110
118
|
onClick={(e) => setVisible(!visible)}
|
|
111
119
|
>
|
|
120
|
+
{sort &&
|
|
121
|
+
Object.keys(sort)[0] == h &&
|
|
122
|
+
(sort?.[h] == "asc" ? (
|
|
123
|
+
<div className="text-green-300">
|
|
124
|
+
<OrderAsc />
|
|
125
|
+
</div>
|
|
126
|
+
) : (
|
|
127
|
+
sort?.[h] == "desc" && (
|
|
128
|
+
<div className="text-green-300">
|
|
129
|
+
<OrderDesc />
|
|
130
|
+
</div>
|
|
131
|
+
)
|
|
132
|
+
))}
|
|
112
133
|
<div>{h}</div>
|
|
113
134
|
{selected.length < items.length && (
|
|
114
135
|
<div className="text-red-500 ">
|
|
@@ -123,6 +144,47 @@ export default function Filter({
|
|
|
123
144
|
style={{ zIndex: 9999 }}
|
|
124
145
|
>
|
|
125
146
|
<div className="flex flex-col gap-1 w-[300px] min-w-[300px] resize-x overflow-auto">
|
|
147
|
+
<div
|
|
148
|
+
onClick={(e) => {
|
|
149
|
+
const newSort = { ...sort };
|
|
150
|
+
newSort[h] = "asc";
|
|
151
|
+
|
|
152
|
+
// reconstruir con la nueva clave primero
|
|
153
|
+
const reorderedSort = {
|
|
154
|
+
[h]: "asc",
|
|
155
|
+
...Object.fromEntries(
|
|
156
|
+
Object.entries(newSort).filter(([key]) => key !== h)
|
|
157
|
+
),
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
setSort(reorderedSort);
|
|
161
|
+
setVisible(false);
|
|
162
|
+
}}
|
|
163
|
+
className="flex items-center gap-2 border p-1 hover:bg-blue-100"
|
|
164
|
+
>
|
|
165
|
+
<OrderAsc /> Ordenar de la A a la Z
|
|
166
|
+
</div>
|
|
167
|
+
<div
|
|
168
|
+
onClick={(e) => {
|
|
169
|
+
const newSort = { ...sort };
|
|
170
|
+
newSort[h] = "desc";
|
|
171
|
+
|
|
172
|
+
// reconstruir con la nueva clave primero
|
|
173
|
+
const reorderedSort = {
|
|
174
|
+
[h]: "desc",
|
|
175
|
+
...Object.fromEntries(
|
|
176
|
+
Object.entries(newSort).filter(([key]) => key !== h)
|
|
177
|
+
),
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
setSort(reorderedSort);
|
|
181
|
+
setVisible(false);
|
|
182
|
+
}}
|
|
183
|
+
className="flex items-center gap-2 border p-1 hover:bg-blue-100"
|
|
184
|
+
>
|
|
185
|
+
<OrderDesc />
|
|
186
|
+
Ordenar de la Z a la A
|
|
187
|
+
</div>
|
|
126
188
|
{selected.length < items.length && (
|
|
127
189
|
<div
|
|
128
190
|
className="p-1 flex items-center justify-between px-2 bg-red-200 border shadow rounded"
|
package/src/table3/footer.tsx
CHANGED
|
@@ -4,12 +4,14 @@ export default function TableFooter({
|
|
|
4
4
|
footer,
|
|
5
5
|
selectItems,
|
|
6
6
|
modal,
|
|
7
|
+
symbols,
|
|
7
8
|
}: {
|
|
8
9
|
objectData: any;
|
|
9
10
|
headers: string[];
|
|
10
|
-
footer?: Record<string, "
|
|
11
|
+
footer?: Partial<Record<string, "sum" | "count" | "avg">>;
|
|
11
12
|
selectItems?: any;
|
|
12
13
|
modal?: any;
|
|
14
|
+
symbols?: Record<string, React.ReactNode>;
|
|
13
15
|
}) {
|
|
14
16
|
function operacion(tipo: "count" | "sum" | "avg", header: string): any {
|
|
15
17
|
switch (tipo) {
|
|
@@ -44,7 +46,13 @@ export default function TableFooter({
|
|
|
44
46
|
if (header.startsWith("_")) {
|
|
45
47
|
return null;
|
|
46
48
|
} else if (footer?.[header]) {
|
|
47
|
-
return
|
|
49
|
+
return symbols && symbols?.[header] ? (
|
|
50
|
+
<th key={header} className="flex items-center gap-1">
|
|
51
|
+
{symbols[header]} {operacion(footer[header], header)}
|
|
52
|
+
</th>
|
|
53
|
+
) : (
|
|
54
|
+
<th key={header}>{operacion(footer[header], header)}</th>
|
|
55
|
+
);
|
|
48
56
|
}
|
|
49
57
|
|
|
50
58
|
return <th key={header}></th>;
|
package/src/table3/head.tsx
CHANGED
|
@@ -12,6 +12,8 @@ export default function TableHead({
|
|
|
12
12
|
maxItems,
|
|
13
13
|
colSizes,
|
|
14
14
|
modal,
|
|
15
|
+
sort,
|
|
16
|
+
setSort,
|
|
15
17
|
}: {
|
|
16
18
|
headers: string[];
|
|
17
19
|
selectItems?: boolean;
|
|
@@ -23,6 +25,8 @@ export default function TableHead({
|
|
|
23
25
|
maxItems?: number;
|
|
24
26
|
colSizes?: Record<string, any>;
|
|
25
27
|
modal?: React.ReactNode;
|
|
28
|
+
sort: any;
|
|
29
|
+
setSort: any;
|
|
26
30
|
}) {
|
|
27
31
|
return (
|
|
28
32
|
<thead>
|
|
@@ -66,6 +70,8 @@ export default function TableHead({
|
|
|
66
70
|
setPage={setPage}
|
|
67
71
|
colSizes={colSizes}
|
|
68
72
|
data={data}
|
|
73
|
+
sort={sort}
|
|
74
|
+
setSort={setSort}
|
|
69
75
|
/>
|
|
70
76
|
);
|
|
71
77
|
})}
|
package/src/table3/index.tsx
CHANGED
|
@@ -15,24 +15,26 @@ import Panel from "./panel";
|
|
|
15
15
|
import TableFooter from "./footer";
|
|
16
16
|
import Dialog from "./dialog";
|
|
17
17
|
|
|
18
|
-
interface Table3Props
|
|
18
|
+
interface Table3Props<T extends Record<string, any>>
|
|
19
19
|
extends DetailedHTMLProps<
|
|
20
20
|
TableHTMLAttributes<HTMLTableElement>,
|
|
21
21
|
HTMLTableElement
|
|
22
22
|
> {
|
|
23
|
-
data:
|
|
23
|
+
data: T[];
|
|
24
24
|
selectItems?: boolean;
|
|
25
25
|
maxItems?: number;
|
|
26
26
|
onSave?: (e: any) => void;
|
|
27
27
|
exportName?: string;
|
|
28
|
-
colSizes?: Record<
|
|
28
|
+
colSizes?: Partial<Record<keyof T, number>>;
|
|
29
29
|
modal?: React.ReactNode;
|
|
30
|
-
footer?: Record<
|
|
30
|
+
footer?: Partial<Record<keyof T, "sum" | "count" | "avg">>;
|
|
31
31
|
header?: React.ReactNode;
|
|
32
32
|
onChange?: (e: any) => any;
|
|
33
|
+
symbols?: Partial<Record<keyof T, React.ReactNode>>;
|
|
34
|
+
sortBy?: Partial<Record<keyof T, "asc" | "desc">>;
|
|
33
35
|
}
|
|
34
36
|
|
|
35
|
-
export default function Table3({
|
|
37
|
+
export default function Table3<T extends Record<string, any>>({
|
|
36
38
|
data,
|
|
37
39
|
selectItems,
|
|
38
40
|
maxItems = Infinity,
|
|
@@ -43,8 +45,10 @@ export default function Table3({
|
|
|
43
45
|
header,
|
|
44
46
|
footer,
|
|
45
47
|
onChange,
|
|
48
|
+
symbols,
|
|
49
|
+
sortBy,
|
|
46
50
|
...props
|
|
47
|
-
}: Table3Props) {
|
|
51
|
+
}: Table3Props<T>) {
|
|
48
52
|
const [handlers, setHandlers] = useState<Record<string, any>>({});
|
|
49
53
|
const [page, setPage] = useState(1);
|
|
50
54
|
|
|
@@ -127,7 +131,7 @@ export default function Table3({
|
|
|
127
131
|
if (!objectData) return 0;
|
|
128
132
|
return maxItems ? Math.ceil(Object.keys(objectData).length / maxItems) : 1;
|
|
129
133
|
}, [objectData, maxItems]);
|
|
130
|
-
|
|
134
|
+
const [sort, setSort] = useState(sortBy);
|
|
131
135
|
const modalRef = useRef<HTMLDialogElement>(null);
|
|
132
136
|
const [dialogRow, setDialogRow] = useState<any>({});
|
|
133
137
|
const context = {
|
|
@@ -151,6 +155,9 @@ export default function Table3({
|
|
|
151
155
|
footer,
|
|
152
156
|
onChange,
|
|
153
157
|
data,
|
|
158
|
+
symbols,
|
|
159
|
+
sort,
|
|
160
|
+
setSort,
|
|
154
161
|
...props,
|
|
155
162
|
};
|
|
156
163
|
|
package/src/table3/tr.tsx
CHANGED
|
@@ -17,6 +17,7 @@ export default function TR({
|
|
|
17
17
|
selected,
|
|
18
18
|
setSelected,
|
|
19
19
|
onChange,
|
|
20
|
+
symbols,
|
|
20
21
|
}: {
|
|
21
22
|
handlers: any;
|
|
22
23
|
setObjectData: any;
|
|
@@ -32,6 +33,7 @@ export default function TR({
|
|
|
32
33
|
index: number;
|
|
33
34
|
selected: number;
|
|
34
35
|
setSelected: any;
|
|
36
|
+
symbols?: Record<string, React.ReactNode>;
|
|
35
37
|
onChange: any;
|
|
36
38
|
}) {
|
|
37
39
|
const color =
|
|
@@ -137,7 +139,14 @@ export default function TR({
|
|
|
137
139
|
</td>
|
|
138
140
|
);
|
|
139
141
|
}
|
|
140
|
-
return (
|
|
142
|
+
return symbols && symbols?.[h] ? (
|
|
143
|
+
<td
|
|
144
|
+
key={h}
|
|
145
|
+
className={`text-center border max-w-[${colSize}px] flex items-center gap-1`}
|
|
146
|
+
>
|
|
147
|
+
{symbols[h]} {row[h]}
|
|
148
|
+
</td>
|
|
149
|
+
) : (
|
|
141
150
|
<td key={h} className={`text-center border max-w-[${colSize}px]`}>
|
|
142
151
|
{row[h]}
|
|
143
152
|
</td>
|