@navikt/ds-react 8.2.2 → 8.3.0
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/cjs/data/stories/DataTableProfiler.d.ts +6 -0
- package/cjs/data/stories/DataTableProfiler.js +124 -0
- package/cjs/data/stories/DataTableProfiler.js.map +1 -0
- package/cjs/data/stories/dummy-data.d.ts +2 -3
- package/cjs/data/stories/dummy-data.js +30 -9
- package/cjs/data/stories/dummy-data.js.map +1 -1
- package/cjs/data/table/index.d.ts +2 -2
- package/cjs/data/table/index.js +2 -1
- package/cjs/data/table/index.js.map +1 -1
- package/cjs/data/table/root/DataTableRoot.d.ts +15 -2
- package/cjs/data/table/root/DataTableRoot.js +4 -1
- package/cjs/data/table/root/DataTableRoot.js.map +1 -1
- package/cjs/data/table/tfoot/DataTableTfoot.d.ts +5 -0
- package/cjs/data/table/tfoot/DataTableTfoot.js +55 -0
- package/cjs/data/table/tfoot/DataTableTfoot.js.map +1 -0
- package/cjs/data/table/th/DataTableTh.d.ts +20 -4
- package/cjs/data/table/th/DataTableTh.js +24 -6
- package/cjs/data/table/th/DataTableTh.js.map +1 -1
- package/cjs/data/table/th/DataTableThActions.d.ts +5 -0
- package/cjs/data/table/th/DataTableThActions.js +23 -0
- package/cjs/data/table/th/DataTableThActions.js.map +1 -0
- package/cjs/data/table/th/DataTableThSortHandle.d.ts +6 -0
- package/cjs/data/table/th/DataTableThSortHandle.js +82 -0
- package/cjs/data/table/th/DataTableThSortHandle.js.map +1 -0
- package/cjs/tooltip/Tooltip.d.ts +1 -1
- package/cjs/tooltip/Tooltip.js +35 -2
- package/cjs/tooltip/Tooltip.js.map +1 -1
- package/cjs/utils/i18n/locales/en.d.ts +3 -0
- package/cjs/utils/i18n/locales/en.js +3 -0
- package/cjs/utils/i18n/locales/en.js.map +1 -1
- package/cjs/utils/i18n/locales/nb.d.ts +4 -0
- package/cjs/utils/i18n/locales/nb.js +4 -0
- package/cjs/utils/i18n/locales/nb.js.map +1 -1
- package/cjs/utils/i18n/locales/nn.d.ts +3 -0
- package/cjs/utils/i18n/locales/nn.js +3 -0
- package/cjs/utils/i18n/locales/nn.js.map +1 -1
- package/esm/data/stories/DataTableProfiler.d.ts +6 -0
- package/esm/data/stories/DataTableProfiler.js +89 -0
- package/esm/data/stories/DataTableProfiler.js.map +1 -0
- package/esm/data/stories/dummy-data.d.ts +2 -3
- package/esm/data/stories/dummy-data.js +30 -9
- package/esm/data/stories/dummy-data.js.map +1 -1
- package/esm/data/table/index.d.ts +2 -2
- package/esm/data/table/index.js +1 -1
- package/esm/data/table/index.js.map +1 -1
- package/esm/data/table/root/DataTableRoot.d.ts +15 -2
- package/esm/data/table/root/DataTableRoot.js +3 -1
- package/esm/data/table/root/DataTableRoot.js.map +1 -1
- package/esm/data/table/tfoot/DataTableTfoot.d.ts +5 -0
- package/esm/data/table/tfoot/DataTableTfoot.js +19 -0
- package/esm/data/table/tfoot/DataTableTfoot.js.map +1 -0
- package/esm/data/table/th/DataTableTh.d.ts +20 -4
- package/esm/data/table/th/DataTableTh.js +25 -7
- package/esm/data/table/th/DataTableTh.js.map +1 -1
- package/esm/data/table/th/DataTableThActions.d.ts +5 -0
- package/esm/data/table/th/DataTableThActions.js +18 -0
- package/esm/data/table/th/DataTableThActions.js.map +1 -0
- package/esm/data/table/th/DataTableThSortHandle.d.ts +6 -0
- package/esm/data/table/th/DataTableThSortHandle.js +47 -0
- package/esm/data/table/th/DataTableThSortHandle.js.map +1 -0
- package/esm/tooltip/Tooltip.d.ts +1 -1
- package/esm/tooltip/Tooltip.js +35 -2
- package/esm/tooltip/Tooltip.js.map +1 -1
- package/esm/utils/i18n/locales/en.d.ts +3 -0
- package/esm/utils/i18n/locales/en.js +3 -0
- package/esm/utils/i18n/locales/en.js.map +1 -1
- package/esm/utils/i18n/locales/nb.d.ts +4 -0
- package/esm/utils/i18n/locales/nb.js +4 -0
- package/esm/utils/i18n/locales/nb.js.map +1 -1
- package/esm/utils/i18n/locales/nn.d.ts +3 -0
- package/esm/utils/i18n/locales/nn.js +3 -0
- package/esm/utils/i18n/locales/nn.js.map +1 -1
- package/package.json +3 -3
- package/src/data/stories/DataTableProfiler.tsx +215 -0
- package/src/data/stories/dummy-data.tsx +39 -17
- package/src/data/table/index.tsx +2 -0
- package/src/data/table/root/DataTableRoot.tsx +19 -0
- package/src/data/table/tfoot/DataTableTfoot.tsx +21 -0
- package/src/data/table/th/DataTableTh.tsx +68 -31
- package/src/data/table/th/DataTableThActions.tsx +32 -0
- package/src/data/table/th/DataTableThSortHandle.tsx +67 -0
- package/src/tooltip/Tooltip.tsx +66 -11
- package/src/utils/i18n/locales/en.ts +3 -0
- package/src/utils/i18n/locales/nb.ts +3 -0
- package/src/utils/i18n/locales/nn.ts +3 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nb.js","sourceRoot":"","sources":["../../../../src/utils/i18n/locales/nb.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nb.js","sourceRoot":"","sources":["../../../../src/utils/i18n/locales/nb.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nn.js","sourceRoot":"","sources":["../../../../src/utils/i18n/locales/nn.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nn.js","sourceRoot":"","sources":["../../../../src/utils/i18n/locales/nn.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@navikt/ds-react",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.3.0",
|
|
4
4
|
"description": "React components from the Norwegian Labour and Welfare Administration.",
|
|
5
5
|
"author": "Aksel, a team part of the Norwegian Labour and Welfare Administration.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -705,8 +705,8 @@
|
|
|
705
705
|
"dependencies": {
|
|
706
706
|
"@floating-ui/react": "0.27.8",
|
|
707
707
|
"@floating-ui/react-dom": "^2.1.6",
|
|
708
|
-
"@navikt/aksel-icons": "^8.
|
|
709
|
-
"@navikt/ds-tokens": "^8.
|
|
708
|
+
"@navikt/aksel-icons": "^8.3.0",
|
|
709
|
+
"@navikt/ds-tokens": "^8.3.0",
|
|
710
710
|
"date-fns": "^4.0.0",
|
|
711
711
|
"react-day-picker": "9.7.0"
|
|
712
712
|
},
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import React, { useEffect, useRef, useState } from "react";
|
|
2
|
+
import { Button } from "../../button";
|
|
3
|
+
import { Box } from "../../layout/box";
|
|
4
|
+
import { VStack } from "../../layout/stack";
|
|
5
|
+
import { Heading } from "../../typography";
|
|
6
|
+
|
|
7
|
+
type DataTableProfilerProps = {
|
|
8
|
+
children: React.ReactNode;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
type ProfilerEntry = {
|
|
12
|
+
duration: string;
|
|
13
|
+
timestamp: number;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
type ProfilerState = {
|
|
17
|
+
actualDuration: ProfilerEntry[];
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
function DataTableProfiler({ children }: DataTableProfilerProps) {
|
|
21
|
+
const lastProfilerStateRef = useRef<Record<string, ProfilerState>>({});
|
|
22
|
+
|
|
23
|
+
return (
|
|
24
|
+
<div>
|
|
25
|
+
<ProfilerDisplay getLatestData={() => lastProfilerStateRef.current} />
|
|
26
|
+
<React.Profiler
|
|
27
|
+
id="DataTable"
|
|
28
|
+
onRender={(_, phase, actualDuration) => {
|
|
29
|
+
lastProfilerStateRef.current = {
|
|
30
|
+
...lastProfilerStateRef.current,
|
|
31
|
+
[phase]: {
|
|
32
|
+
actualDuration: rollingLatestValues(
|
|
33
|
+
lastProfilerStateRef.current[phase]?.actualDuration || [],
|
|
34
|
+
{ duration: actualDuration.toFixed(2), timestamp: Date.now() },
|
|
35
|
+
10,
|
|
36
|
+
),
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}}
|
|
40
|
+
>
|
|
41
|
+
<div id="dataTable-profiler-content">{children}</div>
|
|
42
|
+
</React.Profiler>
|
|
43
|
+
</div>
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function rollingLatestValues(
|
|
48
|
+
arr: ProfilerEntry[],
|
|
49
|
+
newValue: ProfilerEntry,
|
|
50
|
+
maxLength: number,
|
|
51
|
+
): ProfilerEntry[] {
|
|
52
|
+
let newArr = [newValue, ...arr];
|
|
53
|
+
if (newArr.length > maxLength) {
|
|
54
|
+
newArr = newArr.slice(0, -1);
|
|
55
|
+
}
|
|
56
|
+
return newArr;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function ProfilerDisplay({
|
|
60
|
+
getLatestData,
|
|
61
|
+
}: {
|
|
62
|
+
getLatestData: () => Record<string, ProfilerState>;
|
|
63
|
+
}) {
|
|
64
|
+
const [open, setOpen] = useState(false);
|
|
65
|
+
const [domStats, setDomStats] = useState<{
|
|
66
|
+
elements: number;
|
|
67
|
+
nodes: number;
|
|
68
|
+
} | null>(null);
|
|
69
|
+
const [, setTick] = useState(0);
|
|
70
|
+
|
|
71
|
+
const lastProfilerState = getLatestData();
|
|
72
|
+
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
if (!open) return;
|
|
75
|
+
const interval = setInterval(() => {
|
|
76
|
+
const dataTableElement = document.getElementById(
|
|
77
|
+
"dataTable-profiler-content",
|
|
78
|
+
);
|
|
79
|
+
if (dataTableElement) {
|
|
80
|
+
const walker = document.createTreeWalker(
|
|
81
|
+
dataTableElement,
|
|
82
|
+
NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT,
|
|
83
|
+
null,
|
|
84
|
+
);
|
|
85
|
+
let elements = 0;
|
|
86
|
+
let nodes = 0;
|
|
87
|
+
while (walker.nextNode()) {
|
|
88
|
+
nodes++;
|
|
89
|
+
if (walker.currentNode.nodeType === Node.ELEMENT_NODE) {
|
|
90
|
+
elements++;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
setDomStats({ elements, nodes });
|
|
94
|
+
}
|
|
95
|
+
setTick((t) => t + 1);
|
|
96
|
+
}, 500);
|
|
97
|
+
return () => clearInterval(interval);
|
|
98
|
+
}, [open]);
|
|
99
|
+
|
|
100
|
+
const getOpacity = (timestamp: number) => {
|
|
101
|
+
const age = Date.now() - timestamp;
|
|
102
|
+
const maxAge = 10000;
|
|
103
|
+
return Math.max(0.4, 1 - age / maxAge);
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
return (
|
|
107
|
+
<VStack asChild>
|
|
108
|
+
<Box
|
|
109
|
+
position="fixed"
|
|
110
|
+
top="space-4"
|
|
111
|
+
right="space-4"
|
|
112
|
+
padding="space-6"
|
|
113
|
+
background="raised"
|
|
114
|
+
borderRadius="8"
|
|
115
|
+
borderWidth="1"
|
|
116
|
+
borderColor="neutral-subtleA"
|
|
117
|
+
style={{ zIndex: 1000 }}
|
|
118
|
+
>
|
|
119
|
+
<Button
|
|
120
|
+
data-color="neutral"
|
|
121
|
+
variant="tertiary"
|
|
122
|
+
size="small"
|
|
123
|
+
onClick={() => setOpen(!open)}
|
|
124
|
+
>
|
|
125
|
+
{open ? "Hide Profiler" : "Show Profiler"}
|
|
126
|
+
</Button>
|
|
127
|
+
{open && (
|
|
128
|
+
<>
|
|
129
|
+
{!domStats && <div>Loading stats...</div>}
|
|
130
|
+
{domStats && (
|
|
131
|
+
<div>
|
|
132
|
+
<Heading level="2" size="xsmall">
|
|
133
|
+
DOM Stats:
|
|
134
|
+
</Heading>
|
|
135
|
+
<ul style={{ margin: 0, paddingLeft: "1rem" }}>
|
|
136
|
+
<li
|
|
137
|
+
style={{ listStyle: "none" }}
|
|
138
|
+
>{`${domStats.elements} elements`}</li>
|
|
139
|
+
<li
|
|
140
|
+
style={{ listStyle: "none" }}
|
|
141
|
+
>{`${domStats.nodes} nodes`}</li>
|
|
142
|
+
</ul>
|
|
143
|
+
</div>
|
|
144
|
+
)}
|
|
145
|
+
{lastProfilerState.mount && (
|
|
146
|
+
<div>
|
|
147
|
+
<Heading level="2" size="xsmall">
|
|
148
|
+
Mount:
|
|
149
|
+
</Heading>
|
|
150
|
+
<ul style={{ margin: 0, paddingLeft: "1rem" }}>
|
|
151
|
+
{lastProfilerState.mount.actualDuration.map(
|
|
152
|
+
(entry, index) => (
|
|
153
|
+
<li
|
|
154
|
+
style={{
|
|
155
|
+
listStyle: "none",
|
|
156
|
+
opacity: getOpacity(entry.timestamp),
|
|
157
|
+
transition: "opacity 0.5s",
|
|
158
|
+
}}
|
|
159
|
+
key={index}
|
|
160
|
+
>{`${entry.duration} ms`}</li>
|
|
161
|
+
),
|
|
162
|
+
)}
|
|
163
|
+
</ul>
|
|
164
|
+
</div>
|
|
165
|
+
)}
|
|
166
|
+
{lastProfilerState.update && (
|
|
167
|
+
<div>
|
|
168
|
+
<Heading level="2" size="xsmall">
|
|
169
|
+
Update:
|
|
170
|
+
</Heading>
|
|
171
|
+
<ul style={{ margin: 0, paddingLeft: "1rem" }}>
|
|
172
|
+
{lastProfilerState.update.actualDuration.map(
|
|
173
|
+
(entry, index) => (
|
|
174
|
+
<li
|
|
175
|
+
style={{
|
|
176
|
+
listStyle: "none",
|
|
177
|
+
opacity: getOpacity(entry.timestamp),
|
|
178
|
+
transition: "opacity 0.5s",
|
|
179
|
+
}}
|
|
180
|
+
key={index}
|
|
181
|
+
>{`${entry.duration} ms`}</li>
|
|
182
|
+
),
|
|
183
|
+
)}
|
|
184
|
+
</ul>
|
|
185
|
+
</div>
|
|
186
|
+
)}
|
|
187
|
+
{lastProfilerState["nested-update"] && (
|
|
188
|
+
<div>
|
|
189
|
+
<Heading level="2" size="xsmall">
|
|
190
|
+
Nested-update
|
|
191
|
+
</Heading>
|
|
192
|
+
<ul style={{ margin: 0, paddingLeft: "1rem" }}>
|
|
193
|
+
{lastProfilerState["nested-update"].actualDuration.map(
|
|
194
|
+
(entry, index) => (
|
|
195
|
+
<li
|
|
196
|
+
style={{
|
|
197
|
+
listStyle: "none",
|
|
198
|
+
opacity: getOpacity(entry.timestamp),
|
|
199
|
+
transition: "opacity 0.5s",
|
|
200
|
+
}}
|
|
201
|
+
key={index}
|
|
202
|
+
>{`${entry.duration} ms`}</li>
|
|
203
|
+
),
|
|
204
|
+
)}
|
|
205
|
+
</ul>
|
|
206
|
+
</div>
|
|
207
|
+
)}
|
|
208
|
+
</>
|
|
209
|
+
)}
|
|
210
|
+
</Box>
|
|
211
|
+
</VStack>
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
export { DataTableProfiler };
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { createColumnHelper } from "@tanstack/react-table";
|
|
2
2
|
import React from "react";
|
|
3
|
-
import { HStack } from "../../layout/stack";
|
|
4
3
|
import { Tag } from "../../tag";
|
|
5
4
|
|
|
6
5
|
// Helper function to get random integer between min and max (inclusive)
|
|
@@ -18,7 +17,7 @@ const getRandomItems = <T,>(arr: T[], min = 1, max = 5): T[] => {
|
|
|
18
17
|
return shuffled.slice(0, count);
|
|
19
18
|
};
|
|
20
19
|
|
|
21
|
-
interface PersonInfo {
|
|
20
|
+
export interface PersonInfo {
|
|
22
21
|
// id: number;
|
|
23
22
|
name: string;
|
|
24
23
|
nationalId: string;
|
|
@@ -66,26 +65,49 @@ export const columns = [
|
|
|
66
65
|
{
|
|
67
66
|
header: "Age",
|
|
68
67
|
accessorKey: "age",
|
|
68
|
+
footer: ({ table }) => {
|
|
69
|
+
const ages: number[] = [];
|
|
70
|
+
table.getFilteredRowModel().rows.forEach((row) => {
|
|
71
|
+
const value = row.getValue("age");
|
|
72
|
+
value && ages.push(value);
|
|
73
|
+
});
|
|
74
|
+
return `Avg: ${(ages.reduce((a, b) => a + b, 0) / ages.length).toFixed(2)}`;
|
|
75
|
+
},
|
|
69
76
|
},
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
77
|
+
|
|
78
|
+
columnHelper.accessor("forceSensitive", {
|
|
79
|
+
cell: (info) => {
|
|
80
|
+
const value = info.getValue();
|
|
81
|
+
return (
|
|
82
|
+
<Tag
|
|
83
|
+
size="small"
|
|
84
|
+
variant="moderate"
|
|
85
|
+
data-color={value ? "accent" : "warning"}
|
|
86
|
+
>{`${value ? "Yes" : "No"}`}</Tag>
|
|
87
|
+
);
|
|
88
|
+
},
|
|
89
|
+
footer: ({ table }) => {
|
|
90
|
+
const totals = new Map();
|
|
91
|
+
totals.set("Yes", 0);
|
|
92
|
+
totals.set("No", 0);
|
|
93
|
+
table.getFilteredRowModel().rows.forEach((row) => {
|
|
94
|
+
const value = row.getValue("forceSensitive");
|
|
95
|
+
totals.set(
|
|
96
|
+
value ? "Yes" : "No",
|
|
97
|
+
(totals.get(value ? "Yes" : "No") ?? 0) + 1,
|
|
98
|
+
);
|
|
99
|
+
});
|
|
100
|
+
return `Yes: ${totals.get("Yes")}, No: ${totals.get("No")}`;
|
|
101
|
+
},
|
|
102
|
+
}),
|
|
74
103
|
{
|
|
75
104
|
header: "Home system",
|
|
76
105
|
accessorKey: "homeSystem",
|
|
77
106
|
},
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
<Tag key={skill} size="small">
|
|
83
|
-
{skill}
|
|
84
|
-
</Tag>
|
|
85
|
-
))}
|
|
86
|
-
</HStack>
|
|
87
|
-
),
|
|
88
|
-
}),
|
|
107
|
+
{
|
|
108
|
+
header: "Skills",
|
|
109
|
+
accessorKey: "skills",
|
|
110
|
+
},
|
|
89
111
|
];
|
|
90
112
|
|
|
91
113
|
export const homeSystemOptions = [
|
package/src/data/table/index.tsx
CHANGED
|
@@ -7,6 +7,7 @@ export {
|
|
|
7
7
|
DataTableTr,
|
|
8
8
|
DataTableTh,
|
|
9
9
|
DataTableTd,
|
|
10
|
+
DataTableTfoot,
|
|
10
11
|
} from "./root/DataTableRoot";
|
|
11
12
|
export type {
|
|
12
13
|
DataTableProps,
|
|
@@ -16,4 +17,5 @@ export type {
|
|
|
16
17
|
DataTableTrProps,
|
|
17
18
|
DataTableThProps,
|
|
18
19
|
DataTableTdProps,
|
|
20
|
+
DataTableTfootProps,
|
|
19
21
|
} from "./root/DataTableRoot";
|
|
@@ -9,6 +9,10 @@ import {
|
|
|
9
9
|
type DataTableTbodyProps,
|
|
10
10
|
} from "../tbody/DataTableTbody";
|
|
11
11
|
import { DataTableTd, type DataTableTdProps } from "../td/DataTableTd";
|
|
12
|
+
import {
|
|
13
|
+
DataTableTfoot,
|
|
14
|
+
type DataTableTfootProps,
|
|
15
|
+
} from "../tfoot/DataTableTfoot";
|
|
12
16
|
import { DataTableTh, type DataTableThProps } from "../th/DataTableTh";
|
|
13
17
|
import {
|
|
14
18
|
DataTableThead,
|
|
@@ -101,6 +105,18 @@ interface DataTableRootComponent extends React.ForwardRefExoticComponent<
|
|
|
101
105
|
* ```
|
|
102
106
|
*/
|
|
103
107
|
Td: typeof DataTableTd;
|
|
108
|
+
/**
|
|
109
|
+
* @see 🏷️ {@link DataTableTfootProps}
|
|
110
|
+
* @example
|
|
111
|
+
* ```jsx
|
|
112
|
+
* <DataTable>
|
|
113
|
+
* <DataTable.Tfoot>
|
|
114
|
+
* ...
|
|
115
|
+
* </DataTable.Tfoot>
|
|
116
|
+
* </DataTable>
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
Tfoot: typeof DataTableTfoot;
|
|
104
120
|
}
|
|
105
121
|
|
|
106
122
|
const DataTable = forwardRef<HTMLTableElement, DataTableProps>(
|
|
@@ -123,6 +139,7 @@ DataTable.Tbody = DataTableTbody;
|
|
|
123
139
|
DataTable.Th = DataTableTh;
|
|
124
140
|
DataTable.Tr = DataTableTr;
|
|
125
141
|
DataTable.Td = DataTableTd;
|
|
142
|
+
DataTable.Tfoot = DataTableTfoot;
|
|
126
143
|
|
|
127
144
|
export {
|
|
128
145
|
DataTable,
|
|
@@ -132,6 +149,7 @@ export {
|
|
|
132
149
|
DataTableTh,
|
|
133
150
|
DataTableThead,
|
|
134
151
|
DataTableTr,
|
|
152
|
+
DataTableTfoot,
|
|
135
153
|
};
|
|
136
154
|
export default DataTable;
|
|
137
155
|
export type {
|
|
@@ -142,4 +160,5 @@ export type {
|
|
|
142
160
|
DataTableThProps,
|
|
143
161
|
DataTableTheadProps,
|
|
144
162
|
DataTableTrProps,
|
|
163
|
+
DataTableTfootProps,
|
|
145
164
|
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React, { forwardRef } from "react";
|
|
2
|
+
import { cl } from "../../../utils/helpers";
|
|
3
|
+
|
|
4
|
+
type DataTableTfootProps = React.HTMLAttributes<HTMLTableSectionElement>;
|
|
5
|
+
|
|
6
|
+
const DataTableTfoot = forwardRef<HTMLTableSectionElement, DataTableTfootProps>(
|
|
7
|
+
({ className, children, ...rest }, forwardedRef) => {
|
|
8
|
+
return (
|
|
9
|
+
<tfoot
|
|
10
|
+
{...rest}
|
|
11
|
+
ref={forwardedRef}
|
|
12
|
+
className={cl("aksel-data-table__tfoot", className)}
|
|
13
|
+
>
|
|
14
|
+
{children}
|
|
15
|
+
</tfoot>
|
|
16
|
+
);
|
|
17
|
+
},
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
export { DataTableTfoot };
|
|
21
|
+
export type { DataTableTfootProps };
|
|
@@ -1,64 +1,101 @@
|
|
|
1
1
|
import React, { forwardRef } from "react";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
PushPinIcon,
|
|
6
|
-
} from "@navikt/aksel-icons";
|
|
7
|
-
import { Button } from "../../../button";
|
|
2
|
+
import { FunnelIcon, SortDownIcon, SortUpIcon } from "@navikt/aksel-icons";
|
|
3
|
+
import { HStack, Spacer } from "../../../layout/stack";
|
|
4
|
+
import { ActionMenu } from "../../../overlays/action-menu";
|
|
8
5
|
import { cl } from "../../../utils/helpers";
|
|
6
|
+
import { DataTableThActions } from "./DataTableThActions";
|
|
7
|
+
import { DataTableThSortHandle } from "./DataTableThSortHandle";
|
|
9
8
|
|
|
10
9
|
type DataTableThProps = React.HTMLAttributes<HTMLTableCellElement> & {
|
|
11
10
|
resizeHandler?: React.MouseEventHandler<HTMLButtonElement>;
|
|
12
|
-
isPinned?: boolean;
|
|
13
|
-
pinningHandler?: React.MouseEventHandler<HTMLButtonElement>;
|
|
14
11
|
size?: number;
|
|
12
|
+
sortDirection?: "asc" | "desc" | "none" | false;
|
|
13
|
+
onSortChange?: (direction: "asc" | "desc" | "none", event: Event) => void;
|
|
14
|
+
render?: {
|
|
15
|
+
filterMenu?: {
|
|
16
|
+
title: string;
|
|
17
|
+
content: React.ReactNode;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
15
20
|
};
|
|
16
21
|
|
|
22
|
+
/**
|
|
23
|
+
* TODO:
|
|
24
|
+
* - Plan for pinning: Move it into "settings" dialog like here: https://cloudscape.design/examples/react/table.html
|
|
25
|
+
*/
|
|
17
26
|
const DataTableTh = forwardRef<HTMLTableCellElement, DataTableThProps>(
|
|
18
27
|
(
|
|
19
28
|
{
|
|
20
29
|
className,
|
|
21
30
|
children,
|
|
22
31
|
resizeHandler,
|
|
23
|
-
isPinned = false,
|
|
24
|
-
pinningHandler,
|
|
25
32
|
size,
|
|
33
|
+
sortDirection,
|
|
34
|
+
onSortChange,
|
|
35
|
+
style,
|
|
36
|
+
render,
|
|
26
37
|
...rest
|
|
27
38
|
},
|
|
28
39
|
forwardedRef,
|
|
29
40
|
) => {
|
|
41
|
+
const { filterMenu } = render || {};
|
|
42
|
+
|
|
30
43
|
return (
|
|
31
44
|
<th
|
|
32
45
|
{...rest}
|
|
33
46
|
ref={forwardedRef}
|
|
34
47
|
className={cl("aksel-data-table__th", className)}
|
|
35
|
-
style={{ width: size }}
|
|
48
|
+
style={{ width: size, ...style }}
|
|
36
49
|
>
|
|
37
|
-
{
|
|
38
|
-
|
|
39
|
-
<
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
variant="secondary"
|
|
43
|
-
icon={
|
|
44
|
-
isPinned ? (
|
|
45
|
-
<PushPinFillIcon aria-hidden title="Fest kolonne" />
|
|
46
|
-
) : (
|
|
47
|
-
<PushPinIcon aria-hidden title="Løstne kolonne" />
|
|
48
|
-
)
|
|
49
|
-
}
|
|
50
|
+
<HStack align="center" gap="space-8" wrap={false}>
|
|
51
|
+
<div className="aksel-data-table__th-content">{children}</div>
|
|
52
|
+
<DataTableThSortHandle
|
|
53
|
+
sortDirection={sortDirection}
|
|
54
|
+
onSortChange={onSortChange}
|
|
50
55
|
/>
|
|
51
|
-
|
|
56
|
+
<Spacer />
|
|
57
|
+
|
|
58
|
+
<DataTableThActions>
|
|
59
|
+
{/* TODO: onSortChange just rotates between the three states now */}
|
|
60
|
+
{/* TODO: Sorting texts do not handle different data-types now */}
|
|
61
|
+
{sortDirection && (
|
|
62
|
+
<ActionMenu.Group label="Sortering">
|
|
63
|
+
<ActionMenu.Item
|
|
64
|
+
onSelect={(event) => onSortChange?.("desc", event)}
|
|
65
|
+
icon={<SortUpIcon aria-hidden />}
|
|
66
|
+
>
|
|
67
|
+
{sortDirection === "desc" ? "Fjern sortering" : "A-Z"}
|
|
68
|
+
</ActionMenu.Item>
|
|
69
|
+
<ActionMenu.Item
|
|
70
|
+
onSelect={(event) => onSortChange?.("asc", event)}
|
|
71
|
+
icon={<SortDownIcon aria-hidden />}
|
|
72
|
+
>
|
|
73
|
+
{sortDirection === "asc" ? "Fjern sortering" : "Z-A"}
|
|
74
|
+
</ActionMenu.Item>
|
|
75
|
+
</ActionMenu.Group>
|
|
76
|
+
)}
|
|
77
|
+
{filterMenu && (
|
|
78
|
+
<ActionMenu.Group label="Filter">
|
|
79
|
+
<ActionMenu.Sub>
|
|
80
|
+
<ActionMenu.SubTrigger icon={<FunnelIcon aria-hidden />}>
|
|
81
|
+
{filterMenu.title}
|
|
82
|
+
</ActionMenu.SubTrigger>
|
|
83
|
+
<ActionMenu.SubContent>
|
|
84
|
+
{/* TODO: ActionMenu stops tab from working, so user cant tab "into" filter now even when wrapper has focus */}
|
|
85
|
+
{filterMenu.content}
|
|
86
|
+
</ActionMenu.SubContent>
|
|
87
|
+
</ActionMenu.Sub>
|
|
88
|
+
</ActionMenu.Group>
|
|
89
|
+
)}
|
|
90
|
+
</DataTableThActions>
|
|
91
|
+
</HStack>
|
|
92
|
+
|
|
52
93
|
{resizeHandler && (
|
|
53
|
-
<
|
|
94
|
+
<button
|
|
54
95
|
onMouseDown={resizeHandler}
|
|
55
96
|
onMouseUp={resizeHandler}
|
|
56
97
|
className={cl("aksel-data-table__th-resize-handle")}
|
|
57
|
-
|
|
58
|
-
variant="secondary"
|
|
59
|
-
icon={
|
|
60
|
-
<CaretLeftRightIcon aria-hidden title="Endre kolonnestørrelse" />
|
|
61
|
-
}
|
|
98
|
+
data-color="neutral"
|
|
62
99
|
/>
|
|
63
100
|
)}
|
|
64
101
|
</th>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { MenuElipsisVerticalIcon } from "@navikt/aksel-icons";
|
|
3
|
+
import { Button } from "../../../button";
|
|
4
|
+
import { ActionMenu } from "../../../overlays/action-menu";
|
|
5
|
+
|
|
6
|
+
function DataTableThActions({ children }: { children?: React.ReactNode }) {
|
|
7
|
+
const [open, setOpen] = React.useState(false);
|
|
8
|
+
/* TODO: Fix this */
|
|
9
|
+
// @ts-expect-error Temp hack to hide when no children present
|
|
10
|
+
if (!children || !children.filter(Boolean).length) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<ActionMenu open={open} onOpenChange={setOpen}>
|
|
16
|
+
<ActionMenu.Trigger>
|
|
17
|
+
<Button
|
|
18
|
+
data-color="neutral"
|
|
19
|
+
variant="tertiary"
|
|
20
|
+
size="small"
|
|
21
|
+
icon={<MenuElipsisVerticalIcon title="Åpne kolonnemeny" />}
|
|
22
|
+
onClick={() => setOpen(!open)}
|
|
23
|
+
data-expanded={open}
|
|
24
|
+
className="aksel-data-table__th-action-button"
|
|
25
|
+
/>
|
|
26
|
+
</ActionMenu.Trigger>
|
|
27
|
+
<ActionMenu.Content>{children}</ActionMenu.Content>
|
|
28
|
+
</ActionMenu>
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export { DataTableThActions };
|