@mshuja288/aksuicore 0.4.2 → 0.4.3
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/CHANGELOG.md +7 -0
- package/dist/index.cjs +94 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +94 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/patterns/RecordWorkspace.tsx +116 -10
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,13 @@ Versioning follows [VERSIONING.md](./VERSIONING.md).
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.3] — 2026-10-13
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- `RecordWorkspace` persists preview on/off and side-rail expand/collapse globally (`aksui.workspace.chrome`) across all tables
|
|
15
|
+
- Filter values persist per screen at `${columnPrefsKey}.filters` when `columnPrefsKey` is set
|
|
16
|
+
|
|
10
17
|
## [0.4.1] — 2026-10-12
|
|
11
18
|
|
|
12
19
|
### Fixed
|
package/dist/index.cjs
CHANGED
|
@@ -877,6 +877,37 @@ var BULK_IMPORT_MODE_OPTIONS = [
|
|
|
877
877
|
function defaultVisibleKeys(columns) {
|
|
878
878
|
return columns.filter((column) => column.defaultVisible !== false).map((column) => column.key);
|
|
879
879
|
}
|
|
880
|
+
var WORKSPACE_CHROME_KEY = "aksui.workspace.chrome";
|
|
881
|
+
function readWorkspaceChrome() {
|
|
882
|
+
if (typeof window === "undefined") {
|
|
883
|
+
return { previewEnabled: false, sideOpen: false };
|
|
884
|
+
}
|
|
885
|
+
try {
|
|
886
|
+
const raw = window.localStorage.getItem(WORKSPACE_CHROME_KEY);
|
|
887
|
+
if (!raw) {
|
|
888
|
+
return { previewEnabled: false, sideOpen: false };
|
|
889
|
+
}
|
|
890
|
+
const parsed = JSON.parse(raw);
|
|
891
|
+
return {
|
|
892
|
+
previewEnabled: Boolean(parsed.previewEnabled),
|
|
893
|
+
sideOpen: Boolean(parsed.sideOpen)
|
|
894
|
+
};
|
|
895
|
+
} catch {
|
|
896
|
+
return { previewEnabled: false, sideOpen: false };
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
function writeWorkspaceChrome(chrome) {
|
|
900
|
+
if (typeof window === "undefined") {
|
|
901
|
+
return;
|
|
902
|
+
}
|
|
903
|
+
try {
|
|
904
|
+
window.localStorage.setItem(WORKSPACE_CHROME_KEY, JSON.stringify(chrome));
|
|
905
|
+
} catch {
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
function filtersPrefsKey(columnPrefsKey) {
|
|
909
|
+
return columnPrefsKey ? `${columnPrefsKey}.filters` : void 0;
|
|
910
|
+
}
|
|
880
911
|
function readStoredColumnKeys(prefsKey, fallback, allowed) {
|
|
881
912
|
if (!prefsKey || typeof window === "undefined") {
|
|
882
913
|
return fallback;
|
|
@@ -905,6 +936,45 @@ function writeStoredColumnKeys(prefsKey, keys) {
|
|
|
905
936
|
} catch {
|
|
906
937
|
}
|
|
907
938
|
}
|
|
939
|
+
function readStoredFilters(prefsKey, allowed) {
|
|
940
|
+
if (!prefsKey || typeof window === "undefined") {
|
|
941
|
+
return {};
|
|
942
|
+
}
|
|
943
|
+
try {
|
|
944
|
+
const raw = window.localStorage.getItem(prefsKey);
|
|
945
|
+
if (!raw) {
|
|
946
|
+
return {};
|
|
947
|
+
}
|
|
948
|
+
const parsed = JSON.parse(raw);
|
|
949
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
950
|
+
return {};
|
|
951
|
+
}
|
|
952
|
+
const next = {};
|
|
953
|
+
for (const [key, value] of Object.entries(parsed)) {
|
|
954
|
+
if (allowed.has(key) && typeof value === "string" && value.trim()) {
|
|
955
|
+
next[key] = value;
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
return next;
|
|
959
|
+
} catch {
|
|
960
|
+
return {};
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
function writeStoredFilters(prefsKey, filters) {
|
|
964
|
+
if (!prefsKey || typeof window === "undefined") {
|
|
965
|
+
return;
|
|
966
|
+
}
|
|
967
|
+
try {
|
|
968
|
+
const trimmed = {};
|
|
969
|
+
for (const [key, value] of Object.entries(filters)) {
|
|
970
|
+
if (value.trim()) {
|
|
971
|
+
trimmed[key] = value;
|
|
972
|
+
}
|
|
973
|
+
}
|
|
974
|
+
window.localStorage.setItem(prefsKey, JSON.stringify(trimmed));
|
|
975
|
+
} catch {
|
|
976
|
+
}
|
|
977
|
+
}
|
|
908
978
|
function compareColumnValues(column, left, right) {
|
|
909
979
|
const leftRaw = column.display ? column.display(left) : column.value(left);
|
|
910
980
|
const rightRaw = column.display ? column.display(right) : column.value(right);
|
|
@@ -1028,9 +1098,12 @@ function RecordWorkspace({
|
|
|
1028
1098
|
const [internalVisibleKeys, setInternalVisibleKeys] = react.useState(
|
|
1029
1099
|
() => readStoredColumnKeys(columnPrefsKey, fallbackKeys, allowedKeys)
|
|
1030
1100
|
);
|
|
1031
|
-
const
|
|
1101
|
+
const filterStorageKey = filtersPrefsKey(columnPrefsKey);
|
|
1102
|
+
const [filters, setFilters] = react.useState(
|
|
1103
|
+
() => readStoredFilters(filterStorageKey, allowedKeys)
|
|
1104
|
+
);
|
|
1032
1105
|
const [sort, setSort] = react.useState(null);
|
|
1033
|
-
const [sideOpen, setSideOpen] = react.useState(
|
|
1106
|
+
const [sideOpen, setSideOpen] = react.useState(() => readWorkspaceChrome().sideOpen);
|
|
1034
1107
|
const [toolsDrawerOpen, setToolsDrawerOpen] = react.useState(false);
|
|
1035
1108
|
const [downloadOpen, setDownloadOpen] = react.useState(false);
|
|
1036
1109
|
const [bulkOpen, setBulkOpen] = react.useState(false);
|
|
@@ -1039,7 +1112,7 @@ function RecordWorkspace({
|
|
|
1039
1112
|
const [bulkReport, setBulkReport] = react.useState(null);
|
|
1040
1113
|
const bulkFileInputRef = react.useRef(null);
|
|
1041
1114
|
const [columnsOpen, setColumnsOpen] = react.useState(false);
|
|
1042
|
-
const [previewEnabled, setPreviewEnabled] = react.useState(
|
|
1115
|
+
const [previewEnabled, setPreviewEnabled] = react.useState(() => readWorkspaceChrome().previewEnabled);
|
|
1043
1116
|
const [previewKey, setPreviewKey] = react.useState(null);
|
|
1044
1117
|
const [tooltip, setTooltip] = react.useState(null);
|
|
1045
1118
|
const [pageSize, setPageSize] = react.useState("15");
|
|
@@ -1054,6 +1127,9 @@ function RecordWorkspace({
|
|
|
1054
1127
|
}
|
|
1055
1128
|
setInternalVisibleKeys(readStoredColumnKeys(columnPrefsKey, fallbackKeys, allowedKeys));
|
|
1056
1129
|
}, [allowedKeys, columnPrefsKey, fallbackKeys, isControlled]);
|
|
1130
|
+
react.useEffect(() => {
|
|
1131
|
+
setFilters(readStoredFilters(filtersPrefsKey(columnPrefsKey), allowedKeys));
|
|
1132
|
+
}, [allowedKeys, columnPrefsKey]);
|
|
1057
1133
|
const resolvedVisibleKeys = react.useMemo(() => {
|
|
1058
1134
|
const source = isControlled ? visibleColumnKeys : internalVisibleKeys;
|
|
1059
1135
|
const filtered2 = source.filter((key) => allowedKeys.has(key));
|
|
@@ -1214,13 +1290,22 @@ function RecordWorkspace({
|
|
|
1214
1290
|
}
|
|
1215
1291
|
const previewTitle = previewItem && visibleColumns[0] ? cellText(visibleColumns[0], previewItem) : null;
|
|
1216
1292
|
function changeFilter(key, value) {
|
|
1217
|
-
setFilters((current) =>
|
|
1293
|
+
setFilters((current) => {
|
|
1294
|
+
const next = { ...current, [key]: value };
|
|
1295
|
+
writeStoredFilters(filterStorageKey, next);
|
|
1296
|
+
return next;
|
|
1297
|
+
});
|
|
1218
1298
|
setPage(1);
|
|
1219
1299
|
}
|
|
1220
1300
|
function clearFilters() {
|
|
1221
1301
|
setFilters({});
|
|
1302
|
+
writeStoredFilters(filterStorageKey, {});
|
|
1222
1303
|
setPage(1);
|
|
1223
1304
|
}
|
|
1305
|
+
function setSideOpenValue(open) {
|
|
1306
|
+
setSideOpen(open);
|
|
1307
|
+
writeWorkspaceChrome({ previewEnabled, sideOpen: open });
|
|
1308
|
+
}
|
|
1224
1309
|
function toggleSort(column) {
|
|
1225
1310
|
if (column.sortable === false) {
|
|
1226
1311
|
return;
|
|
@@ -1238,6 +1323,7 @@ function RecordWorkspace({
|
|
|
1238
1323
|
}
|
|
1239
1324
|
function setPreviewEnabledValue(enabled) {
|
|
1240
1325
|
setPreviewEnabled(enabled);
|
|
1326
|
+
writeWorkspaceChrome({ previewEnabled: enabled, sideOpen });
|
|
1241
1327
|
setTooltip(null);
|
|
1242
1328
|
if (!enabled) {
|
|
1243
1329
|
setPreviewKey(null);
|
|
@@ -1298,7 +1384,7 @@ function RecordWorkspace({
|
|
|
1298
1384
|
title: "Columns",
|
|
1299
1385
|
"aria-label": "Columns",
|
|
1300
1386
|
onClick: () => {
|
|
1301
|
-
|
|
1387
|
+
setSideOpenValue(true);
|
|
1302
1388
|
setColumnsOpen(true);
|
|
1303
1389
|
},
|
|
1304
1390
|
children: [
|
|
@@ -1316,7 +1402,7 @@ function RecordWorkspace({
|
|
|
1316
1402
|
"aria-label": "Download",
|
|
1317
1403
|
disabled: downloadBusy,
|
|
1318
1404
|
onClick: () => {
|
|
1319
|
-
|
|
1405
|
+
setSideOpenValue(true);
|
|
1320
1406
|
setDownloadOpen(true);
|
|
1321
1407
|
},
|
|
1322
1408
|
children: /* @__PURE__ */ jsxRuntime.jsx(DownloadIcon, {})
|
|
@@ -1331,7 +1417,7 @@ function RecordWorkspace({
|
|
|
1331
1417
|
"aria-label": "Bulk entry",
|
|
1332
1418
|
disabled: importBusy,
|
|
1333
1419
|
onClick: () => {
|
|
1334
|
-
|
|
1420
|
+
setSideOpenValue(true);
|
|
1335
1421
|
setBulkOpen(true);
|
|
1336
1422
|
},
|
|
1337
1423
|
children: /* @__PURE__ */ jsxRuntime.jsx(UploadIcon, {})
|
|
@@ -1733,7 +1819,7 @@ function RecordWorkspace({
|
|
|
1733
1819
|
className: "ghost side-rail-toggle",
|
|
1734
1820
|
"aria-expanded": sideOpen,
|
|
1735
1821
|
title: sideOpen ? "Collapse" : "Expand",
|
|
1736
|
-
onClick: () =>
|
|
1822
|
+
onClick: () => setSideOpenValue(!sideOpen),
|
|
1737
1823
|
children: [
|
|
1738
1824
|
/* @__PURE__ */ jsxRuntime.jsx(ChevronIcon, { open: sideOpen }),
|
|
1739
1825
|
sideOpen ? /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Collapse" }) : null
|