@webiny/ui 5.33.5 → 5.34.0-beta.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/Accordion/Accordion.js +1 -5
- package/Accordion/Accordion.js.map +1 -1
- package/Accordion/AccordionItem.d.ts +18 -2
- package/Accordion/AccordionItem.js +46 -48
- package/Accordion/AccordionItem.js.map +1 -1
- package/Accordion/AccordionItemActions.d.ts +8 -0
- package/Accordion/AccordionItemActions.js +36 -0
- package/Accordion/AccordionItemActions.js.map +1 -0
- package/Alert/Alert.d.ts +1 -1
- package/Alert/Alert.js +1 -1
- package/Alert/Alert.js.map +1 -1
- package/Button/Button.d.ts +30 -1
- package/Button/Button.js +2 -3
- package/Button/Button.js.map +1 -1
- package/CodeEditor/CodeEditor.d.ts +2 -0
- package/CodeEditor/CodeEditor.js +4 -0
- package/CodeEditor/CodeEditor.js.map +1 -1
- package/DataTable/DataTable.d.ts +22 -0
- package/DataTable/DataTable.js +162 -0
- package/DataTable/DataTable.js.map +1 -0
- package/DataTable/DataTable.stories.d.ts +1 -0
- package/DataTable/DataTable.stories.js +77 -0
- package/DataTable/DataTable.stories.js.map +1 -0
- package/DataTable/README.md +72 -0
- package/DataTable/index.d.ts +1 -0
- package/DataTable/index.js +18 -0
- package/DataTable/index.js.map +1 -0
- package/DataTable/styled.d.ts +2 -0
- package/DataTable/styled.js +18 -0
- package/DataTable/styled.js.map +1 -0
- package/DelayedOnChange/DelayedOnChange.d.ts +40 -0
- package/DelayedOnChange/DelayedOnChange.js +129 -0
- package/DelayedOnChange/DelayedOnChange.js.map +1 -0
- package/DelayedOnChange/index.d.ts +2 -0
- package/DelayedOnChange/index.js +23 -0
- package/DelayedOnChange/index.js.map +1 -0
- package/DelayedOnChange/withDelayedOnChange.d.ts +3 -0
- package/DelayedOnChange/withDelayedOnChange.js +37 -0
- package/DelayedOnChange/withDelayedOnChange.js.map +1 -0
- package/Dialog/Dialog.js +5 -2
- package/Dialog/Dialog.js.map +1 -1
- package/Image/Image.js +3 -1
- package/Image/Image.js.map +1 -1
- package/ImageUpload/styled.d.ts +3 -3
- package/Input/Input.d.ts +1 -1
- package/Input/Input.js.map +1 -1
- package/List/DataList/DataList.js +11 -52
- package/List/DataList/DataList.js.map +1 -1
- package/List/DataList/Loader.d.ts +2 -2
- package/List/DataList/Loader.js +35 -49
- package/List/DataList/Loader.js.map +1 -1
- package/Menu/Menu.js +5 -1
- package/Menu/Menu.js.map +1 -1
- package/Skeleton/README.md +21 -0
- package/Skeleton/Skeleton.d.ts +4 -0
- package/Skeleton/Skeleton.js +25 -0
- package/Skeleton/Skeleton.js.map +1 -0
- package/Skeleton/Skeleton.stories.d.ts +1 -0
- package/Skeleton/Skeleton.stories.js +28 -0
- package/Skeleton/Skeleton.stories.js.map +1 -0
- package/Skeleton/index.d.ts +1 -0
- package/Skeleton/index.js +18 -0
- package/Skeleton/index.js.map +1 -0
- package/Switch/Switch.d.ts +1 -1
- package/Switch/Switch.js.map +1 -1
- package/Tabs/Tab.d.ts +1 -0
- package/Tabs/Tab.js +4 -1
- package/Tabs/Tab.js.map +1 -1
- package/Tabs/Tabs.d.ts +1 -0
- package/Tabs/Tabs.js +8 -1
- package/Tabs/Tabs.js.map +1 -1
- package/Tags/Tags.d.ts +8 -15
- package/Tags/Tags.js +83 -112
- package/Tags/Tags.js.map +1 -1
- package/Typography/Typography.d.ts +2 -2
- package/Typography/Typography.js.map +1 -1
- package/package.json +19 -17
- package/styles.scss +2 -3
- package/types.d.ts +3 -3
- package/types.js.map +1 -1
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
+
|
|
5
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.DataTable = void 0;
|
|
11
|
+
|
|
12
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
+
|
|
14
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
15
|
+
|
|
16
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
17
|
+
|
|
18
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
19
|
+
|
|
20
|
+
var _dataTable = require("@rmwc/data-table");
|
|
21
|
+
|
|
22
|
+
var _reactTable = require("@tanstack/react-table");
|
|
23
|
+
|
|
24
|
+
var _Checkbox = require("../Checkbox");
|
|
25
|
+
|
|
26
|
+
var _Skeleton = require("../Skeleton");
|
|
27
|
+
|
|
28
|
+
require("@rmwc/data-table/data-table.css");
|
|
29
|
+
|
|
30
|
+
var _styled = require("./styled");
|
|
31
|
+
|
|
32
|
+
var defineColumns = function defineColumns(columns, onSelectRow, loadingInitial) {
|
|
33
|
+
return (0, _react.useMemo)(function () {
|
|
34
|
+
var columnsList = Object.keys(columns).map(function (key) {
|
|
35
|
+
return (0, _objectSpread2.default)({
|
|
36
|
+
id: key
|
|
37
|
+
}, columns[key]);
|
|
38
|
+
});
|
|
39
|
+
var defaults = columnsList.map(function (column) {
|
|
40
|
+
var id = column.id,
|
|
41
|
+
_header = column.header,
|
|
42
|
+
meta = column.meta,
|
|
43
|
+
_cell = column.cell;
|
|
44
|
+
return {
|
|
45
|
+
accessorKey: id,
|
|
46
|
+
header: function header() {
|
|
47
|
+
return _header;
|
|
48
|
+
},
|
|
49
|
+
cell: function cell(info) {
|
|
50
|
+
if (_cell && typeof _cell === "function") {
|
|
51
|
+
return _cell(info.row.original);
|
|
52
|
+
} else {
|
|
53
|
+
return info.getValue();
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
meta: meta
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
var select = !!onSelectRow ? [{
|
|
60
|
+
id: "datatable-select-column",
|
|
61
|
+
header: function header(_ref) {
|
|
62
|
+
var table = _ref.table;
|
|
63
|
+
return !loadingInitial && /*#__PURE__*/_react.default.createElement(_Checkbox.Checkbox, {
|
|
64
|
+
indeterminate: table.getIsSomeRowsSelected(),
|
|
65
|
+
value: table.getIsAllRowsSelected(),
|
|
66
|
+
onChange: function onChange(e) {
|
|
67
|
+
return table.toggleAllPageRowsSelected(e);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
},
|
|
71
|
+
cell: function cell(_ref2) {
|
|
72
|
+
var row = _ref2.row;
|
|
73
|
+
return /*#__PURE__*/_react.default.createElement(_Checkbox.Checkbox, {
|
|
74
|
+
indeterminate: row.getIsSomeSelected(),
|
|
75
|
+
value: row.getIsSelected(),
|
|
76
|
+
onChange: row.getToggleSelectedHandler()
|
|
77
|
+
});
|
|
78
|
+
},
|
|
79
|
+
meta: {
|
|
80
|
+
hasFormControl: true,
|
|
81
|
+
className: "datatable-select-column"
|
|
82
|
+
}
|
|
83
|
+
}] : [];
|
|
84
|
+
return [].concat(select, (0, _toConsumableArray2.default)(defaults)).map(function (column) {
|
|
85
|
+
if (loadingInitial) {
|
|
86
|
+
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, column), {}, {
|
|
87
|
+
cell: function cell() {
|
|
88
|
+
return /*#__PURE__*/_react.default.createElement(_Skeleton.Skeleton, null);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return column;
|
|
94
|
+
});
|
|
95
|
+
}, [columns, onSelectRow, loadingInitial]);
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
var defineData = function defineData(data, loadingInitial) {
|
|
99
|
+
return (0, _react.useMemo)(function () {
|
|
100
|
+
if (loadingInitial) {
|
|
101
|
+
return Array(10).fill({});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return data;
|
|
105
|
+
}, [data, loadingInitial]);
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
var DataTable = function DataTable(_ref3) {
|
|
109
|
+
var columns = _ref3.columns,
|
|
110
|
+
data = _ref3.data,
|
|
111
|
+
loadingInitial = _ref3.loadingInitial,
|
|
112
|
+
onSelectRow = _ref3.onSelectRow,
|
|
113
|
+
stickyColumns = _ref3.stickyColumns,
|
|
114
|
+
stickyRows = _ref3.stickyRows;
|
|
115
|
+
|
|
116
|
+
var _React$useState = _react.default.useState({}),
|
|
117
|
+
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
|
|
118
|
+
rowSelection = _React$useState2[0],
|
|
119
|
+
setRowSelection = _React$useState2[1];
|
|
120
|
+
|
|
121
|
+
var table = (0, _reactTable.useReactTable)({
|
|
122
|
+
data: defineData(data, loadingInitial),
|
|
123
|
+
columns: defineColumns(columns, onSelectRow, loadingInitial),
|
|
124
|
+
getCoreRowModel: (0, _reactTable.getCoreRowModel)(),
|
|
125
|
+
state: {
|
|
126
|
+
rowSelection: rowSelection
|
|
127
|
+
},
|
|
128
|
+
enableRowSelection: !!onSelectRow,
|
|
129
|
+
onRowSelectionChange: setRowSelection
|
|
130
|
+
});
|
|
131
|
+
(0, _react.useEffect)(function () {
|
|
132
|
+
if (onSelectRow && typeof onSelectRow === "function") {
|
|
133
|
+
var dataSelected = table.getSelectedRowModel().flatRows.map(function (row) {
|
|
134
|
+
return row.original;
|
|
135
|
+
});
|
|
136
|
+
onSelectRow(dataSelected);
|
|
137
|
+
}
|
|
138
|
+
}, [rowSelection]);
|
|
139
|
+
return /*#__PURE__*/_react.default.createElement(_styled.Table, {
|
|
140
|
+
stickyColumns: stickyColumns,
|
|
141
|
+
stickyRows: stickyRows
|
|
142
|
+
}, /*#__PURE__*/_react.default.createElement(_dataTable.DataTableContent, null, /*#__PURE__*/_react.default.createElement(_dataTable.DataTableHead, null, table.getHeaderGroups().map(function (headerGroup) {
|
|
143
|
+
return /*#__PURE__*/_react.default.createElement(_dataTable.DataTableRow, {
|
|
144
|
+
key: headerGroup.id
|
|
145
|
+
}, headerGroup.headers.map(function (header) {
|
|
146
|
+
return /*#__PURE__*/_react.default.createElement(_dataTable.DataTableHeadCell, Object.assign({
|
|
147
|
+
key: header.id
|
|
148
|
+
}, header.column.columnDef.meta), header.isPlaceholder ? null : (0, _reactTable.flexRender)(header.column.columnDef.header, header.getContext()));
|
|
149
|
+
}));
|
|
150
|
+
})), /*#__PURE__*/_react.default.createElement(_dataTable.DataTableBody, null, table.getRowModel().rows.map(function (row) {
|
|
151
|
+
return /*#__PURE__*/_react.default.createElement(_dataTable.DataTableRow, {
|
|
152
|
+
key: row.id,
|
|
153
|
+
selected: rowSelection.hasOwnProperty(row.index)
|
|
154
|
+
}, row.getVisibleCells().map(function (cell) {
|
|
155
|
+
return /*#__PURE__*/_react.default.createElement(_dataTable.DataTableCell, Object.assign({
|
|
156
|
+
key: cell.id
|
|
157
|
+
}, cell.column.columnDef.meta), (0, _reactTable.flexRender)(cell.column.columnDef.cell, cell.getContext()));
|
|
158
|
+
}));
|
|
159
|
+
}))));
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
exports.DataTable = DataTable;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["defineColumns","columns","onSelectRow","loadingInitial","useMemo","columnsList","Object","keys","map","key","id","defaults","column","header","meta","cell","accessorKey","info","row","original","getValue","select","table","getIsSomeRowsSelected","getIsAllRowsSelected","e","toggleAllPageRowsSelected","getIsSomeSelected","getIsSelected","getToggleSelectedHandler","hasFormControl","className","defineData","data","Array","fill","DataTable","stickyColumns","stickyRows","React","useState","rowSelection","setRowSelection","useReactTable","getCoreRowModel","state","enableRowSelection","onRowSelectionChange","useEffect","dataSelected","getSelectedRowModel","flatRows","getHeaderGroups","headerGroup","headers","columnDef","isPlaceholder","flexRender","getContext","getRowModel","rows","hasOwnProperty","index","getVisibleCells"],"sources":["DataTable.tsx"],"sourcesContent":["import React, { useEffect, useMemo } from \"react\";\nimport {\n DataTableContent,\n DataTableHead,\n DataTableRow,\n DataTableHeadCell,\n DataTableBody,\n DataTableCell,\n DataTableCellProps\n} from \"@rmwc/data-table\";\n\nimport { flexRender, getCoreRowModel, useReactTable, ColumnDef } from \"@tanstack/react-table\";\n\nimport { Checkbox } from \"~/Checkbox\";\nimport { Skeleton } from \"~/Skeleton\";\n\nimport \"@rmwc/data-table/data-table.css\";\nimport { Table } from \"./styled\";\n\ninterface Column<T> {\n /*\n * Column header component.\n */\n header: string | number | JSX.Element;\n /*\n * Cell renderer, receives the full row and returns the value to render inside the cell.\n */\n cell?: (row: T) => string | number | JSX.Element;\n /*\n * Additional props to add to both header and row cells. Refer to RMWC documentation.\n */\n meta?: DataTableCellProps;\n /*\n * Column class names.\n */\n className?: string;\n}\n\nexport type Columns<T> = {\n [P in keyof T]?: Column<T>;\n};\n\ninterface Props<T> {\n /*\n * Columns definition.\n */\n columns: Columns<T>;\n /*\n * Data to display into DataTable body.\n */\n data: T[];\n /*\n * Callback that receives the selected rows.\n */\n onSelectRow?: (rows: T[] | []) => void;\n /*\n * Render the skeleton state at the initial data loading.\n */\n loadingInitial?: boolean;\n /*\n * The number of columns to affix to the side of the table when scrolling.\n */\n stickyColumns?: number;\n /*\n * The number of rows to affix to the top of the table when scrolling.\n */\n stickyRows?: number;\n}\n\nconst defineColumns = <T,>(\n columns: Props<T>[\"columns\"],\n onSelectRow: Props<T>[\"onSelectRow\"],\n loadingInitial: Props<T>[\"loadingInitial\"]\n): ColumnDef<T>[] =>\n useMemo(() => {\n const columnsList = Object.keys(columns).map(key => ({\n id: key,\n ...columns[key as keyof typeof columns]\n }));\n\n const defaults: ColumnDef<T>[] = columnsList.map(column => {\n const { id, header, meta, cell } = column;\n\n return {\n accessorKey: id,\n header: () => header,\n cell: info => {\n if (cell && typeof cell === \"function\") {\n return cell(info.row.original);\n } else {\n return info.getValue();\n }\n },\n meta\n };\n });\n\n const select: ColumnDef<T>[] = !!onSelectRow\n ? [\n {\n id: \"datatable-select-column\",\n header: ({ table }) =>\n !loadingInitial && (\n <Checkbox\n indeterminate={table.getIsSomeRowsSelected()}\n value={table.getIsAllRowsSelected()}\n onChange={e => table.toggleAllPageRowsSelected(e)}\n />\n ),\n cell: ({ row }) => (\n <Checkbox\n indeterminate={row.getIsSomeSelected()}\n value={row.getIsSelected()}\n onChange={row.getToggleSelectedHandler()}\n />\n ),\n meta: {\n hasFormControl: true,\n className: \"datatable-select-column\"\n }\n }\n ]\n : [];\n\n return [...select, ...defaults].map(column => {\n if (loadingInitial) {\n return {\n ...column,\n cell: () => <Skeleton />\n };\n }\n\n return column;\n });\n }, [columns, onSelectRow, loadingInitial]);\n\nconst defineData = <T,>(\n data: Props<T>[\"data\"],\n loadingInitial: Props<T>[\"loadingInitial\"]\n): T[] => {\n return useMemo(() => {\n if (loadingInitial) {\n return Array(10).fill({});\n }\n return data;\n }, [data, loadingInitial]);\n};\n\nexport const DataTable = <T,>({\n columns,\n data,\n loadingInitial,\n onSelectRow,\n stickyColumns,\n stickyRows\n}: Props<T>) => {\n const [rowSelection, setRowSelection] = React.useState({});\n\n const table = useReactTable({\n data: defineData(data, loadingInitial),\n columns: defineColumns(columns, onSelectRow, loadingInitial),\n getCoreRowModel: getCoreRowModel(),\n state: {\n rowSelection\n },\n enableRowSelection: !!onSelectRow,\n onRowSelectionChange: setRowSelection\n });\n\n useEffect(() => {\n if (onSelectRow && typeof onSelectRow === \"function\") {\n const dataSelected = table.getSelectedRowModel().flatRows.map(row => row.original);\n onSelectRow(dataSelected);\n }\n }, [rowSelection]);\n\n return (\n <Table stickyColumns={stickyColumns} stickyRows={stickyRows}>\n <DataTableContent>\n <DataTableHead>\n {table.getHeaderGroups().map(headerGroup => (\n <DataTableRow key={headerGroup.id}>\n {headerGroup.headers.map(header => (\n <DataTableHeadCell\n key={header.id}\n {...header.column.columnDef.meta}\n >\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </DataTableHeadCell>\n ))}\n </DataTableRow>\n ))}\n </DataTableHead>\n <DataTableBody>\n {table.getRowModel().rows.map(row => (\n <DataTableRow\n key={row.id}\n selected={rowSelection.hasOwnProperty(row.index)}\n >\n {row.getVisibleCells().map(cell => (\n <DataTableCell key={cell.id} {...cell.column.columnDef.meta}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </DataTableCell>\n ))}\n </DataTableRow>\n ))}\n </DataTableBody>\n </DataTableContent>\n </Table>\n );\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
|
|
7
|
+
var _react2 = require("@storybook/react");
|
|
8
|
+
|
|
9
|
+
var _Story = require("@webiny/storybook-utils/Story");
|
|
10
|
+
|
|
11
|
+
var _README = _interopRequireDefault(require("./../DataTable/README.md"));
|
|
12
|
+
|
|
13
|
+
var _DataTable = require("./DataTable");
|
|
14
|
+
|
|
15
|
+
var story = (0, _react2.storiesOf)("Components/DataTable", module);
|
|
16
|
+
story.add("usage", function () {
|
|
17
|
+
var data = [{
|
|
18
|
+
name: "Page 1",
|
|
19
|
+
createdBy: "John Doe",
|
|
20
|
+
lastModified: "3 days ago",
|
|
21
|
+
status: "Draft"
|
|
22
|
+
}, {
|
|
23
|
+
name: "Page 2",
|
|
24
|
+
createdBy: "John Doe",
|
|
25
|
+
lastModified: "1 day ago",
|
|
26
|
+
status: "Published"
|
|
27
|
+
}, {
|
|
28
|
+
name: "Page 3",
|
|
29
|
+
createdBy: "John Doe",
|
|
30
|
+
lastModified: "1 hour ago",
|
|
31
|
+
status: "Published"
|
|
32
|
+
}];
|
|
33
|
+
var columns = {
|
|
34
|
+
name: {
|
|
35
|
+
header: "Title"
|
|
36
|
+
},
|
|
37
|
+
createdBy: {
|
|
38
|
+
header: "Author",
|
|
39
|
+
cell: function cell(row) {
|
|
40
|
+
return /*#__PURE__*/_react.default.createElement("em", null, row.createdBy.toUpperCase());
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
lastModified: {
|
|
44
|
+
header: "Last Modified"
|
|
45
|
+
},
|
|
46
|
+
status: {
|
|
47
|
+
header: "Status",
|
|
48
|
+
meta: {
|
|
49
|
+
alignEnd: true
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
return /*#__PURE__*/_react.default.createElement(_Story.Story, null, /*#__PURE__*/_react.default.createElement(_Story.StoryReadme, null, _README.default), /*#__PURE__*/_react.default.createElement(_Story.StorySandbox, {
|
|
54
|
+
title: "A simple DataTable."
|
|
55
|
+
}, /*#__PURE__*/_react.default.createElement(_DataTable.DataTable, {
|
|
56
|
+
data: data,
|
|
57
|
+
columns: columns
|
|
58
|
+
})), /*#__PURE__*/_react.default.createElement(_Story.StorySandbox, {
|
|
59
|
+
title: "DataTable with selectable rows"
|
|
60
|
+
}, /*#__PURE__*/_react.default.createElement(_DataTable.DataTable, {
|
|
61
|
+
data: data,
|
|
62
|
+
columns: columns,
|
|
63
|
+
onSelectRow: function onSelectRow(row) {
|
|
64
|
+
return console.log("Do whatever you like with the selected row data", row);
|
|
65
|
+
}
|
|
66
|
+
})), /*#__PURE__*/_react.default.createElement(_Story.StorySandbox, {
|
|
67
|
+
title: "DataTable at initial loading state"
|
|
68
|
+
}, /*#__PURE__*/_react.default.createElement(_DataTable.DataTable, {
|
|
69
|
+
data: data,
|
|
70
|
+
columns: columns,
|
|
71
|
+
loadingInitial: true
|
|
72
|
+
})));
|
|
73
|
+
}, {
|
|
74
|
+
info: {
|
|
75
|
+
propTables: [_DataTable.DataTable]
|
|
76
|
+
}
|
|
77
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["story","storiesOf","module","add","data","name","createdBy","lastModified","status","columns","header","cell","row","toUpperCase","meta","alignEnd","readme","console","log","info","propTables","DataTable"],"sources":["DataTable.stories.tsx"],"sourcesContent":["import React from \"react\";\nimport { storiesOf } from \"@storybook/react\";\nimport { Story, StoryReadme, StorySandbox } from \"@webiny/storybook-utils/Story\";\nimport readme from \"./../DataTable/README.md\";\nimport { Columns, DataTable } from \"./DataTable\";\n\nconst story = storiesOf(\"Components/DataTable\", module);\n\ninterface Entry {\n name: string;\n createdBy: string;\n lastModified: string;\n status: string;\n}\n\nstory.add(\n \"usage\",\n () => {\n const data: Entry[] = [\n {\n name: \"Page 1\",\n createdBy: \"John Doe\",\n lastModified: \"3 days ago\",\n status: \"Draft\"\n },\n {\n name: \"Page 2\",\n createdBy: \"John Doe\",\n lastModified: \"1 day ago\",\n status: \"Published\"\n },\n {\n name: \"Page 3\",\n createdBy: \"John Doe\",\n lastModified: \"1 hour ago\",\n status: \"Published\"\n }\n ];\n\n const columns: Columns<Entry> = {\n name: {\n header: \"Title\"\n },\n createdBy: {\n header: \"Author\",\n cell: row => <em>{row.createdBy.toUpperCase()}</em>\n },\n lastModified: {\n header: \"Last Modified\"\n },\n status: {\n header: \"Status\",\n meta: {\n alignEnd: true\n }\n }\n };\n\n return (\n <Story>\n <StoryReadme>{readme}</StoryReadme>\n <StorySandbox title={\"A simple DataTable.\"}>\n <DataTable data={data} columns={columns} />\n </StorySandbox>\n <StorySandbox title={\"DataTable with selectable rows\"}>\n <DataTable\n data={data}\n columns={columns}\n onSelectRow={row =>\n console.log(\"Do whatever you like with the selected row data\", row)\n }\n />\n </StorySandbox>\n <StorySandbox title={\"DataTable at initial loading state\"}>\n <DataTable data={data} columns={columns} loadingInitial={true} />\n </StorySandbox>\n </Story>\n );\n },\n {\n info: {\n propTables: [DataTable]\n }\n }\n);\n"],"mappings":";;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAEA,IAAMA,KAAK,GAAG,IAAAC,iBAAA,EAAU,sBAAV,EAAkCC,MAAlC,CAAd;AASAF,KAAK,CAACG,GAAN,CACI,OADJ,EAEI,YAAM;EACF,IAAMC,IAAa,GAAG,CAClB;IACIC,IAAI,EAAE,QADV;IAEIC,SAAS,EAAE,UAFf;IAGIC,YAAY,EAAE,YAHlB;IAIIC,MAAM,EAAE;EAJZ,CADkB,EAOlB;IACIH,IAAI,EAAE,QADV;IAEIC,SAAS,EAAE,UAFf;IAGIC,YAAY,EAAE,WAHlB;IAIIC,MAAM,EAAE;EAJZ,CAPkB,EAalB;IACIH,IAAI,EAAE,QADV;IAEIC,SAAS,EAAE,UAFf;IAGIC,YAAY,EAAE,YAHlB;IAIIC,MAAM,EAAE;EAJZ,CAbkB,CAAtB;EAqBA,IAAMC,OAAuB,GAAG;IAC5BJ,IAAI,EAAE;MACFK,MAAM,EAAE;IADN,CADsB;IAI5BJ,SAAS,EAAE;MACPI,MAAM,EAAE,QADD;MAEPC,IAAI,EAAE,cAAAC,GAAG;QAAA,oBAAI,yCAAKA,GAAG,CAACN,SAAJ,CAAcO,WAAd,EAAL,CAAJ;MAAA;IAFF,CAJiB;IAQ5BN,YAAY,EAAE;MACVG,MAAM,EAAE;IADE,CARc;IAW5BF,MAAM,EAAE;MACJE,MAAM,EAAE,QADJ;MAEJI,IAAI,EAAE;QACFC,QAAQ,EAAE;MADR;IAFF;EAXoB,CAAhC;EAmBA,oBACI,6BAAC,YAAD,qBACI,6BAAC,kBAAD,QAAcC,eAAd,CADJ,eAEI,6BAAC,mBAAD;IAAc,KAAK,EAAE;EAArB,gBACI,6BAAC,oBAAD;IAAW,IAAI,EAAEZ,IAAjB;IAAuB,OAAO,EAAEK;EAAhC,EADJ,CAFJ,eAKI,6BAAC,mBAAD;IAAc,KAAK,EAAE;EAArB,gBACI,6BAAC,oBAAD;IACI,IAAI,EAAEL,IADV;IAEI,OAAO,EAAEK,OAFb;IAGI,WAAW,EAAE,qBAAAG,GAAG;MAAA,OACZK,OAAO,CAACC,GAAR,CAAY,iDAAZ,EAA+DN,GAA/D,CADY;IAAA;EAHpB,EADJ,CALJ,eAcI,6BAAC,mBAAD;IAAc,KAAK,EAAE;EAArB,gBACI,6BAAC,oBAAD;IAAW,IAAI,EAAER,IAAjB;IAAuB,OAAO,EAAEK,OAAhC;IAAyC,cAAc,EAAE;EAAzD,EADJ,CAdJ,CADJ;AAoBH,CA/DL,EAgEI;EACIU,IAAI,EAAE;IACFC,UAAU,EAAE,CAACC,oBAAD;EADV;AADV,CAhEJ"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# DataTable
|
|
2
|
+
|
|
3
|
+
### Design
|
|
4
|
+
|
|
5
|
+
https://material.io/components/data-tables
|
|
6
|
+
|
|
7
|
+
### Description
|
|
8
|
+
|
|
9
|
+
Use `DataTable` components to display sets of data across rows and columns.
|
|
10
|
+
|
|
11
|
+
### Usage
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
import { DataTable, Columns } from "@webiny/ui/DataTable";
|
|
15
|
+
|
|
16
|
+
// Declare the data structure.
|
|
17
|
+
interface Entry {
|
|
18
|
+
name: string;
|
|
19
|
+
createdBy: string;
|
|
20
|
+
lastModified: string;
|
|
21
|
+
status: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Define the data you want to display.
|
|
25
|
+
const data: Entry[] = [
|
|
26
|
+
{
|
|
27
|
+
name: "Page 1",
|
|
28
|
+
createdBy: "John Doe",
|
|
29
|
+
lastModified: "3 days ago",
|
|
30
|
+
status: "Draft"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: "Page 2",
|
|
34
|
+
createdBy: "John Doe",
|
|
35
|
+
lastModified: "1 day ago",
|
|
36
|
+
status: "Published"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: "Page 3",
|
|
40
|
+
createdBy: "John Doe",
|
|
41
|
+
lastModified: "1 hour ago",
|
|
42
|
+
status: "Published"
|
|
43
|
+
}
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
// Define the columns structure for your table.
|
|
47
|
+
const columns: Columns<Entry> = {
|
|
48
|
+
name: {
|
|
49
|
+
header: "Title"
|
|
50
|
+
},
|
|
51
|
+
createdBy: {
|
|
52
|
+
header: "Author",
|
|
53
|
+
cell: row => <em>{row.createdBy.toUpperCase()}</em>
|
|
54
|
+
},
|
|
55
|
+
lastModified: {
|
|
56
|
+
header: "Last Modified"
|
|
57
|
+
},
|
|
58
|
+
status: {
|
|
59
|
+
header: "Status",
|
|
60
|
+
meta: {
|
|
61
|
+
alignEnd: true
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
...
|
|
67
|
+
|
|
68
|
+
// Use the <DataTable /> component within your code.
|
|
69
|
+
return(
|
|
70
|
+
<DataTable data={data} columns={columns} />
|
|
71
|
+
)
|
|
72
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./DataTable";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
var _DataTable = require("./DataTable");
|
|
8
|
+
|
|
9
|
+
Object.keys(_DataTable).forEach(function (key) {
|
|
10
|
+
if (key === "default" || key === "__esModule") return;
|
|
11
|
+
if (key in exports && exports[key] === _DataTable[key]) return;
|
|
12
|
+
Object.defineProperty(exports, key, {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function get() {
|
|
15
|
+
return _DataTable[key];
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./DataTable\";\n"],"mappings":";;;;;;AAAA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.Table = void 0;
|
|
9
|
+
|
|
10
|
+
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
11
|
+
|
|
12
|
+
var _dataTable = require("@rmwc/data-table");
|
|
13
|
+
|
|
14
|
+
var Table = /*#__PURE__*/(0, _styled.default)(_dataTable.DataTable, {
|
|
15
|
+
label: "Table",
|
|
16
|
+
target: "er5nqo40"
|
|
17
|
+
})("width:100%;th,td{vertical-align:middle;}.datatable-select-column{width:56px;}");
|
|
18
|
+
exports.Table = Table;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Table","styled","RmwcDataTable"],"sources":["styled.tsx"],"sourcesContent":["import styled from \"@emotion/styled\";\n\nimport { DataTable as RmwcDataTable, DataTableProps } from \"@rmwc/data-table\";\n\nexport const Table = styled(RmwcDataTable)<DataTableProps>`\n width: 100%;\n\n th,\n td {\n vertical-align: middle;\n }\n\n .datatable-select-column {\n width: 56px;\n }\n`;\n"],"mappings":";;;;;;;;;AAAA;;AAEA;;AAEO,IAAMA,KAAK,oBAAGC,eAAH,EAAUC,oBAAV;EAAA;EAAA;AAAA,mFAAX"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/// <reference types="web" />
|
|
2
|
+
import React from "react";
|
|
3
|
+
interface ApplyValueCb {
|
|
4
|
+
(value: string, cb: (value: string) => void): void;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* This component is used to wrap Input and Textarea components to optimize form re-render.
|
|
8
|
+
* These 2 are the only components that trigger form model change on each character input.
|
|
9
|
+
* This means, whenever you type a letter an entire form re-renders.
|
|
10
|
+
* On complex forms you will feel and see a significant delay if this component is not used.
|
|
11
|
+
*
|
|
12
|
+
* The logic behind this component is to serve as a middleware between Form and Input/Textarea, and only notify form of a change when
|
|
13
|
+
* a user stops typing for given period of time (400ms by default).
|
|
14
|
+
*/
|
|
15
|
+
interface OnChangeCallable {
|
|
16
|
+
(value: string, cb?: ApplyValueCb): void;
|
|
17
|
+
}
|
|
18
|
+
interface OnBlurCallable {
|
|
19
|
+
(ev: React.SyntheticEvent): void;
|
|
20
|
+
}
|
|
21
|
+
interface OnKeyDownCallable {
|
|
22
|
+
(ev: React.KeyboardEvent<HTMLInputElement>): void;
|
|
23
|
+
}
|
|
24
|
+
interface ChildrenCallableParams {
|
|
25
|
+
value: string;
|
|
26
|
+
onChange: OnChangeCallable;
|
|
27
|
+
}
|
|
28
|
+
interface ChildrenCallable {
|
|
29
|
+
(params: ChildrenCallableParams): React.ReactElement;
|
|
30
|
+
}
|
|
31
|
+
export interface DelayedOnChangeProps {
|
|
32
|
+
value?: string;
|
|
33
|
+
delay?: number;
|
|
34
|
+
onChange?: OnChangeCallable;
|
|
35
|
+
onBlur?: OnBlurCallable;
|
|
36
|
+
onKeyDown?: OnKeyDownCallable;
|
|
37
|
+
children: React.ReactNode | ChildrenCallable;
|
|
38
|
+
}
|
|
39
|
+
export declare const DelayedOnChange: React.FC<DelayedOnChangeProps>;
|
|
40
|
+
export default DelayedOnChange;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.default = exports.DelayedOnChange = void 0;
|
|
11
|
+
|
|
12
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
13
|
+
|
|
14
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
|
+
|
|
16
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
17
|
+
|
|
18
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
19
|
+
|
|
20
|
+
var _excluded = ["children"];
|
|
21
|
+
|
|
22
|
+
var emptyFunction = function emptyFunction() {
|
|
23
|
+
return undefined;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
var DelayedOnChange = function DelayedOnChange(_ref) {
|
|
27
|
+
var children = _ref.children,
|
|
28
|
+
other = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
|
29
|
+
var onChange = other.onChange,
|
|
30
|
+
_other$delay = other.delay,
|
|
31
|
+
delay = _other$delay === void 0 ? 400 : _other$delay,
|
|
32
|
+
initialValue = other.value;
|
|
33
|
+
|
|
34
|
+
var _useState = (0, _react.useState)(initialValue),
|
|
35
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
36
|
+
value = _useState2[0],
|
|
37
|
+
setValue = _useState2[1]; // Sync state and props
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
(0, _react.useEffect)(function () {
|
|
41
|
+
if (initialValue !== value) {
|
|
42
|
+
setValue(initialValue);
|
|
43
|
+
}
|
|
44
|
+
}, [initialValue]);
|
|
45
|
+
|
|
46
|
+
var localTimeout = _react.default.useRef(null);
|
|
47
|
+
|
|
48
|
+
var applyValue = function applyValue(value) {
|
|
49
|
+
var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : emptyFunction;
|
|
50
|
+
localTimeout.current && clearTimeout(localTimeout.current);
|
|
51
|
+
localTimeout.current = null;
|
|
52
|
+
|
|
53
|
+
if (!onChange) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
onChange(value, callback);
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
var onChangeLocal = _react.default.useCallback(function (value) {
|
|
61
|
+
setValue(value);
|
|
62
|
+
}, []); // this is fired upon change value state
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
var onValueStateChanged = function onValueStateChanged(nextValue) {
|
|
66
|
+
localTimeout.current && clearTimeout(localTimeout.current);
|
|
67
|
+
localTimeout.current = null;
|
|
68
|
+
localTimeout.current = setTimeout(function () {
|
|
69
|
+
return applyValue(nextValue);
|
|
70
|
+
}, delay);
|
|
71
|
+
}; // need to clear the timeout when unmounting the component
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
(0, _react.useEffect)(function () {
|
|
75
|
+
return function () {
|
|
76
|
+
if (!localTimeout.current) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
clearTimeout(localTimeout.current);
|
|
81
|
+
localTimeout.current = null;
|
|
82
|
+
};
|
|
83
|
+
}, []);
|
|
84
|
+
(0, _react.useEffect)(function () {
|
|
85
|
+
onValueStateChanged(value || "");
|
|
86
|
+
}, [value]);
|
|
87
|
+
var newProps = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, other), {}, {
|
|
88
|
+
value: value || "",
|
|
89
|
+
onChange: onChangeLocal
|
|
90
|
+
});
|
|
91
|
+
var renderProp = typeof children === "function" ? children : null;
|
|
92
|
+
var child = renderProp ? renderProp(newProps) : /*#__PURE__*/_react.default.cloneElement(children, newProps);
|
|
93
|
+
var props = (0, _objectSpread2.default)({}, child.props);
|
|
94
|
+
var realOnKeyDown = props.onKeyDown || emptyFunction;
|
|
95
|
+
var realOnBlur = props.onBlur || emptyFunction; // Need to apply value if input lost focus
|
|
96
|
+
|
|
97
|
+
var onBlur = function onBlur(ev) {
|
|
98
|
+
ev.persist();
|
|
99
|
+
applyValue(ev.target.value, function () {
|
|
100
|
+
return realOnBlur(ev);
|
|
101
|
+
});
|
|
102
|
+
}; // Need to listen for TAB key to apply new value immediately, without delay. Otherwise validation will be triggered with old value.
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
var onKeyDown = function onKeyDown(ev) {
|
|
106
|
+
ev.persist();
|
|
107
|
+
|
|
108
|
+
if (ev.key === "Tab") {
|
|
109
|
+
applyValue(ev.target.value, function () {
|
|
110
|
+
return realOnKeyDown(ev);
|
|
111
|
+
});
|
|
112
|
+
} else if (ev.key === "Enter" && props["data-on-enter"]) {
|
|
113
|
+
applyValue(ev.target.value, function () {
|
|
114
|
+
return realOnKeyDown(ev);
|
|
115
|
+
});
|
|
116
|
+
} else {
|
|
117
|
+
realOnKeyDown(ev);
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
return /*#__PURE__*/_react.default.cloneElement(child, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
|
|
122
|
+
onBlur: onBlur,
|
|
123
|
+
onKeyDown: onKeyDown
|
|
124
|
+
}));
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
exports.DelayedOnChange = DelayedOnChange;
|
|
128
|
+
var _default = DelayedOnChange;
|
|
129
|
+
exports.default = _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["emptyFunction","undefined","DelayedOnChange","children","other","onChange","delay","initialValue","value","useState","setValue","useEffect","localTimeout","React","useRef","applyValue","callback","current","clearTimeout","onChangeLocal","useCallback","onValueStateChanged","nextValue","setTimeout","newProps","renderProp","child","cloneElement","props","realOnKeyDown","onKeyDown","realOnBlur","onBlur","ev","persist","target","key"],"sources":["DelayedOnChange.ts"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\n\nconst emptyFunction = (): undefined => {\n return undefined;\n};\n\ninterface ApplyValueCb {\n (value: string, cb: (value: string) => void): void;\n}\n/**\n * This component is used to wrap Input and Textarea components to optimize form re-render.\n * These 2 are the only components that trigger form model change on each character input.\n * This means, whenever you type a letter an entire form re-renders.\n * On complex forms you will feel and see a significant delay if this component is not used.\n *\n * The logic behind this component is to serve as a middleware between Form and Input/Textarea, and only notify form of a change when\n * a user stops typing for given period of time (400ms by default).\n */\ninterface OnChangeCallable {\n (value: string, cb?: ApplyValueCb): void;\n}\ninterface OnBlurCallable {\n (ev: React.SyntheticEvent): void;\n}\ninterface OnKeyDownCallable {\n (ev: React.KeyboardEvent<HTMLInputElement>): void;\n}\ninterface ChildrenCallableParams {\n value: string;\n onChange: OnChangeCallable;\n}\ninterface ChildrenCallable {\n (params: ChildrenCallableParams): React.ReactElement;\n}\nexport interface DelayedOnChangeProps {\n value?: string;\n delay?: number;\n onChange?: OnChangeCallable;\n onBlur?: OnBlurCallable;\n onKeyDown?: OnKeyDownCallable;\n children: React.ReactNode | ChildrenCallable;\n}\nexport const DelayedOnChange: React.FC<DelayedOnChangeProps> = ({ children, ...other }) => {\n const { onChange, delay = 400, value: initialValue } = other;\n const [value, setValue] = useState<string | undefined>(initialValue);\n // Sync state and props\n useEffect(() => {\n if (initialValue !== value) {\n setValue(initialValue);\n }\n }, [initialValue]);\n\n const localTimeout = React.useRef<number | null>(null);\n\n const applyValue = (value: string, callback: ApplyValueCb = emptyFunction) => {\n localTimeout.current && clearTimeout(localTimeout.current);\n localTimeout.current = null;\n if (!onChange) {\n return;\n }\n onChange(value, callback);\n };\n\n const onChangeLocal = React.useCallback((value: string) => {\n setValue(value);\n }, []);\n\n // this is fired upon change value state\n const onValueStateChanged = (nextValue: string) => {\n localTimeout.current && clearTimeout(localTimeout.current);\n localTimeout.current = null;\n localTimeout.current = setTimeout(() => applyValue(nextValue), delay) as unknown as number;\n };\n\n // need to clear the timeout when unmounting the component\n useEffect(() => {\n return () => {\n if (!localTimeout.current) {\n return;\n }\n clearTimeout(localTimeout.current);\n localTimeout.current = null;\n };\n }, []);\n\n useEffect(() => {\n onValueStateChanged(value || \"\");\n }, [value]);\n\n const newProps = {\n ...other,\n value: value || \"\",\n onChange: onChangeLocal\n };\n\n const renderProp = typeof children === \"function\" ? (children as ChildrenCallable) : null;\n const child = renderProp\n ? renderProp(newProps)\n : React.cloneElement(children as unknown as React.ReactElement, newProps);\n\n const props = { ...child.props };\n const realOnKeyDown = props.onKeyDown || emptyFunction;\n const realOnBlur = props.onBlur || emptyFunction;\n\n // Need to apply value if input lost focus\n const onBlur: OnBlurCallable = ev => {\n ev.persist();\n applyValue((ev.target as HTMLInputElement).value, () => realOnBlur(ev));\n };\n\n // Need to listen for TAB key to apply new value immediately, without delay. Otherwise validation will be triggered with old value.\n const onKeyDown: OnKeyDownCallable = ev => {\n ev.persist();\n if (ev.key === \"Tab\") {\n applyValue((ev.target as HTMLInputElement).value, () => realOnKeyDown(ev));\n } else if (ev.key === \"Enter\" && props[\"data-on-enter\"]) {\n applyValue((ev.target as HTMLInputElement).value, () => realOnKeyDown(ev));\n } else {\n realOnKeyDown(ev);\n }\n };\n\n return React.cloneElement(child, { ...props, onBlur, onKeyDown });\n};\n\nexport default DelayedOnChange;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
Object.defineProperty(exports, "DelayedOnChange", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function get() {
|
|
11
|
+
return _DelayedOnChange.default;
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
Object.defineProperty(exports, "withDelayedOnChange", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function get() {
|
|
17
|
+
return _withDelayedOnChange.default;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
var _DelayedOnChange = _interopRequireDefault(require("./DelayedOnChange"));
|
|
22
|
+
|
|
23
|
+
var _withDelayedOnChange = _interopRequireDefault(require("./withDelayedOnChange"));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export { default as DelayedOnChange } from \"./DelayedOnChange\";\nexport { default as withDelayedOnChange } from \"./withDelayedOnChange\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;;AACA"}
|