@okta/odyssey-react-mui 1.14.3 → 1.14.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/CHANGELOG.md +4 -0
- package/dist/DataTable/DataTable.js +330 -0
- package/dist/DataTable/DataTable.js.map +1 -0
- package/dist/DataTable/DataTableRowActions.js +89 -0
- package/dist/DataTable/DataTableRowActions.js.map +1 -0
- package/dist/DataTable/DataTableSettings.js +72 -0
- package/dist/DataTable/DataTableSettings.js.map +1 -0
- package/dist/DataTable/constants.js +14 -0
- package/dist/DataTable/constants.js.map +1 -0
- package/dist/DataTable/index.js +14 -0
- package/dist/DataTable/index.js.map +1 -0
- package/dist/DataTable/reorderDataRowsLocally.js +26 -0
- package/dist/DataTable/reorderDataRowsLocally.js.map +1 -0
- package/dist/DataTable/useRowReordering.js +179 -0
- package/dist/DataTable/useRowReordering.js.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/labs/DataFilters.js +42 -14
- package/dist/labs/DataFilters.js.map +1 -1
- package/dist/labs/DataTable.js +16 -11
- package/dist/labs/DataTable.js.map +1 -1
- package/dist/labs/index.js +0 -1
- package/dist/labs/index.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui.js +18 -1
- package/dist/properties/ts/odyssey-react-mui.js.map +1 -1
- package/dist/src/DataTable/DataTable.d.ts +133 -0
- package/dist/src/DataTable/DataTable.d.ts.map +1 -0
- package/dist/src/DataTable/DataTableRowActions.d.ts +30 -0
- package/dist/src/DataTable/DataTableRowActions.d.ts.map +1 -0
- package/dist/src/DataTable/DataTableSettings.d.ts +27 -0
- package/dist/src/DataTable/DataTableSettings.d.ts.map +1 -0
- package/dist/src/DataTable/constants.d.ts +13 -0
- package/dist/src/DataTable/constants.d.ts.map +1 -0
- package/dist/src/DataTable/index.d.ts +15 -0
- package/dist/src/DataTable/index.d.ts.map +1 -0
- package/dist/src/DataTable/reorderDataRowsLocally.d.ts +26 -0
- package/dist/src/DataTable/reorderDataRowsLocally.d.ts.map +1 -0
- package/dist/src/DataTable/useRowReordering.d.ts +56 -0
- package/dist/src/DataTable/useRowReordering.d.ts.map +1 -0
- package/dist/src/OdysseyTranslationProvider.d.ts +1 -1
- package/dist/src/OdysseyTranslationProvider.d.ts.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/labs/DataFilters.d.ts.map +1 -1
- package/dist/src/labs/DataTable.d.ts +2 -2
- package/dist/src/labs/DataTable.d.ts.map +1 -1
- package/dist/src/labs/index.d.ts +0 -1
- package/dist/src/labs/index.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui.d.ts +18 -1
- package/dist/src/properties/ts/odyssey-react-mui.d.ts.map +1 -1
- package/dist/src/theme/components.d.ts.map +1 -1
- package/dist/theme/components.js +37 -18
- package/dist/theme/components.js.map +1 -1
- package/dist/tsconfig.production.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/src/DataTable/DataTable.tsx +538 -0
- package/src/DataTable/DataTableRowActions.tsx +124 -0
- package/src/DataTable/DataTableSettings.tsx +109 -0
- package/src/DataTable/constants.ts +13 -0
- package/src/DataTable/index.tsx +22 -0
- package/src/DataTable/reorderDataRowsLocally.tsx +48 -0
- package/src/DataTable/useRowReordering.tsx +233 -0
- package/src/index.ts +1 -0
- package/src/labs/DataFilters.tsx +60 -17
- package/src/labs/DataTable.tsx +24 -11
- package/src/labs/index.ts +0 -1
- package/src/properties/odyssey-react-mui.properties +19 -2
- package/src/properties/ts/odyssey-react-mui.ts +1 -1
- package/src/theme/components.tsx +43 -16
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [1.14.4](https://github.com/okta/odyssey/compare/v1.14.3...v1.14.4) (2024-03-01)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @okta/odyssey-react-mui
|
|
9
|
+
|
|
6
10
|
## [1.14.3](https://github.com/okta/odyssey/compare/v1.14.2...v1.14.3) (2024-02-29)
|
|
7
11
|
|
|
8
12
|
**Note:** Version bump only for package @okta/odyssey-react-mui
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.
|
|
3
|
+
* The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
|
|
4
|
+
*
|
|
5
|
+
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
|
|
6
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
7
|
+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
8
|
+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
+
*
|
|
10
|
+
* See the License for the specific language governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
14
|
+
import { MaterialReactTable, useMaterialReactTable } from "material-react-table";
|
|
15
|
+
import { ArrowDownIcon, ArrowUnsortedIcon, DragIndicatorIcon } from "../icons.generated/index.js";
|
|
16
|
+
import { densityValues } from "./constants.js";
|
|
17
|
+
import { DataTablePagination } from "../labs/DataTablePagination.js";
|
|
18
|
+
import { DataFilters } from "../labs/DataFilters.js";
|
|
19
|
+
import { DataTableRowActions } from "./DataTableRowActions.js";
|
|
20
|
+
import { useRowReordering } from "./useRowReordering.js";
|
|
21
|
+
import { DataTableSettings } from "./DataTableSettings.js";
|
|
22
|
+
import { Box } from "../Box.js";
|
|
23
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
24
|
+
const displayColumnDefOptions = {
|
|
25
|
+
"mrt-row-actions": {
|
|
26
|
+
header: "",
|
|
27
|
+
grow: true,
|
|
28
|
+
muiTableBodyCellProps: {
|
|
29
|
+
align: "right",
|
|
30
|
+
sx: {
|
|
31
|
+
overflow: "visible",
|
|
32
|
+
width: "unset"
|
|
33
|
+
},
|
|
34
|
+
className: "ods-actions-cell"
|
|
35
|
+
},
|
|
36
|
+
muiTableHeadCellProps: {
|
|
37
|
+
align: "right",
|
|
38
|
+
sx: {
|
|
39
|
+
width: "unset"
|
|
40
|
+
},
|
|
41
|
+
className: "ods-actions-cell"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"mrt-row-drag": {
|
|
45
|
+
header: "",
|
|
46
|
+
muiTableBodyCellProps: {
|
|
47
|
+
sx: {
|
|
48
|
+
minWidth: 0,
|
|
49
|
+
width: "auto"
|
|
50
|
+
},
|
|
51
|
+
className: "ods-drag-handle"
|
|
52
|
+
},
|
|
53
|
+
muiTableHeadCellProps: {
|
|
54
|
+
sx: {
|
|
55
|
+
minWidth: 0,
|
|
56
|
+
width: "auto"
|
|
57
|
+
},
|
|
58
|
+
children: _jsx(Box, {
|
|
59
|
+
sx: {
|
|
60
|
+
marginInline: "-0.1rem"
|
|
61
|
+
},
|
|
62
|
+
children: _jsx(DragIndicatorIcon, {
|
|
63
|
+
sx: {
|
|
64
|
+
marginInline: 1,
|
|
65
|
+
opacity: 0
|
|
66
|
+
}
|
|
67
|
+
})
|
|
68
|
+
})
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
"mrt-row-select": {
|
|
72
|
+
muiTableHeadCellProps: {
|
|
73
|
+
padding: "checkbox"
|
|
74
|
+
},
|
|
75
|
+
muiTableBodyCellProps: {
|
|
76
|
+
padding: "checkbox"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
const DataTable = ({
|
|
81
|
+
columns,
|
|
82
|
+
getRowId: getRowIdProp,
|
|
83
|
+
currentPage = 1,
|
|
84
|
+
initialDensity = densityValues[0],
|
|
85
|
+
resultsPerPage = 20,
|
|
86
|
+
getData,
|
|
87
|
+
onReorderRows,
|
|
88
|
+
totalRows,
|
|
89
|
+
hasSearchSubmitButton,
|
|
90
|
+
searchDelayTime,
|
|
91
|
+
paginationType = "paged",
|
|
92
|
+
onChangeRowSelection,
|
|
93
|
+
rowActionButtons,
|
|
94
|
+
rowActionMenuItems,
|
|
95
|
+
hasChangeableDensity,
|
|
96
|
+
hasColumnResizing,
|
|
97
|
+
hasColumnVisibility,
|
|
98
|
+
hasFilters,
|
|
99
|
+
hasPagination,
|
|
100
|
+
hasRowReordering,
|
|
101
|
+
hasRowSelection,
|
|
102
|
+
hasSearch,
|
|
103
|
+
hasSorting
|
|
104
|
+
}) => {
|
|
105
|
+
const [data, setData] = useState([]);
|
|
106
|
+
const [pagination, setPagination] = useState({
|
|
107
|
+
pageIndex: currentPage,
|
|
108
|
+
pageSize: resultsPerPage
|
|
109
|
+
});
|
|
110
|
+
const [draggingRow, setDraggingRow] = useState();
|
|
111
|
+
const [columnSorting, setColumnSorting] = useState([]);
|
|
112
|
+
const [columnVisibility, setColumnVisibility] = useState();
|
|
113
|
+
const [rowDensity, setRowDensity] = useState(initialDensity);
|
|
114
|
+
const [search, setSearch] = useState("");
|
|
115
|
+
const [filters, setFilters] = useState();
|
|
116
|
+
const {
|
|
117
|
+
dragHandleStyles,
|
|
118
|
+
dragHandleText,
|
|
119
|
+
draggableTableBodyRowClassName,
|
|
120
|
+
handleDragHandleKeyDown,
|
|
121
|
+
handleDragHandleOnDragCapture,
|
|
122
|
+
handleDragHandleOnDragEnd,
|
|
123
|
+
resetDraggingAndHoveredRow,
|
|
124
|
+
updateRowOrder
|
|
125
|
+
} = useRowReordering({
|
|
126
|
+
totalRows,
|
|
127
|
+
onReorderRows,
|
|
128
|
+
data,
|
|
129
|
+
setData,
|
|
130
|
+
draggingRow,
|
|
131
|
+
setDraggingRow,
|
|
132
|
+
resultsPerPage: pagination.pageSize,
|
|
133
|
+
page: pagination.pageIndex
|
|
134
|
+
});
|
|
135
|
+
const getRowId = getRowIdProp ? getRowIdProp : row => row.id;
|
|
136
|
+
const rowDensityCellClassName = useMemo(() => {
|
|
137
|
+
return rowDensity === "spacious" ? "MuiTableCell-spacious" : rowDensity === "compact" ? "MuiTableCell-compact" : "MuiTableCell-default";
|
|
138
|
+
}, [rowDensity]);
|
|
139
|
+
const renderRowActions = useCallback(({
|
|
140
|
+
row
|
|
141
|
+
}) => {
|
|
142
|
+
const currentIndex = row.index + (pagination.pageIndex - 1) * pagination.pageSize;
|
|
143
|
+
return _jsx(DataTableRowActions, {
|
|
144
|
+
row: row,
|
|
145
|
+
rowIndex: currentIndex,
|
|
146
|
+
rowActionButtons: rowActionButtons,
|
|
147
|
+
rowActionMenuItems: rowActionMenuItems,
|
|
148
|
+
totalRows: totalRows,
|
|
149
|
+
updateRowOrder: hasRowReordering && onReorderRows ? updateRowOrder : undefined
|
|
150
|
+
});
|
|
151
|
+
}, [pagination, rowActionButtons, rowActionMenuItems, hasRowReordering, onReorderRows, totalRows, updateRowOrder]);
|
|
152
|
+
const dataTableFilters = useMemo(() => columns.filter(column => column.enableColumnFilter !== false).map(column => {
|
|
153
|
+
return {
|
|
154
|
+
id: column.accessorKey,
|
|
155
|
+
label: column.header,
|
|
156
|
+
variant: column.filterVariant ?? "text",
|
|
157
|
+
options: column.filterSelectOptions
|
|
158
|
+
};
|
|
159
|
+
}), [columns]);
|
|
160
|
+
const defaultCell = useCallback(({
|
|
161
|
+
cell
|
|
162
|
+
}) => {
|
|
163
|
+
const value = cell.getValue();
|
|
164
|
+
return _jsx(Box, {
|
|
165
|
+
sx: {
|
|
166
|
+
whiteSpace: "nowrap",
|
|
167
|
+
textOverflow: "ellipsis",
|
|
168
|
+
overflow: "hidden"
|
|
169
|
+
},
|
|
170
|
+
children: value
|
|
171
|
+
});
|
|
172
|
+
}, []);
|
|
173
|
+
const dataTable = useMaterialReactTable({
|
|
174
|
+
columns: columns,
|
|
175
|
+
data: data,
|
|
176
|
+
getRowId: getRowId,
|
|
177
|
+
state: {
|
|
178
|
+
density: rowDensity,
|
|
179
|
+
sorting: columnSorting,
|
|
180
|
+
globalFilter: search,
|
|
181
|
+
columnVisibility
|
|
182
|
+
},
|
|
183
|
+
icons: {
|
|
184
|
+
ArrowDownwardIcon: ArrowDownIcon,
|
|
185
|
+
DragHandleIcon: DragIndicatorIcon,
|
|
186
|
+
SyncAltIcon: ArrowUnsortedIcon
|
|
187
|
+
},
|
|
188
|
+
enableColumnActions: false,
|
|
189
|
+
enableColumnResizing: hasColumnResizing,
|
|
190
|
+
enableDensityToggle: false,
|
|
191
|
+
enableFilters: false,
|
|
192
|
+
enableFullScreenToggle: false,
|
|
193
|
+
enableGlobalFilter: false,
|
|
194
|
+
enableHiding: false,
|
|
195
|
+
enablePagination: false,
|
|
196
|
+
layoutMode: "grid-no-grow",
|
|
197
|
+
manualFiltering: true,
|
|
198
|
+
manualSorting: true,
|
|
199
|
+
muiTablePaperProps: {
|
|
200
|
+
elevation: 0,
|
|
201
|
+
sx: {
|
|
202
|
+
overflow: "visible"
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
selectAllMode: "all",
|
|
206
|
+
displayColumnDefOptions: displayColumnDefOptions,
|
|
207
|
+
muiTableBodyCellProps: () => ({
|
|
208
|
+
className: rowDensityCellClassName
|
|
209
|
+
}),
|
|
210
|
+
defaultColumn: {
|
|
211
|
+
Cell: defaultCell
|
|
212
|
+
},
|
|
213
|
+
enableRowOrdering: hasRowReordering && Boolean(onReorderRows),
|
|
214
|
+
enableRowDragging: hasRowReordering && Boolean(onReorderRows),
|
|
215
|
+
muiTableBodyRowProps: ({
|
|
216
|
+
table,
|
|
217
|
+
row
|
|
218
|
+
}) => ({
|
|
219
|
+
className: draggableTableBodyRowClassName({
|
|
220
|
+
currentRowId: row.id,
|
|
221
|
+
draggingRowId: draggingRow?.id,
|
|
222
|
+
hoveredRowId: table.getState().hoveredRow?.id
|
|
223
|
+
})
|
|
224
|
+
}),
|
|
225
|
+
muiRowDragHandleProps: ({
|
|
226
|
+
table,
|
|
227
|
+
row
|
|
228
|
+
}) => ({
|
|
229
|
+
onKeyDown: event => handleDragHandleKeyDown({
|
|
230
|
+
table,
|
|
231
|
+
row,
|
|
232
|
+
event
|
|
233
|
+
}),
|
|
234
|
+
onBlur: () => resetDraggingAndHoveredRow(table),
|
|
235
|
+
onDragEnd: () => handleDragHandleOnDragEnd(table),
|
|
236
|
+
onDragCapture: () => handleDragHandleOnDragCapture(table),
|
|
237
|
+
sx: dragHandleStyles,
|
|
238
|
+
...dragHandleText
|
|
239
|
+
}),
|
|
240
|
+
enableRowActions: hasRowReordering === true && onReorderRows || rowActionButtons || rowActionMenuItems ? true : false,
|
|
241
|
+
positionActionsColumn: "last",
|
|
242
|
+
renderRowActions: ({
|
|
243
|
+
row
|
|
244
|
+
}) => renderRowActions({
|
|
245
|
+
row
|
|
246
|
+
}),
|
|
247
|
+
enableRowSelection: hasRowSelection,
|
|
248
|
+
enableSorting: hasSorting,
|
|
249
|
+
onSortingChange: setColumnSorting,
|
|
250
|
+
muiTableHeadCellProps: ({
|
|
251
|
+
column: currentColumn
|
|
252
|
+
}) => ({
|
|
253
|
+
className: columnSorting.find(sortedColumn => sortedColumn.id === currentColumn.id) ? "isSorted" : "isUnsorted"
|
|
254
|
+
}),
|
|
255
|
+
enableRowVirtualization: paginationType === "loadMore" || pagination.pageSize > 50,
|
|
256
|
+
rowVirtualizerInstanceRef: useRef(null),
|
|
257
|
+
rowVirtualizerOptions: {
|
|
258
|
+
overscan: 4
|
|
259
|
+
},
|
|
260
|
+
renderTopToolbar: () => _jsx(Box, {
|
|
261
|
+
sx: {
|
|
262
|
+
marginBottom: 5
|
|
263
|
+
},
|
|
264
|
+
children: _jsx(DataFilters, {
|
|
265
|
+
onChangeSearch: hasSearch ? setSearch : undefined,
|
|
266
|
+
onChangeFilters: hasFilters ? setFilters : undefined,
|
|
267
|
+
hasSearchSubmitButton: hasSearchSubmitButton,
|
|
268
|
+
searchDelayTime: searchDelayTime,
|
|
269
|
+
filters: hasFilters ? dataTableFilters : undefined,
|
|
270
|
+
additionalActions: _jsx(DataTableSettings, {
|
|
271
|
+
hasChangeableDensity: hasChangeableDensity,
|
|
272
|
+
rowDensity: rowDensity,
|
|
273
|
+
setRowDensity: setRowDensity,
|
|
274
|
+
hasColumnVisibility: hasColumnVisibility,
|
|
275
|
+
columns: columns,
|
|
276
|
+
columnVisibility: columnVisibility,
|
|
277
|
+
setColumnVisibility: setColumnVisibility
|
|
278
|
+
})
|
|
279
|
+
})
|
|
280
|
+
}),
|
|
281
|
+
renderBottomToolbar: hasPagination ? () => _jsx(DataTablePagination, {
|
|
282
|
+
paginationType: paginationType,
|
|
283
|
+
currentNumberOfResults: data.length,
|
|
284
|
+
currentPage: pagination.pageIndex,
|
|
285
|
+
isPreviousButtonDisabled: pagination.pageIndex <= 1,
|
|
286
|
+
isNextButtonDisabled: false,
|
|
287
|
+
onClickPrevious: () => setPagination({
|
|
288
|
+
pageIndex: pagination.pageIndex - 1,
|
|
289
|
+
pageSize: pagination.pageSize
|
|
290
|
+
}),
|
|
291
|
+
onClickNext: () => {
|
|
292
|
+
if (paginationType === "loadMore") {
|
|
293
|
+
setPagination({
|
|
294
|
+
pageSize: pagination.pageSize,
|
|
295
|
+
pageIndex: pagination.pageSize + resultsPerPage
|
|
296
|
+
});
|
|
297
|
+
} else {
|
|
298
|
+
setPagination({
|
|
299
|
+
pageSize: pagination.pageSize,
|
|
300
|
+
pageIndex: pagination.pageIndex + 1
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}) : undefined
|
|
305
|
+
});
|
|
306
|
+
useEffect(() => {
|
|
307
|
+
onChangeRowSelection?.(dataTable.getState().rowSelection);
|
|
308
|
+
}, [dataTable.getState().rowSelection, dataTable, onChangeRowSelection]);
|
|
309
|
+
useEffect(() => {
|
|
310
|
+
(async () => {
|
|
311
|
+
try {
|
|
312
|
+
const incomingData = await getData?.({
|
|
313
|
+
page: pagination.pageIndex,
|
|
314
|
+
resultsPerPage: pagination.pageSize,
|
|
315
|
+
search,
|
|
316
|
+
filters,
|
|
317
|
+
sort: columnSorting
|
|
318
|
+
});
|
|
319
|
+
setData(incomingData);
|
|
320
|
+
} catch (error) {} finally {}
|
|
321
|
+
})();
|
|
322
|
+
}, [pagination, columnSorting, search, filters, getData]);
|
|
323
|
+
return _jsx(MaterialReactTable, {
|
|
324
|
+
table: dataTable
|
|
325
|
+
});
|
|
326
|
+
};
|
|
327
|
+
const MemoizedDataTable = memo(DataTable);
|
|
328
|
+
MemoizedDataTable.displayName = "DataTable";
|
|
329
|
+
export { MemoizedDataTable as DataTable };
|
|
330
|
+
//# sourceMappingURL=DataTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataTable.js","names":["memo","useCallback","useEffect","useMemo","useRef","useState","MaterialReactTable","useMaterialReactTable","ArrowDownIcon","ArrowUnsortedIcon","DragIndicatorIcon","densityValues","DataTablePagination","DataFilters","DataTableRowActions","useRowReordering","DataTableSettings","Box","jsx","_jsx","displayColumnDefOptions","header","grow","muiTableBodyCellProps","align","sx","overflow","width","className","muiTableHeadCellProps","minWidth","children","marginInline","opacity","padding","DataTable","columns","getRowId","getRowIdProp","currentPage","initialDensity","resultsPerPage","getData","onReorderRows","totalRows","hasSearchSubmitButton","searchDelayTime","paginationType","onChangeRowSelection","rowActionButtons","rowActionMenuItems","hasChangeableDensity","hasColumnResizing","hasColumnVisibility","hasFilters","hasPagination","hasRowReordering","hasRowSelection","hasSearch","hasSorting","data","setData","pagination","setPagination","pageIndex","pageSize","draggingRow","setDraggingRow","columnSorting","setColumnSorting","columnVisibility","setColumnVisibility","rowDensity","setRowDensity","search","setSearch","filters","setFilters","dragHandleStyles","dragHandleText","draggableTableBodyRowClassName","handleDragHandleKeyDown","handleDragHandleOnDragCapture","handleDragHandleOnDragEnd","resetDraggingAndHoveredRow","updateRowOrder","page","row","id","rowDensityCellClassName","renderRowActions","currentIndex","index","rowIndex","undefined","dataTableFilters","filter","column","enableColumnFilter","map","accessorKey","label","variant","filterVariant","options","filterSelectOptions","defaultCell","cell","value","getValue","whiteSpace","textOverflow","dataTable","state","density","sorting","globalFilter","icons","ArrowDownwardIcon","DragHandleIcon","SyncAltIcon","enableColumnActions","enableColumnResizing","enableDensityToggle","enableFilters","enableFullScreenToggle","enableGlobalFilter","enableHiding","enablePagination","layoutMode","manualFiltering","manualSorting","muiTablePaperProps","elevation","selectAllMode","defaultColumn","Cell","enableRowOrdering","Boolean","enableRowDragging","muiTableBodyRowProps","table","currentRowId","draggingRowId","hoveredRowId","getState","hoveredRow","muiRowDragHandleProps","onKeyDown","event","onBlur","onDragEnd","onDragCapture","enableRowActions","positionActionsColumn","enableRowSelection","enableSorting","onSortingChange","currentColumn","find","sortedColumn","enableRowVirtualization","rowVirtualizerInstanceRef","rowVirtualizerOptions","overscan","renderTopToolbar","marginBottom","onChangeSearch","onChangeFilters","additionalActions","renderBottomToolbar","currentNumberOfResults","length","isPreviousButtonDisabled","isNextButtonDisabled","onClickPrevious","onClickNext","rowSelection","incomingData","sort","error","MemoizedDataTable","displayName"],"sources":["../../src/DataTable/DataTable.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { memo, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n MRT_Cell,\n MRT_DensityState,\n MRT_Row,\n MRT_RowData,\n MRT_SortingState,\n MRT_TableOptions,\n MRT_Virtualizer,\n MRT_VisibilityState,\n MaterialReactTable,\n useMaterialReactTable,\n} from \"material-react-table\";\nimport {\n ArrowDownIcon,\n ArrowUnsortedIcon,\n DragIndicatorIcon,\n} from \"../icons.generated\";\nimport { densityValues } from \"./constants\";\nimport {\n DataTablePagination,\n paginationTypeValues,\n} from \"../labs/DataTablePagination\";\nimport { DataFilter, DataFilters } from \"../labs/DataFilters\";\nimport {\n DataTableRowActions,\n DataTableRowActionsProps,\n} from \"./DataTableRowActions\";\nimport { useRowReordering } from \"./useRowReordering\";\nimport { DataTableSettings } from \"./DataTableSettings\";\nimport { Box } from \"../Box\";\nimport { DataTableRowSelectionState } from \".\";\n\nexport type DataTableProps = {\n /**\n * The columns that make up the table\n */\n columns: MRT_TableOptions<MRT_RowData>[\"columns\"];\n /**\n * The total number of rows in the table. Optional, because it's sometimes impossible\n * to calculate. Used in table pagination to know when to disable the \"next\"/\"more\" button.\n */\n totalRows?: number;\n /**\n * The function to get the ID of a row\n */\n getRowId?: MRT_TableOptions<MRT_RowData>[\"getRowId\"];\n /**\n * The initial density of the table. This is available even if the table density\n * isn't changeable.\n */\n initialDensity?: (typeof densityValues)[number];\n /**\n * If true, the end user will be able to change the table density.\n */\n hasChangeableDensity?: boolean;\n /**\n * If true, the end user can resize individual columns.\n */\n hasColumnResizing?: boolean;\n /**\n * If true, the end user will be able to show/hide columns.\n */\n hasColumnVisibility?: boolean;\n /**\n * If true, the end user will be able to filter columns.\n */\n hasFilters?: boolean;\n /**\n * If true, the table will include pagination controls.\n */\n hasPagination?: boolean;\n /**\n * If true, the table will include checkboxes on each row, enabling\n * the user to select some or all rows.\n */\n hasRowSelection?: boolean;\n /**\n * If true, the global table search controls will be shown.\n */\n hasSearch?: boolean;\n /**\n * If true, the end user can sort columns (ascending, descending, or neither)\n */\n hasSorting?: boolean;\n /**\n * If true, the end user can reorder rows via a drag-and-drop interface\n */\n hasRowReordering?: boolean;\n /**\n * If true, the search field will include a Search button, rather than\n * firing on input change.\n */\n hasSearchSubmitButton?: boolean;\n /**\n * The debounce time, in milliseconds, for the search input firing\n * `onChangeSearch` when changed. If `hasSearchSubmitButton` is true,\n * this doesn't do anything.\n */\n searchDelayTime?: number;\n /**\n * Callback that fires when a row (or rows) is selected or unselected.\n */\n onChangeRowSelection?: (rowSelection: DataTableRowSelectionState) => void;\n /**\n * Callback that fires whenever the table needs to fetch new data, due to changes in\n * page, results per page, search input, filters, or sorting\n */\n getData: ({\n page,\n resultsPerPage,\n search,\n filters,\n sort,\n }: {\n page?: number;\n resultsPerPage?: number;\n search?: string;\n filters?: DataFilter[];\n sort?: MRT_SortingState;\n }) =>\n | MRT_TableOptions<MRT_RowData>[\"data\"]\n | Promise<MRT_TableOptions<MRT_RowData>[\"data\"]>;\n /**\n * Callback that fires when the user reorders rows within the table. Can be used\n * to propogate order change to the backend.\n */\n onReorderRows?: ({\n rowId,\n newRowIndex,\n }: {\n rowId: string;\n newRowIndex: number;\n }) => void;\n /**\n * The current page number.\n */\n currentPage?: number;\n /**\n * The number of results per page.\n */\n resultsPerPage?: number;\n /**\n * The type of pagination controls shown. Defaults to next/prev buttons, but can be\n * set to a simple \"Load more\" button by setting to \"loadMore\".\n */\n paginationType?: (typeof paginationTypeValues)[number];\n /**\n * Action buttons to display in each row\n */\n rowActionButtons?: DataTableRowActionsProps[\"rowActionButtons\"];\n /**\n * Menu items to include in the optional actions menu on each row.\n */\n rowActionMenuItems?: DataTableRowActionsProps[\"rowActionMenuItems\"];\n};\n\nconst displayColumnDefOptions = {\n \"mrt-row-actions\": {\n header: \"\",\n grow: true,\n muiTableBodyCellProps: {\n align: \"right\",\n sx: {\n overflow: \"visible\",\n width: \"unset\",\n },\n className: \"ods-actions-cell\",\n },\n muiTableHeadCellProps: {\n align: \"right\",\n sx: {\n width: \"unset\",\n },\n className: \"ods-actions-cell\",\n },\n },\n \"mrt-row-drag\": {\n header: \"\",\n muiTableBodyCellProps: {\n sx: {\n minWidth: 0,\n width: \"auto\",\n },\n className: \"ods-drag-handle\",\n },\n muiTableHeadCellProps: {\n sx: {\n minWidth: 0,\n width: \"auto\",\n },\n children: (\n // Add a spacer to simulate the width of the drag handle in the column.\n // Without this, the head cells are offset from their body cell counterparts\n <Box sx={{ marginInline: \"-0.1rem\" }}>\n <DragIndicatorIcon sx={{ marginInline: 1, opacity: 0 }} />\n </Box>\n ),\n },\n },\n \"mrt-row-select\": {\n muiTableHeadCellProps: {\n padding: \"checkbox\",\n },\n muiTableBodyCellProps: {\n padding: \"checkbox\",\n },\n },\n};\n\nconst DataTable = ({\n columns,\n getRowId: getRowIdProp,\n currentPage = 1,\n initialDensity = densityValues[0],\n resultsPerPage = 20,\n getData,\n onReorderRows,\n totalRows,\n hasSearchSubmitButton,\n searchDelayTime,\n paginationType = \"paged\",\n onChangeRowSelection,\n rowActionButtons,\n rowActionMenuItems,\n hasChangeableDensity,\n hasColumnResizing,\n hasColumnVisibility,\n hasFilters,\n hasPagination,\n hasRowReordering,\n hasRowSelection,\n hasSearch,\n hasSorting,\n}: DataTableProps) => {\n const [data, setData] = useState<MRT_RowData[]>([]);\n const [pagination, setPagination] = useState({\n pageIndex: currentPage,\n pageSize: resultsPerPage,\n });\n const [draggingRow, setDraggingRow] = useState<MRT_Row<MRT_RowData> | null>();\n\n // Table states\n const [columnSorting, setColumnSorting] = useState<MRT_SortingState>([]);\n const [columnVisibility, setColumnVisibility] =\n useState<MRT_VisibilityState>();\n const [rowDensity, setRowDensity] =\n useState<MRT_DensityState>(initialDensity);\n const [search, setSearch] = useState<string>(\"\");\n const [filters, setFilters] = useState<DataFilter[]>();\n\n const {\n dragHandleStyles,\n dragHandleText,\n draggableTableBodyRowClassName,\n handleDragHandleKeyDown,\n handleDragHandleOnDragCapture,\n handleDragHandleOnDragEnd,\n resetDraggingAndHoveredRow,\n updateRowOrder,\n } = useRowReordering({\n totalRows,\n onReorderRows,\n data,\n setData,\n draggingRow,\n setDraggingRow,\n resultsPerPage: pagination.pageSize,\n page: pagination.pageIndex,\n });\n\n const getRowId = getRowIdProp ? getRowIdProp : (row: MRT_RowData) => row.id;\n\n const rowDensityCellClassName = useMemo(() => {\n return rowDensity === \"spacious\"\n ? \"MuiTableCell-spacious\"\n : rowDensity === \"compact\"\n ? \"MuiTableCell-compact\"\n : \"MuiTableCell-default\";\n }, [rowDensity]);\n\n const renderRowActions = useCallback(\n ({ row }: { row: MRT_Row<MRT_RowData> }) => {\n const currentIndex =\n row.index + (pagination.pageIndex - 1) * pagination.pageSize;\n return (\n <DataTableRowActions\n row={row}\n rowIndex={currentIndex}\n rowActionButtons={rowActionButtons}\n rowActionMenuItems={rowActionMenuItems}\n totalRows={totalRows}\n updateRowOrder={\n hasRowReordering && onReorderRows ? updateRowOrder : undefined\n }\n />\n );\n },\n [\n pagination,\n rowActionButtons,\n rowActionMenuItems,\n hasRowReordering,\n onReorderRows,\n totalRows,\n updateRowOrder,\n ],\n );\n\n const dataTableFilters = useMemo(\n () =>\n columns\n .filter((column) => column.enableColumnFilter !== false)\n .map((column) => {\n return {\n id: column.accessorKey as string,\n label: column.header,\n variant: column.filterVariant ?? \"text\",\n options: column.filterSelectOptions,\n } as DataFilter;\n }),\n [columns],\n );\n\n const defaultCell = useCallback(\n ({ cell }: { cell: MRT_Cell<MRT_RowData> }) => {\n const value = cell.getValue<string>();\n return (\n <Box\n sx={{\n whiteSpace: \"nowrap\",\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n }}\n >\n {value}\n </Box>\n );\n },\n [],\n );\n\n const dataTable = useMaterialReactTable({\n columns: columns,\n data: data,\n getRowId: getRowId,\n state: {\n density: rowDensity,\n sorting: columnSorting,\n globalFilter: search,\n columnVisibility,\n },\n icons: {\n ArrowDownwardIcon: ArrowDownIcon,\n DragHandleIcon: DragIndicatorIcon,\n SyncAltIcon: ArrowUnsortedIcon,\n },\n\n // Base table settings\n enableColumnActions: false,\n enableColumnResizing: hasColumnResizing,\n enableDensityToggle: false,\n enableFilters: false,\n enableFullScreenToggle: false,\n enableGlobalFilter: false,\n enableHiding: false,\n enablePagination: false,\n layoutMode: \"grid-no-grow\",\n manualFiltering: true,\n manualSorting: true,\n muiTablePaperProps: {\n elevation: 0,\n sx: {\n overflow: \"visible\",\n },\n },\n selectAllMode: \"all\",\n displayColumnDefOptions:\n displayColumnDefOptions as MRT_TableOptions<MRT_RowData>[\"displayColumnDefOptions\"],\n muiTableBodyCellProps: () => ({\n className: rowDensityCellClassName,\n }),\n defaultColumn: {\n Cell: defaultCell,\n },\n\n // Reordering\n enableRowOrdering: hasRowReordering && Boolean(onReorderRows),\n enableRowDragging: hasRowReordering && Boolean(onReorderRows),\n muiTableBodyRowProps: ({ table, row }) => ({\n className: draggableTableBodyRowClassName({\n currentRowId: row.id,\n draggingRowId: draggingRow?.id,\n hoveredRowId: table.getState().hoveredRow?.id,\n }),\n }),\n muiRowDragHandleProps: ({ table, row }) => ({\n onKeyDown: (event) => handleDragHandleKeyDown({ table, row, event }),\n onBlur: () => resetDraggingAndHoveredRow(table),\n onDragEnd: () => handleDragHandleOnDragEnd(table),\n onDragCapture: () => handleDragHandleOnDragCapture(table),\n sx: dragHandleStyles,\n ...dragHandleText,\n }),\n\n // Row actions\n enableRowActions:\n (hasRowReordering === true && onReorderRows) ||\n rowActionButtons ||\n rowActionMenuItems\n ? true\n : false,\n positionActionsColumn:\n \"last\" as MRT_TableOptions<MRT_RowData>[\"positionActionsColumn\"],\n renderRowActions: ({ row }) => renderRowActions({ row }),\n\n // Row selection\n enableRowSelection: hasRowSelection,\n\n // Sorting\n enableSorting: hasSorting,\n onSortingChange: setColumnSorting,\n muiTableHeadCellProps: ({ column: currentColumn }) => ({\n className: columnSorting.find(\n (sortedColumn) => sortedColumn.id === currentColumn.id,\n )\n ? \"isSorted\"\n : \"isUnsorted\",\n }),\n\n // Virtualization\n enableRowVirtualization:\n paginationType === \"loadMore\" || pagination.pageSize > 50,\n rowVirtualizerInstanceRef:\n useRef<MRT_Virtualizer<HTMLDivElement, HTMLTableRowElement>>(null),\n rowVirtualizerOptions: {\n overscan: 4,\n },\n\n // Filters\n renderTopToolbar: () => (\n <Box sx={{ marginBottom: 5 }}>\n <DataFilters\n onChangeSearch={hasSearch ? setSearch : undefined}\n onChangeFilters={hasFilters ? setFilters : undefined}\n hasSearchSubmitButton={hasSearchSubmitButton}\n searchDelayTime={searchDelayTime}\n filters={hasFilters ? dataTableFilters : undefined}\n additionalActions={\n <DataTableSettings\n hasChangeableDensity={hasChangeableDensity}\n rowDensity={rowDensity}\n setRowDensity={setRowDensity}\n hasColumnVisibility={hasColumnVisibility}\n columns={columns}\n columnVisibility={columnVisibility}\n setColumnVisibility={setColumnVisibility}\n />\n }\n />\n </Box>\n ),\n\n // Pagination\n renderBottomToolbar: hasPagination\n ? () => (\n <DataTablePagination\n paginationType={paginationType}\n currentNumberOfResults={data.length}\n currentPage={pagination.pageIndex}\n isPreviousButtonDisabled={pagination.pageIndex <= 1}\n isNextButtonDisabled={false} // TODO: Add logic for disabling next/load more button\n onClickPrevious={() =>\n setPagination({\n pageIndex: pagination.pageIndex - 1,\n pageSize: pagination.pageSize,\n })\n }\n onClickNext={() => {\n if (paginationType === \"loadMore\") {\n setPagination({\n pageSize: pagination.pageSize,\n pageIndex: pagination.pageSize + resultsPerPage,\n });\n } else {\n setPagination({\n pageSize: pagination.pageSize,\n pageIndex: pagination.pageIndex + 1,\n });\n }\n }}\n />\n )\n : undefined,\n });\n\n // Effects\n useEffect(() => {\n onChangeRowSelection?.(dataTable.getState().rowSelection);\n }, [dataTable.getState().rowSelection, dataTable, onChangeRowSelection]);\n\n useEffect(() => {\n (async () => {\n try {\n const incomingData = await getData?.({\n page: pagination.pageIndex,\n resultsPerPage: pagination.pageSize,\n search,\n filters,\n sort: columnSorting,\n });\n setData(incomingData);\n } catch (error) {\n } finally {\n }\n })();\n }, [pagination, columnSorting, search, filters, getData]);\n\n // Render the table\n return <MaterialReactTable table={dataTable} />;\n};\n\nconst MemoizedDataTable = memo(DataTable);\nMemoizedDataTable.displayName = \"DataTable\";\n\nexport { MemoizedDataTable as DataTable };\n"],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import _Box from "@mui/material/Box";
|
|
2
|
+
/*!
|
|
3
|
+
* Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.
|
|
4
|
+
* The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
|
|
5
|
+
*
|
|
6
|
+
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
8
|
+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
9
|
+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
10
|
+
*
|
|
11
|
+
* See the License for the specific language governing permissions and limitations under the License.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { memo } from "react";
|
|
15
|
+
import { MenuItem } from "../MenuItem.js";
|
|
16
|
+
import { MenuButton } from "../MenuButton.js";
|
|
17
|
+
import { ArrowBottomIcon, ArrowDownIcon, ArrowTopIcon, ArrowUpIcon, MoreIcon } from "../icons.generated/index.js";
|
|
18
|
+
import { Trans, useTranslation } from "react-i18next";
|
|
19
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
20
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
21
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
22
|
+
const DataTableRowActions = ({
|
|
23
|
+
row,
|
|
24
|
+
rowIndex,
|
|
25
|
+
rowActionButtons,
|
|
26
|
+
rowActionMenuItems,
|
|
27
|
+
totalRows,
|
|
28
|
+
updateRowOrder
|
|
29
|
+
}) => {
|
|
30
|
+
const {
|
|
31
|
+
t
|
|
32
|
+
} = useTranslation();
|
|
33
|
+
return _jsxs(_Box, {
|
|
34
|
+
display: "flex",
|
|
35
|
+
children: [rowActionButtons?.(row), (rowActionMenuItems || updateRowOrder) && _jsxs(MenuButton, {
|
|
36
|
+
endIcon: _jsx(MoreIcon, {}),
|
|
37
|
+
size: "small",
|
|
38
|
+
buttonVariant: "floating",
|
|
39
|
+
ariaLabel: t("table.moreactions.arialabel"),
|
|
40
|
+
menuAlignment: "right",
|
|
41
|
+
children: [rowActionMenuItems && _jsx(_Fragment, {
|
|
42
|
+
children: rowActionMenuItems(row)
|
|
43
|
+
}), rowActionMenuItems && updateRowOrder && _jsx("hr", {}), updateRowOrder && _jsxs(_Fragment, {
|
|
44
|
+
children: [_jsxs(MenuItem, {
|
|
45
|
+
isDisabled: rowIndex <= 0,
|
|
46
|
+
onClick: () => updateRowOrder({
|
|
47
|
+
rowId: row.id,
|
|
48
|
+
newRowIndex: 0
|
|
49
|
+
}),
|
|
50
|
+
children: [_jsx(ArrowTopIcon, {}), " ", _jsx(Trans, {
|
|
51
|
+
i18nKey: "table.reorder.tofront"
|
|
52
|
+
})]
|
|
53
|
+
}), _jsxs(MenuItem, {
|
|
54
|
+
isDisabled: rowIndex <= 0,
|
|
55
|
+
onClick: () => updateRowOrder({
|
|
56
|
+
rowId: row.id,
|
|
57
|
+
newRowIndex: rowIndex <= 0 ? 0 : rowIndex - 1
|
|
58
|
+
}),
|
|
59
|
+
children: [_jsx(ArrowUpIcon, {}), " ", _jsx(Trans, {
|
|
60
|
+
i18nKey: "table.reorder.forward"
|
|
61
|
+
})]
|
|
62
|
+
}), _jsxs(MenuItem, {
|
|
63
|
+
isDisabled: totalRows ? rowIndex >= totalRows - 1 : false,
|
|
64
|
+
onClick: () => updateRowOrder({
|
|
65
|
+
rowId: row.id,
|
|
66
|
+
newRowIndex: rowIndex + 1
|
|
67
|
+
}),
|
|
68
|
+
children: [_jsx(ArrowDownIcon, {}), " ", _jsx(Trans, {
|
|
69
|
+
i18nKey: "table.reorder.backward"
|
|
70
|
+
})]
|
|
71
|
+
}), _jsx(_Fragment, {
|
|
72
|
+
children: totalRows && _jsxs(MenuItem, {
|
|
73
|
+
isDisabled: rowIndex >= totalRows - 1,
|
|
74
|
+
onClick: () => updateRowOrder({
|
|
75
|
+
rowId: row.id,
|
|
76
|
+
newRowIndex: totalRows
|
|
77
|
+
}),
|
|
78
|
+
children: [_jsx(ArrowBottomIcon, {}), " ", _jsx(Trans, {
|
|
79
|
+
i18nKey: "table.reorder.toback"
|
|
80
|
+
})]
|
|
81
|
+
})
|
|
82
|
+
})]
|
|
83
|
+
})]
|
|
84
|
+
})]
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
const MemoizedDataTableRowActions = memo(DataTableRowActions);
|
|
88
|
+
export { MemoizedDataTableRowActions as DataTableRowActions };
|
|
89
|
+
//# sourceMappingURL=DataTableRowActions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataTableRowActions.js","names":["memo","MenuItem","MenuButton","ArrowBottomIcon","ArrowDownIcon","ArrowTopIcon","ArrowUpIcon","MoreIcon","Trans","useTranslation","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DataTableRowActions","row","rowIndex","rowActionButtons","rowActionMenuItems","totalRows","updateRowOrder","t","_Box","display","children","endIcon","size","buttonVariant","ariaLabel","menuAlignment","isDisabled","onClick","rowId","id","newRowIndex","i18nKey","MemoizedDataTableRowActions"],"sources":["../../src/DataTable/DataTableRowActions.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { MRT_Row, MRT_RowData } from \"material-react-table\";\nimport { Fragment, ReactElement, memo } from \"react\";\nimport { Button } from \"../Button\";\nimport { MenuItem } from \"../MenuItem\";\nimport { Box as MuiBox } from \"@mui/material\";\nimport { MenuButton, MenuButtonProps } from \"../MenuButton\";\nimport {\n ArrowBottomIcon,\n ArrowDownIcon,\n ArrowTopIcon,\n ArrowUpIcon,\n MoreIcon,\n} from \"../icons.generated\";\nimport { DataTableProps } from \"./DataTable\";\nimport { Trans, useTranslation } from \"react-i18next\";\n\nexport type DataTableRowActionsProps = {\n row: MRT_Row<MRT_RowData>;\n rowIndex: number;\n rowActionButtons?: (\n row: MRT_RowData,\n ) => ReactElement<typeof Button | typeof Fragment>;\n rowActionMenuItems?: (row: MRT_RowData) => MenuButtonProps[\"children\"];\n totalRows?: DataTableProps[\"totalRows\"];\n updateRowOrder?: ({\n rowId,\n newRowIndex,\n }: {\n rowId: string;\n newRowIndex: number;\n }) => void;\n};\n\nconst DataTableRowActions = ({\n row,\n rowIndex,\n rowActionButtons,\n rowActionMenuItems,\n totalRows,\n updateRowOrder,\n}: DataTableRowActionsProps) => {\n const { t } = useTranslation();\n return (\n <MuiBox display=\"flex\">\n {rowActionButtons?.(row)}\n {(rowActionMenuItems || updateRowOrder) && (\n <MenuButton\n endIcon={<MoreIcon />}\n size=\"small\"\n buttonVariant=\"floating\"\n ariaLabel={t(\"table.moreactions.arialabel\")}\n menuAlignment=\"right\"\n >\n {rowActionMenuItems && <>{rowActionMenuItems(row)}</>}\n {rowActionMenuItems && updateRowOrder && <hr />}\n {updateRowOrder && (\n <>\n <MenuItem\n isDisabled={rowIndex <= 0}\n onClick={() =>\n updateRowOrder({ rowId: row.id, newRowIndex: 0 })\n }\n >\n <ArrowTopIcon /> <Trans i18nKey=\"table.reorder.tofront\" />\n </MenuItem>\n <MenuItem\n isDisabled={rowIndex <= 0}\n onClick={() =>\n updateRowOrder({\n rowId: row.id,\n newRowIndex: rowIndex <= 0 ? 0 : rowIndex - 1,\n })\n }\n >\n <ArrowUpIcon /> <Trans i18nKey=\"table.reorder.forward\" />\n </MenuItem>\n <MenuItem\n isDisabled={totalRows ? rowIndex >= totalRows - 1 : false}\n onClick={() =>\n updateRowOrder({\n rowId: row.id,\n newRowIndex: rowIndex + 1,\n })\n }\n >\n <ArrowDownIcon /> <Trans i18nKey=\"table.reorder.backward\" />\n </MenuItem>\n <>\n {totalRows && (\n <MenuItem\n isDisabled={rowIndex >= totalRows - 1}\n onClick={() =>\n updateRowOrder({\n rowId: row.id,\n newRowIndex: totalRows,\n })\n }\n >\n <ArrowBottomIcon /> <Trans i18nKey=\"table.reorder.toback\" />\n </MenuItem>\n )}\n </>\n </>\n )}\n </MenuButton>\n )}\n </MuiBox>\n );\n};\n\nconst MemoizedDataTableRowActions = memo(DataTableRowActions);\nexport { MemoizedDataTableRowActions as DataTableRowActions };\n"],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import _Checkbox from "@mui/material/Checkbox";
|
|
2
|
+
/*!
|
|
3
|
+
* Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.
|
|
4
|
+
* The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
|
|
5
|
+
*
|
|
6
|
+
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
8
|
+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
9
|
+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
10
|
+
*
|
|
11
|
+
* See the License for the specific language governing permissions and limitations under the License.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { memo } from "react";
|
|
15
|
+
import { MenuButton } from "../MenuButton.js";
|
|
16
|
+
import { MenuItem } from "../MenuItem.js";
|
|
17
|
+
import { ListIcon, ShowIcon } from "../icons.generated/index.js";
|
|
18
|
+
import { densityValues } from "./constants.js";
|
|
19
|
+
import { useTranslation } from "react-i18next";
|
|
20
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
21
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
22
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
23
|
+
const DataTableSettings = ({
|
|
24
|
+
hasChangeableDensity,
|
|
25
|
+
rowDensity,
|
|
26
|
+
setRowDensity,
|
|
27
|
+
hasColumnVisibility,
|
|
28
|
+
columns,
|
|
29
|
+
columnVisibility,
|
|
30
|
+
setColumnVisibility
|
|
31
|
+
}) => {
|
|
32
|
+
const {
|
|
33
|
+
t
|
|
34
|
+
} = useTranslation();
|
|
35
|
+
return _jsxs(_Fragment, {
|
|
36
|
+
children: [hasChangeableDensity && _jsx(MenuButton, {
|
|
37
|
+
endIcon: _jsx(ListIcon, {}),
|
|
38
|
+
ariaLabel: t("table.density.arialabel"),
|
|
39
|
+
menuAlignment: "right",
|
|
40
|
+
shouldCloseOnSelect: false,
|
|
41
|
+
children: _jsx(_Fragment, {
|
|
42
|
+
children: densityValues.map(value => _jsx(MenuItem, {
|
|
43
|
+
isSelected: rowDensity === value,
|
|
44
|
+
onClick: () => setRowDensity(value),
|
|
45
|
+
children: `${value.charAt(0).toUpperCase()}${value.slice(1)}`
|
|
46
|
+
}, value))
|
|
47
|
+
})
|
|
48
|
+
}), hasColumnVisibility && _jsx(MenuButton, {
|
|
49
|
+
endIcon: _jsx(ShowIcon, {}),
|
|
50
|
+
ariaLabel: t("table.columnvisibility.arialabel"),
|
|
51
|
+
menuAlignment: "right",
|
|
52
|
+
shouldCloseOnSelect: false,
|
|
53
|
+
children: _jsx(_Fragment, {
|
|
54
|
+
children: columns.filter(column => column.enableHiding !== false).map(column => _jsxs(MenuItem, {
|
|
55
|
+
onClick: () => {
|
|
56
|
+
const columnId = column.id;
|
|
57
|
+
setColumnVisibility(prevVisibility => ({
|
|
58
|
+
...prevVisibility,
|
|
59
|
+
[columnId]: prevVisibility ? prevVisibility[columnId] === false : false
|
|
60
|
+
}));
|
|
61
|
+
},
|
|
62
|
+
children: [_jsx(_Checkbox, {
|
|
63
|
+
checked: columnVisibility ? columnVisibility[column.accessorKey] !== false : true
|
|
64
|
+
}), column.header]
|
|
65
|
+
}, column.accessorKey))
|
|
66
|
+
})
|
|
67
|
+
})]
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
const MemoizedDataTableSettings = memo(DataTableSettings);
|
|
71
|
+
export { MemoizedDataTableSettings as DataTableSettings };
|
|
72
|
+
//# sourceMappingURL=DataTableSettings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataTableSettings.js","names":["memo","MenuButton","MenuItem","ListIcon","ShowIcon","densityValues","useTranslation","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DataTableSettings","hasChangeableDensity","rowDensity","setRowDensity","hasColumnVisibility","columns","columnVisibility","setColumnVisibility","t","children","endIcon","ariaLabel","menuAlignment","shouldCloseOnSelect","map","value","isSelected","onClick","charAt","toUpperCase","slice","filter","column","enableHiding","columnId","id","prevVisibility","_Checkbox","checked","accessorKey","header","MemoizedDataTableSettings"],"sources":["../../src/DataTable/DataTableSettings.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { Dispatch, SetStateAction, memo } from \"react\";\nimport { Checkbox as MuiCheckbox } from \"@mui/material\";\nimport { MenuButton } from \"../MenuButton\";\nimport { MenuItem } from \"../MenuItem\";\nimport { ListIcon, ShowIcon } from \"../icons.generated\";\nimport { densityValues } from \"./constants\";\nimport { DataTableProps } from \"./DataTable\";\nimport { MRT_VisibilityState } from \"material-react-table\";\nimport { useTranslation } from \"react-i18next\";\n\nexport type DataTableSettingsProps = {\n hasChangeableDensity: DataTableProps[\"hasChangeableDensity\"];\n rowDensity: (typeof densityValues)[number];\n setRowDensity: Dispatch<SetStateAction<(typeof densityValues)[number]>>;\n hasColumnVisibility: DataTableProps[\"hasColumnVisibility\"];\n columns: DataTableProps[\"columns\"];\n columnVisibility?: MRT_VisibilityState;\n setColumnVisibility: Dispatch<\n SetStateAction<MRT_VisibilityState | undefined>\n >;\n};\n\nconst DataTableSettings = ({\n hasChangeableDensity,\n rowDensity,\n setRowDensity,\n hasColumnVisibility,\n columns,\n columnVisibility,\n setColumnVisibility,\n}: DataTableSettingsProps) => {\n const { t } = useTranslation();\n return (\n <>\n {hasChangeableDensity && (\n <MenuButton\n endIcon={<ListIcon />}\n ariaLabel={t(\"table.density.arialabel\")}\n menuAlignment=\"right\"\n shouldCloseOnSelect={false}\n >\n <>\n {densityValues.map((value: (typeof densityValues)[number]) => (\n <MenuItem\n key={value}\n isSelected={rowDensity === value}\n onClick={() => setRowDensity(value)}\n >\n {`${value.charAt(0).toUpperCase()}${value.slice(1)}`}\n </MenuItem>\n ))}\n </>\n </MenuButton>\n )}\n\n {hasColumnVisibility && (\n <MenuButton\n endIcon={<ShowIcon />}\n ariaLabel={t(\"table.columnvisibility.arialabel\")}\n menuAlignment=\"right\"\n shouldCloseOnSelect={false}\n >\n <>\n {columns\n .filter((column) => column.enableHiding !== false)\n .map((column) => (\n <MenuItem\n key={column.accessorKey}\n onClick={() => {\n const columnId = column.id as string;\n setColumnVisibility((prevVisibility) => ({\n ...prevVisibility,\n [columnId]: prevVisibility\n ? prevVisibility[columnId] === false\n : false,\n }));\n }}\n >\n <MuiCheckbox\n checked={\n columnVisibility\n ? columnVisibility[column.accessorKey as string] !==\n false\n : true\n }\n />\n {column.header}\n </MenuItem>\n ))}\n </>\n </MenuButton>\n )}\n </>\n );\n};\nconst MemoizedDataTableSettings = memo(DataTableSettings);\nexport { MemoizedDataTableSettings as DataTableSettings };\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAmCA,IAAI,QAAQ,OAAO;AAAC,SAE9CC,UAAU;AAAA,SACVC,QAAQ;AAAA,SACRC,QAAQ,EAAEC,QAAQ;AAAA,SAClBC,aAAa;AAGtB,SAASC,cAAc,QAAQ,eAAe;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,QAAA,IAAAC,SAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAc/C,MAAMC,iBAAiB,GAAGA,CAAC;EACzBC,oBAAoB;EACpBC,UAAU;EACVC,aAAa;EACbC,mBAAmB;EACnBC,OAAO;EACPC,gBAAgB;EAChBC;AACsB,CAAC,KAAK;EAC5B,MAAM;IAAEC;EAAE,CAAC,GAAGf,cAAc,CAAC,CAAC;EAC9B,OACEM,KAAA,CAAAF,SAAA;IAAAY,QAAA,GACGR,oBAAoB,IACnBN,IAAA,CAACP,UAAU;MACTsB,OAAO,EAAEf,IAAA,CAACL,QAAQ,IAAE,CAAE;MACtBqB,SAAS,EAAEH,CAAC,CAAC,yBAAyB,CAAE;MACxCI,aAAa,EAAC,OAAO;MACrBC,mBAAmB,EAAE,KAAM;MAAAJ,QAAA,EAE3Bd,IAAA,CAAAE,SAAA;QAAAY,QAAA,EACGjB,aAAa,CAACsB,GAAG,CAAEC,KAAqC,IACvDpB,IAAA,CAACN,QAAQ;UAEP2B,UAAU,EAAEd,UAAU,KAAKa,KAAM;UACjCE,OAAO,EAAEA,CAAA,KAAMd,aAAa,CAACY,KAAK,CAAE;UAAAN,QAAA,EAElC,GAAEM,KAAK,CAACG,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAE,GAAEJ,KAAK,CAACK,KAAK,CAAC,CAAC,CAAE;QAAC,GAJ/CL,KAKG,CACX;MAAC,CACF;IAAC,CACO,CACb,EAEAX,mBAAmB,IAClBT,IAAA,CAACP,UAAU;MACTsB,OAAO,EAAEf,IAAA,CAACJ,QAAQ,IAAE,CAAE;MACtBoB,SAAS,EAAEH,CAAC,CAAC,kCAAkC,CAAE;MACjDI,aAAa,EAAC,OAAO;MACrBC,mBAAmB,EAAE,KAAM;MAAAJ,QAAA,EAE3Bd,IAAA,CAAAE,SAAA;QAAAY,QAAA,EACGJ,OAAO,CACLgB,MAAM,CAAEC,MAAM,IAAKA,MAAM,CAACC,YAAY,KAAK,KAAK,CAAC,CACjDT,GAAG,CAAEQ,MAAM,IACVvB,KAAA,CAACV,QAAQ;UAEP4B,OAAO,EAAEA,CAAA,KAAM;YACb,MAAMO,QAAQ,GAAGF,MAAM,CAACG,EAAY;YACpClB,mBAAmB,CAAEmB,cAAc,KAAM;cACvC,GAAGA,cAAc;cACjB,CAACF,QAAQ,GAAGE,cAAc,GACtBA,cAAc,CAACF,QAAQ,CAAC,KAAK,KAAK,GAClC;YACN,CAAC,CAAC,CAAC;UACL,CAAE;UAAAf,QAAA,GAEFd,IAAA,CAAAgC,SAAA;YACEC,OAAO,EACLtB,gBAAgB,GACZA,gBAAgB,CAACgB,MAAM,CAACO,WAAW,CAAW,KAC9C,KAAK,GACL;UACL,CACF,CAAC,EACDP,MAAM,CAACQ,MAAM;QAAA,GAnBTR,MAAM,CAACO,WAoBJ,CACX;MAAC,CACJ;IAAC,CACO,CACb;EAAA,CACD,CAAC;AAEP,CAAC;AACD,MAAME,yBAAyB,GAAG5C,IAAI,CAACa,iBAAiB,CAAC;AACzD,SAAS+B,yBAAyB,IAAI/B,iBAAiB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.
|
|
3
|
+
* The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
|
|
4
|
+
*
|
|
5
|
+
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
|
|
6
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
7
|
+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
8
|
+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
+
*
|
|
10
|
+
* See the License for the specific language governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
export const densityValues = ["comfortable", "spacious", "compact"];
|
|
14
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","names":["densityValues"],"sources":["../../src/DataTable/constants.ts"],"sourcesContent":["/*!\n * Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nexport const densityValues = [\"comfortable\", \"spacious\", \"compact\"] as const;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,MAAMA,aAAa,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,SAAS,CAAU"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.
|
|
3
|
+
* The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
|
|
4
|
+
*
|
|
5
|
+
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
|
|
6
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
7
|
+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
8
|
+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
+
*
|
|
10
|
+
* See the License for the specific language governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
export { DataTable } from "./DataTable.js";
|
|
13
|
+
export { densityValues } from "./constants.js";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["DataTable","densityValues"],"sources":["../../src/DataTable/index.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nexport { DataTable, type DataTableProps } from \"./DataTable\";\nexport { densityValues } from \"./constants\";\nexport type {\n MRT_ColumnFiltersState as DataTableFiltersState,\n MRT_SortingState as DataTableSortingState,\n MRT_RowSelectionState as DataTableRowSelectionState,\n MRT_ColumnDef as DataTableColumn,\n MRT_RowData as DataTableRowData,\n MRT_Row as DataTableRow,\n} from \"material-react-table\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAVA,SAYSA,SAAS;AAAA,SACTC,aAAa"}
|