@wallarm-org/design-system 2.7.0 → 2.7.1
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/components/Table/TableSettingsMenu/TableSettingsMenu.js +5 -9
- package/dist/components/Table/TableSettingsMenu/TableSettingsMenuContentContext.d.ts +9 -0
- package/dist/components/Table/TableSettingsMenu/TableSettingsMenuContentContext.js +9 -1
- package/dist/components/Table/TableSettingsMenu/TableSettingsMenuReset.js +27 -43
- package/dist/metadata/components.json +7 -2
- package/package.json +1 -1
|
@@ -5,6 +5,7 @@ import { DndContext, KeyboardSensor, PointerSensor, closestCenter, useSensor, us
|
|
|
5
5
|
import { SortableContext, arrayMove, sortableKeyboardCoordinates, verticalListSortingStrategy } from "@dnd-kit/sortable";
|
|
6
6
|
import { Settings } from "../../../icons/index.js";
|
|
7
7
|
import { cn } from "../../../utils/cn.js";
|
|
8
|
+
import { isEqual } from "../../../utils/isEqual.js";
|
|
8
9
|
import { useTestId } from "../../../utils/testId.js";
|
|
9
10
|
import { Button } from "../../Button/index.js";
|
|
10
11
|
import { DropdownMenu, DropdownMenuContent, DropdownMenuFooter, DropdownMenuLabel, DropdownMenuTrigger } from "../../DropdownMenu/index.js";
|
|
@@ -13,7 +14,7 @@ import { VStack } from "../../Stack/index.js";
|
|
|
13
14
|
import { Tooltip, TooltipContent, TooltipTrigger } from "../../Tooltip/index.js";
|
|
14
15
|
import { TABLE_DRAG_HANDLE_COLUMN_ID, TABLE_EXPAND_COLUMN_ID, TABLE_SELECT_COLUMN_ID, collectDirectChildren, withTableState } from "../lib/index.js";
|
|
15
16
|
import { useTableContext } from "../TableContext/index.js";
|
|
16
|
-
import { EMPTY_VISIBILITY_DRAFT, TableSettingsMenuContentProvider } from "./TableSettingsMenuContentContext.js";
|
|
17
|
+
import { EMPTY_VISIBILITY_DRAFT, TableSettingsMenuContentProvider, resolveVisibilityDraft } from "./TableSettingsMenuContentContext.js";
|
|
17
18
|
import { useTableSettingsMenuContext } from "./TableSettingsMenuContext.js";
|
|
18
19
|
import { TableSettingsMenuItem } from "./TableSettingsMenuItem.js";
|
|
19
20
|
import { TableSettingsMenuReset } from "./TableSettingsMenuReset.js";
|
|
@@ -40,14 +41,9 @@ const TableSettingsMenu = ({ 'data-testid': testIdProp, children, ...rest })=>{
|
|
|
40
41
|
onSettingsOpenChange?.(open);
|
|
41
42
|
};
|
|
42
43
|
const applyVisibilityDraft = ()=>{
|
|
43
|
-
const
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
if (!fromDefault && 0 === changed.length) return;
|
|
47
|
-
table.setColumnVisibility({
|
|
48
|
-
...base,
|
|
49
|
-
...Object.fromEntries(changed)
|
|
50
|
-
});
|
|
44
|
+
const current = table.atoms.columnVisibility.get();
|
|
45
|
+
const next = resolveVisibilityDraft(visibilityDraft, current, defaultColumnVisibility);
|
|
46
|
+
if (!isEqual(next, current)) table.setColumnVisibility(next);
|
|
51
47
|
};
|
|
52
48
|
useLayoutEffect(()=>{
|
|
53
49
|
if (!menuOpen) return;
|
|
@@ -15,6 +15,15 @@ export interface VisibilityDraft {
|
|
|
15
15
|
toggles: Record<string, boolean>;
|
|
16
16
|
}
|
|
17
17
|
export declare const EMPTY_VISIBILITY_DRAFT: VisibilityDraft;
|
|
18
|
+
/**
|
|
19
|
+
* The visibility the draft would leave: the object the same switches and reset
|
|
20
|
+
* would have written one by one without deferral. Toggles that match their base
|
|
21
|
+
* are dropped, so a switch flipped back adds no explicit entry. Both the close
|
|
22
|
+
* (write only when this differs from the current object) and the Reset button
|
|
23
|
+
* (disabled only when this equals the default) read it, so the deferred menu
|
|
24
|
+
* behaves like the immediate one apart from timing.
|
|
25
|
+
*/
|
|
26
|
+
export declare const resolveVisibilityDraft: ({ fromDefault, toggles }: VisibilityDraft, current: Record<string, boolean>, defaults: Record<string, boolean> | undefined) => Record<string, boolean>;
|
|
18
27
|
export declare const TableSettingsMenuContentProvider: import("react").Provider<TableSettingsMenuContentContextValue | null>;
|
|
19
28
|
export declare const useTableSettingsMenuContentContext: () => TableSettingsMenuContentContextValue;
|
|
20
29
|
export {};
|
|
@@ -3,6 +3,14 @@ const EMPTY_VISIBILITY_DRAFT = {
|
|
|
3
3
|
fromDefault: false,
|
|
4
4
|
toggles: {}
|
|
5
5
|
};
|
|
6
|
+
const resolveVisibilityDraft = ({ fromDefault, toggles }, current, defaults)=>{
|
|
7
|
+
const base = fromDefault ? defaults ?? {} : current;
|
|
8
|
+
const changed = Object.entries(toggles).filter(([id, visible])=>false !== base[id] !== visible);
|
|
9
|
+
return 0 === changed.length ? base : {
|
|
10
|
+
...base,
|
|
11
|
+
...Object.fromEntries(changed)
|
|
12
|
+
};
|
|
13
|
+
};
|
|
6
14
|
const TableSettingsMenuContentContext = /*#__PURE__*/ createContext(null);
|
|
7
15
|
const TableSettingsMenuContentProvider = TableSettingsMenuContentContext.Provider;
|
|
8
16
|
const useTableSettingsMenuContentContext = ()=>{
|
|
@@ -10,4 +18,4 @@ const useTableSettingsMenuContentContext = ()=>{
|
|
|
10
18
|
if (!ctx) throw new Error("TableSettingsMenu item components must be rendered inside <TableSettingsMenu>");
|
|
11
19
|
return ctx;
|
|
12
20
|
};
|
|
13
|
-
export { EMPTY_VISIBILITY_DRAFT, TableSettingsMenuContentProvider, useTableSettingsMenuContentContext };
|
|
21
|
+
export { EMPTY_VISIBILITY_DRAFT, TableSettingsMenuContentProvider, resolveVisibilityDraft, useTableSettingsMenuContentContext };
|
|
@@ -4,9 +4,9 @@ import { isEqual } from "../../../utils/isEqual.js";
|
|
|
4
4
|
import { useTestId } from "../../../utils/testId.js";
|
|
5
5
|
import { Button } from "../../Button/index.js";
|
|
6
6
|
import { useTableContext } from "../TableContext/index.js";
|
|
7
|
-
import { useTableSettingsMenuContentContext } from "./TableSettingsMenuContentContext.js";
|
|
7
|
+
import { resolveVisibilityDraft, useTableSettingsMenuContentContext } from "./TableSettingsMenuContentContext.js";
|
|
8
8
|
const TableSettingsMenuReset = (t0)=>{
|
|
9
|
-
const $ = c(
|
|
9
|
+
const $ = c(26);
|
|
10
10
|
let onClick;
|
|
11
11
|
let rest;
|
|
12
12
|
let testIdProp;
|
|
@@ -50,43 +50,27 @@ const TableSettingsMenuReset = (t0)=>{
|
|
|
50
50
|
const handleClick = t1;
|
|
51
51
|
const { columnVisibility: currentVisibility, columnOrder: currentOrder } = table.state;
|
|
52
52
|
const effectiveOrder = 0 === currentOrder.length ? defaultColumnOrder : currentOrder;
|
|
53
|
-
const { fromDefault, toggles } = visibilityDraft;
|
|
54
53
|
let t2;
|
|
55
|
-
if ($[14] !==
|
|
56
|
-
t2 =
|
|
57
|
-
$[14] =
|
|
58
|
-
$[15] =
|
|
59
|
-
$[16] =
|
|
60
|
-
|
|
61
|
-
|
|
54
|
+
if ($[14] !== currentVisibility || $[15] !== defaultColumnVisibility || $[16] !== visibilityDraft) {
|
|
55
|
+
t2 = !defaultColumnVisibility || isEqual(resolveVisibilityDraft(visibilityDraft, currentVisibility, defaultColumnVisibility), defaultColumnVisibility);
|
|
56
|
+
$[14] = currentVisibility;
|
|
57
|
+
$[15] = defaultColumnVisibility;
|
|
58
|
+
$[16] = visibilityDraft;
|
|
59
|
+
$[17] = t2;
|
|
60
|
+
} else t2 = $[17];
|
|
61
|
+
const visibilityMatch = t2;
|
|
62
62
|
let t3;
|
|
63
|
-
if ($[
|
|
64
|
-
t3 = !
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
$[18] = defaultColumnVisibility;
|
|
71
|
-
$[19] = fromDefault;
|
|
72
|
-
$[20] = hasDraft;
|
|
73
|
-
$[21] = table;
|
|
74
|
-
$[22] = toggles;
|
|
75
|
-
$[23] = t3;
|
|
76
|
-
} else t3 = $[23];
|
|
77
|
-
const visibilityMatch = t3;
|
|
78
|
-
let t4;
|
|
79
|
-
if ($[24] !== defaultColumnOrder || $[25] !== effectiveOrder) {
|
|
80
|
-
t4 = !defaultColumnOrder || isEqual(effectiveOrder, defaultColumnOrder);
|
|
81
|
-
$[24] = defaultColumnOrder;
|
|
82
|
-
$[25] = effectiveOrder;
|
|
83
|
-
$[26] = t4;
|
|
84
|
-
} else t4 = $[26];
|
|
85
|
-
const orderMatch = t4;
|
|
63
|
+
if ($[18] !== defaultColumnOrder || $[19] !== effectiveOrder) {
|
|
64
|
+
t3 = !defaultColumnOrder || isEqual(effectiveOrder, defaultColumnOrder);
|
|
65
|
+
$[18] = defaultColumnOrder;
|
|
66
|
+
$[19] = effectiveOrder;
|
|
67
|
+
$[20] = t3;
|
|
68
|
+
} else t3 = $[20];
|
|
69
|
+
const orderMatch = t3;
|
|
86
70
|
const isDefaultState = visibilityMatch && orderMatch;
|
|
87
|
-
let
|
|
88
|
-
if ($[
|
|
89
|
-
|
|
71
|
+
let t4;
|
|
72
|
+
if ($[21] !== handleClick || $[22] !== isDefaultState || $[23] !== rest || $[24] !== testId) {
|
|
73
|
+
t4 = /*#__PURE__*/ jsx(Button, {
|
|
90
74
|
...rest,
|
|
91
75
|
type: "button",
|
|
92
76
|
"data-testid": testId,
|
|
@@ -98,13 +82,13 @@ const TableSettingsMenuReset = (t0)=>{
|
|
|
98
82
|
fullWidth: true,
|
|
99
83
|
children: "Reset to default"
|
|
100
84
|
});
|
|
101
|
-
$[
|
|
102
|
-
$[
|
|
103
|
-
$[
|
|
104
|
-
$[
|
|
105
|
-
$[
|
|
106
|
-
} else
|
|
107
|
-
return
|
|
85
|
+
$[21] = handleClick;
|
|
86
|
+
$[22] = isDefaultState;
|
|
87
|
+
$[23] = rest;
|
|
88
|
+
$[24] = testId;
|
|
89
|
+
$[25] = t4;
|
|
90
|
+
} else t4 = $[25];
|
|
91
|
+
return t4;
|
|
108
92
|
};
|
|
109
93
|
TableSettingsMenuReset.displayName = "TableSettingsMenuReset";
|
|
110
94
|
export { TableSettingsMenuReset };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2.
|
|
3
|
-
"generatedAt": "2026-10-
|
|
2
|
+
"version": "2.7.0",
|
|
3
|
+
"generatedAt": "2026-10-13T16:31:03.367Z",
|
|
4
4
|
"components": [
|
|
5
5
|
{
|
|
6
6
|
"name": "Accordion",
|
|
@@ -107735,6 +107735,11 @@
|
|
|
107735
107735
|
"code": "() => {\n const [columnVisibility, setColumnVisibility] = useState<TableVisibilityState>({});\n const [columnOrder, setColumnOrder] = useState<string[]>([]);\n\n return (\n <Table\n data={securityEvents}\n columns={securityColumns}\n getRowId={row => row.id}\n columnVisibility={columnVisibility}\n onColumnVisibilityChange={setColumnVisibility}\n columnOrder={columnOrder}\n onColumnOrderChange={setColumnOrder}\n defaultColumnVisibility={{}}\n defaultColumnOrder={securityColumnIds}\n />\n );\n}",
|
|
107736
107736
|
"description": "The gear at the end of the header — search the columns, show and hide them, reorder them,\nreset — writing the same visibility and order state as the header menu."
|
|
107737
107737
|
},
|
|
107738
|
+
{
|
|
107739
|
+
"name": "SettingsMenuDeferred",
|
|
107740
|
+
"code": "() => {\n const [columnVisibility, setColumnVisibility] = useState<TableVisibilityState>({});\n const [columnOrder, setColumnOrder] = useState<string[]>([]);\n\n return (\n <Table\n data={securityEvents}\n columns={securityColumns}\n getRowId={row => row.id}\n columnVisibility={columnVisibility}\n onColumnVisibilityChange={setColumnVisibility}\n columnOrder={columnOrder}\n onColumnOrderChange={setColumnOrder}\n defaultColumnVisibility={{}}\n defaultColumnOrder={securityColumnIds}\n deferColumnVisibility\n />\n );\n}",
|
|
107741
|
+
"description": "`deferColumnVisibility` holds switch toggles and \"Reset to default\" while the\nsettings menu is open and applies them as one `columnVisibility` change on\nclose — for consumers that fetch a column's data only once the menu closes,\nso a new column never sits empty behind the open menu."
|
|
107742
|
+
},
|
|
107738
107743
|
{
|
|
107739
107744
|
"name": "SettingsMenuGrouped",
|
|
107740
107745
|
"code": "() => {\n const [columnVisibility, setColumnVisibility] = useState<TableVisibilityState>({});\n\n const columnGroups: TableColumnGroup[] = [\n {\n label: 'Threat classification',\n columns: ['objectName', 'status', 'firstDetected', 'lastSeen'],\n },\n { label: 'Request features', columns: ['sourceIp', 'parameter', 'endpoint', 'requests'] },\n ];\n\n return (\n <Table\n data={securityEvents}\n columns={securityColumns}\n getRowId={row => row.id}\n columnVisibility={columnVisibility}\n onColumnVisibilityChange={setColumnVisibility}\n columnGroups={columnGroups}\n />\n );\n}",
|