@seedgrid/fe-components 2026.4.14 → 2026.4.16
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/ai/seedgrid-components.manifest.json +9 -1
- package/dist/inputs/SgDatatable.d.ts.map +1 -1
- package/dist/inputs/SgDatatable.js +77 -3
- package/dist/inputs/SgDatatable.meta.d.ts.map +1 -1
- package/dist/inputs/SgDatatable.meta.js +3 -2
- package/dist/sandbox.cjs +40 -40
- package/package.json +1 -1
|
@@ -1192,7 +1192,7 @@
|
|
|
1192
1192
|
"displayName": "SgDatatable",
|
|
1193
1193
|
"category": "data",
|
|
1194
1194
|
"subcategory": "datatable",
|
|
1195
|
-
"description": "Tabela de dados interativa com colunas configuraveis, paginacao, ordenacao, filtro e
|
|
1195
|
+
"description": "Tabela de dados interativa com colunas configuraveis, paginacao, ordenacao, filtro, selecao e persistencia de layout de colunas.",
|
|
1196
1196
|
"tags": [
|
|
1197
1197
|
"data",
|
|
1198
1198
|
"table",
|
|
@@ -1206,6 +1206,7 @@
|
|
|
1206
1206
|
"filtering",
|
|
1207
1207
|
"selection",
|
|
1208
1208
|
"column-config",
|
|
1209
|
+
"column-layout-persistence",
|
|
1209
1210
|
"row-actions"
|
|
1210
1211
|
],
|
|
1211
1212
|
"fieldSemantics": [
|
|
@@ -1215,6 +1216,13 @@
|
|
|
1215
1216
|
"collectionView"
|
|
1216
1217
|
],
|
|
1217
1218
|
"props": [
|
|
1219
|
+
{
|
|
1220
|
+
"name": "id",
|
|
1221
|
+
"type": "string",
|
|
1222
|
+
"description": "Identificador da tabela usado para DOM e persistencia do layout de colunas.",
|
|
1223
|
+
"semanticRole": "data",
|
|
1224
|
+
"bindable": true
|
|
1225
|
+
},
|
|
1218
1226
|
{
|
|
1219
1227
|
"name": "columns",
|
|
1220
1228
|
"type": "SgDatatableColumn[]",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SgDatatable.d.ts","sourceRoot":"","sources":["../../src/inputs/SgDatatable.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SgDatatable.d.ts","sourceRoot":"","sources":["../../src/inputs/SgDatatable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import React from "react";
|
|
|
4
4
|
import { createPortal } from "react-dom";
|
|
5
5
|
import { Check, GripVertical, SlidersHorizontal } from "lucide-react";
|
|
6
6
|
import { SgButton } from "../buttons/SgButton";
|
|
7
|
+
import { useHasSgEnvironmentProvider, useSgPersistence } from "../environment/SgEnvironmentProvider";
|
|
7
8
|
import { SgGroupBox } from "../layout/SgGroupBox";
|
|
8
9
|
import { t, useComponentsI18n } from "../i18n";
|
|
9
10
|
function cn(...parts) {
|
|
@@ -121,6 +122,21 @@ function getColumnKey(column, index) {
|
|
|
121
122
|
return `field:${column.field.trim()}`;
|
|
122
123
|
return `index:${index}`;
|
|
123
124
|
}
|
|
125
|
+
function buildDatatableColumnsPersistenceKey(id) {
|
|
126
|
+
const normalizedId = id?.trim();
|
|
127
|
+
if (!normalizedId)
|
|
128
|
+
return null;
|
|
129
|
+
return `datatable:${normalizedId}:columns`;
|
|
130
|
+
}
|
|
131
|
+
function isPersistedColumnsState(value) {
|
|
132
|
+
if (!value || typeof value !== "object")
|
|
133
|
+
return false;
|
|
134
|
+
const candidate = value;
|
|
135
|
+
return (candidate.version === 1 &&
|
|
136
|
+
Array.isArray(candidate.columnOrder) &&
|
|
137
|
+
candidate.hiddenColumnsMap !== null &&
|
|
138
|
+
typeof candidate.hiddenColumnsMap === "object");
|
|
139
|
+
}
|
|
124
140
|
function moveItem(list, fromIndex, toIndex) {
|
|
125
141
|
if (fromIndex === toIndex)
|
|
126
142
|
return list;
|
|
@@ -145,6 +161,8 @@ function resolveAlignmentClass(align) {
|
|
|
145
161
|
}
|
|
146
162
|
function SgDatatableBase(props, imperativeRef) {
|
|
147
163
|
const i18n = useComponentsI18n();
|
|
164
|
+
const hasEnvironmentProvider = useHasSgEnvironmentProvider();
|
|
165
|
+
const persistence = useSgPersistence();
|
|
148
166
|
const { id, title, value, columns, dataKey, lazy = false, totalRecords: controlledTotalRecords, paginator = false, rows = 10, first, rowsPerPageOptions, onPage, sortField, sortOrder, onSort, removableSort = true, selectionMode, selection, onSelectionChange, showGlobalFilter = false, globalFilter, globalFilterPlaceholder, onGlobalFilterChange, showColumnFilters = false, filters, onFilter, showClearFiltersButton = false, stripedRows = false, showGridlines = false, hoverableRows = true, loading = false, emptyMessage, className = "", style, tableClassName = "", rowClassName, groupBoxProps = {}, showColumnManager = true, columnManagerLabel, columnManagerMaxHeight = 320 } = props;
|
|
149
167
|
const isFirstControlled = first !== undefined;
|
|
150
168
|
const isSortFieldControlled = sortField !== undefined;
|
|
@@ -175,6 +193,8 @@ function SgDatatableBase(props, imperativeRef) {
|
|
|
175
193
|
acc[item.key] = Boolean(item.column.hidden);
|
|
176
194
|
return acc;
|
|
177
195
|
}, {}));
|
|
196
|
+
const [columnsStateHydrated, setColumnsStateHydrated] = React.useState(false);
|
|
197
|
+
const columnsPersistenceKey = React.useMemo(() => buildDatatableColumnsPersistenceKey(id), [id]);
|
|
178
198
|
React.useEffect(() => {
|
|
179
199
|
if (!isFirstControlled)
|
|
180
200
|
return;
|
|
@@ -223,6 +243,60 @@ function SgDatatableBase(props, imperativeRef) {
|
|
|
223
243
|
return next;
|
|
224
244
|
});
|
|
225
245
|
}, [columnDescriptors]);
|
|
246
|
+
React.useEffect(() => {
|
|
247
|
+
if (!hasEnvironmentProvider || !columnsPersistenceKey) {
|
|
248
|
+
setColumnsStateHydrated(true);
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
let alive = true;
|
|
252
|
+
setColumnsStateHydrated(false);
|
|
253
|
+
void (async () => {
|
|
254
|
+
try {
|
|
255
|
+
const loaded = await persistence.load(columnsPersistenceKey);
|
|
256
|
+
if (!alive)
|
|
257
|
+
return;
|
|
258
|
+
if (isPersistedColumnsState(loaded)) {
|
|
259
|
+
const availableKeys = columnDescriptors.map((item) => item.key);
|
|
260
|
+
const persistedOrder = loaded.columnOrder.filter((key) => availableKeys.includes(key));
|
|
261
|
+
const missingKeys = availableKeys.filter((key) => !persistedOrder.includes(key));
|
|
262
|
+
setColumnOrder([...persistedOrder, ...missingKeys]);
|
|
263
|
+
setHiddenColumnsMap(() => {
|
|
264
|
+
const next = {};
|
|
265
|
+
for (const item of columnDescriptors) {
|
|
266
|
+
next[item.key] = loaded.hiddenColumnsMap[item.key] ?? Boolean(item.column.hidden);
|
|
267
|
+
}
|
|
268
|
+
return next;
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
// ignore persistence errors and keep current in-memory state
|
|
274
|
+
}
|
|
275
|
+
finally {
|
|
276
|
+
if (alive)
|
|
277
|
+
setColumnsStateHydrated(true);
|
|
278
|
+
}
|
|
279
|
+
})();
|
|
280
|
+
return () => {
|
|
281
|
+
alive = false;
|
|
282
|
+
};
|
|
283
|
+
}, [hasEnvironmentProvider, columnsPersistenceKey, persistence.load, columnDescriptors]);
|
|
284
|
+
React.useEffect(() => {
|
|
285
|
+
if (!hasEnvironmentProvider || !columnsPersistenceKey || !columnsStateHydrated)
|
|
286
|
+
return;
|
|
287
|
+
void persistence.save(columnsPersistenceKey, {
|
|
288
|
+
version: 1,
|
|
289
|
+
columnOrder,
|
|
290
|
+
hiddenColumnsMap
|
|
291
|
+
});
|
|
292
|
+
}, [
|
|
293
|
+
hasEnvironmentProvider,
|
|
294
|
+
columnsPersistenceKey,
|
|
295
|
+
columnsStateHydrated,
|
|
296
|
+
persistence.save,
|
|
297
|
+
columnOrder,
|
|
298
|
+
hiddenColumnsMap
|
|
299
|
+
]);
|
|
226
300
|
React.useEffect(() => {
|
|
227
301
|
if (!isColumnManagerOpen)
|
|
228
302
|
return;
|
|
@@ -555,9 +629,9 @@ function SgDatatableBase(props, imperativeRef) {
|
|
|
555
629
|
return;
|
|
556
630
|
handleReorderColumn(draggingColumnKey, item.key);
|
|
557
631
|
setDraggingColumnKey(null);
|
|
558
|
-
}, onDragEnd: () => setDraggingColumnKey(null), className: cn("flex items-center gap-3 rounded-md px-2 py-2", draggingColumnKey === item.key ? "opacity-60" : "", "hover:bg-[rgb(var(--sg-primary-50))]"), children: [_jsx("button", { type: "button", disabled: !canHideThisColumn, onClick: () => toggleColumnVisibility(item.key), className: cn("inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-md border shadow-sm transition", !isHidden
|
|
559
|
-
? "border-[rgb(var(--sg-
|
|
560
|
-
: "border-[rgb(var(--sg-
|
|
632
|
+
}, onDragEnd: () => setDraggingColumnKey(null), className: cn("flex items-center gap-3 rounded-md px-2 py-2", draggingColumnKey === item.key ? "opacity-60" : "", "hover:bg-[rgb(var(--sg-primary-50))]"), children: [_jsx("button", { type: "button", disabled: !canHideThisColumn, onClick: () => toggleColumnVisibility(item.key), className: cn("inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-md border bg-[rgb(var(--sg-surface))] shadow-sm transition", !isHidden
|
|
633
|
+
? "border-[rgb(var(--sg-text))] bg-[rgb(var(--sg-text))] text-[rgb(var(--sg-surface))]"
|
|
634
|
+
: "border-[rgb(var(--sg-text))] text-transparent", !canHideThisColumn ? "cursor-not-allowed opacity-50" : "hover:scale-[1.02]"), children: _jsx(Check, { size: 14 }) }), _jsx("button", { type: "button", disabled: !canHideThisColumn, onClick: () => toggleColumnVisibility(item.key), className: cn("flex-1 truncate text-left text-sm", isHidden
|
|
561
635
|
? "text-[rgb(var(--sg-muted))]"
|
|
562
636
|
: "text-[rgb(var(--sg-text))]", !canHideThisColumn ? "cursor-not-allowed" : ""), children: columnLabel }), _jsx("div", { className: cn("inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-md text-[rgb(var(--sg-muted))]", isReorderable ? "cursor-grab active:cursor-grabbing" : "opacity-40"), title: dragHandleLabel, children: _jsx(GripVertical, { size: 16 }) })] }, `manager-${item.key}`));
|
|
563
637
|
}) }) }), _jsxs("div", { className: "flex items-center gap-2 border-t border-[rgb(var(--sg-border))] px-3 py-3", children: [_jsx(SgButton, { size: "sm", appearance: "outline", onClick: restoreDefaultColumns, children: restoreColumnsLabel }), _jsx(SgButton, { size: "sm", appearance: "outline", onClick: showAllColumns, children: showAllColumnsLabel })] })] }), document.body)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SgDatatable.meta.d.ts","sourceRoot":"","sources":["../../src/inputs/SgDatatable.meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE9D,eAAO,MAAM,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"SgDatatable.meta.d.ts","sourceRoot":"","sources":["../../src/inputs/SgDatatable.meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE9D,eAAO,MAAM,MAAM,EAAE,QA+BpB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,WAmBrB,CAAC"}
|
|
@@ -7,11 +7,12 @@ export const sgMeta = {
|
|
|
7
7
|
displayName: "SgDatatable",
|
|
8
8
|
category: "data",
|
|
9
9
|
subcategory: "datatable",
|
|
10
|
-
description: "Tabela de dados interativa com colunas configuraveis, paginacao, ordenacao, filtro e
|
|
10
|
+
description: "Tabela de dados interativa com colunas configuraveis, paginacao, ordenacao, filtro, selecao e persistencia de layout de colunas.",
|
|
11
11
|
tags: ["data", "table", "grid", "listing", "interactive"],
|
|
12
|
-
capabilities: ["pagination", "sorting", "filtering", "selection", "column-config", "row-actions"],
|
|
12
|
+
capabilities: ["pagination", "sorting", "filtering", "selection", "column-config", "column-layout-persistence", "row-actions"],
|
|
13
13
|
fieldSemantics: ["tabularData", "dataGrid", "listing", "collectionView"],
|
|
14
14
|
props: [
|
|
15
|
+
{ name: "id", type: "string", description: "Identificador da tabela usado para DOM e persistencia do layout de colunas.", semanticRole: "data", bindable: true },
|
|
15
16
|
{ name: "columns", type: "SgDatatableColumn[]", description: "Definicao das colunas da tabela.", semanticRole: "data", bindable: true },
|
|
16
17
|
{ name: "rows", type: "SgDatatableRow[]", description: "Linhas exibidas na tabela.", semanticRole: "value", bindable: true },
|
|
17
18
|
{ name: "selectionMode", type: "string", description: "Modo de selecao de linhas.", semanticRole: "behavior", bindable: true },
|