@mailstep/design-system 0.4.21 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +17 -4
- package/ui/Blocks/CommonGrid/CommonGrid.d.ts +3 -0
- package/ui/Blocks/CommonGrid/CommonGrid.js +115 -0
- package/ui/Blocks/CommonGrid/CommonGridContext.d.ts +12 -0
- package/ui/Blocks/CommonGrid/CommonGridContext.js +45 -0
- package/ui/Blocks/CommonGrid/HoC/withReduxActions.d.ts +2 -0
- package/ui/Blocks/CommonGrid/HoC/withReduxActions.js +36 -0
- package/ui/Blocks/CommonGrid/components/ActionColumnHead.d.ts +4 -0
- package/ui/Blocks/CommonGrid/components/ActionColumnHead.js +16 -0
- package/ui/Blocks/CommonGrid/components/ButtonStrip.d.ts +7 -0
- package/ui/Blocks/CommonGrid/components/ButtonStrip.js +35 -0
- package/ui/Blocks/CommonGrid/components/ColumnFilterCell.d.ts +11 -0
- package/ui/Blocks/CommonGrid/components/ColumnFilterCell.js +41 -0
- package/ui/Blocks/CommonGrid/components/ColumnTitle.d.ts +9 -0
- package/ui/Blocks/CommonGrid/components/ColumnTitle.js +20 -0
- package/ui/Blocks/CommonGrid/components/ConfigForm.d.ts +9 -0
- package/ui/Blocks/CommonGrid/components/ConfigForm.js +58 -0
- package/ui/Blocks/CommonGrid/components/DataCell.d.ts +11 -0
- package/ui/Blocks/CommonGrid/components/DataCell.js +52 -0
- package/ui/Blocks/CommonGrid/components/DataRow.d.ts +21 -0
- package/ui/Blocks/CommonGrid/components/DataRow.js +110 -0
- package/ui/Blocks/CommonGrid/components/DefaultPaginator.d.ts +3 -0
- package/ui/Blocks/CommonGrid/components/DefaultPaginator.js +11 -0
- package/ui/Blocks/CommonGrid/components/Dialog.d.ts +11 -0
- package/ui/Blocks/CommonGrid/components/Dialog.js +19 -0
- package/ui/Blocks/CommonGrid/components/DropdownMenu.d.ts +21 -0
- package/ui/Blocks/CommonGrid/components/DropdownMenu.js +59 -0
- package/ui/Blocks/CommonGrid/components/DropdownSelect.d.ts +15 -0
- package/ui/Blocks/CommonGrid/components/DropdownSelect.js +35 -0
- package/ui/Blocks/CommonGrid/components/FilterDropdown.d.ts +3 -0
- package/ui/Blocks/CommonGrid/components/FilterDropdown.js +36 -0
- package/ui/Blocks/CommonGrid/components/FilterRow.d.ts +15 -0
- package/ui/Blocks/CommonGrid/components/FilterRow.js +35 -0
- package/ui/Blocks/CommonGrid/components/FloatingButton.d.ts +6 -0
- package/ui/Blocks/CommonGrid/components/FloatingButton.js +13 -0
- package/ui/Blocks/CommonGrid/components/GroupRow.d.ts +9 -0
- package/ui/Blocks/CommonGrid/components/GroupRow.js +27 -0
- package/ui/Blocks/CommonGrid/components/HeadCell.d.ts +27 -0
- package/ui/Blocks/CommonGrid/components/HeadCell.js +43 -0
- package/ui/Blocks/CommonGrid/components/HeadRow.d.ts +15 -0
- package/ui/Blocks/CommonGrid/components/HeadRow.js +69 -0
- package/ui/Blocks/CommonGrid/components/OversizedScroll.d.ts +11 -0
- package/ui/Blocks/CommonGrid/components/OversizedScroll.js +24 -0
- package/ui/Blocks/CommonGrid/components/Resize.d.ts +7 -0
- package/ui/Blocks/CommonGrid/components/Resize.js +33 -0
- package/ui/Blocks/CommonGrid/components/Table.d.ts +16 -0
- package/ui/Blocks/CommonGrid/components/Table.js +30 -0
- package/ui/Blocks/CommonGrid/components/icons/ArrowSimple.d.ts +2 -0
- package/ui/Blocks/CommonGrid/components/icons/ArrowSimple.js +14 -0
- package/ui/Blocks/CommonGrid/components/icons/Edit.d.ts +2 -0
- package/ui/Blocks/CommonGrid/components/icons/Edit.js +14 -0
- package/ui/Blocks/CommonGrid/components/icons/EyeOpen.d.ts +2 -0
- package/ui/Blocks/CommonGrid/components/icons/EyeOpen.js +14 -0
- package/ui/Blocks/CommonGrid/components/icons/Sorting.d.ts +2 -0
- package/ui/Blocks/CommonGrid/components/icons/Sorting.js +14 -0
- package/ui/Blocks/CommonGrid/components/utils.d.ts +8 -0
- package/ui/Blocks/CommonGrid/components/utils.js +22 -0
- package/ui/Blocks/CommonGrid/hooks/useColumnSizes.d.ts +12 -0
- package/ui/Blocks/CommonGrid/hooks/useColumnSizes.js +83 -0
- package/ui/Blocks/CommonGrid/hooks/useControlButtons.d.ts +10 -0
- package/ui/Blocks/CommonGrid/hooks/useControlButtons.js +64 -0
- package/ui/Blocks/CommonGrid/hooks/useRowsKeyControls.d.ts +4 -0
- package/ui/Blocks/CommonGrid/hooks/useRowsKeyControls.js +21 -0
- package/ui/Blocks/CommonGrid/hooks/useUxReset.d.ts +3 -0
- package/ui/Blocks/CommonGrid/hooks/useUxReset.js +15 -0
- package/ui/Blocks/CommonGrid/index.d.ts +7 -0
- package/ui/Blocks/CommonGrid/index.js +7 -0
- package/ui/Blocks/CommonGrid/store/index.d.ts +58 -0
- package/ui/Blocks/CommonGrid/store/index.js +230 -0
- package/ui/Blocks/CommonGrid/store/migrateState.d.ts +3 -0
- package/ui/Blocks/CommonGrid/store/migrateState.js +14 -0
- package/ui/Blocks/CommonGrid/storybook/stories/complexWithPaginationAndRedux.stories.d.ts +11 -0
- package/ui/Blocks/CommonGrid/storybook/stories/complexWithPaginationAndRedux.stories.js +31 -0
- package/ui/Blocks/CommonGrid/storybook/stories/customControllButtons.stories.d.ts +13 -0
- package/ui/Blocks/CommonGrid/storybook/stories/customControllButtons.stories.js +49 -0
- package/ui/Blocks/CommonGrid/storybook/stories/default.stories.d.ts +6 -0
- package/ui/Blocks/CommonGrid/storybook/stories/default.stories.js +14 -0
- package/ui/Blocks/CommonGrid/storybook/stories/loading.stories.d.ts +10 -0
- package/ui/Blocks/CommonGrid/storybook/stories/loading.stories.js +11 -0
- package/ui/Blocks/CommonGrid/storybook/stories/manyColumnsNoScrollLayout.stories.d.ts +10 -0
- package/ui/Blocks/CommonGrid/storybook/stories/manyColumnsNoScrollLayout.stories.js +12 -0
- package/ui/Blocks/CommonGrid/storybook/stories/manyColumnsNormalLayout.stories.d.ts +10 -0
- package/ui/Blocks/CommonGrid/storybook/stories/manyColumnsNormalLayout.stories.js +12 -0
- package/ui/Blocks/CommonGrid/storybook/stories/styledCommonGrid.stories.d.ts +6 -0
- package/ui/Blocks/CommonGrid/storybook/stories/styledCommonGrid.stories.js +15 -0
- package/ui/Blocks/CommonGrid/storybook/stories/withCustomGridActions.stories.d.ts +10 -0
- package/ui/Blocks/CommonGrid/storybook/stories/withCustomGridActions.stories.js +15 -0
- package/ui/Blocks/CommonGrid/storybook/stories/withForcedCheckboxes.stories.d.ts +14 -0
- package/ui/Blocks/CommonGrid/storybook/stories/withForcedCheckboxes.stories.js +24 -0
- package/ui/Blocks/CommonGrid/storybook/utils/actions.d.ts +4 -0
- package/ui/Blocks/CommonGrid/storybook/utils/actions.js +6 -0
- package/ui/Blocks/CommonGrid/storybook/utils/columnDefinition.d.ts +10 -0
- package/ui/Blocks/CommonGrid/storybook/utils/columnDefinition.js +97 -0
- package/ui/Blocks/CommonGrid/storybook/utils/filters.d.ts +2 -0
- package/ui/Blocks/CommonGrid/storybook/utils/filters.js +23 -0
- package/ui/Blocks/CommonGrid/storybook/utils/utils.d.ts +17 -0
- package/ui/Blocks/CommonGrid/storybook/utils/utils.js +66 -0
- package/ui/Blocks/CommonGrid/storybook/utils/withRedux.d.ts +2 -0
- package/ui/Blocks/CommonGrid/storybook/utils/withRedux.js +12 -0
- package/ui/Blocks/CommonGrid/storybook/utils/withRouter.d.ts +2 -0
- package/ui/Blocks/CommonGrid/storybook/utils/withRouter.js +4 -0
- package/ui/Blocks/CommonGrid/storybook/utils/withTheme.d.ts +2 -0
- package/ui/Blocks/CommonGrid/storybook/utils/withTheme.js +18 -0
- package/ui/Blocks/CommonGrid/types.d.ts +299 -0
- package/ui/Blocks/CommonGrid/types.js +8 -0
- package/ui/Blocks/CommonGrid/utils/index.d.ts +17 -0
- package/ui/Blocks/CommonGrid/utils/index.js +60 -0
- package/ui/Blocks/CommonGrid/utils/public.d.ts +16 -0
- package/ui/Blocks/CommonGrid/utils/public.js +52 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mailstep/design-system",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"license": "ISC",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./ui/index.js",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"storybook": "storybook dev -p 6006",
|
|
15
15
|
"build": "rm -rf ./build && tsc && vite build && cp package.json build && cp README.md build",
|
|
16
16
|
"build-storybook": "storybook build",
|
|
17
|
-
"deploy": "npm
|
|
17
|
+
"deploy": "npm publish ./build",
|
|
18
18
|
"dev": "yarn storybook",
|
|
19
19
|
"test": "echo \"The tests are still waiting to be written, but it seems like they're really good at procrastinating!\""
|
|
20
20
|
},
|
|
@@ -69,7 +69,15 @@
|
|
|
69
69
|
"vite": "^5.0.10",
|
|
70
70
|
"vite-plugin-dts": "^3.6.4",
|
|
71
71
|
"vite-plugin-static-copy": "^1.0.0",
|
|
72
|
-
"webpack": "^5.82.1"
|
|
72
|
+
"webpack": "^5.82.1",
|
|
73
|
+
"immer": "9.0.7",
|
|
74
|
+
"react-beautiful-dnd": "^13.0.0",
|
|
75
|
+
"@types/react-beautiful-dnd": "^13.1.2",
|
|
76
|
+
"react-redux": "*",
|
|
77
|
+
"redux": ">=4.0.5",
|
|
78
|
+
"reselect": "5.0.0-alpha.2",
|
|
79
|
+
"@types/faker": "^4.1.11",
|
|
80
|
+
"faker": "^5.1.0"
|
|
73
81
|
},
|
|
74
82
|
"peerDependencies": {
|
|
75
83
|
"@fortawesome/fontawesome-svg-core": "^6.3.0",
|
|
@@ -92,7 +100,12 @@
|
|
|
92
100
|
"styled-components": "^5.3.10",
|
|
93
101
|
"swiper": "^11.0.3",
|
|
94
102
|
"tslib": "^2.6.2",
|
|
95
|
-
"typescript": "^5.0.4"
|
|
103
|
+
"typescript": "^5.0.4",
|
|
104
|
+
"immer": "9.0.7",
|
|
105
|
+
"react-beautiful-dnd": "^13.0.0",
|
|
106
|
+
"react-redux": ">=4.0.5",
|
|
107
|
+
"redux": ">=4.0.5",
|
|
108
|
+
"reselect": "5.0.0-alpha.2"
|
|
96
109
|
},
|
|
97
110
|
"resolutions": {
|
|
98
111
|
"jackspeak": "2.1.1"
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { CommonGridProps } from './types';
|
|
2
|
+
declare const CommonGrid: ({ components, filters, gridSelectors, gridActions, hideAllControls, totalRowsCount, isLoading, rowsData, hasColouredRows, columnsDefinitions, actionColumnDefinition, allowRowSelect, allowRowSelectOnAction, onRowAction, onRowEditClick, onRowReadClick, onRowClick, onBatchAction, columnLayout, hideColumnConfig, confirmOnReset, className, gridRef, minColumnWidth, errorMessage, extraControlButtons, perPageOptions, floatingButton, }: CommonGridProps) => JSX.Element;
|
|
3
|
+
export default CommonGrid;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
import React from 'react';
|
|
14
|
+
import { x } from '@xstyled/styled-components';
|
|
15
|
+
import { Row, MessageCell } from './components/Table';
|
|
16
|
+
import OversizedScroll from './components/OversizedScroll';
|
|
17
|
+
import GroupRow from './components/GroupRow';
|
|
18
|
+
import FilterRow from './components/FilterRow';
|
|
19
|
+
import DataRow from './components/DataRow';
|
|
20
|
+
import HeadRow from './components/HeadRow';
|
|
21
|
+
import ConfigForm from './components/ConfigForm';
|
|
22
|
+
import useUxReset from './hooks/useUxReset';
|
|
23
|
+
import useControlButtons from './hooks/useControlButtons';
|
|
24
|
+
import useRowsKeyControls from './hooks/useRowsKeyControls';
|
|
25
|
+
import useColumnSizes from './hooks/useColumnSizes';
|
|
26
|
+
import ActionColumnHead from './components/ActionColumnHead';
|
|
27
|
+
import { Provider as ContextProvider, defaultComponents } from './CommonGridContext';
|
|
28
|
+
import { isColumnOn, getGroups } from './utils';
|
|
29
|
+
import { initialState } from './store';
|
|
30
|
+
import ButtonStrip from './components/ButtonStrip';
|
|
31
|
+
import FloatingButton from './components/FloatingButton';
|
|
32
|
+
var rowsStyles = { outline: 'none' };
|
|
33
|
+
var defaultVoidFunction = function () {
|
|
34
|
+
var args = [];
|
|
35
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
36
|
+
args[_i] = arguments[_i];
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
};
|
|
40
|
+
var defaultUxState = initialState.uxState;
|
|
41
|
+
var defaultColumnsWidth = {};
|
|
42
|
+
var defaultPerPageOptions = [10, 20, 50, 100];
|
|
43
|
+
var CommonGrid = function (_a) {
|
|
44
|
+
var components = _a.components, filters = _a.filters,
|
|
45
|
+
// redux props
|
|
46
|
+
gridSelectors = _a.gridSelectors, gridActions = _a.gridActions,
|
|
47
|
+
// input props
|
|
48
|
+
hideAllControls = _a.hideAllControls, _b = _a.totalRowsCount, totalRowsCount = _b === void 0 ? 0 : _b, isLoading = _a.isLoading, rowsData = _a.rowsData, hasColouredRows = _a.hasColouredRows, columnsDefinitions = _a.columnsDefinitions, actionColumnDefinition = _a.actionColumnDefinition, allowRowSelect = _a.allowRowSelect, allowRowSelectOnAction = _a.allowRowSelectOnAction, onRowAction = _a.onRowAction, onRowEditClick = _a.onRowEditClick, onRowReadClick = _a.onRowReadClick, onRowClick = _a.onRowClick, onBatchAction = _a.onBatchAction, _c = _a.columnLayout, columnLayout = _c === void 0 ? 'normal' : _c, hideColumnConfig = _a.hideColumnConfig, confirmOnReset = _a.confirmOnReset, className = _a.className, gridRef = _a.gridRef, minColumnWidth = _a.minColumnWidth, errorMessage = _a.errorMessage, extraControlButtons = _a.extraControlButtons, _d = _a.perPageOptions, perPageOptions = _d === void 0 ? defaultPerPageOptions : _d, floatingButton = _a.floatingButton;
|
|
49
|
+
var usedComponents = React.useMemo(function () {
|
|
50
|
+
return __assign(__assign({}, defaultComponents), (components || {}));
|
|
51
|
+
}, [components]);
|
|
52
|
+
var Translator = usedComponents.Translator, Paginator = usedComponents.Paginator;
|
|
53
|
+
var _e = gridSelectors.uxState, uxState = _e === void 0 ? defaultUxState : _e, isConfigFormOpen = gridSelectors.isConfigFormOpen, columnConfig = gridSelectors.columnConfig, _f = gridSelectors.columnsWidth, columnsWidth = _f === void 0 ? defaultColumnsWidth : _f, columnsWidthVariant = gridSelectors.columnsWidthVariant, _g = gridSelectors.page, page = _g === void 0 ? 1 : _g, filter = gridSelectors.filter, sorting = gridSelectors.sorting, _h = gridSelectors.rowsPerPage, rowsPerPage = _h === void 0 ? 10 : _h;
|
|
54
|
+
var clearUxState = gridActions.clearUxState, handleUxChange = gridActions.handleUxChange, _j = gridActions.openConfigForm, openConfigForm = _j === void 0 ? defaultVoidFunction : _j, closeConfigForm = gridActions.closeConfigForm, _k = gridActions.setColumnConfig, setColumnConfig = _k === void 0 ? defaultVoidFunction : _k, _l = gridActions.setPage, setPage = _l === void 0 ? defaultVoidFunction : _l, _m = gridActions.setRowsPerPage, setRowsPerPage = _m === void 0 ? defaultVoidFunction : _m, _o = gridActions.addFilter, addFilter = _o === void 0 ? defaultVoidFunction : _o, _p = gridActions.resetFilters, resetFilters = _p === void 0 ? defaultVoidFunction : _p, _q = gridActions.addSorting, addSorting = _q === void 0 ? defaultVoidFunction : _q, _r = gridActions.resetGrid, resetGrid = _r === void 0 ? defaultVoidFunction : _r, _s = gridActions.setColumnWidth, setColumnWidth = _s === void 0 ? defaultVoidFunction : _s, _t = gridActions.setColumnsOrder, setColumnsOrder = _t === void 0 ? defaultVoidFunction : _t;
|
|
55
|
+
var handleRowsKeyDown = useRowsKeyControls(rowsData, uxState, handleUxChange);
|
|
56
|
+
useUxReset(rowsData, uxState, clearUxState);
|
|
57
|
+
var checksColumnsOrder = React.useCallback(function (colsOrder) {
|
|
58
|
+
var stickyRightColls = columnsDefinitions.filter(function (col) { return col.sticky === true && col.stickTo === 'right'; });
|
|
59
|
+
var stickyLeftColls = columnsDefinitions.filter(function (col) { return col.sticky === true && col.stickTo !== 'right'; });
|
|
60
|
+
if (stickyLeftColls.length > 1 || stickyRightColls.length > 1) {
|
|
61
|
+
console.error('Grid can have only sticky column on each side.');
|
|
62
|
+
}
|
|
63
|
+
if (stickyLeftColls.length && colsOrder.indexOf(stickyLeftColls[0].name) !== 0) {
|
|
64
|
+
console.error('The left sticky column should be the first one in a row');
|
|
65
|
+
}
|
|
66
|
+
if (stickyRightColls.length && colsOrder.indexOf(stickyRightColls[0].name) !== colsOrder.length - 1) {
|
|
67
|
+
console.error('The Right sticky column should be the last one in a row');
|
|
68
|
+
}
|
|
69
|
+
}, [columnsDefinitions]);
|
|
70
|
+
// todo refactor as part of definitions
|
|
71
|
+
var columnsOrder = React.useMemo(function () {
|
|
72
|
+
var _a;
|
|
73
|
+
var order = ((_a = gridSelectors === null || gridSelectors === void 0 ? void 0 : gridSelectors.columnsOrder) === null || _a === void 0 ? void 0 : _a.length)
|
|
74
|
+
? gridSelectors.columnsOrder
|
|
75
|
+
: columnsDefinitions.map(function (column) { return column.name; });
|
|
76
|
+
checksColumnsOrder(order);
|
|
77
|
+
return order;
|
|
78
|
+
}, [columnsDefinitions, gridSelectors.columnsOrder]);
|
|
79
|
+
// filtered and ordered columns definition, relevant columns definition to iterate over and render
|
|
80
|
+
var displayColumnsDefinitions = React.useMemo(function () {
|
|
81
|
+
return (!hideColumnConfig ? columnsDefinitions.filter(function (column) { return isColumnOn(column, columnConfig); }) : columnsDefinitions).sort(function (col1, col2) {
|
|
82
|
+
var i = (columnsOrder || []).indexOf(col1.name);
|
|
83
|
+
var j = (columnsOrder || []).indexOf(col2.name);
|
|
84
|
+
return i > j ? 1 : i < j ? -1 : 0;
|
|
85
|
+
});
|
|
86
|
+
}, [hideColumnConfig, columnConfig, columnsDefinitions, columnsOrder]);
|
|
87
|
+
var GridMessage;
|
|
88
|
+
var messageClass = 'info';
|
|
89
|
+
if (isLoading)
|
|
90
|
+
GridMessage = _jsx(Translator, { id: "dataGrid.status.loadingData", defaults: "... loading data ..." });
|
|
91
|
+
if (!isLoading && (!rowsData || rowsData.length < 1))
|
|
92
|
+
GridMessage = _jsx(Translator, { id: "dataGrid.status.noDataFound", defaults: "No data found." });
|
|
93
|
+
if (!isLoading && errorMessage) {
|
|
94
|
+
GridMessage = errorMessage;
|
|
95
|
+
messageClass = 'error';
|
|
96
|
+
}
|
|
97
|
+
var rowsSeenTxt = "".concat((page - 1) * rowsPerPage + 1, "-").concat(Math.min(page * rowsPerPage, totalRowsCount), " / ").concat(totalRowsCount);
|
|
98
|
+
var _u = useControlButtons(hideColumnConfig, openConfigForm, resetGrid, columnsDefinitions, resetFilters, setRowsPerPage, rowsSeenTxt, extraControlButtons, Translator, confirmOnReset, perPageOptions), topLeftButtons = _u.topLeftButtons, topRightButtons = _u.topRightButtons, bottomRightButtons = _u.bottomRightButtons, bottomLeftButtons = _u.bottomLeftButtons;
|
|
99
|
+
var _v = useColumnSizes(displayColumnsDefinitions, columnsWidth, columnsWidthVariant, setColumnWidth, columnLayout, minColumnWidth), displayColumnsWidth = _v.displayColumnsWidth, totalColumnsWidth = _v.totalColumnsWidth, gridBoxRef = _v.gridBoxRef, handleResizeDrag = _v.handleResizeDrag;
|
|
100
|
+
var groups = React.useMemo(function () {
|
|
101
|
+
return getGroups(displayColumnsDefinitions);
|
|
102
|
+
}, [displayColumnsDefinitions]);
|
|
103
|
+
var commonGridRef = React.useCallback(function (node) {
|
|
104
|
+
gridBoxRef.current = node;
|
|
105
|
+
!!gridRef && (gridRef.current = node);
|
|
106
|
+
}, []);
|
|
107
|
+
return (_jsx(ContextProvider, { components: usedComponents, children: _jsxs(x.div, { className: className || '', children: [!hideAllControls && _jsx(ButtonStrip, { buttonsLeft: topLeftButtons, buttonsRight: topRightButtons }), _jsxs(OversizedScroll, { columnLayout: columnLayout, isLoading: isLoading, totalColumnsWidth: totalColumnsWidth, floatingChildren: GridMessage && (_jsx(Row, { className: "dataRow", align: "center", children: _jsx(MessageCell, { align: "center", className: "gridMessage ".concat(messageClass), children: GridMessage }) })), ref: commonGridRef, children: [_jsxs("div", { className: "gridHead", children: [columnsDefinitions.find(function (col) { return col.group; }) && (_jsx(GroupRow, { actionColumn: actionColumnDefinition, columns: displayColumnsDefinitions, displayColumnsWidth: displayColumnsWidth, groups: groups })), _jsx(HeadRow, { columns: displayColumnsDefinitions, actionColumn: actionColumnDefinition, onAddSort: addSorting, columnLayout: columnLayout, setColumnsOrder: setColumnsOrder, columnsOrder: columnsOrder, sortingValues: sorting, displayColumnsWidth: displayColumnsWidth, handleResizeDrag: handleResizeDrag, groups: groups }), columnsDefinitions.find(function (col) { return col.filtering; }) && (_jsx(FilterRow, { filters: filters, columns: displayColumnsDefinitions, actionColumn: actionColumnDefinition, onChange: addFilter, filterValues: filter, displayColumnsWidth: displayColumnsWidth, groups: groups, rowsData: rowsData, uxState: uxState, handleUxChange: handleUxChange }))] }), _jsx("div", { className: "body flx_1", style: rowsStyles, tabIndex: -1, onKeyDown: handleRowsKeyDown, children: !isLoading &&
|
|
108
|
+
rowsData &&
|
|
109
|
+
displayColumnsDefinitions &&
|
|
110
|
+
rowsData.map(function (row, index) {
|
|
111
|
+
var rowIndex = rowsPerPage * page + (index + 1) - rowsPerPage;
|
|
112
|
+
return (_jsx(DataRow, { rowData: row, rowIndex: rowIndex, uxState: uxState, isEven: hasColouredRows && (index + 1) % 2 === 0, allowRowSelect: allowRowSelect, allowRowSelectOnAction: allowRowSelectOnAction, onRowAction: onRowAction, onUxChange: handleUxChange, onRowEditClick: onRowEditClick, onRowReadClick: onRowReadClick, onRowClick: onRowClick, columns: displayColumnsDefinitions, actionColumn: actionColumnDefinition, displayColumnsWidth: displayColumnsWidth, groups: groups }, row.id));
|
|
113
|
+
}) })] }), !hideAllControls && (_jsxs(x.div, { display: "flex", children: [actionColumnDefinition && (_jsx(ActionColumnHead, { actionColumn: actionColumnDefinition, onBatchAction: onBatchAction, rowsData: rowsData, uxState: uxState, handleUxChange: handleUxChange })), _jsx(ButtonStrip, { buttonsLeft: bottomLeftButtons, buttonsRight: bottomRightButtons })] })), _jsxs(x.div, { textAlign: "center", className: "paginatorWrapper", position: "relative", children: [floatingButton && _jsx(FloatingButton, { children: floatingButton }), _jsx(Paginator, { itemCount: totalRowsCount || 0, itemPerPage: rowsPerPage, page: page, onPageChange: setPage })] }), setColumnConfig && closeConfigForm && isConfigFormOpen && (_jsx(ConfigForm, { onSubmit: setColumnConfig, onCancel: closeConfigForm, columns: columnsDefinitions, columnConfig: columnConfig }))] }) }));
|
|
114
|
+
};
|
|
115
|
+
export default CommonGrid;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ComponentsProps } from './types';
|
|
3
|
+
export declare const defaultComponents: ComponentsProps;
|
|
4
|
+
declare const Context: React.Context<ComponentsProps>;
|
|
5
|
+
type EnhancedProviderProps = {
|
|
6
|
+
components: ComponentsProps;
|
|
7
|
+
children: React.ReactNode;
|
|
8
|
+
};
|
|
9
|
+
declare const Provider: ({ components, ...rest }: EnhancedProviderProps) => JSX.Element;
|
|
10
|
+
declare const Consumer: React.Consumer<ComponentsProps>;
|
|
11
|
+
export default Context;
|
|
12
|
+
export { Provider, Consumer };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
13
|
+
var t = {};
|
|
14
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
15
|
+
t[p] = s[p];
|
|
16
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
17
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
18
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
19
|
+
t[p[i]] = s[p[i]];
|
|
20
|
+
}
|
|
21
|
+
return t;
|
|
22
|
+
};
|
|
23
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
24
|
+
import React from 'react';
|
|
25
|
+
import DefaultPaginator from './components/DefaultPaginator';
|
|
26
|
+
export var defaultComponents = {
|
|
27
|
+
// various components:
|
|
28
|
+
Translator: function (_a) {
|
|
29
|
+
var defaults = _a.defaults;
|
|
30
|
+
return _jsx("div", { children: defaults });
|
|
31
|
+
},
|
|
32
|
+
Checkbox: function (props) { return _jsx("input", __assign({ type: "checkbox" }, props)); },
|
|
33
|
+
Button: function (props) { return _jsx("button", __assign({}, props)); },
|
|
34
|
+
Switch: function (props) { return _jsx("input", __assign({ type: "checkbox" }, props)); },
|
|
35
|
+
Paginator: DefaultPaginator,
|
|
36
|
+
};
|
|
37
|
+
var Context = React.createContext(defaultComponents);
|
|
38
|
+
var Provider = function (_a) {
|
|
39
|
+
var components = _a.components, rest = __rest(_a, ["components"]);
|
|
40
|
+
var mergedContext = React.useMemo(function () { return (__assign(__assign({}, defaultComponents), components)); }, [components]);
|
|
41
|
+
return _jsx(Context.Provider, __assign({ value: mergedContext }, rest));
|
|
42
|
+
};
|
|
43
|
+
var Consumer = Context.Consumer;
|
|
44
|
+
export default Context;
|
|
45
|
+
export { Provider, Consumer };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { connect } from 'react-redux';
|
|
2
|
+
import { bindActionCreators } from 'redux';
|
|
3
|
+
import { createActions, createFullSelector } from '../store';
|
|
4
|
+
var withReduxActions = function (gridName, prefix) {
|
|
5
|
+
if (prefix === void 0) { prefix = 'grid'; }
|
|
6
|
+
var actions = createActions(gridName);
|
|
7
|
+
var selectors = createFullSelector(gridName);
|
|
8
|
+
return connect(function (state) {
|
|
9
|
+
var _a;
|
|
10
|
+
return (_a = {},
|
|
11
|
+
_a["".concat(prefix, "Selectors")] = selectors(state),
|
|
12
|
+
_a);
|
|
13
|
+
}, function (dispatch) {
|
|
14
|
+
var _a;
|
|
15
|
+
return (_a = {},
|
|
16
|
+
_a["".concat(prefix, "Actions")] = bindActionCreators({
|
|
17
|
+
init: actions.init,
|
|
18
|
+
clearUxState: actions.clearUxState,
|
|
19
|
+
handleUxChange: actions.handleUxChange,
|
|
20
|
+
openConfigForm: actions.openConfigForm,
|
|
21
|
+
closeConfigForm: actions.closeConfigForm,
|
|
22
|
+
setColumnConfig: actions.setColumnConfig,
|
|
23
|
+
setPage: actions.setPage,
|
|
24
|
+
setRowsPerPage: actions.setRowsPerPage,
|
|
25
|
+
addFilter: actions.addFilter,
|
|
26
|
+
resetFilters: actions.resetFilters,
|
|
27
|
+
addSorting: actions.addSorting,
|
|
28
|
+
clearSettings: actions.clearSettings,
|
|
29
|
+
setColumnWidth: actions.setColumnWidth,
|
|
30
|
+
resetGrid: actions.resetGrid,
|
|
31
|
+
setColumnsOrder: actions.setColumnsOrder,
|
|
32
|
+
}, dispatch),
|
|
33
|
+
_a);
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
export default withReduxActions;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { x } from '@xstyled/styled-components';
|
|
4
|
+
import Context from '../CommonGridContext';
|
|
5
|
+
import DropdownSelect from './DropdownSelect';
|
|
6
|
+
import { useToggleAllCheckbox, useGridActionTrigger } from '../utils/public';
|
|
7
|
+
var ActionColumnHead = function (_a) {
|
|
8
|
+
var _b, _c;
|
|
9
|
+
var actionColumn = _a.actionColumn, onBatchAction = _a.onBatchAction, handleUxChange = _a.handleUxChange, rowsData = _a.rowsData, uxState = _a.uxState;
|
|
10
|
+
var _d = React.useContext(Context), Translator = _d.Translator, Checkbox = _d.Checkbox;
|
|
11
|
+
var _e = useToggleAllCheckbox(rowsData, uxState, handleUxChange), allChecked = _e[0], toggleCheckbox = _e[1];
|
|
12
|
+
var _f = useGridActionTrigger(rowsData, uxState, actionColumn === null || actionColumn === void 0 ? void 0 : actionColumn.actionOptions, onBatchAction), enabledActions = _f[0], handleBatchAction = _f[1];
|
|
13
|
+
var displayCheckbox = (actionColumn === null || actionColumn === void 0 ? void 0 : actionColumn.checkAllPosition) !== 'top' && (((_b = actionColumn === null || actionColumn === void 0 ? void 0 : actionColumn.actionOptions) === null || _b === void 0 ? void 0 : _b.length) || actionColumn.forceCheckboxes);
|
|
14
|
+
return (_jsxs(x.div, { display: "flex", mr: 1, className: "actionsHandler", children: [displayCheckbox && _jsx(Checkbox, { label: "", checked: allChecked, onChange: toggleCheckbox }), ((_c = actionColumn === null || actionColumn === void 0 ? void 0 : actionColumn.actionOptions) === null || _c === void 0 ? void 0 : _c.length) ? (_jsx(DropdownSelect, { label: _jsx(Translator, { id: "dataGrid.buttonActions", defaults: "Actions" }), options: enabledActions, onSelect: handleBatchAction, appearance: "secondary", disabled: !enabledActions.length || !rowsData.length })) : null] }));
|
|
15
|
+
};
|
|
16
|
+
export default React.memo(ActionColumnHead);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ExtraControlButton as ButtonProps } from '../types';
|
|
2
|
+
type ButtonStripProps = {
|
|
3
|
+
buttonsLeft?: ButtonProps[];
|
|
4
|
+
buttonsRight?: ButtonProps[];
|
|
5
|
+
};
|
|
6
|
+
declare const ButtonStrip: ({ buttonsLeft, buttonsRight }: ButtonStripProps) => JSX.Element;
|
|
7
|
+
export default ButtonStrip;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
import React from 'react';
|
|
14
|
+
import { x } from '@xstyled/styled-components';
|
|
15
|
+
import DropdownSelect from './DropdownSelect';
|
|
16
|
+
import Context from '../CommonGridContext';
|
|
17
|
+
var ControlButton = function (_a) {
|
|
18
|
+
var node = _a.node, label = _a.label, style = _a.style, hide = _a.hide, disabled = _a.disabled, onClick = _a.onClick, onSelect = _a.onSelect, options = _a.options, hideChevron = _a.hideChevron;
|
|
19
|
+
var Button = React.useContext(Context).Button;
|
|
20
|
+
if (node)
|
|
21
|
+
return _jsx(_Fragment, { children: node });
|
|
22
|
+
if (hide)
|
|
23
|
+
return null;
|
|
24
|
+
if (options) {
|
|
25
|
+
return (_jsx(DropdownSelect, { label: label || '', appearance: style || 'secondary', options: options, showChevron: !hideChevron, onSelect: onSelect, disabled: disabled }));
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
return (_jsx(Button, { type: "button", onClick: onClick, disabled: disabled, appearance: style || 'secondary', children: label }));
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
var ButtonStrip = function (_a) {
|
|
32
|
+
var _b = _a.buttonsLeft, buttonsLeft = _b === void 0 ? [] : _b, _c = _a.buttonsRight, buttonsRight = _c === void 0 ? [] : _c;
|
|
33
|
+
return (_jsxs(x.div, { display: "flex", justifyContent: "space-between", className: "buttonsStrip", w: '100%', children: [_jsx(x.div, { display: "flex", children: buttonsLeft.map(function (button, idx) { return (_jsx(x.div, { mr: 1, children: _jsx(ControlButton, __assign({}, button)) }, idx)); }) }), _jsx(x.div, { display: "flex", children: buttonsRight.map(function (button, idx) { return (_jsx(x.div, { ml: 1, children: _jsx(ControlButton, __assign({}, button)) }, idx)); }) })] }));
|
|
34
|
+
};
|
|
35
|
+
export default ButtonStrip;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ColumnDefinition, GridActionsType, FiltersConfig, Group } from '../types';
|
|
2
|
+
type Props = {
|
|
3
|
+
onChange: Required<GridActionsType>['addFilter'];
|
|
4
|
+
value?: any;
|
|
5
|
+
column: ColumnDefinition;
|
|
6
|
+
displayColumnWidth: number;
|
|
7
|
+
filters?: FiltersConfig;
|
|
8
|
+
group?: Group;
|
|
9
|
+
};
|
|
10
|
+
declare const ColumnFilterCell: ({ onChange, value, displayColumnWidth, filters, column: columnDefinition, group, }: Props) => JSX.Element;
|
|
11
|
+
export default ColumnFilterCell;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
import React from 'react';
|
|
14
|
+
import { x } from '@xstyled/styled-components';
|
|
15
|
+
import { Cell } from './Table';
|
|
16
|
+
import { useAddFilter } from '../utils/public';
|
|
17
|
+
import { createFilterType, getStickyCollClassNames } from '../utils';
|
|
18
|
+
import { getCellSizeProps, getGroupClassNames } from '../utils';
|
|
19
|
+
import OverlayComponent from './FilterDropdown';
|
|
20
|
+
var ColumnFilterCell = function (_a) {
|
|
21
|
+
var onChange = _a.onChange, value = _a.value, displayColumnWidth = _a.displayColumnWidth, filters = _a.filters, columnDefinition = _a.column, group = _a.group;
|
|
22
|
+
var cellSizeProps = getCellSizeProps(columnDefinition, displayColumnWidth);
|
|
23
|
+
var handleAddFilter = useAddFilter(onChange);
|
|
24
|
+
var handleChange = React.useCallback(function (event) {
|
|
25
|
+
handleAddFilter((event === null || event === void 0 ? void 0 : event.target) ? event.target.value : event, columnDefinition);
|
|
26
|
+
}, [handleAddFilter, columnDefinition]);
|
|
27
|
+
var cellClassName = "cell".concat(getStickyCollClassNames(!!columnDefinition.sticky, columnDefinition.stickTo), " ").concat(getGroupClassNames(group));
|
|
28
|
+
if (!columnDefinition.filtering) {
|
|
29
|
+
return _jsx(Cell, __assign({ className: cellClassName }, cellSizeProps));
|
|
30
|
+
}
|
|
31
|
+
var filterType = createFilterType(columnDefinition);
|
|
32
|
+
var filterConfig = filters === null || filters === void 0 ? void 0 : filters[filterType];
|
|
33
|
+
var RenderComponent = filterConfig === null || filterConfig === void 0 ? void 0 : filterConfig.CellComponent;
|
|
34
|
+
if (!RenderComponent) {
|
|
35
|
+
console.error("ERROR, using unknown filter type ".concat(filterType));
|
|
36
|
+
return (_jsx(x.div, { children: _jsx("span", { children: "".concat(filterType, " filter") }) }));
|
|
37
|
+
}
|
|
38
|
+
var passProps = __assign(__assign(__assign({}, filterConfig === null || filterConfig === void 0 ? void 0 : filterConfig.defaultExtraProps), columnDefinition.filterExtraProps), (filterType == 'options' && { options: columnDefinition.filterOptions }));
|
|
39
|
+
return (_jsx(Cell, __assign({ className: cellClassName }, cellSizeProps, { children: _jsx(x.div, { className: "test", children: _jsx(RenderComponent, __assign({ "data-test": columnDefinition.name, name: columnDefinition.name, onChange: handleChange, value: value, OverlayComponent: OverlayComponent }, passProps)) }) })));
|
|
40
|
+
};
|
|
41
|
+
export default ColumnFilterCell;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { SortingValueType } from '../types';
|
|
3
|
+
declare const _default: React.NamedExoticComponent<{
|
|
4
|
+
title?: string | JSX.Element | undefined;
|
|
5
|
+
isSortable: boolean;
|
|
6
|
+
onSetSort: (value: SortingValueType) => void;
|
|
7
|
+
sortValue: SortingValueType;
|
|
8
|
+
}>;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
2
|
+
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
3
|
+
return cooked;
|
|
4
|
+
};
|
|
5
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import styled from '@xstyled/styled-components';
|
|
8
|
+
import { SortingUp, SortingDown } from './icons/Sorting';
|
|
9
|
+
var Title = styled.span(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n & + * {\n margin-left: 1em;\n }\n"], ["\n & + * {\n margin-left: 1em;\n }\n"])));
|
|
10
|
+
var ColumnTitle = function (_a) {
|
|
11
|
+
var title = _a.title, isSortable = _a.isSortable, onSetSort = _a.onSetSort, sortValue = _a.sortValue;
|
|
12
|
+
var handleClick = React.useCallback(function () {
|
|
13
|
+
var newValue = sortValue ? (sortValue == 'asc' ? 'desc' : null) : 'asc';
|
|
14
|
+
if (onSetSort)
|
|
15
|
+
onSetSort(newValue);
|
|
16
|
+
}, [sortValue, onSetSort]);
|
|
17
|
+
return (_jsxs("div", { onClick: isSortable ? handleClick : undefined, className: isSortable ? 'sortable' : '', children: [_jsx(Title, { children: title }), isSortable && sortValue === 'asc' && _jsx(SortingUp, { width: "16" }), isSortable && sortValue === 'desc' && _jsx(SortingDown, { width: "16" })] }));
|
|
18
|
+
};
|
|
19
|
+
export default React.memo(ColumnTitle);
|
|
20
|
+
var templateObject_1;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ColumnDefinition, ColumnConfig } from '../types';
|
|
2
|
+
type ConfigFormProps = {
|
|
3
|
+
columns: ColumnDefinition[];
|
|
4
|
+
columnConfig?: ColumnConfig;
|
|
5
|
+
onCancel: () => void;
|
|
6
|
+
onSubmit: (columnConfig: ColumnConfig) => void | Promise<any> | null;
|
|
7
|
+
};
|
|
8
|
+
declare const ConfigForm: ({ columns, columnConfig, onCancel, onSubmit }: ConfigFormProps) => JSX.Element;
|
|
9
|
+
export default ConfigForm;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
2
|
+
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
3
|
+
return cooked;
|
|
4
|
+
};
|
|
5
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import DialogWrapper from './Dialog';
|
|
8
|
+
import { x } from '@xstyled/styled-components';
|
|
9
|
+
import styled from '@xstyled/styled-components';
|
|
10
|
+
import { isColumnOn } from '../utils';
|
|
11
|
+
import Context from '../CommonGridContext';
|
|
12
|
+
import cloneDeep from 'lodash/cloneDeep';
|
|
13
|
+
var H4 = styled.h4(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n color: dark;\n margin-bottom: 0;\n font-weight: thin;\n font-size: 1.25rem;\n"], ["\n color: dark;\n margin-bottom: 0;\n font-weight: thin;\n font-size: 1.25rem;\n"])));
|
|
14
|
+
var ColumnTitle = styled.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n color: dark;\n"], ["\n color: dark;\n"])));
|
|
15
|
+
var Title = function (_a) {
|
|
16
|
+
var isCheckedAll = _a.isCheckedAll, onCheckAll = _a.onCheckAll;
|
|
17
|
+
var _b = React.useContext(Context), Translator = _b.Translator, Button = _b.Button;
|
|
18
|
+
var toggleAll = React.useCallback(function () { return onCheckAll(isCheckedAll); }, [isCheckedAll, onCheckAll]);
|
|
19
|
+
return (_jsxs(x.div, { display: "flex", justifyContent: "space-between", alignItems: "center", w: '100%', children: [_jsx(H4, { children: _jsx(Translator, { id: "dataGrid.config.title", defaults: "Configure columns" }) }), _jsx(Button, { appearance: "minimal", onClick: toggleAll, children: isCheckedAll ? (_jsx(Translator, { id: "dataGrid.config.buttonUncheckAll", defaults: "Uncheck all" })) : (_jsx(Translator, { id: "dataGrid.config.buttonCheckAll", defaults: "Check all" })) })] }));
|
|
20
|
+
};
|
|
21
|
+
var HookedSwitch = function (_a) {
|
|
22
|
+
var checked = _a.checked, column = _a.column, onChange = _a.onChange;
|
|
23
|
+
var Switch = React.useContext(Context).Switch;
|
|
24
|
+
var handleToggleRow = React.useCallback(function () { return onChange(column); }, [column, onChange]);
|
|
25
|
+
return _jsx(Switch, { name: column.name, checked: checked, onChange: handleToggleRow });
|
|
26
|
+
};
|
|
27
|
+
var ConfigForm = function (_a) {
|
|
28
|
+
var columns = _a.columns, _b = _a.columnConfig, columnConfig = _b === void 0 ? {} : _b, onCancel = _a.onCancel, onSubmit = _a.onSubmit;
|
|
29
|
+
var _c = React.useState(columnConfig), newColumnConfig = _c[0], setColumnConfig = _c[1];
|
|
30
|
+
var handleToggleRow = function (column) {
|
|
31
|
+
var currentConfig = cloneDeep(newColumnConfig);
|
|
32
|
+
if (!currentConfig[column.name]) {
|
|
33
|
+
currentConfig[column.name] = {};
|
|
34
|
+
}
|
|
35
|
+
currentConfig[column.name].isHidden = isColumnOn(column, currentConfig); // = inversion
|
|
36
|
+
setColumnConfig(currentConfig);
|
|
37
|
+
};
|
|
38
|
+
var handleCheckAllColumns = React.useCallback(function (checkAll) {
|
|
39
|
+
var currentConfig = cloneDeep(newColumnConfig);
|
|
40
|
+
columns.forEach(function (column) {
|
|
41
|
+
if (!currentConfig[column.name]) {
|
|
42
|
+
currentConfig[column.name] = {};
|
|
43
|
+
}
|
|
44
|
+
currentConfig[column.name].isHidden = checkAll;
|
|
45
|
+
});
|
|
46
|
+
setColumnConfig(currentConfig);
|
|
47
|
+
}, [newColumnConfig, columns]);
|
|
48
|
+
var handleFormSubmit = React.useCallback(function () {
|
|
49
|
+
if (onSubmit)
|
|
50
|
+
onSubmit(newColumnConfig);
|
|
51
|
+
}, [onSubmit, newColumnConfig]);
|
|
52
|
+
var isCheckedAll = columns.every(function (column) { var _a; return !((_a = newColumnConfig[column.name]) === null || _a === void 0 ? void 0 : _a.isHidden); });
|
|
53
|
+
return (_jsx(DialogWrapper, { onCancel: onCancel, onSubmit: handleFormSubmit, header: _jsx(Title, { isCheckedAll: isCheckedAll, onCheckAll: handleCheckAllColumns }), children: _jsx(x.div, { children: columns
|
|
54
|
+
.filter(function (column) { return !column.alwaysOn; })
|
|
55
|
+
.map(function (column) { return (_jsxs(x.div, { my: 3, display: "flex", alignItems: "center", children: [_jsx(x.div, { mr: 3, children: _jsx(HookedSwitch, { checked: isColumnOn(column, newColumnConfig), column: column, onChange: handleToggleRow }) }), _jsx(ColumnTitle, { children: column.title || '' })] }, column.name)); }) }) }));
|
|
56
|
+
};
|
|
57
|
+
export default ConfigForm;
|
|
58
|
+
var templateObject_1, templateObject_2;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ColumnDefinition, RowProps, Group } from '../types';
|
|
3
|
+
type DataCellPros = {
|
|
4
|
+
column: ColumnDefinition;
|
|
5
|
+
rowData: RowProps;
|
|
6
|
+
onRowAction?: (id: string, field: string, value: any) => void;
|
|
7
|
+
displayColumnWidth: number;
|
|
8
|
+
group: Group;
|
|
9
|
+
};
|
|
10
|
+
declare const MemoDataCell: React.NamedExoticComponent<DataCellPros>;
|
|
11
|
+
export default MemoDataCell;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
import React from 'react';
|
|
14
|
+
import get from 'lodash/fp/get';
|
|
15
|
+
import { TextCell } from './Table';
|
|
16
|
+
import { getCellSizeProps, getGroupClassNames, getStickyCollClassNames } from '../utils';
|
|
17
|
+
var DataCell = function (_a) {
|
|
18
|
+
var column = _a.column, group = _a.group, rowData = _a.rowData, onRowAction = _a.onRowAction, displayColumnWidth = _a.displayColumnWidth;
|
|
19
|
+
var Wrapper = column.fixedSize ? 'div' : TextCell;
|
|
20
|
+
var wrapperBaseProps = column.fixedSize
|
|
21
|
+
? { style: __assign(__assign({}, getCellSizeProps(column, displayColumnWidth)), { alignSelf: 'center' }) }
|
|
22
|
+
: getCellSizeProps(column, displayColumnWidth);
|
|
23
|
+
var cellClassName = "cell".concat(getStickyCollClassNames(!!column.sticky, column.stickTo), " ").concat(getGroupClassNames(group));
|
|
24
|
+
if (column.cellComponent) {
|
|
25
|
+
return (_jsx(Wrapper, __assign({ className: cellClassName }, wrapperBaseProps, { children: _jsx(column.cellComponent, { rowData: rowData, onRowAction: onRowAction, column: column }) })));
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
return (_jsx(Wrapper, __assign({ className: cellClassName }, wrapperBaseProps, { children: column.formatRowValue ? column.formatRowValue(rowData) : get(column.name, rowData) })));
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
var MemoDataCell = React.memo(DataCell, function (prevProps, newProps) {
|
|
32
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
|
|
33
|
+
if (prevProps.rowData !== newProps.rowData ||
|
|
34
|
+
prevProps.displayColumnWidth !== newProps.displayColumnWidth ||
|
|
35
|
+
((_a = prevProps.column) === null || _a === void 0 ? void 0 : _a.fixedSize) != ((_b = newProps.column) === null || _b === void 0 ? void 0 : _b.fixedSize) ||
|
|
36
|
+
((_c = prevProps.column) === null || _c === void 0 ? void 0 : _c.flexGrow) != ((_d = newProps.column) === null || _d === void 0 ? void 0 : _d.flexGrow) ||
|
|
37
|
+
((_e = prevProps.column) === null || _e === void 0 ? void 0 : _e.flexShrink) != ((_f = newProps.column) === null || _f === void 0 ? void 0 : _f.flexShrink) ||
|
|
38
|
+
((_g = prevProps.group) === null || _g === void 0 ? void 0 : _g.start) != ((_h = newProps.group) === null || _h === void 0 ? void 0 : _h.start) ||
|
|
39
|
+
((_j = prevProps.group) === null || _j === void 0 ? void 0 : _j.end) != ((_k = newProps.group) === null || _k === void 0 ? void 0 : _k.end)) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
if ((((_l = prevProps.column) === null || _l === void 0 ? void 0 : _l.formatRowValue) || ((_m = newProps.column) === null || _m === void 0 ? void 0 : _m.formatRowValue)) &&
|
|
43
|
+
((_o = prevProps.column) === null || _o === void 0 ? void 0 : _o.formatRowValue) !== ((_p = newProps.column) === null || _p === void 0 ? void 0 : _p.formatRowValue)) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
if ((((_q = prevProps.column) === null || _q === void 0 ? void 0 : _q.cellComponent) || ((_r = newProps.column) === null || _r === void 0 ? void 0 : _r.cellComponent)) &&
|
|
47
|
+
(((_s = prevProps.column) === null || _s === void 0 ? void 0 : _s.cellComponent) !== ((_t = newProps.column) === null || _t === void 0 ? void 0 : _t.cellComponent) || prevProps.onRowAction !== newProps.onRowAction)) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
return true;
|
|
51
|
+
});
|
|
52
|
+
export default MemoDataCell;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ColumnDefinition, ActionColumn, RowProps, UxState, GridSelectorsType, Group } from '../types';
|
|
2
|
+
type DataRowProps = {
|
|
3
|
+
columns: ColumnDefinition[];
|
|
4
|
+
actionColumn?: ActionColumn;
|
|
5
|
+
rowData: RowProps;
|
|
6
|
+
rowIndex: number;
|
|
7
|
+
uxState: UxState;
|
|
8
|
+
allowRowSelect?: boolean;
|
|
9
|
+
allowRowSelectOnAction?: boolean;
|
|
10
|
+
onUxChange?: (uxKey: keyof UxState, uxValue: any) => void;
|
|
11
|
+
onRowEditClick?: (id: string, props: RowProps) => void;
|
|
12
|
+
onRowReadClick?: (id: string, props: RowProps) => void;
|
|
13
|
+
onRowClick?: (id: string, props: RowProps) => void;
|
|
14
|
+
onRowAction?: (id: string, field: string, value: any) => void;
|
|
15
|
+
createLink?: (params?: object) => string;
|
|
16
|
+
displayColumnsWidth: Required<GridSelectorsType>['columnsWidth'];
|
|
17
|
+
groups: Group[];
|
|
18
|
+
isEven?: boolean;
|
|
19
|
+
};
|
|
20
|
+
declare const DataRow: ({ columns, actionColumn, rowData, rowIndex, uxState, allowRowSelect, allowRowSelectOnAction, onUxChange, onRowEditClick, onRowReadClick, onRowClick, onRowAction, displayColumnsWidth, groups, isEven, }: DataRowProps) => JSX.Element;
|
|
21
|
+
export default DataRow;
|