@openedx/paragon 22.20.3 → 22.20.5
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/README.md +80 -14
- package/dist/DataTable/DropdownFilters.js +7 -2
- package/dist/DataTable/DropdownFilters.js.map +1 -1
- package/dist/DataTable/index.js +13 -1
- package/dist/DataTable/index.js.map +1 -1
- package/dist/DataTable/messages.js +5 -0
- package/package.json +1 -1
- package/src/DataTable/DropdownFilters.jsx +9 -2
- package/src/DataTable/README.md +19 -18
- package/src/DataTable/index.jsx +10 -1
- package/src/DataTable/messages.js +5 -0
- package/src/DataTable/tests/DataTable.test.jsx +51 -1
- package/src/DataTable/tests/DropdownFilters.test.jsx +11 -7
- package/src/Modal/modal-popup.mdx +1 -1
package/README.md
CHANGED
|
@@ -121,6 +121,72 @@ Note that if you are using ``@edx/frontend-platform``'s ``AppProvider`` componen
|
|
|
121
121
|
});
|
|
122
122
|
```
|
|
123
123
|
|
|
124
|
+
## Available Scripts
|
|
125
|
+
|
|
126
|
+
Paragon provides a comprehensive set of npm scripts to help with development, testing, building, and maintenance tasks. Here's a detailed explanation of each available script:
|
|
127
|
+
|
|
128
|
+
### Build Scripts
|
|
129
|
+
|
|
130
|
+
- **`npm run build`** - Builds the entire Paragon design system using the Makefile. This compiles TypeScript, SCSS, and creates the distribution files in the `dist/` directory.
|
|
131
|
+
|
|
132
|
+
- **`npm run build-docs`** - Builds the documentation website specifically. This is useful when generating a static version of the docs for deployment.
|
|
133
|
+
|
|
134
|
+
- **`npm run build-types`** - Generates TypeScript declaration files (`.d.ts`). This is essential for providing type information to TypeScript consumers.
|
|
135
|
+
|
|
136
|
+
### Development Scripts
|
|
137
|
+
|
|
138
|
+
- **`npm start`** - Starts the documentation website development server. This is the primary way to view and interact with Paragon components during development.
|
|
139
|
+
|
|
140
|
+
- **`npm run generate-component`** - Launches the component generator tool. This interactive CLI helps create new components with all the necessary files and boilerplate code.
|
|
141
|
+
|
|
142
|
+
- **`npm run example:start`** - Starts the example application, which allows testing Paragon components in a micro-frontend (MFE) environment.
|
|
143
|
+
|
|
144
|
+
- **`npm run example:start:with-theme`** - Starts the example application with theme support, useful for testing branded components.
|
|
145
|
+
|
|
146
|
+
### Testing Scripts
|
|
147
|
+
|
|
148
|
+
- **`npm run test`** - Runs the full test suite with coverage reporting using Jest.
|
|
149
|
+
|
|
150
|
+
- **`npm run test:watch`** - Runs tests in watch mode, automatically re-running tests when files change.
|
|
151
|
+
|
|
152
|
+
- **`npm run debug-test`** - Runs tests with Node.js inspector enabled, allowing debugging tests in Chrome DevTools.
|
|
153
|
+
|
|
154
|
+
- **`npm run snapshot`** - Updates Jest snapshot files. Run this when intentional changes to component rendering should be reflected in snapshots.
|
|
155
|
+
|
|
156
|
+
### Code Quality Scripts
|
|
157
|
+
|
|
158
|
+
- **`npm run lint`** - Runs both ESLint (for JavaScript/TypeScript) and Stylelint (for SCSS) to check code quality and enforce coding standards.
|
|
159
|
+
|
|
160
|
+
- **`npm run stylelint`** - Runs Stylelint specifically on SCSS files to ensure consistent styling conventions.
|
|
161
|
+
|
|
162
|
+
- **`npm run type-check`** - Performs TypeScript type checking without emitting files.
|
|
163
|
+
|
|
164
|
+
- **`npm run type-check:watch`** - Runs TypeScript type checking in watch mode, continuously monitoring for type errors during development.
|
|
165
|
+
|
|
166
|
+
### Internationalization Scripts
|
|
167
|
+
|
|
168
|
+
- **`npm run i18n_extract`** - Extracts internationalization strings from React components and generates a JSON file for translation services like Transifex.
|
|
169
|
+
|
|
170
|
+
- **`npm run i18n_compile`** - Compiles translated messages back into the format expected by react-intl.
|
|
171
|
+
|
|
172
|
+
### Documentation and Playroom Scripts
|
|
173
|
+
|
|
174
|
+
- **`npm run playroom:start`** - Starts Playroom, a tool for developing and testing components in isolation with live code editing.
|
|
175
|
+
|
|
176
|
+
- **`npm run playroom:build`** - Builds a static version of Playroom for deployment.
|
|
177
|
+
|
|
178
|
+
### Release and Maintenance Scripts
|
|
179
|
+
|
|
180
|
+
- **`npm run semantic-release`** - Runs the semantic release process, which automatically determines version bumps, creates Git tags, and publishes to npm based on commit messages.
|
|
181
|
+
|
|
182
|
+
- **`npm run generate-changelog`** - Generates a changelog file based on commit history and semantic versioning.
|
|
183
|
+
|
|
184
|
+
- **`npm run commit`** - Runs the commitizen CLI, which helps create properly formatted commit messages that work with semantic-release.
|
|
185
|
+
|
|
186
|
+
- **`npm run prepublishOnly`** - Automatically runs before npm publish to ensure the library is built before distribution.
|
|
187
|
+
|
|
188
|
+
- **`npm run prepare`** - Sets up Git hooks (via Husky) for pre-commit linting and other checks.
|
|
189
|
+
|
|
124
190
|
## Contributing
|
|
125
191
|
|
|
126
192
|
The branch to target with your PR depends on the type of change you are contributing to Paragon.
|
|
@@ -148,7 +214,7 @@ If you want to test the changes with local MFE setup, you need to create a "modu
|
|
|
148
214
|
```javascript
|
|
149
215
|
module.exports = {
|
|
150
216
|
/*
|
|
151
|
-
Modules you want to use from local source code. Adding a module here means that when
|
|
217
|
+
Modules you want to use from local source code. Adding a module here means that when
|
|
152
218
|
your MFE runs its build, it'll resolve the source from peer directories of the app.
|
|
153
219
|
|
|
154
220
|
moduleName: the name you use to import code from the module.
|
|
@@ -173,26 +239,26 @@ Then, when importing Paragon's core SCSS in your MFE the import needs to begin w
|
|
|
173
239
|
When developing a new component you should generally follow three rules:
|
|
174
240
|
1. The component should not have **any** hardcoded strings as it would be impossible for consumers to translate it
|
|
175
241
|
2. Internationalize all default values of props that expect strings, i.e.
|
|
176
|
-
|
|
242
|
+
|
|
177
243
|
- For places where you need to display a string, and it's okay if it is a React element use ``FormattedMessage``, e.g. (see [Alert](src/Alert/index.jsx) component for a full example)
|
|
178
|
-
|
|
244
|
+
|
|
179
245
|
```javascript
|
|
180
246
|
import { FormattedMessage } from 'react-intl';
|
|
181
|
-
|
|
182
|
-
<FormattedMessage
|
|
247
|
+
|
|
248
|
+
<FormattedMessage
|
|
183
249
|
id="pgn.Alert.closeLabel"
|
|
184
250
|
defaultMessage="Dismiss"
|
|
185
251
|
description="Label of a close button on Alert component"
|
|
186
252
|
/>
|
|
187
253
|
```
|
|
188
|
-
|
|
254
|
+
|
|
189
255
|
- For places where the display string has to be a plain JavaScript string use ``formatMessage``, this would require access to ``intl`` object from ``react-intl``, e.g.
|
|
190
|
-
|
|
256
|
+
|
|
191
257
|
- For class components use ``injectIntl`` HOC
|
|
192
258
|
|
|
193
259
|
```javascript
|
|
194
260
|
import { injectIntl } from 'react-intl';
|
|
195
|
-
|
|
261
|
+
|
|
196
262
|
class MyClassComponent extends React.Component {
|
|
197
263
|
render() {
|
|
198
264
|
const { altText, intl } = this.props;
|
|
@@ -201,7 +267,7 @@ When developing a new component you should generally follow three rules:
|
|
|
201
267
|
defaultMessage: 'Close',
|
|
202
268
|
description: 'Close label for Toast component',
|
|
203
269
|
});
|
|
204
|
-
|
|
270
|
+
|
|
205
271
|
return (
|
|
206
272
|
<IconButton
|
|
207
273
|
alt={intlCloseLabel}
|
|
@@ -211,15 +277,15 @@ When developing a new component you should generally follow three rules:
|
|
|
211
277
|
)
|
|
212
278
|
}
|
|
213
279
|
}
|
|
214
|
-
|
|
280
|
+
|
|
215
281
|
export default injectIntl(MyClassComponent);
|
|
216
282
|
```
|
|
217
283
|
|
|
218
284
|
- For functional components use ``useIntl`` hook
|
|
219
285
|
|
|
220
|
-
```javascript
|
|
286
|
+
```javascript
|
|
221
287
|
import { useIntl } from 'react-intl';
|
|
222
|
-
|
|
288
|
+
|
|
223
289
|
const MyFunctionComponent = ({ altText }) => {
|
|
224
290
|
const intls = useIntl();
|
|
225
291
|
const intlAltText = altText || intl.formatMessage({
|
|
@@ -227,7 +293,7 @@ When developing a new component you should generally follow three rules:
|
|
|
227
293
|
defaultMessage: 'Close',
|
|
228
294
|
description: 'Close label for Toast component',
|
|
229
295
|
});
|
|
230
|
-
|
|
296
|
+
|
|
231
297
|
return (
|
|
232
298
|
<IconButton
|
|
233
299
|
alt={intlCloseLabel}
|
|
@@ -239,7 +305,7 @@ When developing a new component you should generally follow three rules:
|
|
|
239
305
|
|
|
240
306
|
export default MyFunctionComponent;
|
|
241
307
|
```
|
|
242
|
-
|
|
308
|
+
|
|
243
309
|
**Notes on the format above**:
|
|
244
310
|
- `id` is required and must be a dot-separated string of the format `pgn.<componentName>.<subcomponentName>.<propName>`
|
|
245
311
|
- The `defaultMessage` is required, and should be the English display string.
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import React, { useContext, useMemo } from 'react';
|
|
2
|
+
import { useIntl } from 'react-intl';
|
|
2
3
|
import DataTableContext from './DataTableContext';
|
|
3
4
|
import { DropdownButton } from '../Dropdown';
|
|
4
5
|
import useWindowSize from '../hooks/useWindowSizeHook';
|
|
5
6
|
import breakpoints from '../utils/breakpoints';
|
|
7
|
+
import messages from './messages';
|
|
6
8
|
|
|
7
9
|
/** The first filter will be as an input, additional filters will be available in a dropdown. */
|
|
8
10
|
function DropdownFilters() {
|
|
11
|
+
const intl = useIntl();
|
|
9
12
|
const {
|
|
10
13
|
width
|
|
11
14
|
} = useWindowSize();
|
|
12
15
|
const {
|
|
13
16
|
columns,
|
|
14
|
-
numBreakoutFilters
|
|
17
|
+
numBreakoutFilters,
|
|
18
|
+
filtersTitle
|
|
15
19
|
} = useContext(DataTableContext);
|
|
16
20
|
const [breakoutFilters, otherFilters] = useMemo(() => {
|
|
17
21
|
if (!columns) {
|
|
@@ -26,6 +30,7 @@ function DropdownFilters() {
|
|
|
26
30
|
const dropdownFilters = availableFilters.slice(numberOfBreakoutFilters);
|
|
27
31
|
return [boFilters, dropdownFilters];
|
|
28
32
|
}, [columns, width, numBreakoutFilters]);
|
|
33
|
+
const dropdownTitle = filtersTitle || intl.formatMessage(messages.filtersDropdownTitle);
|
|
29
34
|
return /*#__PURE__*/React.createElement("div", {
|
|
30
35
|
className: "pgn__data-table-filters"
|
|
31
36
|
}, breakoutFilters.length > 0 && breakoutFilters.map(column => /*#__PURE__*/React.createElement("div", {
|
|
@@ -34,7 +39,7 @@ function DropdownFilters() {
|
|
|
34
39
|
}, column.render('Filter'))), otherFilters.length > 0 && /*#__PURE__*/React.createElement(DropdownButton, {
|
|
35
40
|
variant: "outline-primary",
|
|
36
41
|
id: "table-filters-dropdown",
|
|
37
|
-
title:
|
|
42
|
+
title: dropdownTitle
|
|
38
43
|
}, otherFilters.map(column => /*#__PURE__*/React.createElement("div", {
|
|
39
44
|
key: column.Header,
|
|
40
45
|
className: "pgn__data-table-filters-dropdown-item"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownFilters.js","names":["React","useContext","useMemo","DataTableContext","DropdownButton","useWindowSize","breakpoints","DropdownFilters","width","columns","numBreakoutFilters","breakoutFilters","otherFilters","availableFilters","filter","column","canFilter","small","minWidth","numberOfBreakoutFilters","boFilters","slice","dropdownFilters","createElement","className","length","map","key","Header","render","variant","id","title"],"sources":["../../src/DataTable/DropdownFilters.jsx"],"sourcesContent":["import React, { useContext, useMemo } from 'react';\nimport DataTableContext from './DataTableContext';\nimport { DropdownButton } from '../Dropdown';\nimport useWindowSize from '../hooks/useWindowSizeHook';\nimport breakpoints from '../utils/breakpoints';\n\n/** The first filter will be as an input, additional filters will be available in a dropdown. */\nfunction DropdownFilters() {\n const { width } = useWindowSize();\n const {
|
|
1
|
+
{"version":3,"file":"DropdownFilters.js","names":["React","useContext","useMemo","useIntl","DataTableContext","DropdownButton","useWindowSize","breakpoints","messages","DropdownFilters","intl","width","columns","numBreakoutFilters","filtersTitle","breakoutFilters","otherFilters","availableFilters","filter","column","canFilter","small","minWidth","numberOfBreakoutFilters","boFilters","slice","dropdownFilters","dropdownTitle","formatMessage","filtersDropdownTitle","createElement","className","length","map","key","Header","render","variant","id","title"],"sources":["../../src/DataTable/DropdownFilters.jsx"],"sourcesContent":["import React, { useContext, useMemo } from 'react';\nimport { useIntl } from 'react-intl';\nimport DataTableContext from './DataTableContext';\nimport { DropdownButton } from '../Dropdown';\nimport useWindowSize from '../hooks/useWindowSizeHook';\nimport breakpoints from '../utils/breakpoints';\nimport messages from './messages';\n\n/** The first filter will be as an input, additional filters will be available in a dropdown. */\nfunction DropdownFilters() {\n const intl = useIntl();\n const { width } = useWindowSize();\n const {\n columns, numBreakoutFilters, filtersTitle,\n } = useContext(DataTableContext);\n\n const [breakoutFilters, otherFilters] = useMemo(() => {\n if (!columns) {\n return [[], []];\n }\n const availableFilters = columns.filter((column) => column.canFilter);\n if (width < breakpoints.small.minWidth) {\n return [[], availableFilters];\n }\n\n const numberOfBreakoutFilters = numBreakoutFilters || 1;\n const boFilters = availableFilters.slice(0, numberOfBreakoutFilters);\n const dropdownFilters = availableFilters.slice(numberOfBreakoutFilters);\n\n return [boFilters, dropdownFilters];\n }, [columns, width, numBreakoutFilters]);\n\n const dropdownTitle = filtersTitle || intl.formatMessage(messages.filtersDropdownTitle);\n\n return (\n <div className=\"pgn__data-table-filters\">\n {breakoutFilters.length > 0 && breakoutFilters.map((column) => (\n <div className=\"pgn__data-table-filters-breakout-filter\" key={column.Header}>\n {column.render('Filter')}\n </div>\n ))}\n {otherFilters.length > 0 && (\n <DropdownButton variant=\"outline-primary\" id=\"table-filters-dropdown\" title={dropdownTitle}>\n {otherFilters.map((column) => (\n <div\n key={column.Header}\n className=\"pgn__data-table-filters-dropdown-item\"\n >\n {column.render('Filter')}\n </div>\n ))}\n </DropdownButton>\n )}\n </div>\n );\n}\n\nexport default DropdownFilters;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,UAAU,EAAEC,OAAO,QAAQ,OAAO;AAClD,SAASC,OAAO,QAAQ,YAAY;AACpC,OAAOC,gBAAgB,MAAM,oBAAoB;AACjD,SAASC,cAAc,QAAQ,aAAa;AAC5C,OAAOC,aAAa,MAAM,4BAA4B;AACtD,OAAOC,WAAW,MAAM,sBAAsB;AAC9C,OAAOC,QAAQ,MAAM,YAAY;;AAEjC;AACA,SAASC,eAAeA,CAAA,EAAG;EACzB,MAAMC,IAAI,GAAGP,OAAO,CAAC,CAAC;EACtB,MAAM;IAAEQ;EAAM,CAAC,GAAGL,aAAa,CAAC,CAAC;EACjC,MAAM;IACJM,OAAO;IAAEC,kBAAkB;IAAEC;EAC/B,CAAC,GAAGb,UAAU,CAACG,gBAAgB,CAAC;EAEhC,MAAM,CAACW,eAAe,EAAEC,YAAY,CAAC,GAAGd,OAAO,CAAC,MAAM;IACpD,IAAI,CAACU,OAAO,EAAE;MACZ,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;IACjB;IACA,MAAMK,gBAAgB,GAAGL,OAAO,CAACM,MAAM,CAAEC,MAAM,IAAKA,MAAM,CAACC,SAAS,CAAC;IACrE,IAAIT,KAAK,GAAGJ,WAAW,CAACc,KAAK,CAACC,QAAQ,EAAE;MACtC,OAAO,CAAC,EAAE,EAAEL,gBAAgB,CAAC;IAC/B;IAEA,MAAMM,uBAAuB,GAAGV,kBAAkB,IAAI,CAAC;IACvD,MAAMW,SAAS,GAAGP,gBAAgB,CAACQ,KAAK,CAAC,CAAC,EAAEF,uBAAuB,CAAC;IACpE,MAAMG,eAAe,GAAGT,gBAAgB,CAACQ,KAAK,CAACF,uBAAuB,CAAC;IAEvE,OAAO,CAACC,SAAS,EAAEE,eAAe,CAAC;EACrC,CAAC,EAAE,CAACd,OAAO,EAAED,KAAK,EAAEE,kBAAkB,CAAC,CAAC;EAExC,MAAMc,aAAa,GAAGb,YAAY,IAAIJ,IAAI,CAACkB,aAAa,CAACpB,QAAQ,CAACqB,oBAAoB,CAAC;EAEvF,oBACE7B,KAAA,CAAA8B,aAAA;IAAKC,SAAS,EAAC;EAAyB,GACrChB,eAAe,CAACiB,MAAM,GAAG,CAAC,IAAIjB,eAAe,CAACkB,GAAG,CAAEd,MAAM,iBACxDnB,KAAA,CAAA8B,aAAA;IAAKC,SAAS,EAAC,yCAAyC;IAACG,GAAG,EAAEf,MAAM,CAACgB;EAAO,GACzEhB,MAAM,CAACiB,MAAM,CAAC,QAAQ,CACpB,CACN,CAAC,EACDpB,YAAY,CAACgB,MAAM,GAAG,CAAC,iBACtBhC,KAAA,CAAA8B,aAAA,CAACzB,cAAc;IAACgC,OAAO,EAAC,iBAAiB;IAACC,EAAE,EAAC,wBAAwB;IAACC,KAAK,EAAEZ;EAAc,GACxFX,YAAY,CAACiB,GAAG,CAAEd,MAAM,iBACvBnB,KAAA,CAAA8B,aAAA;IACEI,GAAG,EAAEf,MAAM,CAACgB,MAAO;IACnBJ,SAAS,EAAC;EAAuC,GAEhDZ,MAAM,CAACiB,MAAM,CAAC,QAAQ,CACpB,CACN,CACa,CAEf,CAAC;AAEV;AAEA,eAAe3B,eAAe","ignoreList":[]}
|
package/dist/DataTable/index.js
CHANGED
|
@@ -57,8 +57,10 @@ function DataTable(_ref) {
|
|
|
57
57
|
EmptyTableComponent,
|
|
58
58
|
manualSelectColumn,
|
|
59
59
|
showFiltersInSidebar,
|
|
60
|
+
filtersTitle,
|
|
60
61
|
dataViewToggleOptions,
|
|
61
62
|
disableElevation,
|
|
63
|
+
className,
|
|
62
64
|
isLoading,
|
|
63
65
|
children,
|
|
64
66
|
onSelectedRowsChanged,
|
|
@@ -220,13 +222,17 @@ function DataTable(_ref) {
|
|
|
220
222
|
manualSelectColumn,
|
|
221
223
|
maxSelectedRows,
|
|
222
224
|
onMaxSelectedRows,
|
|
225
|
+
filtersTitle,
|
|
223
226
|
...selectionProps,
|
|
224
227
|
...selectionActions,
|
|
225
228
|
...props
|
|
226
229
|
};
|
|
227
230
|
return /*#__PURE__*/React.createElement(DataTableContext.Provider, {
|
|
228
231
|
value: enhancedInstance
|
|
229
|
-
}, /*#__PURE__*/React.createElement(DataTableLayout,
|
|
232
|
+
}, /*#__PURE__*/React.createElement(DataTableLayout, {
|
|
233
|
+
filtersTitle: filtersTitle,
|
|
234
|
+
className: className
|
|
235
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
230
236
|
className: classNames('pgn__data-table-wrapper', {
|
|
231
237
|
'hide-shadow': !!disableElevation
|
|
232
238
|
})
|
|
@@ -257,6 +263,7 @@ DataTable.defaultProps = {
|
|
|
257
263
|
FilterStatusComponent: FilterStatus,
|
|
258
264
|
RowStatusComponent: RowStatus,
|
|
259
265
|
showFiltersInSidebar: false,
|
|
266
|
+
filtersTitle: undefined,
|
|
260
267
|
dataViewToggleOptions: {
|
|
261
268
|
isDataViewToggleEnabled: false,
|
|
262
269
|
onDataViewToggle: () => {},
|
|
@@ -265,6 +272,7 @@ DataTable.defaultProps = {
|
|
|
265
272
|
},
|
|
266
273
|
disableElevation: false,
|
|
267
274
|
renderRowSubComponent: undefined,
|
|
275
|
+
className: undefined,
|
|
268
276
|
isExpandable: false,
|
|
269
277
|
isLoading: false,
|
|
270
278
|
onSelectedRowsChanged: undefined,
|
|
@@ -396,6 +404,10 @@ DataTable.propTypes = {
|
|
|
396
404
|
children: PropTypes.node,
|
|
397
405
|
/** If true filters will be shown on sidebar instead */
|
|
398
406
|
showFiltersInSidebar: PropTypes.bool,
|
|
407
|
+
/** Class name for the data table layout */
|
|
408
|
+
className: PropTypes.string,
|
|
409
|
+
/** Title of the filters section */
|
|
410
|
+
filtersTitle: PropTypes.string,
|
|
399
411
|
/** options for data view toggle */
|
|
400
412
|
dataViewToggleOptions: PropTypes.shape({
|
|
401
413
|
/** Whether to show a toggle button group which allows view switching between card and table views */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","useEffect","useMemo","useReducer","PropTypes","useTable","useMountedLayoutEffect","classNames","Table","getVisibleColumns","requiredWhen","requiredWhenNot","getTableArgs","TableControlBar","EmptyTableContent","TableFooter","BulkActions","DropdownFilters","FilterStatus","RowStatus","SelectionStatus","ControlledSelectionStatus","SmartStatus","TableFilters","TableHeaderCell","TableCell","TableHeaderRow","TablePagination","TablePaginationMinimal","DataTableContext","TableActions","ControlledSelect","ControlledSelectHeader","DataTableLayout","ExpandAll","ExpandRow","useDataTableSelections","useSelectionActions","selectionsReducer","initialState","initialSelectionsState","DataTable","_ref","columns","data","defaultColumnValues","additionalColumns","isSelectable","isPaginated","manualPagination","pageCount","itemCount","isFilterable","manualFilters","fetchData","isSortable","manualSortBy","isExpandable","renderRowSubComponent","bulkActions","tableActions","numBreakoutFilters","initialTableOptions","EmptyTableComponent","manualSelectColumn","showFiltersInSidebar","dataViewToggleOptions","disableElevation","isLoading","children","onSelectedRowsChanged","maxSelectedRows","onMaxSelectedRows","props","defaultColumn","tableOptions","updatedTableOptions","stateReducer","newState","action","previousState","type","value","selectedRowIds","rowIndex","parseInt","id","selectedRowsOrdered","newSelectedRowsOrdered","filter","item","selections","selectionsDispatch","tableArgs","push","hooks","visibleColumns","selectionProps","selectedRows","length","selectedRowsById","forEach","row","useControlledState","state","selectedFlatRows","controlledTableSelections","instance","pageSize","tableStatePageSize","pageIndex","tableStatePageIndex","sortBy","tableStateSortBy","filters","tableStateFilters","tableStateSelectedRowIds","selectionActions","page","isAllPageRowsSelected","enhancedInstance","createElement","Provider","className","Fragment","content","defaultProps","undefined","SelectionStatusComponent","FilterStatusComponent","RowStatusComponent","isDataViewToggleEnabled","onDataViewToggle","defaultActiveStateValue","togglePlacement","propTypes","arrayOf","shape","Header","oneOfType","elementType","node","isRequired","accessor","string","Cell","Filter","filterChoices","name","number","bool","disableSortBy","func","buttonText","handleClick","variant","disabled","element","oneOf","EmptyTable"],"sources":["../../src/DataTable/index.jsx"],"sourcesContent":["import React, {\n useEffect, useMemo, useReducer,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport { useTable, useMountedLayoutEffect } from 'react-table';\n\nimport classNames from 'classnames';\nimport Table from './Table';\nimport getVisibleColumns from './utils/getVisibleColumns';\nimport { requiredWhen, requiredWhenNot } from '../utils/propTypes';\nimport getTableArgs from './utils/getTableArgs';\nimport TableControlBar from './TableControlBar';\nimport EmptyTableContent from './EmptyTable';\nimport TableFooter from './TableFooter';\nimport BulkActions from './BulkActions';\nimport DropdownFilters from './DropdownFilters';\nimport FilterStatus from './FilterStatus';\nimport RowStatus from './RowStatus';\nimport SelectionStatus from './selection/SelectionStatus';\nimport ControlledSelectionStatus from './selection/ControlledSelectionStatus';\nimport SmartStatus from './SmartStatus';\nimport TableFilters from './TableFilters';\nimport TableHeaderCell from './TableHeaderCell';\nimport TableCell from './TableCell';\nimport TableHeaderRow from './TableHeaderRow';\nimport TablePagination from './TablePagination';\nimport TablePaginationMinimal from './TablePaginationMinimal';\nimport DataTableContext from './DataTableContext';\nimport TableActions from './TableActions';\nimport ControlledSelect from './selection/ControlledSelect';\nimport ControlledSelectHeader from './selection/ControlledSelectHeader';\nimport DataTableLayout from './DataTableLayout';\nimport ExpandAll from './ExpandAll';\nimport ExpandRow from './ExpandRow';\n\nimport { useDataTableSelections, useSelectionActions } from './hooks';\nimport selectionsReducer, {\n initialState as initialSelectionsState,\n} from './selection/data/reducer';\n\nfunction DataTable({\n columns, data, defaultColumnValues, additionalColumns, isSelectable,\n isPaginated, manualPagination, pageCount, itemCount,\n isFilterable, manualFilters, fetchData, initialState,\n isSortable, manualSortBy,\n isExpandable, renderRowSubComponent,\n bulkActions, tableActions, numBreakoutFilters,\n initialTableOptions,\n EmptyTableComponent,\n manualSelectColumn,\n showFiltersInSidebar,\n dataViewToggleOptions,\n disableElevation,\n isLoading,\n children,\n onSelectedRowsChanged,\n maxSelectedRows,\n onMaxSelectedRows,\n ...props\n}) {\n const defaultColumn = useMemo(\n () => (defaultColumnValues),\n [defaultColumnValues],\n );\n const tableOptions = useMemo(() => {\n const updatedTableOptions = {\n stateReducer: (newState, action, previousState) => {\n switch (action.type) {\n // Note: we override the `toggleAllRowsSelected` action\n // from react-table because it only clears the selections on the\n // currently visible page; it does not clear the `selectedRowIds`\n // as we would expect for selections on different pages. Instead, we\n // force `selectedRowIds` to be cleared when `toggleAllRowsSelected(false)`\n // is called.\n case 'toggleAllRowsSelected': {\n if (action.value) {\n return newState;\n }\n return {\n ...newState,\n selectedRowIds: {},\n };\n }\n /**\n * Note: We override the `toggleRowSelected` action from react-table\n * because we need to preserve the order of the selected rows.\n * while `selectedRowIds` is an object that contains the selected rows as key-value pairs,\n * it does not maintain the order of selection. Therefore, we have added the `selectedRowsOrdered` property\n * to keep track of the order in which the rows were selected.\n */\n case 'toggleRowSelected': {\n const rowIndex = parseInt(action.id, 10);\n const { selectedRowsOrdered = [] } = previousState;\n\n let newSelectedRowsOrdered;\n if (action.value) {\n newSelectedRowsOrdered = [...selectedRowsOrdered, rowIndex];\n } else {\n newSelectedRowsOrdered = selectedRowsOrdered.filter((item) => item !== rowIndex);\n }\n\n return {\n ...newState,\n selectedRowsOrdered: newSelectedRowsOrdered,\n };\n }\n default:\n return newState;\n }\n },\n ...initialTableOptions,\n };\n return {\n columns,\n data,\n defaultColumn,\n manualFilters,\n manualPagination,\n manualSortBy,\n initialState,\n ...updatedTableOptions,\n };\n }, [initialTableOptions, columns, data, defaultColumn, manualFilters, manualPagination, manualSortBy, initialState]);\n\n const [selections, selectionsDispatch] = useReducer(selectionsReducer, initialSelectionsState);\n\n if (isPaginated && manualPagination) {\n // pageCount is required when pagination is manual, if it's not there passing -1 as per react-table docs\n tableOptions.pageCount = pageCount || -1;\n }\n\n // NB: Table args *must* be in a particular order\n const tableArgs = getTableArgs({\n tableOptions, isFilterable, isSelectable, isPaginated, isSortable, isExpandable,\n });\n // adds selection column and action columns as necessary\n tableArgs.push(hooks => {\n hooks.visibleColumns.push(\n visibleColumns => getVisibleColumns(isSelectable, visibleColumns, additionalColumns, manualSelectColumn),\n );\n });\n\n // Pass any controlled selections from context to the appropriate ``useTable`` arguments to maintain\n // correct selection states on rows, both from a data perspective and in the UI.\n const selectionProps = {};\n const { selectedRows } = selections;\n if (selectedRows.length > 0) {\n const selectedRowsById = {};\n selectedRows.forEach((row) => {\n selectedRowsById[row.id] = true;\n });\n tableArgs.push(hooks => {\n hooks.useControlledState.push(\n (state) => ({ ...state, selectedRowIds: selectedRowsById }),\n );\n });\n selectionProps.selectedFlatRows = selectedRows;\n }\n const controlledTableSelections = [selections, selectionsDispatch];\n\n // Use the state and functions returned from useTable to build your UI\n const instance = useTable(...tableArgs);\n\n const {\n pageSize: tableStatePageSize,\n pageIndex: tableStatePageIndex,\n sortBy: tableStateSortBy,\n filters: tableStateFilters,\n selectedRowIds: tableStateSelectedRowIds,\n } = instance.state;\n\n useEffect(() => {\n if (fetchData) {\n fetchData({\n pageSize: tableStatePageSize,\n pageIndex: tableStatePageIndex,\n sortBy: tableStateSortBy,\n filters: tableStateFilters,\n });\n }\n }, [fetchData, tableStatePageSize, tableStatePageIndex, tableStateSortBy, tableStateFilters]);\n\n useMountedLayoutEffect(() => {\n if (onSelectedRowsChanged) {\n onSelectedRowsChanged(tableStateSelectedRowIds);\n }\n }, [tableStateSelectedRowIds, onSelectedRowsChanged]);\n\n const selectionActions = useSelectionActions(instance, controlledTableSelections);\n\n useDataTableSelections({\n selections,\n selectionsDispatch,\n itemCount,\n selectedRows,\n page: instance.page,\n isAllPageRowsSelected: instance.isAllPageRowsSelected,\n });\n\n const enhancedInstance = {\n ...instance,\n manualFilters,\n itemCount,\n numBreakoutFilters,\n bulkActions,\n tableActions,\n controlledTableSelections,\n showFiltersInSidebar,\n dataViewToggleOptions,\n renderRowSubComponent,\n disableElevation,\n isLoading,\n isSelectable,\n isPaginated,\n manualSelectColumn,\n maxSelectedRows,\n onMaxSelectedRows,\n ...selectionProps,\n ...selectionActions,\n ...props,\n };\n\n return (\n <DataTableContext.Provider value={enhancedInstance}>\n <DataTableLayout>\n <div className={classNames('pgn__data-table-wrapper', {\n 'hide-shadow': !!disableElevation,\n })}\n >\n {children || (\n <>\n <TableControlBar />\n <Table />\n <EmptyTableComponent content=\"No results found\" />\n <TableFooter />\n </>\n )}\n </div>\n </DataTableLayout>\n </DataTableContext.Provider>\n );\n}\n\nDataTable.defaultProps = {\n additionalColumns: [],\n defaultColumnValues: {},\n isFilterable: false,\n isPaginated: false,\n isSelectable: false,\n isSortable: false,\n manualFilters: false,\n manualPagination: false,\n manualSortBy: false,\n fetchData: null,\n initialState: {},\n initialTableOptions: {},\n EmptyTableComponent: EmptyTableContent,\n children: null,\n bulkActions: [],\n tableActions: [],\n numBreakoutFilters: 1,\n manualSelectColumn: undefined,\n SelectionStatusComponent: SelectionStatus,\n FilterStatusComponent: FilterStatus,\n RowStatusComponent: RowStatus,\n showFiltersInSidebar: false,\n dataViewToggleOptions: {\n isDataViewToggleEnabled: false,\n onDataViewToggle: () => {},\n defaultActiveStateValue: 'card',\n togglePlacement: 'left',\n },\n disableElevation: false,\n renderRowSubComponent: undefined,\n isExpandable: false,\n isLoading: false,\n onSelectedRowsChanged: undefined,\n maxSelectedRows: undefined,\n onMaxSelectedRows: undefined,\n};\n\nDataTable.propTypes = {\n /** Definition of table columns */\n columns: PropTypes.arrayOf(PropTypes.shape({\n /** User visible column name */\n Header: PropTypes.oneOfType([PropTypes.elementType, PropTypes.node]).isRequired,\n /** String used to access the correct cell data for this column */\n accessor: requiredWhenNot(PropTypes.string, 'Cell'),\n /** Specifies a function that receives `row` as argument and returns cell content */\n Cell: PropTypes.oneOfType([PropTypes.elementType, PropTypes.node]),\n /** Specifies filter component */\n Filter: PropTypes.elementType,\n /** Specifies filter type */\n filter: PropTypes.string,\n /** Specifies filter choices */\n filterChoices: PropTypes.arrayOf(PropTypes.shape({\n name: PropTypes.string,\n number: PropTypes.number,\n value: PropTypes.string,\n })),\n })).isRequired,\n /** Data to be displayed in the table */\n data: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n /** table rows can be selected */\n isSelectable: PropTypes.bool,\n /** Alternate column for selecting rows. See react table useSort docs for more information */\n manualSelectColumn: PropTypes.shape({\n id: PropTypes.string.isRequired,\n Header: PropTypes.oneOfType([PropTypes.elementType, PropTypes.node]).isRequired,\n Cell: PropTypes.oneOfType([PropTypes.elementType, PropTypes.node]),\n disableSortBy: PropTypes.bool.isRequired,\n }),\n /** Table columns can be sorted */\n isSortable: PropTypes.bool,\n /** Indicates that sorting will be done via backend API. A fetchData function must be provided */\n manualSortBy: PropTypes.bool,\n /** Paginate the table */\n isPaginated: PropTypes.bool,\n /** Indicates that pagination will be done manually. A fetchData function must be provided */\n manualPagination: PropTypes.bool,\n // eslint-disable-next-line react/require-default-props\n pageCount: requiredWhen(PropTypes.number, 'manualPagination'),\n /** Table rows can be filtered, using a default filter in the default column values, or in the column definition */\n isFilterable: PropTypes.bool,\n /** Indicates that filtering will be done via a backend API. A fetchData function must be provided */\n manualFilters: PropTypes.bool,\n\n /** defaults that will be set on each column. Will be overridden by individual column values */\n defaultColumnValues: PropTypes.shape({\n /** A default filter component for the column */\n Filter: PropTypes.elementType,\n }),\n /** Actions or other additional non-data columns can be added here */\n additionalColumns: PropTypes.arrayOf(PropTypes.shape({\n /** id must be unique from other columns ids */\n id: PropTypes.string.isRequired,\n /** column header that will be displayed to the user */\n Header: PropTypes.oneOfType([PropTypes.elementType, PropTypes.node]),\n /** Component that renders in the added column. It will receive the row as a prop */\n Cell: PropTypes.oneOfType([PropTypes.elementType, PropTypes.node]),\n })),\n /** Function that will fetch table data. Called when page size, page index or filters change.\n * Meant to be used with manual filters and pagination */\n fetchData: PropTypes.func,\n /** Initial state passed to react-table's documentation https://github.com/TanStack/table/blob/v7/docs/src/pages/docs/api/useTable.md */\n initialState: PropTypes.shape({\n pageSize: requiredWhen(PropTypes.number, 'isPaginated'),\n pageIndex: requiredWhen(PropTypes.number, 'isPaginated'),\n filters: requiredWhen(PropTypes.arrayOf(PropTypes.shape()), 'manualFilters'),\n sortBy: requiredWhen(PropTypes.arrayOf(PropTypes.shape()), 'manualSortBy'),\n selectedRowIds: PropTypes.shape(),\n selectedRowsOrdered: PropTypes.arrayOf(PropTypes.number),\n }),\n /** Table options passed to react-table's useTable hook. Will override some options passed in to DataTable, such\n as: data, columns, defaultColumn, manualFilters, manualPagination, manualSortBy, and initialState */\n initialTableOptions: PropTypes.shape({}),\n /** Actions to be performed on the table. Called with the table instance. Not displayed if rows are selected. */\n itemCount: PropTypes.number.isRequired,\n /** Actions to be performed on selected rows of the table. Called with the selected rows.\n * Only displayed if rows are selected. */\n bulkActions: PropTypes.oneOfType([\n PropTypes.arrayOf(\n PropTypes.oneOfType([\n PropTypes.shape({\n /** Bulk action button text */\n buttonText: PropTypes.string.isRequired,\n /** handleClick will be passed the selected rows */\n handleClick: PropTypes.func.isRequired,\n /** classnames for button class */\n className: PropTypes.string,\n /** optional button variant; only relevant for the first two buttons */\n variant: PropTypes.string,\n /** disables button */\n disabled: PropTypes.bool,\n }),\n /** function passed selected items, should return action object */\n PropTypes.func,\n /** A custom component representing an action */\n PropTypes.element,\n ]),\n ),\n /** Function for rendering custom components */\n PropTypes.func,\n /** A custom component representing an action */\n PropTypes.element,\n ]),\n /** Function for rendering custom components, called with the table instance */\n tableActions: PropTypes.oneOfType([\n PropTypes.arrayOf(\n PropTypes.oneOfType([\n PropTypes.shape({\n /** Bulk action button text */\n buttonText: PropTypes.string.isRequired,\n /** handleClick will be passed the selected rows */\n handleClick: PropTypes.func.isRequired,\n /** classnames for button class */\n className: PropTypes.string,\n /** optional button variant; only relevant for the first two buttons */\n variant: PropTypes.string,\n /** disables button */\n disabled: PropTypes.bool,\n }),\n /** function passed table instance, should return action object */\n PropTypes.func,\n /** A custom component representing an action */\n PropTypes.element,\n ]),\n ),\n /** Function for rendering custom components */\n PropTypes.func,\n /** A custom component representing an action */\n PropTypes.element,\n ]),\n /** Number between one and four filters that can be shown on the top row. */\n numBreakoutFilters: PropTypes.oneOf([1, 2, 3, 4]),\n /** Component to be displayed when the table is empty */\n EmptyTableComponent: PropTypes.elementType,\n /** Component to be displayed for row status, ie, 10 of 20 rows. Displayed by default in the TableControlBar */\n RowStatusComponent: PropTypes.elementType,\n /** Component to be displayed for selection status. Displayed when there are selected rows and no active filters */\n SelectionStatusComponent: PropTypes.elementType,\n /** Component to be displayed for filter status. Displayed when there are active filters. */\n FilterStatusComponent: PropTypes.elementType,\n /** If children are not provided a table with control bar and footer will be rendered */\n children: PropTypes.node,\n /** If true filters will be shown on sidebar instead */\n showFiltersInSidebar: PropTypes.bool,\n /** options for data view toggle */\n dataViewToggleOptions: PropTypes.shape({\n /** Whether to show a toggle button group which allows view switching between card and table views */\n isDataViewToggleEnabled: PropTypes.bool,\n /** Callback invoked when the toggle buttons are clicked, with value of selected button passed in */\n onDataViewToggle: PropTypes.func,\n /** default value for toggle active state */\n defaultActiveStateValue: PropTypes.string,\n /** placement of toggle 'bottom' will push it to the bottom row in\n * actions section. Only 'left' and 'bottom' are supported */\n togglePlacement: PropTypes.string,\n }),\n /** Remove the default box shadow on the component */\n disableElevation: PropTypes.bool,\n /** A function that will render contents of expanded row, accepts `row` as a prop. */\n renderRowSubComponent: PropTypes.func,\n /** Indicates whether table supports expandable rows. */\n isExpandable: PropTypes.bool,\n /** Indicates whether the table should show loading states. */\n isLoading: PropTypes.bool,\n /** Callback function called when row selections change. */\n onSelectedRowsChanged: PropTypes.func,\n /** Indicates the max of rows selectable in the table. Requires isSelectable prop */\n maxSelectedRows: PropTypes.number,\n /** Callback after selected max rows. Requires isSelectable and maxSelectedRows props */\n onMaxSelectedRows: PropTypes.func,\n};\n\nDataTable.BulkActions = BulkActions;\nDataTable.EmptyTable = EmptyTableContent;\nDataTable.DropdownFilters = DropdownFilters;\nDataTable.FilterStatus = FilterStatus;\nDataTable.RowStatus = RowStatus;\nDataTable.SelectionStatus = SelectionStatus;\nDataTable.SmartStatus = SmartStatus;\nDataTable.Table = Table;\nDataTable.TableCell = TableCell;\nDataTable.TableControlBar = TableControlBar;\nDataTable.TableFilters = TableFilters;\nDataTable.TableFooter = TableFooter;\nDataTable.TableHeaderCell = TableHeaderCell;\nDataTable.TableHeaderRow = TableHeaderRow;\nDataTable.TablePagination = TablePagination;\nDataTable.TablePaginationMinimal = TablePaginationMinimal;\nDataTable.TableActions = TableActions;\nDataTable.ControlledSelectionStatus = ControlledSelectionStatus;\nDataTable.ControlledSelect = ControlledSelect;\nDataTable.ControlledSelectHeader = ControlledSelectHeader;\nDataTable.ExpandAll = ExpandAll;\nDataTable.ExpandRow = ExpandRow;\n\nexport default DataTable;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","useEffect","useMemo","useReducer","PropTypes","useTable","useMountedLayoutEffect","classNames","Table","getVisibleColumns","requiredWhen","requiredWhenNot","getTableArgs","TableControlBar","EmptyTableContent","TableFooter","BulkActions","DropdownFilters","FilterStatus","RowStatus","SelectionStatus","ControlledSelectionStatus","SmartStatus","TableFilters","TableHeaderCell","TableCell","TableHeaderRow","TablePagination","TablePaginationMinimal","DataTableContext","TableActions","ControlledSelect","ControlledSelectHeader","DataTableLayout","ExpandAll","ExpandRow","useDataTableSelections","useSelectionActions","selectionsReducer","initialState","initialSelectionsState","DataTable","_ref","columns","data","defaultColumnValues","additionalColumns","isSelectable","isPaginated","manualPagination","pageCount","itemCount","isFilterable","manualFilters","fetchData","isSortable","manualSortBy","isExpandable","renderRowSubComponent","bulkActions","tableActions","numBreakoutFilters","initialTableOptions","EmptyTableComponent","manualSelectColumn","showFiltersInSidebar","filtersTitle","dataViewToggleOptions","disableElevation","className","isLoading","children","onSelectedRowsChanged","maxSelectedRows","onMaxSelectedRows","props","defaultColumn","tableOptions","updatedTableOptions","stateReducer","newState","action","previousState","type","value","selectedRowIds","rowIndex","parseInt","id","selectedRowsOrdered","newSelectedRowsOrdered","filter","item","selections","selectionsDispatch","tableArgs","push","hooks","visibleColumns","selectionProps","selectedRows","length","selectedRowsById","forEach","row","useControlledState","state","selectedFlatRows","controlledTableSelections","instance","pageSize","tableStatePageSize","pageIndex","tableStatePageIndex","sortBy","tableStateSortBy","filters","tableStateFilters","tableStateSelectedRowIds","selectionActions","page","isAllPageRowsSelected","enhancedInstance","createElement","Provider","Fragment","content","defaultProps","undefined","SelectionStatusComponent","FilterStatusComponent","RowStatusComponent","isDataViewToggleEnabled","onDataViewToggle","defaultActiveStateValue","togglePlacement","propTypes","arrayOf","shape","Header","oneOfType","elementType","node","isRequired","accessor","string","Cell","Filter","filterChoices","name","number","bool","disableSortBy","func","buttonText","handleClick","variant","disabled","element","oneOf","EmptyTable"],"sources":["../../src/DataTable/index.jsx"],"sourcesContent":["import React, {\n useEffect, useMemo, useReducer,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport { useTable, useMountedLayoutEffect } from 'react-table';\n\nimport classNames from 'classnames';\nimport Table from './Table';\nimport getVisibleColumns from './utils/getVisibleColumns';\nimport { requiredWhen, requiredWhenNot } from '../utils/propTypes';\nimport getTableArgs from './utils/getTableArgs';\nimport TableControlBar from './TableControlBar';\nimport EmptyTableContent from './EmptyTable';\nimport TableFooter from './TableFooter';\nimport BulkActions from './BulkActions';\nimport DropdownFilters from './DropdownFilters';\nimport FilterStatus from './FilterStatus';\nimport RowStatus from './RowStatus';\nimport SelectionStatus from './selection/SelectionStatus';\nimport ControlledSelectionStatus from './selection/ControlledSelectionStatus';\nimport SmartStatus from './SmartStatus';\nimport TableFilters from './TableFilters';\nimport TableHeaderCell from './TableHeaderCell';\nimport TableCell from './TableCell';\nimport TableHeaderRow from './TableHeaderRow';\nimport TablePagination from './TablePagination';\nimport TablePaginationMinimal from './TablePaginationMinimal';\nimport DataTableContext from './DataTableContext';\nimport TableActions from './TableActions';\nimport ControlledSelect from './selection/ControlledSelect';\nimport ControlledSelectHeader from './selection/ControlledSelectHeader';\nimport DataTableLayout from './DataTableLayout';\nimport ExpandAll from './ExpandAll';\nimport ExpandRow from './ExpandRow';\n\nimport { useDataTableSelections, useSelectionActions } from './hooks';\nimport selectionsReducer, {\n initialState as initialSelectionsState,\n} from './selection/data/reducer';\n\nfunction DataTable({\n columns, data, defaultColumnValues, additionalColumns, isSelectable,\n isPaginated, manualPagination, pageCount, itemCount,\n isFilterable, manualFilters, fetchData, initialState,\n isSortable, manualSortBy,\n isExpandable, renderRowSubComponent,\n bulkActions, tableActions, numBreakoutFilters,\n initialTableOptions,\n EmptyTableComponent,\n manualSelectColumn,\n showFiltersInSidebar,\n filtersTitle,\n dataViewToggleOptions,\n disableElevation,\n className,\n isLoading,\n children,\n onSelectedRowsChanged,\n maxSelectedRows,\n onMaxSelectedRows,\n ...props\n}) {\n const defaultColumn = useMemo(\n () => (defaultColumnValues),\n [defaultColumnValues],\n );\n const tableOptions = useMemo(() => {\n const updatedTableOptions = {\n stateReducer: (newState, action, previousState) => {\n switch (action.type) {\n // Note: we override the `toggleAllRowsSelected` action\n // from react-table because it only clears the selections on the\n // currently visible page; it does not clear the `selectedRowIds`\n // as we would expect for selections on different pages. Instead, we\n // force `selectedRowIds` to be cleared when `toggleAllRowsSelected(false)`\n // is called.\n case 'toggleAllRowsSelected': {\n if (action.value) {\n return newState;\n }\n return {\n ...newState,\n selectedRowIds: {},\n };\n }\n /**\n * Note: We override the `toggleRowSelected` action from react-table\n * because we need to preserve the order of the selected rows.\n * while `selectedRowIds` is an object that contains the selected rows as key-value pairs,\n * it does not maintain the order of selection. Therefore, we have added the `selectedRowsOrdered` property\n * to keep track of the order in which the rows were selected.\n */\n case 'toggleRowSelected': {\n const rowIndex = parseInt(action.id, 10);\n const { selectedRowsOrdered = [] } = previousState;\n\n let newSelectedRowsOrdered;\n if (action.value) {\n newSelectedRowsOrdered = [...selectedRowsOrdered, rowIndex];\n } else {\n newSelectedRowsOrdered = selectedRowsOrdered.filter((item) => item !== rowIndex);\n }\n\n return {\n ...newState,\n selectedRowsOrdered: newSelectedRowsOrdered,\n };\n }\n default:\n return newState;\n }\n },\n ...initialTableOptions,\n };\n return {\n columns,\n data,\n defaultColumn,\n manualFilters,\n manualPagination,\n manualSortBy,\n initialState,\n ...updatedTableOptions,\n };\n }, [initialTableOptions, columns, data, defaultColumn, manualFilters, manualPagination, manualSortBy, initialState]);\n\n const [selections, selectionsDispatch] = useReducer(selectionsReducer, initialSelectionsState);\n\n if (isPaginated && manualPagination) {\n // pageCount is required when pagination is manual, if it's not there passing -1 as per react-table docs\n tableOptions.pageCount = pageCount || -1;\n }\n\n // NB: Table args *must* be in a particular order\n const tableArgs = getTableArgs({\n tableOptions, isFilterable, isSelectable, isPaginated, isSortable, isExpandable,\n });\n // adds selection column and action columns as necessary\n tableArgs.push(hooks => {\n hooks.visibleColumns.push(\n visibleColumns => getVisibleColumns(isSelectable, visibleColumns, additionalColumns, manualSelectColumn),\n );\n });\n\n // Pass any controlled selections from context to the appropriate ``useTable`` arguments to maintain\n // correct selection states on rows, both from a data perspective and in the UI.\n const selectionProps = {};\n const { selectedRows } = selections;\n if (selectedRows.length > 0) {\n const selectedRowsById = {};\n selectedRows.forEach((row) => {\n selectedRowsById[row.id] = true;\n });\n tableArgs.push(hooks => {\n hooks.useControlledState.push(\n (state) => ({ ...state, selectedRowIds: selectedRowsById }),\n );\n });\n selectionProps.selectedFlatRows = selectedRows;\n }\n const controlledTableSelections = [selections, selectionsDispatch];\n\n // Use the state and functions returned from useTable to build your UI\n const instance = useTable(...tableArgs);\n\n const {\n pageSize: tableStatePageSize,\n pageIndex: tableStatePageIndex,\n sortBy: tableStateSortBy,\n filters: tableStateFilters,\n selectedRowIds: tableStateSelectedRowIds,\n } = instance.state;\n\n useEffect(() => {\n if (fetchData) {\n fetchData({\n pageSize: tableStatePageSize,\n pageIndex: tableStatePageIndex,\n sortBy: tableStateSortBy,\n filters: tableStateFilters,\n });\n }\n }, [fetchData, tableStatePageSize, tableStatePageIndex, tableStateSortBy, tableStateFilters]);\n\n useMountedLayoutEffect(() => {\n if (onSelectedRowsChanged) {\n onSelectedRowsChanged(tableStateSelectedRowIds);\n }\n }, [tableStateSelectedRowIds, onSelectedRowsChanged]);\n\n const selectionActions = useSelectionActions(instance, controlledTableSelections);\n\n useDataTableSelections({\n selections,\n selectionsDispatch,\n itemCount,\n selectedRows,\n page: instance.page,\n isAllPageRowsSelected: instance.isAllPageRowsSelected,\n });\n\n const enhancedInstance = {\n ...instance,\n manualFilters,\n itemCount,\n numBreakoutFilters,\n bulkActions,\n tableActions,\n controlledTableSelections,\n showFiltersInSidebar,\n dataViewToggleOptions,\n renderRowSubComponent,\n disableElevation,\n isLoading,\n isSelectable,\n isPaginated,\n manualSelectColumn,\n maxSelectedRows,\n onMaxSelectedRows,\n filtersTitle,\n ...selectionProps,\n ...selectionActions,\n ...props,\n };\n\n return (\n <DataTableContext.Provider value={enhancedInstance}>\n <DataTableLayout filtersTitle={filtersTitle} className={className}>\n <div className={classNames('pgn__data-table-wrapper', {\n 'hide-shadow': !!disableElevation,\n })}\n >\n {children || (\n <>\n <TableControlBar />\n <Table />\n <EmptyTableComponent content=\"No results found\" />\n <TableFooter />\n </>\n )}\n </div>\n </DataTableLayout>\n </DataTableContext.Provider>\n );\n}\n\nDataTable.defaultProps = {\n additionalColumns: [],\n defaultColumnValues: {},\n isFilterable: false,\n isPaginated: false,\n isSelectable: false,\n isSortable: false,\n manualFilters: false,\n manualPagination: false,\n manualSortBy: false,\n fetchData: null,\n initialState: {},\n initialTableOptions: {},\n EmptyTableComponent: EmptyTableContent,\n children: null,\n bulkActions: [],\n tableActions: [],\n numBreakoutFilters: 1,\n manualSelectColumn: undefined,\n SelectionStatusComponent: SelectionStatus,\n FilterStatusComponent: FilterStatus,\n RowStatusComponent: RowStatus,\n showFiltersInSidebar: false,\n filtersTitle: undefined,\n dataViewToggleOptions: {\n isDataViewToggleEnabled: false,\n onDataViewToggle: () => {},\n defaultActiveStateValue: 'card',\n togglePlacement: 'left',\n },\n disableElevation: false,\n renderRowSubComponent: undefined,\n className: undefined,\n isExpandable: false,\n isLoading: false,\n onSelectedRowsChanged: undefined,\n maxSelectedRows: undefined,\n onMaxSelectedRows: undefined,\n};\n\nDataTable.propTypes = {\n /** Definition of table columns */\n columns: PropTypes.arrayOf(PropTypes.shape({\n /** User visible column name */\n Header: PropTypes.oneOfType([PropTypes.elementType, PropTypes.node]).isRequired,\n /** String used to access the correct cell data for this column */\n accessor: requiredWhenNot(PropTypes.string, 'Cell'),\n /** Specifies a function that receives `row` as argument and returns cell content */\n Cell: PropTypes.oneOfType([PropTypes.elementType, PropTypes.node]),\n /** Specifies filter component */\n Filter: PropTypes.elementType,\n /** Specifies filter type */\n filter: PropTypes.string,\n /** Specifies filter choices */\n filterChoices: PropTypes.arrayOf(PropTypes.shape({\n name: PropTypes.string,\n number: PropTypes.number,\n value: PropTypes.string,\n })),\n })).isRequired,\n /** Data to be displayed in the table */\n data: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n /** table rows can be selected */\n isSelectable: PropTypes.bool,\n /** Alternate column for selecting rows. See react table useSort docs for more information */\n manualSelectColumn: PropTypes.shape({\n id: PropTypes.string.isRequired,\n Header: PropTypes.oneOfType([PropTypes.elementType, PropTypes.node]).isRequired,\n Cell: PropTypes.oneOfType([PropTypes.elementType, PropTypes.node]),\n disableSortBy: PropTypes.bool.isRequired,\n }),\n /** Table columns can be sorted */\n isSortable: PropTypes.bool,\n /** Indicates that sorting will be done via backend API. A fetchData function must be provided */\n manualSortBy: PropTypes.bool,\n /** Paginate the table */\n isPaginated: PropTypes.bool,\n /** Indicates that pagination will be done manually. A fetchData function must be provided */\n manualPagination: PropTypes.bool,\n // eslint-disable-next-line react/require-default-props\n pageCount: requiredWhen(PropTypes.number, 'manualPagination'),\n /** Table rows can be filtered, using a default filter in the default column values, or in the column definition */\n isFilterable: PropTypes.bool,\n /** Indicates that filtering will be done via a backend API. A fetchData function must be provided */\n manualFilters: PropTypes.bool,\n\n /** defaults that will be set on each column. Will be overridden by individual column values */\n defaultColumnValues: PropTypes.shape({\n /** A default filter component for the column */\n Filter: PropTypes.elementType,\n }),\n /** Actions or other additional non-data columns can be added here */\n additionalColumns: PropTypes.arrayOf(PropTypes.shape({\n /** id must be unique from other columns ids */\n id: PropTypes.string.isRequired,\n /** column header that will be displayed to the user */\n Header: PropTypes.oneOfType([PropTypes.elementType, PropTypes.node]),\n /** Component that renders in the added column. It will receive the row as a prop */\n Cell: PropTypes.oneOfType([PropTypes.elementType, PropTypes.node]),\n })),\n /** Function that will fetch table data. Called when page size, page index or filters change.\n * Meant to be used with manual filters and pagination */\n fetchData: PropTypes.func,\n /** Initial state passed to react-table's documentation https://github.com/TanStack/table/blob/v7/docs/src/pages/docs/api/useTable.md */\n initialState: PropTypes.shape({\n pageSize: requiredWhen(PropTypes.number, 'isPaginated'),\n pageIndex: requiredWhen(PropTypes.number, 'isPaginated'),\n filters: requiredWhen(PropTypes.arrayOf(PropTypes.shape()), 'manualFilters'),\n sortBy: requiredWhen(PropTypes.arrayOf(PropTypes.shape()), 'manualSortBy'),\n selectedRowIds: PropTypes.shape(),\n selectedRowsOrdered: PropTypes.arrayOf(PropTypes.number),\n }),\n /** Table options passed to react-table's useTable hook. Will override some options passed in to DataTable, such\n as: data, columns, defaultColumn, manualFilters, manualPagination, manualSortBy, and initialState */\n initialTableOptions: PropTypes.shape({}),\n /** Actions to be performed on the table. Called with the table instance. Not displayed if rows are selected. */\n itemCount: PropTypes.number.isRequired,\n /** Actions to be performed on selected rows of the table. Called with the selected rows.\n * Only displayed if rows are selected. */\n bulkActions: PropTypes.oneOfType([\n PropTypes.arrayOf(\n PropTypes.oneOfType([\n PropTypes.shape({\n /** Bulk action button text */\n buttonText: PropTypes.string.isRequired,\n /** handleClick will be passed the selected rows */\n handleClick: PropTypes.func.isRequired,\n /** classnames for button class */\n className: PropTypes.string,\n /** optional button variant; only relevant for the first two buttons */\n variant: PropTypes.string,\n /** disables button */\n disabled: PropTypes.bool,\n }),\n /** function passed selected items, should return action object */\n PropTypes.func,\n /** A custom component representing an action */\n PropTypes.element,\n ]),\n ),\n /** Function for rendering custom components */\n PropTypes.func,\n /** A custom component representing an action */\n PropTypes.element,\n ]),\n /** Function for rendering custom components, called with the table instance */\n tableActions: PropTypes.oneOfType([\n PropTypes.arrayOf(\n PropTypes.oneOfType([\n PropTypes.shape({\n /** Bulk action button text */\n buttonText: PropTypes.string.isRequired,\n /** handleClick will be passed the selected rows */\n handleClick: PropTypes.func.isRequired,\n /** classnames for button class */\n className: PropTypes.string,\n /** optional button variant; only relevant for the first two buttons */\n variant: PropTypes.string,\n /** disables button */\n disabled: PropTypes.bool,\n }),\n /** function passed table instance, should return action object */\n PropTypes.func,\n /** A custom component representing an action */\n PropTypes.element,\n ]),\n ),\n /** Function for rendering custom components */\n PropTypes.func,\n /** A custom component representing an action */\n PropTypes.element,\n ]),\n /** Number between one and four filters that can be shown on the top row. */\n numBreakoutFilters: PropTypes.oneOf([1, 2, 3, 4]),\n /** Component to be displayed when the table is empty */\n EmptyTableComponent: PropTypes.elementType,\n /** Component to be displayed for row status, ie, 10 of 20 rows. Displayed by default in the TableControlBar */\n RowStatusComponent: PropTypes.elementType,\n /** Component to be displayed for selection status. Displayed when there are selected rows and no active filters */\n SelectionStatusComponent: PropTypes.elementType,\n /** Component to be displayed for filter status. Displayed when there are active filters. */\n FilterStatusComponent: PropTypes.elementType,\n /** If children are not provided a table with control bar and footer will be rendered */\n children: PropTypes.node,\n /** If true filters will be shown on sidebar instead */\n showFiltersInSidebar: PropTypes.bool,\n /** Class name for the data table layout */\n className: PropTypes.string,\n /** Title of the filters section */\n filtersTitle: PropTypes.string,\n /** options for data view toggle */\n dataViewToggleOptions: PropTypes.shape({\n /** Whether to show a toggle button group which allows view switching between card and table views */\n isDataViewToggleEnabled: PropTypes.bool,\n /** Callback invoked when the toggle buttons are clicked, with value of selected button passed in */\n onDataViewToggle: PropTypes.func,\n /** default value for toggle active state */\n defaultActiveStateValue: PropTypes.string,\n /** placement of toggle 'bottom' will push it to the bottom row in\n * actions section. Only 'left' and 'bottom' are supported */\n togglePlacement: PropTypes.string,\n }),\n /** Remove the default box shadow on the component */\n disableElevation: PropTypes.bool,\n /** A function that will render contents of expanded row, accepts `row` as a prop. */\n renderRowSubComponent: PropTypes.func,\n /** Indicates whether table supports expandable rows. */\n isExpandable: PropTypes.bool,\n /** Indicates whether the table should show loading states. */\n isLoading: PropTypes.bool,\n /** Callback function called when row selections change. */\n onSelectedRowsChanged: PropTypes.func,\n /** Indicates the max of rows selectable in the table. Requires isSelectable prop */\n maxSelectedRows: PropTypes.number,\n /** Callback after selected max rows. Requires isSelectable and maxSelectedRows props */\n onMaxSelectedRows: PropTypes.func,\n};\n\nDataTable.BulkActions = BulkActions;\nDataTable.EmptyTable = EmptyTableContent;\nDataTable.DropdownFilters = DropdownFilters;\nDataTable.FilterStatus = FilterStatus;\nDataTable.RowStatus = RowStatus;\nDataTable.SelectionStatus = SelectionStatus;\nDataTable.SmartStatus = SmartStatus;\nDataTable.Table = Table;\nDataTable.TableCell = TableCell;\nDataTable.TableControlBar = TableControlBar;\nDataTable.TableFilters = TableFilters;\nDataTable.TableFooter = TableFooter;\nDataTable.TableHeaderCell = TableHeaderCell;\nDataTable.TableHeaderRow = TableHeaderRow;\nDataTable.TablePagination = TablePagination;\nDataTable.TablePaginationMinimal = TablePaginationMinimal;\nDataTable.TableActions = TableActions;\nDataTable.ControlledSelectionStatus = ControlledSelectionStatus;\nDataTable.ControlledSelect = ControlledSelect;\nDataTable.ControlledSelectHeader = ControlledSelectHeader;\nDataTable.ExpandAll = ExpandAll;\nDataTable.ExpandRow = ExpandRow;\n\nexport default DataTable;\n"],"mappings":"AAAA,OAAOA,KAAK,IACVC,SAAS,EAAEC,OAAO,EAAEC,UAAU,QACzB,OAAO;AACd,OAAOC,SAAS,MAAM,YAAY;AAClC,SAASC,QAAQ,EAAEC,sBAAsB,QAAQ,aAAa;AAE9D,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,MAAM,SAAS;AAC3B,OAAOC,iBAAiB,MAAM,2BAA2B;AACzD,SAASC,YAAY,EAAEC,eAAe,QAAQ,oBAAoB;AAClE,OAAOC,YAAY,MAAM,sBAAsB;AAC/C,OAAOC,eAAe,MAAM,mBAAmB;AAC/C,OAAOC,iBAAiB,MAAM,cAAc;AAC5C,OAAOC,WAAW,MAAM,eAAe;AACvC,OAAOC,WAAW,MAAM,eAAe;AACvC,OAAOC,eAAe,MAAM,mBAAmB;AAC/C,OAAOC,YAAY,MAAM,gBAAgB;AACzC,OAAOC,SAAS,MAAM,aAAa;AACnC,OAAOC,eAAe,MAAM,6BAA6B;AACzD,OAAOC,yBAAyB,MAAM,uCAAuC;AAC7E,OAAOC,WAAW,MAAM,eAAe;AACvC,OAAOC,YAAY,MAAM,gBAAgB;AACzC,OAAOC,eAAe,MAAM,mBAAmB;AAC/C,OAAOC,SAAS,MAAM,aAAa;AACnC,OAAOC,cAAc,MAAM,kBAAkB;AAC7C,OAAOC,eAAe,MAAM,mBAAmB;AAC/C,OAAOC,sBAAsB,MAAM,0BAA0B;AAC7D,OAAOC,gBAAgB,MAAM,oBAAoB;AACjD,OAAOC,YAAY,MAAM,gBAAgB;AACzC,OAAOC,gBAAgB,MAAM,8BAA8B;AAC3D,OAAOC,sBAAsB,MAAM,oCAAoC;AACvE,OAAOC,eAAe,MAAM,mBAAmB;AAC/C,OAAOC,SAAS,MAAM,aAAa;AACnC,OAAOC,SAAS,MAAM,aAAa;AAEnC,SAASC,sBAAsB,EAAEC,mBAAmB,QAAQ,SAAS;AACrE,OAAOC,iBAAiB,IACtBC,YAAY,IAAIC,sBAAsB,QACjC,0BAA0B;AAEjC,SAASC,SAASA,CAAAC,IAAA,EAqBf;EAAA,IArBgB;IACjBC,OAAO;IAAEC,IAAI;IAAEC,mBAAmB;IAAEC,iBAAiB;IAAEC,YAAY;IACnEC,WAAW;IAAEC,gBAAgB;IAAEC,SAAS;IAAEC,SAAS;IACnDC,YAAY;IAAEC,aAAa;IAAEC,SAAS;IAAEf,YAAY;IACpDgB,UAAU;IAAEC,YAAY;IACxBC,YAAY;IAAEC,qBAAqB;IACnCC,WAAW;IAAEC,YAAY;IAAEC,kBAAkB;IAC7CC,mBAAmB;IACnBC,mBAAmB;IACnBC,kBAAkB;IAClBC,oBAAoB;IACpBC,YAAY;IACZC,qBAAqB;IACrBC,gBAAgB;IAChBC,SAAS;IACTC,SAAS;IACTC,QAAQ;IACRC,qBAAqB;IACrBC,eAAe;IACfC,iBAAiB;IACjB,GAAGC;EACL,CAAC,GAAAjC,IAAA;EACC,MAAMkC,aAAa,GAAG1E,OAAO,CAC3B,MAAO2C,mBAAoB,EAC3B,CAACA,mBAAmB,CACtB,CAAC;EACD,MAAMgC,YAAY,GAAG3E,OAAO,CAAC,MAAM;IACjC,MAAM4E,mBAAmB,GAAG;MAC1BC,YAAY,EAAEA,CAACC,QAAQ,EAAEC,MAAM,EAAEC,aAAa,KAAK;QACjD,QAAQD,MAAM,CAACE,IAAI;UACjB;UACA;UACA;UACA;UACA;UACA;UACA,KAAK,uBAAuB;YAAE;cAC5B,IAAIF,MAAM,CAACG,KAAK,EAAE;gBAChB,OAAOJ,QAAQ;cACjB;cACA,OAAO;gBACL,GAAGA,QAAQ;gBACXK,cAAc,EAAE,CAAC;cACnB,CAAC;YACH;UACA;AACV;AACA;AACA;AACA;AACA;AACA;UACU,KAAK,mBAAmB;YAAE;cACxB,MAAMC,QAAQ,GAAGC,QAAQ,CAACN,MAAM,CAACO,EAAE,EAAE,EAAE,CAAC;cACxC,MAAM;gBAAEC,mBAAmB,GAAG;cAAG,CAAC,GAAGP,aAAa;cAElD,IAAIQ,sBAAsB;cAC1B,IAAIT,MAAM,CAACG,KAAK,EAAE;gBAChBM,sBAAsB,GAAG,CAAC,GAAGD,mBAAmB,EAAEH,QAAQ,CAAC;cAC7D,CAAC,MAAM;gBACLI,sBAAsB,GAAGD,mBAAmB,CAACE,MAAM,CAAEC,IAAI,IAAKA,IAAI,KAAKN,QAAQ,CAAC;cAClF;cAEA,OAAO;gBACL,GAAGN,QAAQ;gBACXS,mBAAmB,EAAEC;cACvB,CAAC;YACH;UACA;YACE,OAAOV,QAAQ;QACnB;MACF,CAAC;MACD,GAAGlB;IACL,CAAC;IACD,OAAO;MACLnB,OAAO;MACPC,IAAI;MACJgC,aAAa;MACbvB,aAAa;MACbJ,gBAAgB;MAChBO,YAAY;MACZjB,YAAY;MACZ,GAAGuC;IACL,CAAC;EACH,CAAC,EAAE,CAAChB,mBAAmB,EAAEnB,OAAO,EAAEC,IAAI,EAAEgC,aAAa,EAAEvB,aAAa,EAAEJ,gBAAgB,EAAEO,YAAY,EAAEjB,YAAY,CAAC,CAAC;EAEpH,MAAM,CAACsD,UAAU,EAAEC,kBAAkB,CAAC,GAAG3F,UAAU,CAACmC,iBAAiB,EAAEE,sBAAsB,CAAC;EAE9F,IAAIQ,WAAW,IAAIC,gBAAgB,EAAE;IACnC;IACA4B,YAAY,CAAC3B,SAAS,GAAGA,SAAS,IAAI,CAAC,CAAC;EAC1C;;EAEA;EACA,MAAM6C,SAAS,GAAGnF,YAAY,CAAC;IAC7BiE,YAAY;IAAEzB,YAAY;IAAEL,YAAY;IAAEC,WAAW;IAAEO,UAAU;IAAEE;EACrE,CAAC,CAAC;EACF;EACAsC,SAAS,CAACC,IAAI,CAACC,KAAK,IAAI;IACtBA,KAAK,CAACC,cAAc,CAACF,IAAI,CACvBE,cAAc,IAAIzF,iBAAiB,CAACsC,YAAY,EAAEmD,cAAc,EAAEpD,iBAAiB,EAAEkB,kBAAkB,CACzG,CAAC;EACH,CAAC,CAAC;;EAEF;EACA;EACA,MAAMmC,cAAc,GAAG,CAAC,CAAC;EACzB,MAAM;IAAEC;EAAa,CAAC,GAAGP,UAAU;EACnC,IAAIO,YAAY,CAACC,MAAM,GAAG,CAAC,EAAE;IAC3B,MAAMC,gBAAgB,GAAG,CAAC,CAAC;IAC3BF,YAAY,CAACG,OAAO,CAAEC,GAAG,IAAK;MAC5BF,gBAAgB,CAACE,GAAG,CAAChB,EAAE,CAAC,GAAG,IAAI;IACjC,CAAC,CAAC;IACFO,SAAS,CAACC,IAAI,CAACC,KAAK,IAAI;MACtBA,KAAK,CAACQ,kBAAkB,CAACT,IAAI,CAC1BU,KAAK,KAAM;QAAE,GAAGA,KAAK;QAAErB,cAAc,EAAEiB;MAAiB,CAAC,CAC5D,CAAC;IACH,CAAC,CAAC;IACFH,cAAc,CAACQ,gBAAgB,GAAGP,YAAY;EAChD;EACA,MAAMQ,yBAAyB,GAAG,CAACf,UAAU,EAAEC,kBAAkB,CAAC;;EAElE;EACA,MAAMe,QAAQ,GAAGxG,QAAQ,CAAC,GAAG0F,SAAS,CAAC;EAEvC,MAAM;IACJe,QAAQ,EAAEC,kBAAkB;IAC5BC,SAAS,EAAEC,mBAAmB;IAC9BC,MAAM,EAAEC,gBAAgB;IACxBC,OAAO,EAAEC,iBAAiB;IAC1BhC,cAAc,EAAEiC;EAClB,CAAC,GAAGT,QAAQ,CAACH,KAAK;EAElBzG,SAAS,CAAC,MAAM;IACd,IAAIqD,SAAS,EAAE;MACbA,SAAS,CAAC;QACRwD,QAAQ,EAAEC,kBAAkB;QAC5BC,SAAS,EAAEC,mBAAmB;QAC9BC,MAAM,EAAEC,gBAAgB;QACxBC,OAAO,EAAEC;MACX,CAAC,CAAC;IACJ;EACF,CAAC,EAAE,CAAC/D,SAAS,EAAEyD,kBAAkB,EAAEE,mBAAmB,EAAEE,gBAAgB,EAAEE,iBAAiB,CAAC,CAAC;EAE7F/G,sBAAsB,CAAC,MAAM;IAC3B,IAAIkE,qBAAqB,EAAE;MACzBA,qBAAqB,CAAC8C,wBAAwB,CAAC;IACjD;EACF,CAAC,EAAE,CAACA,wBAAwB,EAAE9C,qBAAqB,CAAC,CAAC;EAErD,MAAM+C,gBAAgB,GAAGlF,mBAAmB,CAACwE,QAAQ,EAAED,yBAAyB,CAAC;EAEjFxE,sBAAsB,CAAC;IACrByD,UAAU;IACVC,kBAAkB;IAClB3C,SAAS;IACTiD,YAAY;IACZoB,IAAI,EAAEX,QAAQ,CAACW,IAAI;IACnBC,qBAAqB,EAAEZ,QAAQ,CAACY;EAClC,CAAC,CAAC;EAEF,MAAMC,gBAAgB,GAAG;IACvB,GAAGb,QAAQ;IACXxD,aAAa;IACbF,SAAS;IACTU,kBAAkB;IAClBF,WAAW;IACXC,YAAY;IACZgD,yBAAyB;IACzB3C,oBAAoB;IACpBE,qBAAqB;IACrBT,qBAAqB;IACrBU,gBAAgB;IAChBE,SAAS;IACTvB,YAAY;IACZC,WAAW;IACXgB,kBAAkB;IAClBS,eAAe;IACfC,iBAAiB;IACjBR,YAAY;IACZ,GAAGiC,cAAc;IACjB,GAAGoB,gBAAgB;IACnB,GAAG5C;EACL,CAAC;EAED,oBACE3E,KAAA,CAAA2H,aAAA,CAAC9F,gBAAgB,CAAC+F,QAAQ;IAACxC,KAAK,EAAEsC;EAAiB,gBACjD1H,KAAA,CAAA2H,aAAA,CAAC1F,eAAe;IAACiC,YAAY,EAAEA,YAAa;IAACG,SAAS,EAAEA;EAAU,gBAChErE,KAAA,CAAA2H,aAAA;IAAKtD,SAAS,EAAE9D,UAAU,CAAC,yBAAyB,EAAE;MACpD,aAAa,EAAE,CAAC,CAAC6D;IACnB,CAAC;EAAE,GAEAG,QAAQ,iBACPvE,KAAA,CAAA2H,aAAA,CAAA3H,KAAA,CAAA6H,QAAA,qBACE7H,KAAA,CAAA2H,aAAA,CAAC9G,eAAe,MAAE,CAAC,eACnBb,KAAA,CAAA2H,aAAA,CAACnH,KAAK,MAAE,CAAC,eACTR,KAAA,CAAA2H,aAAA,CAAC5D,mBAAmB;IAAC+D,OAAO,EAAC;EAAkB,CAAE,CAAC,eAClD9H,KAAA,CAAA2H,aAAA,CAAC5G,WAAW,MAAE,CACd,CAED,CACU,CACQ,CAAC;AAEhC;AAEA0B,SAAS,CAACsF,YAAY,GAAG;EACvBjF,iBAAiB,EAAE,EAAE;EACrBD,mBAAmB,EAAE,CAAC,CAAC;EACvBO,YAAY,EAAE,KAAK;EACnBJ,WAAW,EAAE,KAAK;EAClBD,YAAY,EAAE,KAAK;EACnBQ,UAAU,EAAE,KAAK;EACjBF,aAAa,EAAE,KAAK;EACpBJ,gBAAgB,EAAE,KAAK;EACvBO,YAAY,EAAE,KAAK;EACnBF,SAAS,EAAE,IAAI;EACff,YAAY,EAAE,CAAC,CAAC;EAChBuB,mBAAmB,EAAE,CAAC,CAAC;EACvBC,mBAAmB,EAAEjD,iBAAiB;EACtCyD,QAAQ,EAAE,IAAI;EACdZ,WAAW,EAAE,EAAE;EACfC,YAAY,EAAE,EAAE;EAChBC,kBAAkB,EAAE,CAAC;EACrBG,kBAAkB,EAAEgE,SAAS;EAC7BC,wBAAwB,EAAE7G,eAAe;EACzC8G,qBAAqB,EAAEhH,YAAY;EACnCiH,kBAAkB,EAAEhH,SAAS;EAC7B8C,oBAAoB,EAAE,KAAK;EAC3BC,YAAY,EAAE8D,SAAS;EACvB7D,qBAAqB,EAAE;IACrBiE,uBAAuB,EAAE,KAAK;IAC9BC,gBAAgB,EAAEA,CAAA,KAAM,CAAC,CAAC;IAC1BC,uBAAuB,EAAE,MAAM;IAC/BC,eAAe,EAAE;EACnB,CAAC;EACDnE,gBAAgB,EAAE,KAAK;EACvBV,qBAAqB,EAAEsE,SAAS;EAChC3D,SAAS,EAAE2D,SAAS;EACpBvE,YAAY,EAAE,KAAK;EACnBa,SAAS,EAAE,KAAK;EAChBE,qBAAqB,EAAEwD,SAAS;EAChCvD,eAAe,EAAEuD,SAAS;EAC1BtD,iBAAiB,EAAEsD;AACrB,CAAC;AAEDvF,SAAS,CAAC+F,SAAS,GAAG;EACpB;EACA7F,OAAO,EAAEvC,SAAS,CAACqI,OAAO,CAACrI,SAAS,CAACsI,KAAK,CAAC;IACzC;IACAC,MAAM,EAAEvI,SAAS,CAACwI,SAAS,CAAC,CAACxI,SAAS,CAACyI,WAAW,EAAEzI,SAAS,CAAC0I,IAAI,CAAC,CAAC,CAACC,UAAU;IAC/E;IACAC,QAAQ,EAAErI,eAAe,CAACP,SAAS,CAAC6I,MAAM,EAAE,MAAM,CAAC;IACnD;IACAC,IAAI,EAAE9I,SAAS,CAACwI,SAAS,CAAC,CAACxI,SAAS,CAACyI,WAAW,EAAEzI,SAAS,CAAC0I,IAAI,CAAC,CAAC;IAClE;IACAK,MAAM,EAAE/I,SAAS,CAACyI,WAAW;IAC7B;IACAlD,MAAM,EAAEvF,SAAS,CAAC6I,MAAM;IACxB;IACAG,aAAa,EAAEhJ,SAAS,CAACqI,OAAO,CAACrI,SAAS,CAACsI,KAAK,CAAC;MAC/CW,IAAI,EAAEjJ,SAAS,CAAC6I,MAAM;MACtBK,MAAM,EAAElJ,SAAS,CAACkJ,MAAM;MACxBlE,KAAK,EAAEhF,SAAS,CAAC6I;IACnB,CAAC,CAAC;EACJ,CAAC,CAAC,CAAC,CAACF,UAAU;EACd;EACAnG,IAAI,EAAExC,SAAS,CAACqI,OAAO,CAACrI,SAAS,CAACsI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAACK,UAAU;EACvD;EACAhG,YAAY,EAAE3C,SAAS,CAACmJ,IAAI;EAC5B;EACAvF,kBAAkB,EAAE5D,SAAS,CAACsI,KAAK,CAAC;IAClClD,EAAE,EAAEpF,SAAS,CAAC6I,MAAM,CAACF,UAAU;IAC/BJ,MAAM,EAAEvI,SAAS,CAACwI,SAAS,CAAC,CAACxI,SAAS,CAACyI,WAAW,EAAEzI,SAAS,CAAC0I,IAAI,CAAC,CAAC,CAACC,UAAU;IAC/EG,IAAI,EAAE9I,SAAS,CAACwI,SAAS,CAAC,CAACxI,SAAS,CAACyI,WAAW,EAAEzI,SAAS,CAAC0I,IAAI,CAAC,CAAC;IAClEU,aAAa,EAAEpJ,SAAS,CAACmJ,IAAI,CAACR;EAChC,CAAC,CAAC;EACF;EACAxF,UAAU,EAAEnD,SAAS,CAACmJ,IAAI;EAC1B;EACA/F,YAAY,EAAEpD,SAAS,CAACmJ,IAAI;EAC5B;EACAvG,WAAW,EAAE5C,SAAS,CAACmJ,IAAI;EAC3B;EACAtG,gBAAgB,EAAE7C,SAAS,CAACmJ,IAAI;EAChC;EACArG,SAAS,EAAExC,YAAY,CAACN,SAAS,CAACkJ,MAAM,EAAE,kBAAkB,CAAC;EAC7D;EACAlG,YAAY,EAAEhD,SAAS,CAACmJ,IAAI;EAC5B;EACAlG,aAAa,EAAEjD,SAAS,CAACmJ,IAAI;EAE7B;EACA1G,mBAAmB,EAAEzC,SAAS,CAACsI,KAAK,CAAC;IACnC;IACAS,MAAM,EAAE/I,SAAS,CAACyI;EACpB,CAAC,CAAC;EACF;EACA/F,iBAAiB,EAAE1C,SAAS,CAACqI,OAAO,CAACrI,SAAS,CAACsI,KAAK,CAAC;IACnD;IACAlD,EAAE,EAAEpF,SAAS,CAAC6I,MAAM,CAACF,UAAU;IAC/B;IACAJ,MAAM,EAAEvI,SAAS,CAACwI,SAAS,CAAC,CAACxI,SAAS,CAACyI,WAAW,EAAEzI,SAAS,CAAC0I,IAAI,CAAC,CAAC;IACpE;IACAI,IAAI,EAAE9I,SAAS,CAACwI,SAAS,CAAC,CAACxI,SAAS,CAACyI,WAAW,EAAEzI,SAAS,CAAC0I,IAAI,CAAC;EACnE,CAAC,CAAC,CAAC;EACH;AACF;EACExF,SAAS,EAAElD,SAAS,CAACqJ,IAAI;EACzB;EACAlH,YAAY,EAAEnC,SAAS,CAACsI,KAAK,CAAC;IAC5B5B,QAAQ,EAAEpG,YAAY,CAACN,SAAS,CAACkJ,MAAM,EAAE,aAAa,CAAC;IACvDtC,SAAS,EAAEtG,YAAY,CAACN,SAAS,CAACkJ,MAAM,EAAE,aAAa,CAAC;IACxDlC,OAAO,EAAE1G,YAAY,CAACN,SAAS,CAACqI,OAAO,CAACrI,SAAS,CAACsI,KAAK,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC;IAC5ExB,MAAM,EAAExG,YAAY,CAACN,SAAS,CAACqI,OAAO,CAACrI,SAAS,CAACsI,KAAK,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC;IAC1ErD,cAAc,EAAEjF,SAAS,CAACsI,KAAK,CAAC,CAAC;IACjCjD,mBAAmB,EAAErF,SAAS,CAACqI,OAAO,CAACrI,SAAS,CAACkJ,MAAM;EACzD,CAAC,CAAC;EACF;AACF;EACExF,mBAAmB,EAAE1D,SAAS,CAACsI,KAAK,CAAC,CAAC,CAAC,CAAC;EACxC;EACAvF,SAAS,EAAE/C,SAAS,CAACkJ,MAAM,CAACP,UAAU;EACtC;AACF;EACEpF,WAAW,EAAEvD,SAAS,CAACwI,SAAS,CAAC,CAC/BxI,SAAS,CAACqI,OAAO,CACfrI,SAAS,CAACwI,SAAS,CAAC,CAClBxI,SAAS,CAACsI,KAAK,CAAC;IACd;IACAgB,UAAU,EAAEtJ,SAAS,CAAC6I,MAAM,CAACF,UAAU;IACvC;IACAY,WAAW,EAAEvJ,SAAS,CAACqJ,IAAI,CAACV,UAAU;IACtC;IACA1E,SAAS,EAAEjE,SAAS,CAAC6I,MAAM;IAC3B;IACAW,OAAO,EAAExJ,SAAS,CAAC6I,MAAM;IACzB;IACAY,QAAQ,EAAEzJ,SAAS,CAACmJ;EACtB,CAAC,CAAC,EACF;EACAnJ,SAAS,CAACqJ,IAAI,EACd;EACArJ,SAAS,CAAC0J,OAAO,CAClB,CACH,CAAC,EACD;EACA1J,SAAS,CAACqJ,IAAI,EACd;EACArJ,SAAS,CAAC0J,OAAO,CAClB,CAAC;EACF;EACAlG,YAAY,EAAExD,SAAS,CAACwI,SAAS,CAAC,CAChCxI,SAAS,CAACqI,OAAO,CACfrI,SAAS,CAACwI,SAAS,CAAC,CAClBxI,SAAS,CAACsI,KAAK,CAAC;IACd;IACAgB,UAAU,EAAEtJ,SAAS,CAAC6I,MAAM,CAACF,UAAU;IACvC;IACAY,WAAW,EAAEvJ,SAAS,CAACqJ,IAAI,CAACV,UAAU;IACtC;IACA1E,SAAS,EAAEjE,SAAS,CAAC6I,MAAM;IAC3B;IACAW,OAAO,EAAExJ,SAAS,CAAC6I,MAAM;IACzB;IACAY,QAAQ,EAAEzJ,SAAS,CAACmJ;EACtB,CAAC,CAAC,EACF;EACAnJ,SAAS,CAACqJ,IAAI,EACd;EACArJ,SAAS,CAAC0J,OAAO,CAClB,CACH,CAAC,EACD;EACA1J,SAAS,CAACqJ,IAAI,EACd;EACArJ,SAAS,CAAC0J,OAAO,CAClB,CAAC;EACF;EACAjG,kBAAkB,EAAEzD,SAAS,CAAC2J,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EACjD;EACAhG,mBAAmB,EAAE3D,SAAS,CAACyI,WAAW;EAC1C;EACAV,kBAAkB,EAAE/H,SAAS,CAACyI,WAAW;EACzC;EACAZ,wBAAwB,EAAE7H,SAAS,CAACyI,WAAW;EAC/C;EACAX,qBAAqB,EAAE9H,SAAS,CAACyI,WAAW;EAC5C;EACAtE,QAAQ,EAAEnE,SAAS,CAAC0I,IAAI;EACxB;EACA7E,oBAAoB,EAAE7D,SAAS,CAACmJ,IAAI;EACpC;EACAlF,SAAS,EAAEjE,SAAS,CAAC6I,MAAM;EAC3B;EACA/E,YAAY,EAAE9D,SAAS,CAAC6I,MAAM;EAC9B;EACA9E,qBAAqB,EAAE/D,SAAS,CAACsI,KAAK,CAAC;IACrC;IACAN,uBAAuB,EAAEhI,SAAS,CAACmJ,IAAI;IACvC;IACAlB,gBAAgB,EAAEjI,SAAS,CAACqJ,IAAI;IAChC;IACAnB,uBAAuB,EAAElI,SAAS,CAAC6I,MAAM;IACzC;AACJ;IACIV,eAAe,EAAEnI,SAAS,CAAC6I;EAC7B,CAAC,CAAC;EACF;EACA7E,gBAAgB,EAAEhE,SAAS,CAACmJ,IAAI;EAChC;EACA7F,qBAAqB,EAAEtD,SAAS,CAACqJ,IAAI;EACrC;EACAhG,YAAY,EAAErD,SAAS,CAACmJ,IAAI;EAC5B;EACAjF,SAAS,EAAElE,SAAS,CAACmJ,IAAI;EACzB;EACA/E,qBAAqB,EAAEpE,SAAS,CAACqJ,IAAI;EACrC;EACAhF,eAAe,EAAErE,SAAS,CAACkJ,MAAM;EACjC;EACA5E,iBAAiB,EAAEtE,SAAS,CAACqJ;AAC/B,CAAC;AAEDhH,SAAS,CAACzB,WAAW,GAAGA,WAAW;AACnCyB,SAAS,CAACuH,UAAU,GAAGlJ,iBAAiB;AACxC2B,SAAS,CAACxB,eAAe,GAAGA,eAAe;AAC3CwB,SAAS,CAACvB,YAAY,GAAGA,YAAY;AACrCuB,SAAS,CAACtB,SAAS,GAAGA,SAAS;AAC/BsB,SAAS,CAACrB,eAAe,GAAGA,eAAe;AAC3CqB,SAAS,CAACnB,WAAW,GAAGA,WAAW;AACnCmB,SAAS,CAACjC,KAAK,GAAGA,KAAK;AACvBiC,SAAS,CAAChB,SAAS,GAAGA,SAAS;AAC/BgB,SAAS,CAAC5B,eAAe,GAAGA,eAAe;AAC3C4B,SAAS,CAAClB,YAAY,GAAGA,YAAY;AACrCkB,SAAS,CAAC1B,WAAW,GAAGA,WAAW;AACnC0B,SAAS,CAACjB,eAAe,GAAGA,eAAe;AAC3CiB,SAAS,CAACf,cAAc,GAAGA,cAAc;AACzCe,SAAS,CAACd,eAAe,GAAGA,eAAe;AAC3Cc,SAAS,CAACb,sBAAsB,GAAGA,sBAAsB;AACzDa,SAAS,CAACX,YAAY,GAAGA,YAAY;AACrCW,SAAS,CAACpB,yBAAyB,GAAGA,yBAAyB;AAC/DoB,SAAS,CAACV,gBAAgB,GAAGA,gBAAgB;AAC7CU,SAAS,CAACT,sBAAsB,GAAGA,sBAAsB;AACzDS,SAAS,CAACP,SAAS,GAAGA,SAAS;AAC/BO,SAAS,CAACN,SAAS,GAAGA,SAAS;AAE/B,eAAeM,SAAS","ignoreList":[]}
|
|
@@ -6,6 +6,11 @@ const messages = defineMessages({
|
|
|
6
6
|
defaultMessage: 'table pagination',
|
|
7
7
|
description: 'Accessibile name for the navigation element of a pagination component',
|
|
8
8
|
},
|
|
9
|
+
filtersDropdownTitle: {
|
|
10
|
+
id: 'pgn.DataTable.filtersDropdownTitle',
|
|
11
|
+
defaultMessage: 'Filters',
|
|
12
|
+
description: 'Title of the filters dropdown',
|
|
13
|
+
},
|
|
9
14
|
});
|
|
10
15
|
|
|
11
16
|
export default messages;
|
package/package.json
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import React, { useContext, useMemo } from 'react';
|
|
2
|
+
import { useIntl } from 'react-intl';
|
|
2
3
|
import DataTableContext from './DataTableContext';
|
|
3
4
|
import { DropdownButton } from '../Dropdown';
|
|
4
5
|
import useWindowSize from '../hooks/useWindowSizeHook';
|
|
5
6
|
import breakpoints from '../utils/breakpoints';
|
|
7
|
+
import messages from './messages';
|
|
6
8
|
|
|
7
9
|
/** The first filter will be as an input, additional filters will be available in a dropdown. */
|
|
8
10
|
function DropdownFilters() {
|
|
11
|
+
const intl = useIntl();
|
|
9
12
|
const { width } = useWindowSize();
|
|
10
|
-
const {
|
|
13
|
+
const {
|
|
14
|
+
columns, numBreakoutFilters, filtersTitle,
|
|
15
|
+
} = useContext(DataTableContext);
|
|
11
16
|
|
|
12
17
|
const [breakoutFilters, otherFilters] = useMemo(() => {
|
|
13
18
|
if (!columns) {
|
|
@@ -25,6 +30,8 @@ function DropdownFilters() {
|
|
|
25
30
|
return [boFilters, dropdownFilters];
|
|
26
31
|
}, [columns, width, numBreakoutFilters]);
|
|
27
32
|
|
|
33
|
+
const dropdownTitle = filtersTitle || intl.formatMessage(messages.filtersDropdownTitle);
|
|
34
|
+
|
|
28
35
|
return (
|
|
29
36
|
<div className="pgn__data-table-filters">
|
|
30
37
|
{breakoutFilters.length > 0 && breakoutFilters.map((column) => (
|
|
@@ -33,7 +40,7 @@ function DropdownFilters() {
|
|
|
33
40
|
</div>
|
|
34
41
|
))}
|
|
35
42
|
{otherFilters.length > 0 && (
|
|
36
|
-
<DropdownButton variant="outline-primary" id="table-filters-dropdown" title=
|
|
43
|
+
<DropdownButton variant="outline-primary" id="table-filters-dropdown" title={dropdownTitle}>
|
|
37
44
|
{otherFilters.map((column) => (
|
|
38
45
|
<div
|
|
39
46
|
key={column.Header}
|
package/src/DataTable/README.md
CHANGED
|
@@ -176,7 +176,7 @@ To enable proper selection behavior with backend pagination (i.e., when ``isSele
|
|
|
176
176
|
producer: 'Isao Takahata',
|
|
177
177
|
release_date: 1986,
|
|
178
178
|
rt_score: 95,
|
|
179
|
-
},
|
|
179
|
+
},
|
|
180
180
|
{
|
|
181
181
|
id: '12cfb892-aac0-4c5b-94af-521852e46d6a',
|
|
182
182
|
title: 'Grave of the Fireflies',
|
|
@@ -567,7 +567,7 @@ Can be used to show the loading state when ``DataTable`` is asynchronously fetch
|
|
|
567
567
|
},
|
|
568
568
|
];
|
|
569
569
|
{/* end example state */}
|
|
570
|
-
|
|
570
|
+
|
|
571
571
|
return (
|
|
572
572
|
<>
|
|
573
573
|
{/* start example form block */}
|
|
@@ -634,7 +634,7 @@ You can pass a function to render custom components for bulk actions and table a
|
|
|
634
634
|
Enroll
|
|
635
635
|
</Button>
|
|
636
636
|
);
|
|
637
|
-
|
|
637
|
+
|
|
638
638
|
const EnrollAction = ({ selectedFlatRows, ...rest }) => (
|
|
639
639
|
// Here is access to the selectedFlatRows, isEntireTableSelected, tableInstance
|
|
640
640
|
<Button variant="danger" onClick={() => console.log('Enroll', selectedFlatRows, rest)}>
|
|
@@ -647,13 +647,13 @@ You can pass a function to render custom components for bulk actions and table a
|
|
|
647
647
|
Assign
|
|
648
648
|
</Button>
|
|
649
649
|
);
|
|
650
|
-
|
|
650
|
+
|
|
651
651
|
const ExtraAction = ({ text, selectedFlatRows, ...rest }) => (
|
|
652
652
|
<Button onClick={() => console.log(`Extra Action ${text}`, selectedFlatRows, rest)}>
|
|
653
653
|
{`Extra Action ${text}`}
|
|
654
654
|
</Button>
|
|
655
655
|
);
|
|
656
|
-
|
|
656
|
+
|
|
657
657
|
return (
|
|
658
658
|
<DataTable
|
|
659
659
|
isSelectable
|
|
@@ -734,7 +734,7 @@ You can pass a function to render custom components for bulk actions and table a
|
|
|
734
734
|
</DataTable>
|
|
735
735
|
)
|
|
736
736
|
}
|
|
737
|
-
|
|
737
|
+
|
|
738
738
|
```
|
|
739
739
|
|
|
740
740
|
#### Actions with Data view toggle enabled
|
|
@@ -889,7 +889,7 @@ a responsive grid of cards.
|
|
|
889
889
|
Clear Selection
|
|
890
890
|
</Component>
|
|
891
891
|
);
|
|
892
|
-
|
|
892
|
+
|
|
893
893
|
return (
|
|
894
894
|
<DataTable
|
|
895
895
|
isFilterable
|
|
@@ -1103,7 +1103,7 @@ Use `columnSizes` prop of `CardView` component to define how many `Cards` are sh
|
|
|
1103
1103
|
|
|
1104
1104
|
const ExampleCard = ({ className, original }) => {
|
|
1105
1105
|
const { name, color, famous_for: famousFor } = original;
|
|
1106
|
-
|
|
1106
|
+
|
|
1107
1107
|
return (
|
|
1108
1108
|
<Card className={className}>
|
|
1109
1109
|
<Card.ImageCap src="https://picsum.photos/360/200/" srcAlt="Card image" />
|
|
@@ -1195,7 +1195,7 @@ You can also display `Cards` with horizontal view. If the table is selectable co
|
|
|
1195
1195
|
<Card.Header title={name} />
|
|
1196
1196
|
<Card.Section>
|
|
1197
1197
|
<dl>
|
|
1198
|
-
<dt>Color</dt>
|
|
1198
|
+
<dt>Color</dt>
|
|
1199
1199
|
<dd>{color}</dd>
|
|
1200
1200
|
<dt>Famous For</dt>
|
|
1201
1201
|
<dd>{famousFor}</dd>
|
|
@@ -1217,7 +1217,7 @@ You can also display `Cards` with horizontal view. If the table is selectable co
|
|
|
1217
1217
|
name: 'Lil Bub',
|
|
1218
1218
|
color: 'brown tabby',
|
|
1219
1219
|
famous_for: 'weird tongue',
|
|
1220
|
-
},
|
|
1220
|
+
},
|
|
1221
1221
|
{
|
|
1222
1222
|
name: 'Grumpy Cat',
|
|
1223
1223
|
color: 'siamese',
|
|
@@ -1258,6 +1258,7 @@ For a more desktop friendly view, you can move filters into a sidebar by providi
|
|
|
1258
1258
|
```jsx live
|
|
1259
1259
|
<DataTable
|
|
1260
1260
|
showFiltersInSidebar
|
|
1261
|
+
filtersTitle="Color filters"
|
|
1261
1262
|
isFilterable
|
|
1262
1263
|
isSortable
|
|
1263
1264
|
defaultColumnValues={{ Filter: TextFilter }}
|
|
@@ -1330,17 +1331,17 @@ For a more desktop friendly view, you can move filters into a sidebar by providi
|
|
|
1330
1331
|
```
|
|
1331
1332
|
|
|
1332
1333
|
## Expandable rows
|
|
1333
|
-
`DataTable` supports expandable rows which once expanded render additional content under the row. Displayed content
|
|
1334
|
+
`DataTable` supports expandable rows which once expanded render additional content under the row. Displayed content
|
|
1334
1335
|
is controlled by the `renderRowSubComponent` prop, which is a function that receives `row` as its single prop and renders expanded view, you also
|
|
1335
1336
|
need to pass `isEpandable` prop to `DataTable` to indicate that it should support expand behavior for rows.
|
|
1336
|
-
Finally, an additional column is required to be included into `columns` prop which will contain handlers for expand / collapse behavior, see examples below.
|
|
1337
|
+
Finally, an additional column is required to be included into `columns` prop which will contain handlers for expand / collapse behavior, see examples below.
|
|
1337
1338
|
|
|
1338
1339
|
### Default view
|
|
1339
1340
|
|
|
1340
1341
|
Here we use default expander column offered by Paragon and for each row render value of the `name` attribute as its subcomponent.
|
|
1341
1342
|
|
|
1342
1343
|
```jsx live
|
|
1343
|
-
<DataTable
|
|
1344
|
+
<DataTable
|
|
1344
1345
|
isExpandable
|
|
1345
1346
|
itemCount={7}
|
|
1346
1347
|
renderRowSubComponent={({ row }) => <div className='text-center'>{row.values.name}</div>}
|
|
@@ -1457,10 +1458,10 @@ You can create your own custom expander column and use it, see code example belo
|
|
|
1457
1458
|
</DataTable>
|
|
1458
1459
|
</div>
|
|
1459
1460
|
)
|
|
1460
|
-
|
|
1461
|
+
|
|
1461
1462
|
return (
|
|
1462
1463
|
<DataTable
|
|
1463
|
-
isExpandable
|
|
1464
|
+
isExpandable
|
|
1464
1465
|
renderRowSubComponent={renderSubComponent}
|
|
1465
1466
|
itemCount={3}
|
|
1466
1467
|
data={[
|
|
@@ -1481,7 +1482,7 @@ You can create your own custom expander column and use it, see code example belo
|
|
|
1481
1482
|
reason: 'Felt like it',
|
|
1482
1483
|
},
|
|
1483
1484
|
{
|
|
1484
|
-
name: 'Smoothie',
|
|
1485
|
+
name: 'Smoothie',
|
|
1485
1486
|
color: 'orange tabby',
|
|
1486
1487
|
famous_for: 'modeling',
|
|
1487
1488
|
date_modified: currentDate,
|
|
@@ -1527,7 +1528,7 @@ You can create your own cell content by passing the `Cell` property to a specifi
|
|
|
1527
1528
|
newColors[index] = cellColors[index] < 3 ? cellColors[index] + 1 : 0;
|
|
1528
1529
|
setCellColors(newColors);
|
|
1529
1530
|
};
|
|
1530
|
-
|
|
1531
|
+
|
|
1531
1532
|
return (
|
|
1532
1533
|
<DataTable
|
|
1533
1534
|
isExpandable
|
|
@@ -1544,7 +1545,7 @@ You can create your own cell content by passing the `Cell` property to a specifi
|
|
|
1544
1545
|
famous_for: 'serving moods',
|
|
1545
1546
|
},
|
|
1546
1547
|
{
|
|
1547
|
-
name: 'Smoothie',
|
|
1548
|
+
name: 'Smoothie',
|
|
1548
1549
|
color: 'orange tabby',
|
|
1549
1550
|
famous_for: 'modeling',
|
|
1550
1551
|
},
|
package/src/DataTable/index.jsx
CHANGED
|
@@ -49,8 +49,10 @@ function DataTable({
|
|
|
49
49
|
EmptyTableComponent,
|
|
50
50
|
manualSelectColumn,
|
|
51
51
|
showFiltersInSidebar,
|
|
52
|
+
filtersTitle,
|
|
52
53
|
dataViewToggleOptions,
|
|
53
54
|
disableElevation,
|
|
55
|
+
className,
|
|
54
56
|
isLoading,
|
|
55
57
|
children,
|
|
56
58
|
onSelectedRowsChanged,
|
|
@@ -215,6 +217,7 @@ function DataTable({
|
|
|
215
217
|
manualSelectColumn,
|
|
216
218
|
maxSelectedRows,
|
|
217
219
|
onMaxSelectedRows,
|
|
220
|
+
filtersTitle,
|
|
218
221
|
...selectionProps,
|
|
219
222
|
...selectionActions,
|
|
220
223
|
...props,
|
|
@@ -222,7 +225,7 @@ function DataTable({
|
|
|
222
225
|
|
|
223
226
|
return (
|
|
224
227
|
<DataTableContext.Provider value={enhancedInstance}>
|
|
225
|
-
<DataTableLayout>
|
|
228
|
+
<DataTableLayout filtersTitle={filtersTitle} className={className}>
|
|
226
229
|
<div className={classNames('pgn__data-table-wrapper', {
|
|
227
230
|
'hide-shadow': !!disableElevation,
|
|
228
231
|
})}
|
|
@@ -264,6 +267,7 @@ DataTable.defaultProps = {
|
|
|
264
267
|
FilterStatusComponent: FilterStatus,
|
|
265
268
|
RowStatusComponent: RowStatus,
|
|
266
269
|
showFiltersInSidebar: false,
|
|
270
|
+
filtersTitle: undefined,
|
|
267
271
|
dataViewToggleOptions: {
|
|
268
272
|
isDataViewToggleEnabled: false,
|
|
269
273
|
onDataViewToggle: () => {},
|
|
@@ -272,6 +276,7 @@ DataTable.defaultProps = {
|
|
|
272
276
|
},
|
|
273
277
|
disableElevation: false,
|
|
274
278
|
renderRowSubComponent: undefined,
|
|
279
|
+
className: undefined,
|
|
275
280
|
isExpandable: false,
|
|
276
281
|
isLoading: false,
|
|
277
282
|
onSelectedRowsChanged: undefined,
|
|
@@ -425,6 +430,10 @@ DataTable.propTypes = {
|
|
|
425
430
|
children: PropTypes.node,
|
|
426
431
|
/** If true filters will be shown on sidebar instead */
|
|
427
432
|
showFiltersInSidebar: PropTypes.bool,
|
|
433
|
+
/** Class name for the data table layout */
|
|
434
|
+
className: PropTypes.string,
|
|
435
|
+
/** Title of the filters section */
|
|
436
|
+
filtersTitle: PropTypes.string,
|
|
428
437
|
/** options for data view toggle */
|
|
429
438
|
dataViewToggleOptions: PropTypes.shape({
|
|
430
439
|
/** Whether to show a toggle button group which allows view switching between card and table views */
|
|
@@ -6,6 +6,11 @@ const messages = defineMessages({
|
|
|
6
6
|
defaultMessage: 'table pagination',
|
|
7
7
|
description: 'Accessibile name for the navigation element of a pagination component',
|
|
8
8
|
},
|
|
9
|
+
filtersDropdownTitle: {
|
|
10
|
+
id: 'pgn.DataTable.filtersDropdownTitle',
|
|
11
|
+
defaultMessage: 'Filters',
|
|
12
|
+
description: 'Title of the filters dropdown',
|
|
13
|
+
},
|
|
9
14
|
});
|
|
10
15
|
|
|
11
16
|
export default messages;
|
|
@@ -8,6 +8,7 @@ import DataTable from '..';
|
|
|
8
8
|
import DataTableContext from '../DataTableContext';
|
|
9
9
|
import { TextFilter } from '../..';
|
|
10
10
|
import { SELECT_ALL_TEST_ID } from '../selection/data/constants';
|
|
11
|
+
import messages from '../messages';
|
|
11
12
|
|
|
12
13
|
const additionalColumns = [
|
|
13
14
|
{
|
|
@@ -162,6 +163,55 @@ describe('<DataTable />', () => {
|
|
|
162
163
|
expect(screen.getByText('Action')).toBeInTheDocument();
|
|
163
164
|
expect(screen.getByText('More')).toBeInTheDocument();
|
|
164
165
|
});
|
|
166
|
+
|
|
167
|
+
it('displays the custom filters title in the sidebar', () => {
|
|
168
|
+
render(
|
|
169
|
+
<DataTableWrapper
|
|
170
|
+
showFiltersInSidebar
|
|
171
|
+
filtersTitle="Refine Your Search"
|
|
172
|
+
isFilterable
|
|
173
|
+
defaultColumnValues={{ Filter: TextFilter }}
|
|
174
|
+
{...props}
|
|
175
|
+
/>,
|
|
176
|
+
);
|
|
177
|
+
expect(screen.getByRole('heading', { name: 'Refine Your Search' })).toBeInTheDocument();
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
it('displays the default filters title in the sidebar', () => {
|
|
181
|
+
render(
|
|
182
|
+
<DataTableWrapper
|
|
183
|
+
showFiltersInSidebar
|
|
184
|
+
isFilterable
|
|
185
|
+
defaultColumnValues={{ Filter: TextFilter }}
|
|
186
|
+
{...props}
|
|
187
|
+
/>,
|
|
188
|
+
);
|
|
189
|
+
expect(screen.getByRole('heading', { name: messages.filtersDropdownTitle.defaultMessage })).toBeInTheDocument();
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
it('displays the custom filters title in the filters dropdown', () => {
|
|
193
|
+
render(
|
|
194
|
+
<DataTableWrapper
|
|
195
|
+
filtersTitle="Refine Your Search"
|
|
196
|
+
isFilterable
|
|
197
|
+
defaultColumnValues={{ Filter: TextFilter }}
|
|
198
|
+
{...props}
|
|
199
|
+
/>,
|
|
200
|
+
);
|
|
201
|
+
expect(screen.getByRole('button', { name: 'Refine Your Search' })).toBeInTheDocument();
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
it('displays the default filters title in the filters dropdown', () => {
|
|
205
|
+
render(
|
|
206
|
+
<DataTableWrapper
|
|
207
|
+
isFilterable
|
|
208
|
+
defaultColumnValues={{ Filter: TextFilter }}
|
|
209
|
+
{...props}
|
|
210
|
+
/>,
|
|
211
|
+
);
|
|
212
|
+
expect(screen.getByRole('button', { name: messages.filtersDropdownTitle.defaultMessage })).toBeInTheDocument();
|
|
213
|
+
});
|
|
214
|
+
|
|
165
215
|
it('calls useTable with the data and columns', () => {
|
|
166
216
|
const spy = jest.spyOn(reactTable, 'useTable');
|
|
167
217
|
render(<DataTableWrapper {...props} />);
|
|
@@ -213,7 +263,7 @@ describe('<DataTable />', () => {
|
|
|
213
263
|
fetchData: jest.fn(),
|
|
214
264
|
};
|
|
215
265
|
render(<DataTableWrapper {...propsWithSelection} />);
|
|
216
|
-
const filtersButton = screen.getByRole('button', { name:
|
|
266
|
+
const filtersButton = screen.getByRole('button', { name: messages.filtersDropdownTitle.defaultMessage });
|
|
217
267
|
|
|
218
268
|
await userEvent.click(filtersButton);
|
|
219
269
|
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { render, screen } from '@testing-library/react';
|
|
3
3
|
import userEvent from '@testing-library/user-event';
|
|
4
|
+
import { IntlProvider } from 'react-intl';
|
|
4
5
|
|
|
5
6
|
import DropdownFilters from '../DropdownFilters';
|
|
6
7
|
import { useWindowSize } from '../..';
|
|
7
8
|
import DataTableContext from '../DataTableContext';
|
|
9
|
+
import messages from '../messages';
|
|
8
10
|
|
|
9
11
|
jest.mock('../../hooks/useWindowSizeHook');
|
|
10
12
|
|
|
@@ -31,9 +33,11 @@ const instance = {
|
|
|
31
33
|
// eslint-disable-next-line react/prop-types
|
|
32
34
|
function DropdownFiltersWrapper({ value = instance, props }) {
|
|
33
35
|
return (
|
|
34
|
-
<
|
|
35
|
-
<
|
|
36
|
-
|
|
36
|
+
<IntlProvider locale="en">
|
|
37
|
+
<DataTableContext.Provider value={value}>
|
|
38
|
+
<DropdownFilters {...props} />
|
|
39
|
+
</DataTableContext.Provider>
|
|
40
|
+
</IntlProvider>
|
|
37
41
|
);
|
|
38
42
|
}
|
|
39
43
|
|
|
@@ -56,7 +60,7 @@ describe('<DropdownFilters />', () => {
|
|
|
56
60
|
// filter should be rendered in the dropdown, so should not be present before
|
|
57
61
|
// clicking the button.
|
|
58
62
|
expect(screen.queryByText('Occupation filter')).toBeNull();
|
|
59
|
-
const filtersButton = screen.getByRole('button', { name:
|
|
63
|
+
const filtersButton = screen.getByRole('button', { name: messages.filtersDropdownTitle.defaultMessage });
|
|
60
64
|
await userEvent.click(filtersButton);
|
|
61
65
|
expect(screen.getByText('Occupation filter')).toBeInTheDocument();
|
|
62
66
|
});
|
|
@@ -65,7 +69,7 @@ describe('<DropdownFilters />', () => {
|
|
|
65
69
|
useWindowSize.mockReturnValue({ width: 800 });
|
|
66
70
|
render(<DropdownFiltersWrapper />);
|
|
67
71
|
expect(screen.queryByText('DOB filter')).toBeNull();
|
|
68
|
-
const filtersButton = screen.getByRole('button', { name:
|
|
72
|
+
const filtersButton = screen.getByRole('button', { name: messages.filtersDropdownTitle.defaultMessage });
|
|
69
73
|
await userEvent.click(filtersButton);
|
|
70
74
|
expect(screen.queryByText('DOB filter')).toBeNull();
|
|
71
75
|
});
|
|
@@ -74,7 +78,7 @@ describe('<DropdownFilters />', () => {
|
|
|
74
78
|
useWindowSize.mockReturnValue({ width: 800 });
|
|
75
79
|
render(<DropdownFiltersWrapper value={{ columns: [instance.columns[1]] }} />);
|
|
76
80
|
expect(screen.getByText('Occupation filter')).toBeInTheDocument();
|
|
77
|
-
expect(screen.queryByRole('button', { name:
|
|
81
|
+
expect(screen.queryByRole('button', { name: messages.filtersDropdownTitle.defaultMessage })).toBeNull();
|
|
78
82
|
});
|
|
79
83
|
});
|
|
80
84
|
|
|
@@ -88,7 +92,7 @@ describe('<DropdownFilters />', () => {
|
|
|
88
92
|
it('renders all filters in the dropdown', async () => {
|
|
89
93
|
useWindowSize.mockReturnValue({ width: 500 });
|
|
90
94
|
render(<DropdownFiltersWrapper />);
|
|
91
|
-
const filtersButton = screen.getByRole('button', { name:
|
|
95
|
+
const filtersButton = screen.getByRole('button', { name: messages.filtersDropdownTitle.defaultMessage });
|
|
92
96
|
await userEvent.click(filtersButton);
|
|
93
97
|
expect(screen.getByText('Bears filter')).toBeInTheDocument();
|
|
94
98
|
expect(screen.getByText('Occupation filter')).toBeInTheDocument();
|
|
@@ -16,7 +16,7 @@ notes: |
|
|
|
16
16
|
A generic component for creating accessible modal popup objects.
|
|
17
17
|
|
|
18
18
|
Note that `ModalPopup` expects DOM node, not ref, in order to be able to update when the node changes.
|
|
19
|
-
A proper way to implement this is to use [callback refs](https://
|
|
19
|
+
A proper way to implement this is to use [callback refs](https://react.dev/reference/react-dom/components/common#ref-callback) with `useState` hook as in the example below.
|
|
20
20
|
|
|
21
21
|
## Basic Usage
|
|
22
22
|
|