@navikt/ds-react 8.10.2 → 8.10.4
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/action-menu/ActionMenu.js +1 -1
- package/cjs/action-menu/ActionMenu.js.map +1 -1
- package/cjs/data/stories/Data.test-data.d.ts +24 -0
- package/cjs/data/stories/Data.test-data.js +1616 -0
- package/cjs/data/stories/Data.test-data.js.map +1 -0
- package/cjs/data/table/column-header/DataTableColumnHeader.d.ts +4 -1
- package/cjs/data/table/column-header/DataTableColumnHeader.js +4 -2
- package/cjs/data/table/column-header/DataTableColumnHeader.js.map +1 -1
- package/cjs/data/table/column-header/useTableColumnResize.d.ts +39 -14
- package/cjs/data/table/column-header/useTableColumnResize.js +37 -39
- package/cjs/data/table/column-header/useTableColumnResize.js.map +1 -1
- package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.d.ts +6 -0
- package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.js +32 -0
- package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.js.map +1 -0
- package/cjs/data/table/helpers/collectTableRowEntries.d.ts +13 -5
- package/cjs/data/table/helpers/collectTableRowEntries.js +26 -19
- package/cjs/data/table/helpers/collectTableRowEntries.js.map +1 -1
- package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.d.ts +46 -0
- package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.js +112 -0
- package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.js.map +1 -0
- package/cjs/data/table/helpers/selection/getMultipleSelectProps.d.ts +3 -2
- package/cjs/data/table/helpers/selection/getMultipleSelectProps.js +43 -19
- package/cjs/data/table/helpers/selection/getMultipleSelectProps.js.map +1 -1
- package/cjs/data/table/helpers/selection/selection.types.d.ts +1 -0
- package/cjs/data/table/helpers/table-keyboard.d.ts +1 -2
- package/cjs/data/table/helpers/table-keyboard.js +1 -2
- package/cjs/data/table/helpers/table-keyboard.js.map +1 -1
- package/cjs/data/table/hooks/useColumnOptions.js +18 -5
- package/cjs/data/table/hooks/useColumnOptions.js.map +1 -1
- package/cjs/data/table/hooks/useTableDetailsPanel.d.ts +62 -0
- package/cjs/data/table/hooks/{useTableExpansion.js → useTableDetailsPanel.js} +26 -19
- package/cjs/data/table/hooks/useTableDetailsPanel.js.map +1 -0
- package/cjs/data/table/hooks/useTableItems.d.ts +18 -17
- package/cjs/data/table/hooks/useTableItems.js +27 -15
- package/cjs/data/table/hooks/useTableItems.js.map +1 -1
- package/cjs/data/table/hooks/useTableSelection.d.ts +6 -3
- package/cjs/data/table/hooks/useTableSelection.js +10 -4
- package/cjs/data/table/hooks/useTableSelection.js.map +1 -1
- package/cjs/data/table/index.d.ts +1 -2
- package/cjs/data/table/index.js +22 -12
- package/cjs/data/table/index.js.map +1 -1
- package/cjs/data/table/root/DataTable.types.d.ts +12 -10
- package/cjs/data/table/root/DataTableRoot.context.d.ts +5 -1
- package/cjs/data/table/root/DataTableRoot.context.js.map +1 -1
- package/cjs/data/table/root/DataTableRoot.d.ts +79 -115
- package/cjs/data/table/root/DataTableRoot.js +167 -39
- package/cjs/data/table/root/DataTableRoot.js.map +1 -1
- package/cjs/data/table/root/DataTableRoot.legacy.d.ts +177 -0
- package/cjs/data/table/root/DataTableRoot.legacy.js +104 -0
- package/cjs/data/table/root/DataTableRoot.legacy.js.map +1 -0
- package/cjs/data/table/sub-row-toggle/DataTableSubRowToggle.d.ts +6 -0
- package/cjs/data/table/sub-row-toggle/DataTableSubRowToggle.js +21 -0
- package/cjs/data/table/sub-row-toggle/DataTableSubRowToggle.js.map +1 -0
- package/cjs/data/table/tr/DataTableTr.js +11 -11
- package/cjs/data/table/tr/DataTableTr.js.map +1 -1
- package/cjs/form/checkbox/Checkbox.js +1 -0
- package/cjs/form/checkbox/Checkbox.js.map +1 -1
- package/cjs/form/radio/Radio.js +7 -1
- package/cjs/form/radio/Radio.js.map +1 -1
- package/cjs/modal/types.d.ts +8 -4
- package/cjs/utils/components/dismissablelayer/DismissableLayer.js +1 -1
- package/cjs/utils/components/dismissablelayer/DismissableLayer.js.map +1 -1
- package/cjs/utils/components/floating/Floating.d.ts +16 -1
- package/cjs/utils/components/floating/Floating.js +50 -13
- package/cjs/utils/components/floating/Floating.js.map +1 -1
- package/cjs/utils/components/floating-menu/Menu.js +1 -1
- package/cjs/utils/components/floating-menu/Menu.js.map +1 -1
- package/cjs/utils/helpers/create-strict-context.js +1 -1
- package/cjs/utils/helpers/create-strict-context.js.map +1 -1
- package/cjs/utils/hooks/useControllableState.d.ts +5 -5
- package/cjs/utils/hooks/useControllableState.js.map +1 -1
- package/cjs/utils/hooks/useValueAsRef.js +1 -1
- package/cjs/utils/hooks/useValueAsRef.js.map +1 -1
- package/cjs/utils-external/hooks/useId.js +1 -1
- package/cjs/utils-external/hooks/useId.js.map +1 -1
- package/esm/action-menu/ActionMenu.js +1 -1
- package/esm/action-menu/ActionMenu.js.map +1 -1
- package/esm/data/stories/Data.test-data.d.ts +24 -0
- package/esm/data/stories/Data.test-data.js +1607 -0
- package/esm/data/stories/Data.test-data.js.map +1 -0
- package/esm/data/table/column-header/DataTableColumnHeader.d.ts +4 -1
- package/esm/data/table/column-header/DataTableColumnHeader.js +4 -2
- package/esm/data/table/column-header/DataTableColumnHeader.js.map +1 -1
- package/esm/data/table/column-header/useTableColumnResize.d.ts +39 -14
- package/esm/data/table/column-header/useTableColumnResize.js +38 -40
- package/esm/data/table/column-header/useTableColumnResize.js.map +1 -1
- package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.d.ts +6 -0
- package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.js +27 -0
- package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.js.map +1 -0
- package/esm/data/table/helpers/collectTableRowEntries.d.ts +13 -5
- package/esm/data/table/helpers/collectTableRowEntries.js +26 -19
- package/esm/data/table/helpers/collectTableRowEntries.js.map +1 -1
- package/esm/data/table/helpers/selection/SelectionSubtreeHelper.d.ts +46 -0
- package/esm/data/table/helpers/selection/SelectionSubtreeHelper.js +109 -0
- package/esm/data/table/helpers/selection/SelectionSubtreeHelper.js.map +1 -0
- package/esm/data/table/helpers/selection/getMultipleSelectProps.d.ts +3 -2
- package/esm/data/table/helpers/selection/getMultipleSelectProps.js +43 -19
- package/esm/data/table/helpers/selection/getMultipleSelectProps.js.map +1 -1
- package/esm/data/table/helpers/selection/selection.types.d.ts +1 -0
- package/esm/data/table/helpers/table-keyboard.d.ts +1 -2
- package/esm/data/table/helpers/table-keyboard.js +1 -2
- package/esm/data/table/helpers/table-keyboard.js.map +1 -1
- package/esm/data/table/hooks/useColumnOptions.js +18 -5
- package/esm/data/table/hooks/useColumnOptions.js.map +1 -1
- package/esm/data/table/hooks/useTableDetailsPanel.d.ts +62 -0
- package/esm/data/table/hooks/useTableDetailsPanel.js +58 -0
- package/esm/data/table/hooks/useTableDetailsPanel.js.map +1 -0
- package/esm/data/table/hooks/useTableItems.d.ts +18 -17
- package/esm/data/table/hooks/useTableItems.js +27 -15
- package/esm/data/table/hooks/useTableItems.js.map +1 -1
- package/esm/data/table/hooks/useTableSelection.d.ts +6 -3
- package/esm/data/table/hooks/useTableSelection.js +10 -4
- package/esm/data/table/hooks/useTableSelection.js.map +1 -1
- package/esm/data/table/index.d.ts +1 -2
- package/esm/data/table/index.js +21 -1
- package/esm/data/table/index.js.map +1 -1
- package/esm/data/table/root/DataTable.types.d.ts +12 -10
- package/esm/data/table/root/DataTableRoot.context.d.ts +5 -1
- package/esm/data/table/root/DataTableRoot.context.js.map +1 -1
- package/esm/data/table/root/DataTableRoot.d.ts +79 -115
- package/esm/data/table/root/DataTableRoot.js +174 -37
- package/esm/data/table/root/DataTableRoot.js.map +1 -1
- package/esm/data/table/root/DataTableRoot.legacy.d.ts +177 -0
- package/esm/data/table/root/DataTableRoot.legacy.js +59 -0
- package/esm/data/table/root/DataTableRoot.legacy.js.map +1 -0
- package/esm/data/table/sub-row-toggle/DataTableSubRowToggle.d.ts +6 -0
- package/esm/data/table/sub-row-toggle/DataTableSubRowToggle.js +16 -0
- package/esm/data/table/sub-row-toggle/DataTableSubRowToggle.js.map +1 -0
- package/esm/data/table/tr/DataTableTr.js +11 -11
- package/esm/data/table/tr/DataTableTr.js.map +1 -1
- package/esm/form/checkbox/Checkbox.js +1 -0
- package/esm/form/checkbox/Checkbox.js.map +1 -1
- package/esm/form/radio/Radio.js +7 -1
- package/esm/form/radio/Radio.js.map +1 -1
- package/esm/modal/types.d.ts +8 -4
- package/esm/utils/components/dismissablelayer/DismissableLayer.js +1 -1
- package/esm/utils/components/dismissablelayer/DismissableLayer.js.map +1 -1
- package/esm/utils/components/floating/Floating.d.ts +16 -1
- package/esm/utils/components/floating/Floating.js +48 -13
- package/esm/utils/components/floating/Floating.js.map +1 -1
- package/esm/utils/components/floating-menu/Menu.js +2 -2
- package/esm/utils/components/floating-menu/Menu.js.map +1 -1
- package/esm/utils/helpers/create-strict-context.js +1 -1
- package/esm/utils/helpers/create-strict-context.js.map +1 -1
- package/esm/utils/hooks/useControllableState.d.ts +5 -5
- package/esm/utils/hooks/useControllableState.js.map +1 -1
- package/esm/utils/hooks/useValueAsRef.js +1 -1
- package/esm/utils/hooks/useValueAsRef.js.map +1 -1
- package/esm/utils-external/hooks/useId.js +1 -1
- package/esm/utils-external/hooks/useId.js.map +1 -1
- package/package.json +3 -3
- package/src/action-menu/ActionMenu.tsx +1 -1
- package/src/data/stories/Data.test-data.tsx +1703 -0
- package/src/data/table/column-header/DataTableColumnHeader.tsx +11 -7
- package/src/data/table/column-header/useTableColumnResize.ts +95 -54
- package/src/data/table/details-panel-row/DataTableDetailsPanelRow.tsx +53 -0
- package/src/data/table/helpers/collectTableRowEntries.ts +55 -31
- package/src/data/table/helpers/selection/SelectionSubtreeHelper.test.ts +66 -0
- package/src/data/table/helpers/selection/SelectionSubtreeHelper.ts +162 -0
- package/src/data/table/helpers/selection/getMultipleSelectProps.ts +57 -20
- package/src/data/table/helpers/selection/selection.types.ts +1 -0
- package/src/data/table/helpers/table-keyboard.ts +1 -2
- package/src/data/table/hooks/__tests__/useTableItems.test.ts +27 -6
- package/src/data/table/hooks/__tests__/useTableSelection.test.ts +182 -58
- package/src/data/table/hooks/useColumnOptions.ts +19 -5
- package/src/data/table/hooks/useTableDetailsPanel.tsx +182 -0
- package/src/data/table/hooks/useTableItems.ts +74 -60
- package/src/data/table/hooks/useTableSelection.ts +27 -12
- package/src/data/table/index.tsx +5 -3
- package/src/data/table/root/DataTable.types.ts +25 -10
- package/src/data/table/root/DataTableRoot.context.ts +5 -1
- package/src/data/table/root/DataTableRoot.legacy.tsx +297 -0
- package/src/data/table/root/DataTableRoot.tsx +483 -219
- package/src/data/table/sub-row-toggle/DataTableSubRowToggle.tsx +39 -0
- package/src/data/table/tr/DataTableTr.tsx +14 -13
- package/src/form/checkbox/Checkbox.tsx +1 -0
- package/src/form/radio/Radio.tsx +7 -1
- package/src/modal/types.ts +8 -4
- package/src/utils/components/dismissablelayer/DismissableLayer.tsx +1 -1
- package/src/utils/components/floating/Floating.tsx +56 -13
- package/src/utils/components/floating-menu/Menu.tsx +4 -1
- package/src/utils/helpers/create-strict-context.tsx +1 -1
- package/src/utils/hooks/useControllableState.ts +11 -8
- package/src/utils/hooks/useValueAsRef.ts +1 -1
- package/src/utils-external/hooks/useId.ts +1 -1
- package/cjs/data/table/hooks/useTableExpansion.d.ts +0 -29
- package/cjs/data/table/hooks/useTableExpansion.js.map +0 -1
- package/cjs/data/table/root/DataTableAuto.d.ts +0 -174
- package/cjs/data/table/root/DataTableAuto.js +0 -206
- package/cjs/data/table/root/DataTableAuto.js.map +0 -1
- package/esm/data/table/hooks/useTableExpansion.d.ts +0 -29
- package/esm/data/table/hooks/useTableExpansion.js +0 -51
- package/esm/data/table/hooks/useTableExpansion.js.map +0 -1
- package/esm/data/table/root/DataTableAuto.d.ts +0 -174
- package/esm/data/table/root/DataTableAuto.js +0 -170
- package/esm/data/table/root/DataTableAuto.js.map +0 -1
- package/src/data/table/hooks/__tests__/useTableExpansion.test.tsx +0 -115
- package/src/data/table/hooks/useTableExpansion.tsx +0 -141
- package/src/data/table/root/DataTableAuto.test.tsx +0 -118
- package/src/data/table/root/DataTableAuto.tsx +0 -603
|
@@ -3,7 +3,8 @@ import { useId } from "../../../utils-external/index.js";
|
|
|
3
3
|
import { useControllableState } from "../../../utils/hooks/index.js";
|
|
4
4
|
import { getMultipleSelectProps } from "../helpers/selection/getMultipleSelectProps.js";
|
|
5
5
|
import { getSingleSelectProps } from "../helpers/selection/getSingleSelectProps.js";
|
|
6
|
-
function useTableSelection({
|
|
6
|
+
function useTableSelection({ selection = {}, visibleRowIds = [], childRowIdsById, }) {
|
|
7
|
+
const { selectionMode = "none", defaultSelectedKeys, selectedKeys: selectedKeysProp, onSelectionChange, disabledSelectionKeys = [], disableRowSelectionOnClick = false, } = selection;
|
|
7
8
|
const radioGroupName = useId();
|
|
8
9
|
const [selectedKeys, setSelectedKeys] = useControllableState({
|
|
9
10
|
value: selectionMode !== "none" ? selectedKeysProp : undefined,
|
|
@@ -17,6 +18,7 @@ function useTableSelection({ selectionMode = "none", defaultSelectedKeys, select
|
|
|
17
18
|
if (selectionMode === "none") {
|
|
18
19
|
return {
|
|
19
20
|
selection: Object.assign(Object.assign({ selectionMode }, baseSelection), { selectedKeys: [] }),
|
|
21
|
+
disableRowSelectionOnClick,
|
|
20
22
|
renderSelection: false,
|
|
21
23
|
};
|
|
22
24
|
}
|
|
@@ -28,7 +30,8 @@ function useTableSelection({ selectionMode = "none", defaultSelectedKeys, select
|
|
|
28
30
|
disabledKeysSet,
|
|
29
31
|
name: radioGroupName,
|
|
30
32
|
})),
|
|
31
|
-
|
|
33
|
+
disableRowSelectionOnClick,
|
|
34
|
+
renderSelection: visibleRowIds.length !== 0,
|
|
32
35
|
};
|
|
33
36
|
}
|
|
34
37
|
return {
|
|
@@ -37,9 +40,11 @@ function useTableSelection({ selectionMode = "none", defaultSelectedKeys, select
|
|
|
37
40
|
selectedKeys,
|
|
38
41
|
setSelectedKeys,
|
|
39
42
|
disabledKeysSet,
|
|
40
|
-
|
|
43
|
+
visibleRowIds,
|
|
44
|
+
childRowIdsById,
|
|
41
45
|
})),
|
|
42
|
-
|
|
46
|
+
disableRowSelectionOnClick,
|
|
47
|
+
renderSelection: visibleRowIds.length !== 0,
|
|
43
48
|
};
|
|
44
49
|
}
|
|
45
50
|
/**
|
|
@@ -52,6 +57,7 @@ const noSelectionState = {
|
|
|
52
57
|
disabledSelectionKeys: [],
|
|
53
58
|
isRowSelected: () => false,
|
|
54
59
|
},
|
|
60
|
+
disableRowSelectionOnClick: false,
|
|
55
61
|
renderSelection: false,
|
|
56
62
|
};
|
|
57
63
|
export { useTableSelection, noSelectionState };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableSelection.js","sourceRoot":"","sources":["../../../../src/data/table/hooks/useTableSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"useTableSelection.js","sourceRoot":"","sources":["../../../../src/data/table/hooks/useTableSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAqBjF,SAAS,iBAAiB,CAAC,EACzB,SAAS,GAAG,EAAE,EACd,aAAa,GAAG,EAAE,EAClB,eAAe,GACO;IACtB,MAAM,EACJ,aAAa,GAAG,MAAM,EACtB,mBAAmB,EACnB,YAAY,EAAE,gBAAgB,EAC9B,iBAAiB,EACjB,qBAAqB,GAAG,EAAE,EAC1B,0BAA0B,GAAG,KAAK,GACnC,GAAG,SAAS,CAAC;IAEd,MAAM,cAAc,GAAG,KAAK,EAAE,CAAC;IAE/B,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,oBAAoB,CAAgB;QAC1E,KAAK,EAAE,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS;QAC9D,YAAY,EAAE,mBAAmB,aAAnB,mBAAmB,cAAnB,mBAAmB,GAAI,EAAE;QACvC,QAAQ,EAAE,iBAAiB;KAC5B,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAE7E,MAAM,eAAe,GAAG,OAAO,CAC7B,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,qBAAqB,CAAC,EACpC,CAAC,qBAAqB,CAAC,CACxB,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,KAAsB,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EACtD,CAAC,eAAe,CAAC,CAClB,CAAC;IAEF,MAAM,aAAa,GAAG,EAAE,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,CAAC;IAE7E,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;QAC7B,OAAO;YACL,SAAS,gCACP,aAAa,IACV,aAAa,KAChB,YAAY,EAAE,EAAE,GACjB;YACD,0BAA0B;YAC1B,eAAe,EAAE,KAAK;SACvB,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO;YACL,SAAS,gCACP,aAAa,IACV,aAAa,GACb,oBAAoB,CAAC;gBACtB,eAAe;gBACf,eAAe;gBACf,eAAe;gBACf,IAAI,EAAE,cAAc;aACrB,CAAC,CACH;YACD,0BAA0B;YAC1B,eAAe,EAAE,aAAa,CAAC,MAAM,KAAK,CAAC;SAC5C,CAAC;IACJ,CAAC;IAED,OAAO;QACL,SAAS,gCACP,aAAa,IACV,aAAa,GACb,sBAAsB,CAAC;YACxB,eAAe;YACf,YAAY;YACZ,eAAe;YACf,eAAe;YACf,aAAa;YACb,eAAe;SAChB,CAAC,CACH;QACD,0BAA0B;QAC1B,eAAe,EAAE,aAAa,CAAC,MAAM,KAAK,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,gBAAgB,GAA4B;IAChD,SAAS,EAAE;QACT,aAAa,EAAE,MAAM;QACrB,YAAY,EAAE,EAAE;QAChB,qBAAqB,EAAE,EAAE;QACzB,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK;KAC3B;IACD,0BAA0B,EAAE,KAAK;IACjC,eAAe,EAAE,KAAK;CACvB,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export type { DataTableProps, DataTableCaptionProps, DataTableTheadProps, DataTableTbodyProps, DataTableTrProps, DataTableThProps, DataTableTdProps, DataTableTfootProps, } from "./root/DataTableRoot.js";
|
|
1
|
+
export { DataTable, type DataTableProps } from "./root/DataTableRoot.js";
|
package/esm/data/table/index.js
CHANGED
|
@@ -1,3 +1,23 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export {
|
|
2
|
+
/* export {
|
|
3
|
+
default as DataTable,
|
|
4
|
+
DataTableCaption,
|
|
5
|
+
DataTableThead,
|
|
6
|
+
DataTableTbody,
|
|
7
|
+
DataTableTr,
|
|
8
|
+
DataTableTh,
|
|
9
|
+
DataTableTd,
|
|
10
|
+
DataTableTfoot,
|
|
11
|
+
} from "./root/DataTableRoot.legacy.js";
|
|
12
|
+
export type {
|
|
13
|
+
DataTableProps,
|
|
14
|
+
DataTableCaptionProps,
|
|
15
|
+
DataTableTheadProps,
|
|
16
|
+
DataTableTbodyProps,
|
|
17
|
+
DataTableTrProps,
|
|
18
|
+
DataTableThProps,
|
|
19
|
+
DataTableTdProps,
|
|
20
|
+
DataTableTfootProps,
|
|
21
|
+
} from "./root/DataTableRoot.legacy.js"; */
|
|
22
|
+
export { DataTable } from "./root/DataTableRoot.js";
|
|
3
23
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/data/table/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/data/table/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb;;;;;;;;;;;;;;;;;;;wCAmBwC;AAExC,OAAO,EAAE,SAAS,EAAuB,MAAM,sBAAsB,CAAC"}
|
|
@@ -1,21 +1,19 @@
|
|
|
1
|
+
import type { ResizeProps } from "../column-header/useTableColumnResize.js";
|
|
1
2
|
type SortDirection = "asc" | "desc" | "none";
|
|
2
3
|
/**
|
|
3
4
|
* TODO:
|
|
4
5
|
* - Consider "accessorKey" or similar to allow simple column definitions without a cell function.
|
|
5
6
|
* - Add "align" property for better control over text alignment in cells.
|
|
6
7
|
*/
|
|
7
|
-
type ColumnDefinition<T
|
|
8
|
+
type ColumnDefinition<T, DetailsT = Record<string, any>> = Pick<ResizeProps, "resizable" | "width" | "defaultWidth" | "autoWidth" | "minWidth" | "maxWidth" | "onWidthChange"> & {
|
|
8
9
|
id: string;
|
|
9
|
-
width?: number | string;
|
|
10
|
-
defaultWidth?: number | string;
|
|
11
|
-
minWidth?: number | string;
|
|
12
|
-
maxWidth?: number | string;
|
|
13
10
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
11
|
+
* Text alignment for cells in this column.
|
|
12
|
+
*
|
|
13
|
+
*
|
|
14
|
+
* @default "left"
|
|
17
15
|
*/
|
|
18
|
-
|
|
16
|
+
align?: "left" | "right" | "center";
|
|
19
17
|
/**
|
|
20
18
|
* Assigned to the cell's `th` element instead of `td` if true.
|
|
21
19
|
*
|
|
@@ -42,8 +40,12 @@ type ColumnDefinition<T> = {
|
|
|
42
40
|
* Use `sort` and `onSortChange` on the root component to control sort state.
|
|
43
41
|
*/
|
|
44
42
|
sortable?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Additional metadata that can be used for filtering or other purposes. Not used by the table itself.
|
|
45
|
+
*/
|
|
46
|
+
details?: DetailsT;
|
|
45
47
|
};
|
|
46
|
-
type ColumnDefinitions<T
|
|
48
|
+
type ColumnDefinitions<T, DetailsT = Record<string, any>> = ColumnDefinition<T, DetailsT>[];
|
|
47
49
|
/**
|
|
48
50
|
* A single sort entry representing a column's current sort state.
|
|
49
51
|
* Absent from the `sort` array means the column is unsorted.
|
|
@@ -9,10 +9,14 @@ type DataTableContextProps<T> = {
|
|
|
9
9
|
tableId: string;
|
|
10
10
|
showLoadingSkeletons: boolean;
|
|
11
11
|
onRowClick?: (rowId: string | number, event: React.MouseEvent<HTMLTableRowElement>) => void;
|
|
12
|
-
disableRowSelectionOnClick: boolean;
|
|
13
12
|
isLoading?: boolean;
|
|
14
13
|
showLoadingOverlay: boolean;
|
|
15
14
|
columns: UseColumnOptionsResult<T>["columns"];
|
|
15
|
+
/**
|
|
16
|
+
* Used to set exact colspan for detailsPanel, loadingState and emptyState.
|
|
17
|
+
* This is necessary to ensure that these components span the entire width of the table.
|
|
18
|
+
*/
|
|
19
|
+
fullWidthColSpan: number;
|
|
16
20
|
};
|
|
17
21
|
declare const DataTableContextProvider: import("react").FC<DataTableContextProps<any> & {
|
|
18
22
|
children: React.ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTableRoot.context.js","sourceRoot":"","sources":["../../../../src/data/table/root/DataTableRoot.context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"DataTableRoot.context.js","sourceRoot":"","sources":["../../../../src/data/table/root/DataTableRoot.context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AA0B7D,MAAM,EAAE,QAAQ,EAAE,wBAAwB,EAAE,UAAU,EAAE,mBAAmB,EAAE,GAC3E,mBAAmB,CAA6B;IAC9C,IAAI,EAAE,kBAAkB;IACxB,YAAY,EAAE,mDAAmD;CAClE,CAAC,CAAC;AAIL,MAAM,EACJ,QAAQ,EAAE,yBAAyB,EACnC,UAAU,EAAE,oBAAoB,GACjC,GAAG,mBAAmB,CAAkC;IACvD,IAAI,EAAE,mBAAmB;IACzB,YAAY,EACV,mIAAmI;CACtI,CAAC,CAAC;AAEH,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACnB,oBAAoB,GACrB,CAAC"}
|
|
@@ -1,16 +1,12 @@
|
|
|
1
|
+
/** biome-ignore-all lint/correctness/useHookAtTopLevel: False positive because of the way forwardRef() is added */
|
|
1
2
|
import React from "react";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
3
|
+
import { type DetailsPanelProps } from "../hooks/useTableDetailsPanel.js";
|
|
4
|
+
import { type SubRowsProps } from "../hooks/useTableItems.js";
|
|
4
5
|
import { type SelectionProps } from "../hooks/useTableSelection.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
import { DataTableTh, type DataTableThProps } from "../th/DataTableTh.js";
|
|
10
|
-
import { DataTableThead, type DataTableTheadProps } from "../thead/DataTableThead.js";
|
|
11
|
-
import { DataTableTr, type DataTableTrProps } from "../tr/DataTableTr.js";
|
|
12
|
-
interface DataTableProps extends React.HTMLAttributes<HTMLTableElement>, SelectionProps {
|
|
13
|
-
children: React.ReactNode;
|
|
6
|
+
import { type TableSortOptions } from "../hooks/useTableSort.js";
|
|
7
|
+
import type { ColumnDefinitions } from "./DataTable.types.js";
|
|
8
|
+
interface DataTableProps<T> extends React.HTMLAttributes<HTMLTableElement>, TableSortOptions {
|
|
9
|
+
children?: never;
|
|
14
10
|
/**
|
|
15
11
|
* Controls vertical cell padding.
|
|
16
12
|
* @default "normal"
|
|
@@ -30,7 +26,7 @@ interface DataTableProps extends React.HTMLAttributes<HTMLTableElement>, Selecti
|
|
|
30
26
|
truncateContent?: boolean;
|
|
31
27
|
/**
|
|
32
28
|
* Enables keyboard navigation for table rows and cells.
|
|
33
|
-
* @default
|
|
29
|
+
* @default true
|
|
34
30
|
*/
|
|
35
31
|
withKeyboardNav?: boolean;
|
|
36
32
|
/**
|
|
@@ -54,124 +50,92 @@ interface DataTableProps extends React.HTMLAttributes<HTMLTableElement>, Selecti
|
|
|
54
50
|
* @default "fixed"
|
|
55
51
|
*/
|
|
56
52
|
layout?: "fixed" | "auto";
|
|
57
|
-
}
|
|
58
|
-
interface DataTableRootComponent extends React.ForwardRefExoticComponent<DataTableProps & React.RefAttributes<HTMLTableElement>> {
|
|
59
|
-
/**
|
|
60
|
-
* @see 🏷️ {@link DataTableCaptionProps}
|
|
61
|
-
* @example
|
|
62
|
-
* ```jsx
|
|
63
|
-
* <DataTable>
|
|
64
|
-
* <DataTable.Caption>
|
|
65
|
-
* Lorem ipsum
|
|
66
|
-
* </DataTable.Caption
|
|
67
|
-
* </DataTable>
|
|
68
|
-
* ```
|
|
69
|
-
*/
|
|
70
|
-
Caption: typeof DataTableCaption;
|
|
71
53
|
/**
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
* <DataTable.Thead>
|
|
77
|
-
* ... TODO
|
|
78
|
-
* </DataTable.Thead>
|
|
79
|
-
* </DataTable>
|
|
80
|
-
* ```
|
|
54
|
+
* Defines the columns of the table and how to render them.
|
|
55
|
+
*
|
|
56
|
+
*
|
|
57
|
+
* Each column definition should have a unique `id` (or use the column index as fallback) and a `cell`-renderer function that takes the row data as argument and returns a React node.
|
|
81
58
|
*/
|
|
82
|
-
|
|
59
|
+
columnDefinitions: ColumnDefinitions<T>;
|
|
83
60
|
/**
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
* <DataTable.Tbody>
|
|
89
|
-
* ... TODO
|
|
90
|
-
* </DataTable.Tbody>
|
|
91
|
-
* </DataTable>
|
|
92
|
-
* ```
|
|
61
|
+
* The data to display in the table.
|
|
62
|
+
*
|
|
63
|
+
*
|
|
64
|
+
* Each object in the array represents a row, and the properties of the object are used to render the cells based on the `columnDefinitions`.
|
|
93
65
|
*/
|
|
94
|
-
|
|
66
|
+
data: T[];
|
|
95
67
|
/**
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
* <DataTable.Tr>
|
|
101
|
-
* ... TODO
|
|
102
|
-
* </DataTable.Tr
|
|
103
|
-
* </DataTable>
|
|
104
|
-
* ```
|
|
68
|
+
* Function to get unique row id from row data.
|
|
69
|
+
*
|
|
70
|
+
*
|
|
71
|
+
* If not provided, the row index will be used as id. This can cause issues if your data changes dynamically, so it's recommended to provide a stable id if possible.
|
|
105
72
|
*/
|
|
106
|
-
|
|
73
|
+
getRowId?: (rowData: T, index: number) => string | number;
|
|
107
74
|
/**
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
* ```
|
|
75
|
+
* Sticky columns that remain visible when horizontally scrolling the table.
|
|
76
|
+
*
|
|
77
|
+
* You can specify 1 sticky column on the left and 1 on the right.
|
|
112
78
|
*/
|
|
113
|
-
|
|
79
|
+
stickyColumns?: {
|
|
80
|
+
first?: "1";
|
|
81
|
+
last?: "1";
|
|
82
|
+
};
|
|
114
83
|
/**
|
|
115
|
-
* @
|
|
116
|
-
* @example
|
|
117
|
-
* ```jsx
|
|
118
|
-
* <DataTable>
|
|
119
|
-
* <DataTable.Tbody>
|
|
120
|
-
* <DataTable.Td>
|
|
121
|
-
* Lorem ipsum
|
|
122
|
-
* </DataTable.Td>
|
|
123
|
-
* <DataTable.Td>
|
|
124
|
-
* Dolor sit amet
|
|
125
|
-
* </DataTable.Td>
|
|
126
|
-
* </DataTable.Tbody>
|
|
127
|
-
* </DataTable>
|
|
128
|
-
* ```
|
|
84
|
+
* @default true
|
|
129
85
|
*/
|
|
130
|
-
|
|
86
|
+
stickyHeader?: boolean;
|
|
131
87
|
/**
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
* ```jsx
|
|
135
|
-
* <DataTable>
|
|
136
|
-
* <DataTable.Tfoot>
|
|
137
|
-
* ...
|
|
138
|
-
* </DataTable.Tfoot>
|
|
139
|
-
* </DataTable>
|
|
140
|
-
* ```
|
|
88
|
+
* Callback invoked when a data row is clicked.
|
|
89
|
+
* Not called when clicking header, loading, or empty-state rows.
|
|
141
90
|
*/
|
|
142
|
-
|
|
91
|
+
onRowClick?: (rowId: string | number, event: React.MouseEvent<HTMLTableRowElement>) => void;
|
|
143
92
|
/**
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
* ```jsx
|
|
147
|
-
* <DataTable>
|
|
148
|
-
* <DataTable.TBody>
|
|
149
|
-
* <DataTable.EmptyState />
|
|
150
|
-
* </DataTable.TBody>
|
|
151
|
-
* </DataTable>
|
|
152
|
-
* ```
|
|
93
|
+
* Content to render when `data` is empty.
|
|
94
|
+
* Rendered inside a `DataTable.EmptyState` row spanning all columns.
|
|
153
95
|
*/
|
|
154
|
-
|
|
96
|
+
emptyState?: React.ReactNode;
|
|
97
|
+
loading?: {
|
|
98
|
+
/**
|
|
99
|
+
* Shows the table in a loading state.
|
|
100
|
+
*
|
|
101
|
+
* - When `loadingState` is provided, it is rendered inside a `DataTable.LoadingState` row.
|
|
102
|
+
* - When `loadingState` is **not** provided, skeleton placeholder rows are rendered instead.
|
|
103
|
+
* @default false
|
|
104
|
+
*/
|
|
105
|
+
isLoading?: boolean;
|
|
106
|
+
/**
|
|
107
|
+
* Custom content to render when `isLoading` is `true`.
|
|
108
|
+
* Rendered inside a `DataTable.LoadingState` row spanning all columns.
|
|
109
|
+
* When omitted, skeleton rows are rendered based on `loadingRows`.
|
|
110
|
+
*/
|
|
111
|
+
loadingState?: React.ReactNode;
|
|
112
|
+
/**
|
|
113
|
+
* Number of skeleton rows to render when `isLoading` is `true` and no `loadingState` is provided.
|
|
114
|
+
*
|
|
115
|
+
*
|
|
116
|
+
* If not provided, the rendered content will get a temporarily overlay while loading
|
|
117
|
+
*/
|
|
118
|
+
loadingRows?: number;
|
|
119
|
+
/**
|
|
120
|
+
* Visually hidden label announced to screen readers when skeleton rows are shown.
|
|
121
|
+
* Only used when `isLoading` is `true` and no `loadingState` is provided.
|
|
122
|
+
* @default "Laster innhold"
|
|
123
|
+
*/
|
|
124
|
+
loadingLabel?: string;
|
|
125
|
+
};
|
|
155
126
|
/**
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
* </DataTable.TBody>
|
|
163
|
-
* </DataTable>
|
|
164
|
-
* ```
|
|
127
|
+
* Function to get sub-rows for a given row, used for nested rows.
|
|
128
|
+
* When provided, an expand toggle column is added automatically.
|
|
129
|
+
*
|
|
130
|
+
*
|
|
131
|
+
* TODO:
|
|
132
|
+
* - Table might need to be implemented with role="treegrid" for a11y when having nested rows.
|
|
165
133
|
*/
|
|
166
|
-
|
|
134
|
+
selection?: SelectionProps;
|
|
135
|
+
subRows?: SubRowsProps<T>;
|
|
136
|
+
detailsPanel?: DetailsPanelProps<T>;
|
|
167
137
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
* **NB:** To get sticky headers, you have to set a height restriction on the table container. You can use VStack for this:
|
|
172
|
-
* TODO example
|
|
173
|
-
*/
|
|
174
|
-
declare const DataTable: DataTableRootComponent;
|
|
175
|
-
export { DataTable, DataTableCaption, DataTableEmptyState, DataTableLoadingState, DataTableTbody, DataTableTd, DataTableTfoot, DataTableTh, DataTableThead, DataTableTr, };
|
|
138
|
+
declare const DataTable: <T>(props: DataTableProps<T> & React.RefAttributes<HTMLTableElement>) => React.ReactElement | null;
|
|
139
|
+
export { DataTable };
|
|
140
|
+
export type { DataTableProps };
|
|
176
141
|
export default DataTable;
|
|
177
|
-
export type { DataTableCaptionProps, DataTableEmptyStateProps, DataTableLoadingStateProps, DataTableProps, DataTableTbodyProps, DataTableTdProps, DataTableTfootProps, DataTableTheadProps, DataTableThProps, DataTableTrProps, };
|
|
@@ -9,52 +9,189 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
9
9
|
}
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
|
-
|
|
12
|
+
/** biome-ignore-all lint/correctness/useHookAtTopLevel: False positive because of the way forwardRef() is added */
|
|
13
|
+
import React, { forwardRef, useCallback, useEffect, useMemo, useRef, useState, } from "react";
|
|
14
|
+
import { Skeleton } from "../../../skeleton/index.js";
|
|
13
15
|
import { useId } from "../../../utils-external/index.js";
|
|
16
|
+
import { Slot } from "../../../utils/components/slot/Slot.js";
|
|
14
17
|
import { cl } from "../../../utils/helpers/index.js";
|
|
15
18
|
import { useMergeRefs } from "../../../utils/hooks/index.js";
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
+
import { DataTableBaseCell } from "../base-cell/DataTableBaseCell.js";
|
|
20
|
+
import { DataTableColumnHeader } from "../column-header/DataTableColumnHeader.js";
|
|
21
|
+
import { DataTableDetailsPanelRow } from "../details-panel-row/DataTableDetailsPanelRow.js";
|
|
22
|
+
import { DataTableEmptyState } from "../empty-state/DataTableEmptyState.js";
|
|
23
|
+
import { useColumnOptions } from "../hooks/useColumnOptions.js";
|
|
24
|
+
import { DataTableDetailsPanelProvider, } from "../hooks/useTableDetailsPanel.js";
|
|
25
|
+
import { TableItemsProvider, useTableItems, useTableItemsContext, } from "../hooks/useTableItems.js";
|
|
19
26
|
import { useTableKeyboardNav } from "../hooks/useTableKeyboardNav.js";
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import { DataTableThead, } from "../thead/DataTableThead.js";
|
|
27
|
+
import { useTableSelection, } from "../hooks/useTableSelection.js";
|
|
28
|
+
import { useTableSort } from "../hooks/useTableSort.js";
|
|
29
|
+
import { DataTableLoadingState } from "../loading-state/DataTableLoadingState.js";
|
|
30
|
+
import { DataTableSubRowToggle } from "../sub-row-toggle/DataTableSubRowToggle.js";
|
|
31
|
+
import { DataTableTbody } from "../tbody/DataTableTbody.js";
|
|
32
|
+
import { DataTableThead } from "../thead/DataTableThead.js";
|
|
27
33
|
import { DataTableTr } from "../tr/DataTableTr.js";
|
|
28
|
-
import { DataTableContextProvider } from "./DataTableRoot.context.js";
|
|
29
|
-
|
|
34
|
+
import { DataTableContextProvider, useDataTableContext, } from "./DataTableRoot.context.js";
|
|
35
|
+
function DataTableInner(_a, forwardedRef) {
|
|
36
|
+
var { className, id, rowDensity = "normal", withKeyboardNav = true, zebraStripes = false, truncateContent = true, shouldBlockNavigation, layout = "fixed", selection, data, columnDefinitions, getRowId, stickyColumns, stickyHeader = true, sort: sortProp, defaultSort = [], onSortChange, onRowClick, emptyState, loading, detailsPanel, subRows } = _a, rest = __rest(_a, ["className", "id", "rowDensity", "withKeyboardNav", "zebraStripes", "truncateContent", "shouldBlockNavigation", "layout", "selection", "data", "columnDefinitions", "getRowId", "stickyColumns", "stickyHeader", "sort", "defaultSort", "onSortChange", "onRowClick", "emptyState", "loading", "detailsPanel", "subRows"]);
|
|
37
|
+
const { sortState, onSortClick } = useTableSort({
|
|
38
|
+
defaultSort,
|
|
39
|
+
onSortChange,
|
|
40
|
+
sort: sortProp,
|
|
41
|
+
});
|
|
42
|
+
/**
|
|
43
|
+
* TODO:
|
|
44
|
+
* - If user currently does not give a getRowsId function, and data is nested (getSubRows)
|
|
45
|
+
* we end up in an infinite loop since the index based ids repeat for children and causes chaos.
|
|
46
|
+
*/
|
|
47
|
+
const tableItems = useTableItems({
|
|
48
|
+
items: data,
|
|
49
|
+
getRowId: getRowId !== null && getRowId !== void 0 ? getRowId : ((_, index) => index),
|
|
50
|
+
subRows,
|
|
51
|
+
});
|
|
52
|
+
const tableSelectionState = useTableSelection({
|
|
53
|
+
selection,
|
|
54
|
+
visibleRowIds: tableItems.visibleRowIds,
|
|
55
|
+
childRowIdsById: tableItems.childRowIdsById,
|
|
56
|
+
});
|
|
57
|
+
const { columns, stickySelection } = useColumnOptions(columnDefinitions, {
|
|
58
|
+
stickyColumns,
|
|
59
|
+
selectionMode: tableSelectionState.selection.selectionMode,
|
|
60
|
+
});
|
|
61
|
+
const { isLoading = false, loadingState, loadingRows, loadingLabel = "Laster innhold", } = loading || {};
|
|
62
|
+
const fullWidthColSpan = useMemo(() => {
|
|
63
|
+
return (columns.length +
|
|
64
|
+
(layout === "fixed" ? 1 : 0) +
|
|
65
|
+
(tableSelectionState.selection.selectionMode !== "none" ? 1 : 0) +
|
|
66
|
+
((detailsPanel === null || detailsPanel === void 0 ? void 0 : detailsPanel.getContent) ? 1 : 0));
|
|
67
|
+
}, [
|
|
68
|
+
columns,
|
|
69
|
+
layout,
|
|
70
|
+
tableSelectionState.selection.selectionMode,
|
|
71
|
+
detailsPanel,
|
|
72
|
+
]);
|
|
73
|
+
const tableId = useId(id);
|
|
74
|
+
return (React.createElement(DataTableContextProvider, { layout: layout, withKeyboardNav: withKeyboardNav, selectionState: tableSelectionState, stickySelection: stickySelection, stickyHeader: stickyHeader, tableId: tableId, showLoadingSkeletons: isLoading && loadingState == null, onRowClick: onRowClick, isLoading: isLoading, showLoadingOverlay: isLoading && !loadingState && !loadingRows, columns: columns, fullWidthColSpan: fullWidthColSpan },
|
|
75
|
+
React.createElement(TableItemsProvider, { itemDetails: tableItems.itemDetails, items: tableItems.items, onExpandedRowIdsChange: tableItems.onExpandedRowIdsChange, isSubRowExpanded: tableItems.isSubRowExpanded },
|
|
76
|
+
React.createElement(DataTableDetailsPanelProvider, { detailsPanel: detailsPanel },
|
|
77
|
+
React.createElement(TableElementWrapper, { shouldBlockNavigation: shouldBlockNavigation, enabled: withKeyboardNav },
|
|
78
|
+
React.createElement("table", Object.assign({}, rest, { ref: forwardedRef, className: cl("aksel-data-table", className), "data-zebra-stripes": zebraStripes, "data-truncate-content": truncateContent, "data-density": rowDensity, "data-layout": layout, "data-loading": isLoading || undefined, "aria-busy": isLoading || undefined }),
|
|
79
|
+
React.createElement(DataTableThead, null,
|
|
80
|
+
React.createElement(DataTableTr, null, columns.map(({ isSticky, colDef }) => {
|
|
81
|
+
var _a, _b, _c;
|
|
82
|
+
const sortEntry = sortState.find((s) => s.columnId === colDef.id);
|
|
83
|
+
const sortDirection = (_a = sortEntry === null || sortEntry === void 0 ? void 0 : sortEntry.direction) !== null && _a !== void 0 ? _a : "none";
|
|
84
|
+
return (React.createElement(DataTableColumnHeader, { resizable: colDef.resizable, width: colDef.width, defaultWidth: colDef.defaultWidth, autoWidth: colDef.autoWidth, minWidth: colDef.minWidth, maxWidth: colDef.maxWidth, onWidthChange: colDef.onWidthChange, textAlign: (_b = colDef.align) !== null && _b !== void 0 ? _b : "left", key: colDef.id, isSticky: isSticky, sortable: colDef.sortable, sortDirection: sortDirection, onSortClick: (event) => onSortClick(colDef.id, event), label: colDef.label }, (_c = colDef.header) !== null && _c !== void 0 ? _c : colDef.label));
|
|
85
|
+
}))),
|
|
86
|
+
React.createElement(DataTableTbody, null,
|
|
87
|
+
React.createElement(DataTableTBodyContent, { loadingState: loadingState, loadingRows: loadingRows, loadingLabel: loadingLabel, emptyState: emptyState }))))))));
|
|
88
|
+
}
|
|
30
89
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* **NB:** To get sticky headers, you have to set a height restriction on the table container. You can use VStack for this:
|
|
34
|
-
* TODO example
|
|
90
|
+
* Temp optimization to avoid re-renders on every keyboard-move, selection change etc
|
|
35
91
|
*/
|
|
36
|
-
|
|
37
|
-
|
|
92
|
+
function TableElementWrapper({ children, enabled, shouldBlockNavigation, }) {
|
|
93
|
+
const [applyStickyStyles, setApplyStickyStyles] = useState(false);
|
|
94
|
+
const tableWrapperRef = useRef(null);
|
|
95
|
+
const tableRef = useRef(null);
|
|
96
|
+
const rafRef = useRef(null);
|
|
38
97
|
const { tabIndex, setTableRef } = useTableKeyboardNav({
|
|
39
|
-
enabled
|
|
98
|
+
enabled,
|
|
40
99
|
shouldBlockNavigation,
|
|
41
100
|
});
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
101
|
+
const mergedTableRefs = useMergeRefs(tableRef, setTableRef);
|
|
102
|
+
const updateStickyStyles = useCallback(() => {
|
|
103
|
+
if (!tableWrapperRef.current) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const doesWrapperHasScroll = tableWrapperRef.current.scrollWidth > tableWrapperRef.current.clientWidth;
|
|
107
|
+
setApplyStickyStyles(doesWrapperHasScroll);
|
|
108
|
+
}, []);
|
|
109
|
+
const scheduleStickyStylesUpdate = useCallback(() => {
|
|
110
|
+
if (rafRef.current !== null) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
rafRef.current = requestAnimationFrame(() => {
|
|
114
|
+
rafRef.current = null;
|
|
115
|
+
updateStickyStyles();
|
|
116
|
+
});
|
|
117
|
+
}, [updateStickyStyles]);
|
|
118
|
+
useEffect(() => {
|
|
119
|
+
const tableWrapperElement = tableWrapperRef.current;
|
|
120
|
+
if (!tableWrapperElement) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const handleResize = () => scheduleStickyStylesUpdate();
|
|
124
|
+
window.addEventListener("resize", handleResize);
|
|
125
|
+
let resizeObserver;
|
|
126
|
+
if (typeof ResizeObserver !== "undefined") {
|
|
127
|
+
resizeObserver = new ResizeObserver(handleResize);
|
|
128
|
+
resizeObserver.observe(tableWrapperElement);
|
|
129
|
+
if (tableRef.current) {
|
|
130
|
+
resizeObserver.observe(tableRef.current);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
scheduleStickyStylesUpdate();
|
|
134
|
+
return () => {
|
|
135
|
+
window.removeEventListener("resize", handleResize);
|
|
136
|
+
resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect();
|
|
137
|
+
if (rafRef.current !== null) {
|
|
138
|
+
cancelAnimationFrame(rafRef.current);
|
|
139
|
+
rafRef.current = null;
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
}, [scheduleStickyStylesUpdate]);
|
|
143
|
+
return (React.createElement("div", { className: "aksel-data-table__border-wrapper" },
|
|
144
|
+
React.createElement("div", { ref: tableWrapperRef, className: "aksel-data-table__scroll-wrapper" },
|
|
145
|
+
React.createElement(Slot, { tabIndex: tabIndex,
|
|
146
|
+
/* @ts-expect-error Ref is not typed correctly to handle this case */
|
|
147
|
+
ref: mergedTableRefs, "data-scroll": applyStickyStyles ? "true" : undefined }, children))));
|
|
148
|
+
}
|
|
149
|
+
function DataTableTBodyContent({ loadingState, loadingRows, loadingLabel, emptyState, }) {
|
|
150
|
+
const { items, itemDetails } = useTableItemsContext();
|
|
151
|
+
const { columns, isLoading, fullWidthColSpan } = useDataTableContext();
|
|
152
|
+
if (isLoading && loadingState != null) {
|
|
153
|
+
return (React.createElement(DataTableLoadingState, { colSpan: fullWidthColSpan }, loadingState));
|
|
154
|
+
}
|
|
155
|
+
if (isLoading && loadingRows) {
|
|
156
|
+
return (React.createElement(React.Fragment, null,
|
|
157
|
+
React.createElement("tr", null,
|
|
158
|
+
React.createElement("td", { colSpan: fullWidthColSpan, className: "aksel-sr-only" }, loadingLabel)),
|
|
159
|
+
Array.from({ length: loadingRows }, (_, rowIndex) => (React.createElement(DataTableTr, { key: `skeleton-row-${rowIndex}`, "aria-hidden": true }, columns.map(({ isSticky, colDef }, colDefIndex) => {
|
|
160
|
+
var _a;
|
|
161
|
+
return (React.createElement(DataTableBaseCell, { textAlign: (_a = colDef.align) !== null && _a !== void 0 ? _a : "left", key: colDef.id || colDefIndex, as: colDef.isRowHeader ? "th" : "td", isSticky: isSticky },
|
|
162
|
+
React.createElement(Skeleton, { variant: "text" })));
|
|
163
|
+
}))))));
|
|
164
|
+
}
|
|
165
|
+
if (items.length === 0 && emptyState !== undefined) {
|
|
166
|
+
return (React.createElement(DataTableEmptyState, { colSpan: fullWidthColSpan }, emptyState));
|
|
167
|
+
}
|
|
168
|
+
const renderLoadingAnnouncement = isLoading && !loadingState && !loadingRows;
|
|
169
|
+
return (React.createElement(React.Fragment, null,
|
|
170
|
+
renderLoadingAnnouncement && (React.createElement("tr", null,
|
|
171
|
+
React.createElement("td", { colSpan: fullWidthColSpan, className: "aksel-sr-only" }, loadingLabel))),
|
|
172
|
+
items.map((rowData) => {
|
|
173
|
+
const details = itemDetails.get(rowData);
|
|
174
|
+
/* Should in theory be impossible. Look about typing this? */
|
|
175
|
+
if (!details) {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
const hasSubRows = details.children.length > 0;
|
|
179
|
+
return (React.createElement(React.Fragment, { key: details.id },
|
|
180
|
+
React.createElement(DataTableTr, { rowId: details.id }, columns.map(({ isSticky, colDef }, colDefIndex) => {
|
|
181
|
+
var _a;
|
|
182
|
+
const renderNestedToggle = colDefIndex === 0 && hasSubRows;
|
|
183
|
+
const renderNestedIndent = colDefIndex === 0 && (details.level > 0 || hasSubRows);
|
|
184
|
+
const style = {
|
|
185
|
+
"--__axc-data-table-nested-depth": details.level,
|
|
186
|
+
};
|
|
187
|
+
return (React.createElement(DataTableBaseCell, { textAlign: (_a = colDef.align) !== null && _a !== void 0 ? _a : "left", key: colDef.id || colDefIndex, as: colDef.isRowHeader ? "th" : "td", isSticky: isSticky, "data-nested": renderNestedIndent || undefined, style: style },
|
|
188
|
+
renderNestedToggle && (React.createElement(DataTableSubRowToggle, { details: details })),
|
|
189
|
+
colDef.cell(rowData)));
|
|
190
|
+
})),
|
|
191
|
+
React.createElement(DataTableDetailsPanelRow, { rowId: details.id, rowData: rowData })));
|
|
192
|
+
})));
|
|
193
|
+
}
|
|
194
|
+
const DataTable = forwardRef(DataTableInner);
|
|
195
|
+
export { DataTable };
|
|
59
196
|
export default DataTable;
|
|
60
197
|
//# sourceMappingURL=DataTableRoot.js.map
|