@jobber/components 4.41.0 → 4.42.1-update-hov.11
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/Chip.d.ts +1 -0
- package/Chip.js +17 -0
- package/Combobox.d.ts +1 -0
- package/Combobox.js +17 -0
- package/Flex.d.ts +1 -0
- package/Flex.js +17 -0
- package/dist/Autocomplete/index.js +8 -8
- package/dist/Avatar/index.js +1 -1
- package/dist/{Avatar-1aa30ee1.js → Avatar-76a799fa.js} +1 -1
- package/dist/Banner/index.js +5 -5
- package/dist/Button/index.js +2 -2
- package/dist/Button-163a0641.js +57 -0
- package/dist/ButtonDismiss/index.js +3 -3
- package/dist/{ButtonDismiss-82680c7d.js → ButtonDismiss-2b98d075.js} +1 -1
- package/dist/Card/index.js +5 -5
- package/dist/{Card-cc2ffbaa.js → Card-3178033c.js} +4 -4
- package/dist/Checkbox/index.js +3 -3
- package/dist/{Checkbox-3bccf65c.js → Checkbox-ad7ec2e7.js} +2 -2
- package/dist/Chip/Chip.d.ts +8 -0
- package/dist/Chip/components/ChipDismissible/ChipDismissible.d.ts +3 -0
- package/dist/Chip/components/ChipPrefix/Chip.Prefix.d.ts +2 -0
- package/dist/Chip/components/ChipSelectable/ChipSelectable.d.ts +3 -0
- package/dist/Chip/components/ChipSuffix/Chip.Suffix.d.ts +6 -0
- package/dist/Chip/hooks/index.d.ts +1 -0
- package/dist/Chip/hooks/useChildComponent.d.ts +8 -0
- package/dist/Chip/index.d.ts +3 -0
- package/dist/Chip/index.js +40 -0
- package/dist/Chip-55e6da05.js +89 -0
- package/dist/Chips/index.js +505 -19
- package/dist/Combobox/Combobox.d.ts +11 -0
- package/dist/Combobox/Combobox.types.d.ts +189 -0
- package/dist/Combobox/ComboboxProvider.d.ts +20 -0
- package/dist/Combobox/components/ComboboxAction/ComboboxAction.d.ts +3 -0
- package/dist/Combobox/components/ComboboxAction/index.d.ts +1 -0
- package/dist/Combobox/components/ComboboxActivator/ComboboxActivator.d.ts +3 -0
- package/dist/Combobox/components/ComboboxActivator/index.d.ts +1 -0
- package/dist/Combobox/components/ComboboxContent/ComboboxContent.d.ts +3 -0
- package/dist/Combobox/components/ComboboxContent/ComboboxContentHeader/ComboboxContentHeader.d.ts +3 -0
- package/dist/Combobox/components/ComboboxContent/ComboboxContentHeader/index.d.ts +1 -0
- package/dist/Combobox/components/ComboboxContent/ComboboxContentList/ComboboxContentList.d.ts +3 -0
- package/dist/Combobox/components/ComboboxContent/ComboboxContentList/index.d.ts +1 -0
- package/dist/Combobox/components/ComboboxContent/ComboboxContentSearch/ComboboxContentSearch.d.ts +3 -0
- package/dist/Combobox/components/ComboboxContent/ComboboxContentSearch/index.d.ts +1 -0
- package/dist/Combobox/components/ComboboxContent/index.d.ts +1 -0
- package/dist/Combobox/components/ComboboxOption/ComboboxOption.d.ts +6 -0
- package/dist/Combobox/components/ComboboxOption/index.d.ts +1 -0
- package/dist/Combobox/components/ComboboxTrigger/ComboboxTrigger.d.ts +3 -0
- package/dist/Combobox/components/ComboboxTrigger/index.d.ts +1 -0
- package/dist/Combobox/hooks/useCombobox.d.ts +15 -0
- package/dist/Combobox/hooks/useComboboxAccessibility.d.ts +13 -0
- package/dist/Combobox/hooks/useComboboxContent.d.ts +8 -0
- package/dist/Combobox/hooks/useComboboxValidation.d.ts +12 -0
- package/dist/Combobox/hooks/useMakeComboboxHandlers.d.ts +7 -0
- package/dist/Combobox/index.d.ts +3 -0
- package/dist/Combobox/index.js +31 -0
- package/dist/Combobox-0044641d.js +403 -0
- package/dist/ConfirmationModal/index.js +9 -9
- package/dist/{ConfirmationModal-6b61ebf5.js → ConfirmationModal-f7234e44.js} +2 -2
- package/dist/Content/Content.d.ts +1 -1
- package/dist/DataDump/index.js +6 -6
- package/dist/DataList/DataList.d.ts +10 -3
- package/dist/DataList/DataList.types.d.ts +80 -5
- package/dist/DataList/DataList.utils.d.ts +5 -4
- package/dist/DataList/components/DataListAction/DataListAction.d.ts +2 -3
- package/dist/DataList/components/DataListActions/DataListActions.d.ts +3 -0
- package/dist/DataList/components/DataListActions/index.d.ts +1 -0
- package/dist/DataList/components/DataListActionsMenu/DataListActionsMenu.d.ts +2 -2
- package/dist/DataList/components/DataListBulkActions/DataListBulkActions.const.d.ts +1 -0
- package/dist/DataList/components/DataListBulkActions/DataListBulkActions.d.ts +4 -0
- package/dist/DataList/components/DataListBulkActions/index.d.ts +1 -0
- package/dist/DataList/components/DataListHeader/DataListHeader.d.ts +2 -0
- package/dist/DataList/components/DataListHeader/index.d.ts +1 -0
- package/dist/DataList/components/DataListItem/DataListItem.d.ts +9 -0
- package/dist/DataList/components/{DataListLayoutInternal → DataListItem}/DataListItemInternal.d.ts +1 -1
- package/dist/DataList/components/DataListItem/components/DataListItemClickable/DataListItemClickable.d.ts +2 -0
- package/dist/DataList/components/DataListItem/components/DataListItemClickable/DataListItemClickableInternal.d.ts +3 -0
- package/dist/DataList/components/DataListItem/components/DataListItemClickable/index.d.ts +1 -0
- package/dist/DataList/components/DataListItem/index.d.ts +1 -0
- package/dist/DataList/components/DataListItemActions/DataListItemActions.d.ts +4 -4
- package/dist/DataList/components/DataListItemActionsOverflow/DataListItemActionsOverflow.d.ts +7 -0
- package/dist/DataList/components/DataListItemActionsOverflow/index.d.ts +1 -0
- package/dist/DataList/components/DataListItems/DataListItems.d.ts +7 -0
- package/dist/DataList/components/DataListItems/index.d.ts +1 -0
- package/dist/DataList/components/DataListLayout/DataListLayout.d.ts +2 -2
- package/dist/DataList/components/DataListLayoutActions/DataListLayoutActions.d.ts +2 -0
- package/dist/DataList/components/DataListLayoutActions/DataListLayoutContext/DataListLayoutContext.d.ts +4 -0
- package/dist/DataList/components/DataListLayoutActions/DataListLayoutContext/index.d.ts +1 -0
- package/dist/DataList/components/DataListLayoutActions/index.d.ts +1 -0
- package/dist/DataList/components/DataListLoadingState/DataListLoadingState.d.ts +2 -9
- package/dist/DataList/components/DataListOverflowFade/DataListOverflowFade.d.ts +6 -0
- package/dist/DataList/components/DataListOverflowFade/index.d.ts +2 -0
- package/dist/DataList/components/DataListSearch/DataListSearch.d.ts +1 -1
- package/dist/DataList/components/DataListStatusBar/DataListStatusBar.d.ts +10 -0
- package/dist/DataList/components/DataListStatusBar/index.d.ts +1 -0
- package/dist/DataList/context/DataListContext/DataListContext.d.ts +4 -10
- package/dist/DataList/context/DataListLayoutContext/DataListLayoutContext.d.ts +5 -0
- package/dist/DataList/context/DataListLayoutContext/index.d.ts +1 -0
- package/dist/DataList/hooks/useActiveLayout.d.ts +4 -0
- package/dist/DataList/hooks/useGetItemActions.d.ts +6 -0
- package/dist/DataList/index.js +626 -376
- package/dist/DataTable/DataTable.d.ts +10 -10
- package/dist/DataTable/Pagination.d.ts +6 -5
- package/dist/DataTable/index.js +20 -14
- package/dist/DatePicker/index.js +3 -3
- package/dist/{DatePicker-b31baae4.js → DatePicker-c18f1739.js} +3 -3
- package/dist/DescriptionList/index.js +2 -2
- package/dist/Disclosure/index.js +2 -2
- package/dist/Drawer/index.js +5 -5
- package/dist/Emphasis/index.js +2 -2
- package/dist/{Emphasis-76a10790.js → Emphasis-b2d1b3aa.js} +1 -1
- package/dist/FeatureSwitch/index.js +7 -7
- package/dist/Flex/Flex.d.ts +32 -0
- package/dist/Flex/Flex.types.d.ts +6 -0
- package/dist/Flex/index.d.ts +1 -0
- package/dist/Flex/index.js +40 -0
- package/dist/FormField/index.js +5 -5
- package/dist/{FormField-d6138b7f.js → FormField-0b529c0b.js} +4 -4
- package/dist/FormatFile/index.js +11 -11
- package/dist/{FormatFile-aa1898f9.js → FormatFile-6bc7f045.js} +6 -6
- package/dist/Gallery/index.js +12 -12
- package/dist/Heading/index.js +2 -2
- package/dist/{Heading-a1191b15.js → Heading-0f4ecb0c.js} +1 -1
- package/dist/InlineLabel/index.js +2 -2
- package/dist/{InlineLabel-afd5fc6f.js → InlineLabel-9a517c19.js} +2 -2
- package/dist/InputAvatar/index.js +5 -5
- package/dist/InputDate/index.js +6 -6
- package/dist/InputEmail/index.js +5 -5
- package/dist/InputFile/index.js +3 -3
- package/dist/{InputFile-2a06c2c0.js → InputFile-8a21a5fb.js} +3 -3
- package/dist/InputNumber/index.js +6 -6
- package/dist/{InputNumber-07b03067.js → InputNumber-6a7cefc6.js} +1 -1
- package/dist/InputPassword/index.js +5 -5
- package/dist/InputPhoneNumber/index.js +5 -5
- package/dist/InputText/index.js +6 -6
- package/dist/{InputText-d1a52550.js → InputText-dcf6c428.js} +1 -1
- package/dist/InputTime/index.js +5 -5
- package/dist/InputValidation/index.js +3 -3
- package/dist/{InputValidation-b5a3d92c.js → InputValidation-179f0926.js} +2 -2
- package/dist/LightBox/index.js +4 -4
- package/dist/{LightBox-437a1c8b.js → LightBox-3f4dbc33.js} +2 -2
- package/dist/Link/Link.d.ts +1 -2
- package/dist/Link/index.d.ts +1 -1
- package/dist/List/index.js +7 -7
- package/dist/Markdown/index.js +5 -5
- package/dist/{Markdown-f6748dcb.js → Markdown-96070121.js} +3 -3
- package/dist/Menu/index.js +3 -3
- package/dist/{Menu-51f8712f.js → Menu-d7ea093c.js} +3 -3
- package/dist/Modal/index.js +5 -5
- package/dist/{Modal-a9ab9565.js → Modal-b9d194e4.js} +4 -4
- package/dist/MultiSelect/index.js +5 -5
- package/dist/{Option-b903e7ac.js → Option-752ce1e8.js} +1 -1
- package/dist/Page/index.js +7 -7
- package/dist/Popover/index.js +50 -9
- package/dist/ProgressBar/index.js +1 -1
- package/dist/{ProgressBar-5dfc1885.js → ProgressBar-250e7b24.js} +1 -1
- package/dist/RadioGroup/index.js +3 -3
- package/dist/{RadioGroup-8e76d20b.js → RadioGroup-ebaa4f87.js} +2 -2
- package/dist/RecurringSelect/index.js +11 -11
- package/dist/Select/index.js +6 -6
- package/dist/StatusLabel/index.js +2 -2
- package/dist/Switch/index.js +2 -2
- package/dist/{Switch-e75145cc.js → Switch-b85272bf.js} +2 -2
- package/dist/Tabs/Tabs.d.ts +12 -1
- package/dist/Tabs/index.js +8 -4
- package/dist/Text/index.js +2 -2
- package/dist/{Text-e7ed0974.js → Text-4a2bc89f.js} +1 -1
- package/dist/Toast/index.js +2 -2
- package/dist/Tooltip/index.js +1 -3
- package/dist/{Tooltip-bf67fe6e.js → Tooltip-6b12f1c2.js} +6 -8
- package/dist/Typography/index.js +1 -1
- package/dist/{Typography-fd6f932a.js → Typography-973b122e.js} +3 -3
- package/package.json +7 -7
- package/rollup.config.js +3 -5
- package/dist/Button-fd8413b2.js +0 -57
- package/dist/Chip-4916a642.js +0 -514
- package/dist/DataList/components/DataListItemActions/DataListItemActionsOverflow.d.ts +0 -7
- package/dist/DataList/components/DataListLayoutInternal/DataListHeader.d.ts +0 -11
- package/dist/DataList/components/DataListLayoutInternal/DataListItems.d.ts +0 -10
- package/dist/DataList/components/DataListLayoutInternal/DataListLayoutInternal.d.ts +0 -10
- package/dist/DataList/components/DataListLayoutInternal/index.d.ts +0 -3
- package/dist/DataList/hooks/useLayoutMediaQueries.d.ts +0 -1
- package/dist/Popover-bbfc6aa1.js +0 -53
- /package/dist/DataList/components/{DataListLayoutInternal → DataListHeader}/DataListHeaderCheckbox.d.ts +0 -0
- /package/dist/DataList/components/{DataListFilters/DataListFilter.const.d.ts → DataListOverflowFade/DataListOverflowFade.const.d.ts} +0 -0
package/dist/DataList/index.js
CHANGED
|
@@ -5,59 +5,58 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var tslib_es6 = require('../tslib.es6-5b8768b7.js');
|
|
6
6
|
var React = require('react');
|
|
7
7
|
var styleInject_es = require('../style-inject.es-9d2f5f4e.js');
|
|
8
|
-
var Text = require('../Text-
|
|
8
|
+
var Text = require('../Text-4a2bc89f.js');
|
|
9
9
|
var Glimmer = require('../Glimmer-cfa92a88.js');
|
|
10
|
+
var noop = require('lodash/noop');
|
|
11
|
+
var design = require('@jobber/design');
|
|
10
12
|
var framerMotion = require('framer-motion');
|
|
11
13
|
var classnames = require('classnames');
|
|
12
|
-
var
|
|
14
|
+
var Tooltip = require('../Tooltip-6b12f1c2.js');
|
|
15
|
+
var Button = require('../Button-163a0641.js');
|
|
16
|
+
var useInView = require('@jobber/hooks/useInView');
|
|
13
17
|
var isEmpty = require('lodash/isEmpty');
|
|
14
|
-
var InlineLabel = require('../InlineLabel-
|
|
18
|
+
var InlineLabel = require('../InlineLabel-9a517c19.js');
|
|
15
19
|
var FormatDate = require('../FormatDate-70ea5b43.js');
|
|
16
|
-
var Heading = require('../Heading-
|
|
17
|
-
require('uuid');
|
|
18
|
-
require('react-hook-form');
|
|
19
|
-
var Checkbox = require('../Checkbox-3bccf65c.js');
|
|
20
|
-
var Typography = require('../Typography-fd6f932a.js');
|
|
21
|
-
require('react-router-dom');
|
|
22
|
-
var Button = require('../Button-fd8413b2.js');
|
|
23
|
-
require('react-dom');
|
|
24
|
-
var Tooltip = require('../Tooltip-bf67fe6e.js');
|
|
25
|
-
require('react-popper');
|
|
20
|
+
var Heading = require('../Heading-0f4ecb0c.js');
|
|
26
21
|
var useFocusTrap = require('@jobber/hooks/useFocusTrap');
|
|
27
22
|
var useRefocusOnActivator = require('@jobber/hooks/useRefocusOnActivator');
|
|
28
23
|
var useOnKeyDown = require('@jobber/hooks/useOnKeyDown');
|
|
24
|
+
var ReactDOM = require('react-dom');
|
|
25
|
+
var Checkbox = require('../Checkbox-ad7ec2e7.js');
|
|
26
|
+
var reactRouterDom = require('react-router-dom');
|
|
29
27
|
var AnimatedSwitcher = require('../AnimatedSwitcher-d1e1ddcf.js');
|
|
28
|
+
var Combobox = require('../Combobox-0044641d.js');
|
|
29
|
+
var Chip = require('../Chip-55e6da05.js');
|
|
30
30
|
var Icon = require('../Icon-405a216c.js');
|
|
31
|
-
var useInView = require('@jobber/hooks/useInView');
|
|
32
|
-
var Popover = require('../Popover-bbfc6aa1.js');
|
|
33
|
-
var Content = require('../Content-2ca1ffe1.js');
|
|
34
|
-
var Chip = require('../Chip-4916a642.js');
|
|
35
|
-
require('@jobber/hooks/useAssert');
|
|
36
|
-
require('../Avatar-1aa30ee1.js');
|
|
37
|
-
require('color');
|
|
38
31
|
var debounce = require('lodash/debounce');
|
|
39
|
-
var InputText = require('../InputText-
|
|
32
|
+
var InputText = require('../InputText-dcf6c428.js');
|
|
40
33
|
var Spinner = require('../Spinner-9d8fc7ff.js');
|
|
41
|
-
require('../
|
|
42
|
-
require('
|
|
43
|
-
require('
|
|
44
|
-
require('
|
|
45
|
-
require('
|
|
34
|
+
var Typography = require('../Typography-973b122e.js');
|
|
35
|
+
require('../Content-2ca1ffe1.js');
|
|
36
|
+
require('react-popper');
|
|
37
|
+
require('uuid');
|
|
38
|
+
require('react-hook-form');
|
|
39
|
+
require('@jobber/hooks/useAssert');
|
|
40
|
+
require('../Avatar-76a799fa.js');
|
|
41
|
+
require('color');
|
|
42
|
+
require('../FormField-0b529c0b.js');
|
|
43
|
+
require('../InputValidation-179f0926.js');
|
|
46
44
|
|
|
47
45
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
48
46
|
|
|
49
47
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
48
|
+
var noop__default = /*#__PURE__*/_interopDefaultLegacy(noop);
|
|
50
49
|
var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
|
|
51
50
|
var isEmpty__default = /*#__PURE__*/_interopDefaultLegacy(isEmpty);
|
|
52
51
|
var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce);
|
|
53
52
|
|
|
54
|
-
var css_248z$
|
|
55
|
-
var styles$
|
|
56
|
-
styleInject_es.styleInject(css_248z$
|
|
53
|
+
var css_248z$f = ".TkdrExYnvcY-,\n.TkdrExYnvcY- * {\n box-sizing: border-box;\n}\n\n.TkdrExYnvcY- {\n --data-list--minimum-item-height: calc(var(--base-unit) * 3.5);\n\n display: -ms-flexbox;\n\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n position: relative;\n z-index: 0;\n z-index: var(--elevation-default);\n -ms-flex: 1;\n flex: 1;\n}\n\n/*\n * Header\n */\n\n.IcAlZHoB4LI- {\n display: -ms-flexbox;\n display: flex;\n position: relative;\n z-index: 1;\n z-index: var(--elevation-base);\n margin-bottom: calc(16px / 2);\n margin-bottom: var(--space-small);\n -ms-flex-align: center;\n align-items: center;\n}\n\n.TFO76ysivmg- {\n display: grid;\n padding: calc(16px / 2) 0;\n padding: var(--space-small) 0;\n gap: calc(16px / 2);\n grid-gap: calc(16px / 2);\n grid-gap: var(--space-small);\n gap: var(--space-small);\n grid-template-columns: auto -webkit-max-content;\n grid-template-columns: auto max-content;\n}\n\n.jGHZZYZm1ZY- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-pack: center;\n justify-content: center;\n min-height: calc(16px * 3);\n min-height: var(--space-largest);\n padding: calc(16px / 2);\n padding: var(--space-small);\n border-bottom: calc(16px / 8) solid rgb(217, 223, 225);\n border-bottom: var(--border-thick) solid var(--color-border);\n}\n\n.GiD7MjZJbcw- {\n display: -ms-flexbox;\n display: flex;\n}\n\n@media (max-width: 489.98px) {\n\n.GiD7MjZJbcw- {\n -ms-flex-pack: justify;\n justify-content: space-between;\n width: 100%;\n}\n }\n\n@media (--small-screens-and-below) {\n\n.GiD7MjZJbcw- {\n -ms-flex-pack: justify;\n justify-content: space-between;\n width: 100%;\n}\n }\n\n.jMSVGIAr5tk- > p {\n font-weight: 500;\n white-space: nowrap;\n}\n\n.jMSVGIAr5tk- {\n display: -ms-flexbox;\n display: flex;\n margin: calc((16px / 2) * -1) 0;\n margin: calc(calc(16px / 2) * -1) 0;\n margin: calc(var(--space-small) * -1) 0;\n -ms-flex-align: center;\n align-items: center;\n gap: calc(16px / 4);\n gap: var(--space-smaller);\n}\n\n/*\n * List Item\n */\n\n.ise8kHCfhCY- {\n position: relative;\n padding: calc(16px / 2);\n padding: var(--space-small);\n border-bottom: calc(16px / 16) solid rgb(217, 223, 225);\n border-bottom: var(--border-base) solid var(--color-border);\n transition: all 200ms;\n transition: all var(--timing-base);\n}\n\n.ise8kHCfhCY-,\n.Tq6e0BGwcSM- {\n display: grid;\n grid-template-columns: minmax(0px, auto);\n min-height: var(--data-list--minimum-item-height);\n -ms-flex-align: center;\n align-items: center;\n}\n\n.ise8kHCfhCY-.Pc0JGX6jCD4-,\n.ise8kHCfhCY-:hover,\n.ise8kHCfhCY-:focus-within {\n --data-list-item-active-color: var(--color-surface--hover);\n background-color: rgb(244, 246, 250);\n background-color: var(--data-list-item-active-color);\n}\n\n.Tq6e0BGwcSM- {\n margin: calc((16px / 2) * -1) 0;\n margin: calc(calc(16px / 2) * -1) 0;\n margin: calc(var(--space-small) * -1) 0;\n padding: calc(16px / 2) 0;\n padding: var(--space-small) 0;\n border: none;\n text-align: left;\n -webkit-text-decoration: none;\n text-decoration: none;\n background-color: transparent;\n cursor: pointer;\n}\n\n/**\n * Reset CSS properties on focus to ensure we only have the focus state on the\n * parent .listItem\n */\n\n.Tq6e0BGwcSM-:focus {\n outline: none;\n background-color: transparent;\n}\n\n/**\n * Enable a better hover and focus experience when :has() is supported.\n * This is a workaround for Firefox where the :has() selector is not supported.\n */\n\n@supports selector(*:has(*)) {\n .ise8kHCfhCY-:hover,\n .ise8kHCfhCY-:focus-within {\n background-color: transparent;\n }\n\n .ise8kHCfhCY-:has(.Tq6e0BGwcSM-:hover, .Tq6e0BGwcSM-:focus) {\n background-color: var(--data-list-item-active-color);\n }\n}\n\n/*\n * List Item Selection\n */\n\n.d-79rkMqufg- {\n display: grid;\n -ms-flex-align: start;\n align-items: flex-start;\n}\n\n@media (min-width: 768px) {\n\n.d-79rkMqufg- {\n -ms-flex-align: center;\n align-items: center;\n}\n }\n\n@media (--medium-screens-and-up) {\n\n.d-79rkMqufg- {\n -ms-flex-align: center;\n align-items: center;\n}\n }\n\n.d-79rkMqufg-,\n.jGHZZYZm1ZY- .d-79rkMqufg- {\n grid-template-columns: -webkit-max-content minmax(0px, auto);\n grid-template-columns: max-content minmax(0px, auto);\n -webkit-column-gap: calc(16px / 2);\n -webkit-column-gap: var(--space-small);\n -moz-column-gap: calc(16px / 2);\n -moz-column-gap: var(--space-small);\n column-gap: calc(16px / 2);\n column-gap: var(--space-small);\n}\n\n.jGHZZYZm1ZY- .d-79rkMqufg- {\n display: grid;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.qm-SSuWTXkI- {\n display: -ms-flexbox;\n display: flex;\n visibility: hidden;\n\n /* To compensate the Checkbox's label margin that we are using for screen-readers */\n margin-right: calc((16px * 1) * -1);\n margin-right: calc(calc(16px * 1) * -1);\n margin-right: calc(var(--space-base) * -1);\n}\n\n.qm-SSuWTXkI-.VA9RnQp6nbI- {\n visibility: visible;\n}\n\n.ise8kHCfhCY- .d-79rkMqufg- > :first-child {\n -ms-flex-order: 2;\n order: 2;\n}\n\n.ise8kHCfhCY- .d-79rkMqufg- > :last-child {\n -ms-flex-order: 1;\n order: 1;\n padding-top: calc(16px / 4);\n padding-top: var(--space-smaller);\n opacity: 1;\n transition: opacity 100ms ease-in-out;\n transition: opacity var(--transition-properties);\n --transition-properties: var(--timing-quick) ease-in-out;\n}\n\n@media (min-width: 768px) {\n\n.ise8kHCfhCY- .d-79rkMqufg- > :last-child {\n padding-top: 0;\n opacity: 0;\n}\n }\n\n@media (--medium-screens-and-up) {\n\n.ise8kHCfhCY- .d-79rkMqufg- > :last-child {\n padding-top: 0;\n opacity: 0;\n}\n }\n\n.ise8kHCfhCY-:hover .d-79rkMqufg- > :last-child,\n.ise8kHCfhCY-:focus-within .d-79rkMqufg- > :last-child,\n.ise8kHCfhCY- .d-79rkMqufg-._4L7iXXzLr5k- > :last-child {\n opacity: 1;\n}\n\n/*\n * Filters\n */\n\n.Kkp-IYmwq-s- {\n display: -ms-flexbox;\n display: flex;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: rgba(255, 255, 255, 0.6);\n background-color: var(--color-overlay--dimmed);\n -ms-flex-align: start;\n align-items: flex-start;\n -ms-flex-pack: center;\n justify-content: center;\n}\n\n.m-eCShL7TU4- {\n position: sticky;\n top: 50vh;\n}\n\n/* This hides the text from the UI but not from the screen readers */\n\n.esUiRgWabYw- {\n position: absolute;\n top: auto;\n left: -10000px;\n width: 1px;\n height: 1px;\n overflow: hidden;\n text-indent: -10000px;\n}\n";
|
|
54
|
+
var styles$f = {"wrapper":"TkdrExYnvcY-","titleContainer":"IcAlZHoB4LI-","headerFilters":"TFO76ysivmg-","headerTitles":"jGHZZYZm1ZY-","batchSelectContainer":"GiD7MjZJbcw-","headerBatchSelect":"jMSVGIAr5tk-","listItem":"ise8kHCfhCY-","listItemClickable":"Tq6e0BGwcSM-","active":"Pc0JGX6jCD4-","selectable":"d-79rkMqufg-","selectAllCheckbox":"qm-SSuWTXkI-","visible":"VA9RnQp6nbI-","selected":"_4L7iXXzLr5k-","filtering":"Kkp-IYmwq-s-","filteringSpinner":"m-eCShL7TU4-","srOnly":"esUiRgWabYw-"};
|
|
55
|
+
styleInject_es.styleInject(css_248z$f);
|
|
57
56
|
|
|
58
|
-
var css_248z$
|
|
59
|
-
var styles$
|
|
60
|
-
styleInject_es.styleInject(css_248z$
|
|
57
|
+
var css_248z$e = ".F56prQsXm3A- {\n min-width: 80px;\n margin-left: calc(16px / 2);\n margin-left: var(--space-small);\n}\n";
|
|
58
|
+
var styles$e = {"results":"F56prQsXm3A-"};
|
|
59
|
+
styleInject_es.styleInject(css_248z$e);
|
|
61
60
|
|
|
62
61
|
const DATALIST_TOTALCOUNT_TEST_ID = "ATL-DataList-TotalCount";
|
|
63
62
|
function DataListTotalCount({ totalCount, loading, }) {
|
|
@@ -73,12 +72,57 @@ function DataListTotalCount({ totalCount, loading, }) {
|
|
|
73
72
|
totalCount.toLocaleString(),
|
|
74
73
|
" results)"));
|
|
75
74
|
}
|
|
76
|
-
return (React__default["default"].createElement("div", { className: styles$
|
|
75
|
+
return (React__default["default"].createElement("div", { className: styles$e.results, "data-testid": DATALIST_TOTALCOUNT_TEST_ID }, output));
|
|
77
76
|
}
|
|
78
77
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
const defaultValues$1 = {
|
|
79
|
+
title: "",
|
|
80
|
+
data: [],
|
|
81
|
+
headers: {},
|
|
82
|
+
children: [],
|
|
83
|
+
selected: [],
|
|
84
|
+
layoutBreakpoints: [],
|
|
85
|
+
registerLayoutBreakpoints: noop__default["default"],
|
|
86
|
+
layouts: {
|
|
87
|
+
xs: children => React__default["default"].createElement(React__default["default"].Fragment, null, children),
|
|
88
|
+
sm: children => React__default["default"].createElement(React__default["default"].Fragment, null, children),
|
|
89
|
+
md: children => React__default["default"].createElement(React__default["default"].Fragment, null, children),
|
|
90
|
+
lg: children => React__default["default"].createElement(React__default["default"].Fragment, null, children),
|
|
91
|
+
xl: children => React__default["default"].createElement(React__default["default"].Fragment, null, children),
|
|
92
|
+
},
|
|
93
|
+
registerLayout: noop__default["default"],
|
|
94
|
+
};
|
|
95
|
+
const DataListContext = React.createContext(defaultValues$1);
|
|
96
|
+
function useDataListContext() {
|
|
97
|
+
return React.useContext(DataListContext);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function useMediaQuery(CSSMediaQuery) {
|
|
101
|
+
/**
|
|
102
|
+
* matchMedia have had full support for browsers since 2012 but jest, being a
|
|
103
|
+
* lite version of a DOM, doesn't support it.
|
|
104
|
+
*
|
|
105
|
+
* Instead of the consumers mocking matchMedia on every usage of DataList,
|
|
106
|
+
* we can just return true to mimic the largest screen we support.
|
|
107
|
+
*
|
|
108
|
+
* In the event that the consumer wants to test the DataList on different
|
|
109
|
+
* screen sizes, they can use the `mockViewportWidth` function from
|
|
110
|
+
* `@jobber/components/useBreakpoints`.
|
|
111
|
+
*/
|
|
112
|
+
if (window.matchMedia === undefined)
|
|
113
|
+
return true;
|
|
114
|
+
const [matches, setMatches] = React.useState(window.matchMedia(CSSMediaQuery).matches);
|
|
115
|
+
React.useEffect(() => {
|
|
116
|
+
const media = window.matchMedia(CSSMediaQuery);
|
|
117
|
+
if (media.matches !== matches) {
|
|
118
|
+
setMatches(media.matches);
|
|
119
|
+
}
|
|
120
|
+
const listener = () => setMatches(media.matches);
|
|
121
|
+
media.addEventListener("change", listener);
|
|
122
|
+
return () => media.removeEventListener("change", listener);
|
|
123
|
+
}, [CSSMediaQuery]);
|
|
124
|
+
return matches;
|
|
125
|
+
}
|
|
82
126
|
|
|
83
127
|
const EMPTY_RESULTS_MESSAGE = "List is looking empty";
|
|
84
128
|
const EMPTY_FILTER_RESULTS_MESSAGE = "No results for selected filters";
|
|
@@ -101,14 +145,88 @@ const DATA_LOAD_MORE_TEST_ID = "ATL-DataList-LoadMore-trigger";
|
|
|
101
145
|
const TRANSITION_DURATION_IN_SECONDS = design.tokens["timing-base"] / 1000;
|
|
102
146
|
const TRANSITION_DELAY_IN_SECONDS = design.tokens["timing-quick"] / 1000;
|
|
103
147
|
|
|
104
|
-
|
|
105
|
-
|
|
148
|
+
function useResponsiveSizing() {
|
|
149
|
+
// This was originally written to look for "min-width: 0" which would always
|
|
150
|
+
// return true no matter what.
|
|
151
|
+
// So, instead of running media query on it, just set it to true.
|
|
152
|
+
const xs = true;
|
|
153
|
+
const sm = useMediaQuery(`(min-width: ${BREAKPOINT_SIZES.sm}px)`);
|
|
154
|
+
const md = useMediaQuery(`(min-width: ${BREAKPOINT_SIZES.md}px)`);
|
|
155
|
+
const lg = useMediaQuery(`(min-width: ${BREAKPOINT_SIZES.lg}px)`);
|
|
156
|
+
const xl = useMediaQuery(`(min-width: ${BREAKPOINT_SIZES.xl}px)`);
|
|
157
|
+
return { xs, sm, md, lg, xl };
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function useActiveLayout() {
|
|
161
|
+
const { layoutBreakpoints, layouts } = useDataListContext();
|
|
162
|
+
const breakpoints = useResponsiveSizing();
|
|
163
|
+
const reversedLayoutBreakpoints = [...layoutBreakpoints].reverse();
|
|
164
|
+
const activeBreakpoint = reversedLayoutBreakpoints.find(key => breakpoints[key]) ||
|
|
165
|
+
layoutBreakpoints[0];
|
|
166
|
+
const layout = layouts[activeBreakpoint];
|
|
167
|
+
return { layout, activeBreakpoint };
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
var css_248z$d = "._8cMzUF8XEwY- {\n position: relative;\n}\n\n._8cMzUF8XEwY-::after {\n content: \"\";\n display: block;\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100px;\n background-image: linear-gradient(\n to top,\n rgba(255, 255, 255, 1) 0%,\n rgba(255, 255, 255, 0) 100%\n );\n background-image: linear-gradient(\n to top,\n var(--color-surface) 0%,\n rgba(var(--color-white--rgb), 0) 100%\n );\n}\n\n.Rh--6fVpkm4- {\n padding: calc(16px * 1) calc(16px / 2);\n padding: var(--space-base) var(--space-small);\n}\n\n.NFaWWvmxtkw- {\n width: 100%;\n min-width: calc(16px * 3);\n min-width: var(--space-largest);\n}\n";
|
|
171
|
+
var styles$d = {"wrapper":"_8cMzUF8XEwY-","loadingItem":"Rh--6fVpkm4-","glimmer":"NFaWWvmxtkw-"};
|
|
172
|
+
styleInject_es.styleInject(css_248z$d);
|
|
173
|
+
|
|
174
|
+
const LOADING_STATE_LIMIT_ITEMS = 10;
|
|
175
|
+
const DATALIST_LOADINGSTATE_ROW_TEST_ID = "ATL-DataList-LoadingState-Row";
|
|
176
|
+
function DataListLoadingState() {
|
|
177
|
+
const { headers } = useDataListContext();
|
|
178
|
+
const { layout, activeBreakpoint } = useActiveLayout();
|
|
179
|
+
if (!layout)
|
|
180
|
+
return null;
|
|
181
|
+
const glimmerSize = activeBreakpoint === "xs" ? "small" : "large";
|
|
182
|
+
const glimmersFromHeader = Object.keys(headers).reduce((data, key) => (Object.assign(Object.assign({}, data), { [key]: (React__default["default"].createElement("div", { className: styles$d.glimmer },
|
|
183
|
+
React__default["default"].createElement(Glimmer.Glimmer, { size: glimmerSize }))) })), {});
|
|
184
|
+
const loadingData = new Array(LOADING_STATE_LIMIT_ITEMS).fill(glimmersFromHeader);
|
|
185
|
+
return (React__default["default"].createElement("div", { className: styles$d.wrapper }, loadingData.map((child, i) => (React__default["default"].createElement("div", { key: i, className: styles$d.loadingItem, "data-testid": DATALIST_LOADINGSTATE_ROW_TEST_ID }, layout(child))))));
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const defaultValues = {
|
|
189
|
+
isInLayoutProvider: false,
|
|
190
|
+
hasInLayoutActions: false,
|
|
191
|
+
setHasInLayoutActions: noop__default["default"],
|
|
192
|
+
};
|
|
193
|
+
const DataListLayoutContext = React.createContext(defaultValues);
|
|
194
|
+
function useDataListLayoutContext() {
|
|
195
|
+
return React.useContext(DataListLayoutContext);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
var css_248z$c = ".jHcHGQ-HDbk- {\n display: -ms-flexbox;\n display: flex;\n position: absolute;\n top: calc((16px / 2) * -1);\n top: calc(calc(16px / 2) * -1);\n top: calc(var(--space-small) * -1);\n right: 0;\n z-index: 6;\n z-index: var(--elevation-menu);\n box-shadow: 0px calc(16px / 16) calc(16px / 4) 0px\n rgba(0, 0, 0, 0.1),\n 0px calc(16px / 4) 12px 0px rgba(0, 0, 0, 0.05);\n box-shadow: var(--shadow-base);\n padding: calc(16px / 4);\n padding: var(--space-smaller);\n border: calc(16px / 16) solid rgb(217, 223, 225);\n border: var(--border-base) solid var(--color-border);\n border-radius: calc(16px / 2);\n border-radius: var(--radius-larger);\n background-color: rgba(255, 255, 255, 1);\n background-color: var(--color-surface);\n gap: calc(16px / 4);\n gap: var(--space-smaller);\n}\n";
|
|
199
|
+
var styles$c = {"menu":"jHcHGQ-HDbk-"};
|
|
200
|
+
styleInject_es.styleInject(css_248z$c);
|
|
201
|
+
|
|
202
|
+
const CONTAINER_TEST_ID = "ATL-DataListFilters-Container";
|
|
203
|
+
|
|
204
|
+
var css_248z$b = ".jbBRoxlZlNI- {\n --overflow-fade--offset: var(--space-smaller);\n --overflow-fade--negative-offset: calc(var(--overflow-fade--offset) * -1);\n\n -ms-flex-item-align: center;\n\n align-self: center;\n position: relative;\n min-width: 0;\n}\n\n.MnN8qbS4hw4- {\n display: grid;\n margin: var(--overflow-fade--negative-offset);\n padding: var(--overflow-fade--offset);\n overflow-x: auto;\n overflow-y: visible;\n grid-auto-flow: column;\n grid-auto-columns: -webkit-max-content;\n grid-auto-columns: max-content;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.MnN8qbS4hw4- > :not(:nth-last-child(2)):not(.b-5P7Z8eGO8-) {\n margin-right: calc(16px / 2);\n margin-right: var(--space-small);\n}\n\n.b-5P7Z8eGO8- {\n visibility: hidden;\n}\n\n.xzaCS4slLpI-::before,\n.Jf227kC8Nu0-::after {\n content: \"\";\n position: absolute;\n top: 0;\n width: calc(16px * 1.5);\n width: var(--space-large);\n height: 100%;\n background-image: linear-gradient(\n to right,\n rgba(255, 255, 255, 1) 0%,\n rgba(255, 255, 255, 0) 100%\n );\n background-image: linear-gradient(\n var(--data-list-overflow-shadow-angle, to right),\n var(--color-surface) 0%,\n rgba(var(--color-white--rgb), 0) 100%\n );\n pointer-events: none;\n}\n\n.xzaCS4slLpI-::before {\n left: var(--overflow-fade--negative-offset);\n}\n\n.Jf227kC8Nu0-::after {\n --data-list-overflow-shadow-angle: to left;\n right: var(--overflow-fade--negative-offset);\n}\n";
|
|
205
|
+
var styles$b = {"fadeContainer":"jbBRoxlZlNI-","overflowGrid":"MnN8qbS4hw4-","overflowTrigger":"b-5P7Z8eGO8-","overflowLeft":"xzaCS4slLpI-","overflowRight":"Jf227kC8Nu0-"};
|
|
206
|
+
styleInject_es.styleInject(css_248z$b);
|
|
207
|
+
|
|
208
|
+
function DataListOverflowFade({ children }) {
|
|
209
|
+
const [leftRef, isLeftVisible] = useInView.useInView();
|
|
210
|
+
const [rightRef, isRightVisible] = useInView.useInView();
|
|
211
|
+
return (React__default["default"].createElement("div", { "data-testid": CONTAINER_TEST_ID, className: classnames__default["default"](styles$b.fadeContainer, {
|
|
212
|
+
[styles$b.overflowLeft]: !isLeftVisible,
|
|
213
|
+
[styles$b.overflowRight]: !isRightVisible,
|
|
214
|
+
}) },
|
|
215
|
+
React__default["default"].createElement("div", { className: styles$b.overflowGrid },
|
|
216
|
+
React__default["default"].createElement("span", { ref: leftRef, className: styles$b.overflowTrigger }),
|
|
217
|
+
children,
|
|
218
|
+
React__default["default"].createElement("span", { ref: rightRef, className: styles$b.overflowTrigger }))));
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
var css_248z$a = "._8MYxAQYdZzM- {\n position: relative;\n}\n\n.WRV-UmQmPzo- {\n display: -ms-flexbox;\n display: flex;\n z-index: 0;\n z-index: var(--elevation-default);\n overflow: hidden;\n gap: calc(16px / 2);\n gap: var(--space-small);\n white-space: nowrap;\n}\n\n.ND-cN-mX5-c- {\n -webkit-mask-image: linear-gradient(\n to left,\n transparent,\n transparent calc(16px * 1.5),\n rgba(0, 0, 0, 1) calc(16px * 3),\n rgba(0, 0, 0, 1)\n );\n -webkit-mask-image: linear-gradient(\n to left,\n transparent,\n transparent var(--space-large),\n rgba(0, 0, 0, 1) var(--space-largest),\n rgba(0, 0, 0, 1)\n );\n mask-image: linear-gradient(\n to left,\n transparent,\n transparent calc(16px * 1.5),\n rgba(0, 0, 0, 1) calc(16px * 3),\n rgba(0, 0, 0, 1)\n );\n mask-image: linear-gradient(\n to left,\n transparent,\n transparent var(--space-large),\n rgba(0, 0, 0, 1) var(--space-largest),\n rgba(0, 0, 0, 1)\n );\n}\n\n.liQeWCMenD0- {\n display: -ms-flexbox;\n display: flex;\n position: absolute;\n top: 0;\n right: 0;\n height: 100%;\n -ms-flex-align: center;\n align-items: center;\n}\n";
|
|
222
|
+
var styles$a = {"tagWrapper":"_8MYxAQYdZzM-","tags":"WRV-UmQmPzo-","tagsMask":"ND-cN-mX5-c-","tagCount":"liQeWCMenD0-"};
|
|
106
223
|
styleInject_es.styleInject(css_248z$a);
|
|
107
224
|
|
|
108
225
|
function DataListTags({ items }) {
|
|
109
226
|
const ref = React.useRef(null);
|
|
110
227
|
const [visibleIndex, setVisibleIndex] = React.useState([]);
|
|
111
228
|
const visibleItems = visibleIndex.filter(Boolean).length;
|
|
229
|
+
const shouldShowTagCount = Boolean(visibleItems);
|
|
112
230
|
React.useEffect(() => {
|
|
113
231
|
var _a;
|
|
114
232
|
if (!window.IntersectionObserver)
|
|
@@ -123,10 +241,12 @@ function DataListTags({ items }) {
|
|
|
123
241
|
elements === null || elements === void 0 ? void 0 : elements.forEach(element => observer.unobserve(element));
|
|
124
242
|
};
|
|
125
243
|
}, [items]);
|
|
126
|
-
return (React__default["default"].createElement("div", { className: styles$a.
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
244
|
+
return (React__default["default"].createElement("div", { className: styles$a.tagWrapper, ref: ref },
|
|
245
|
+
React__default["default"].createElement("div", { className: classnames__default["default"](styles$a.tags, {
|
|
246
|
+
[styles$a.tagsMask]: shouldShowTagCount,
|
|
247
|
+
}) }, items.filter(Boolean).map((tag, index) => (React__default["default"].createElement("div", { key: tag, "data-tag-element": index },
|
|
248
|
+
React__default["default"].createElement(InlineLabel.InlineLabel, null, tag))))),
|
|
249
|
+
shouldShowTagCount && (React__default["default"].createElement("div", { className: styles$a.tagCount },
|
|
130
250
|
React__default["default"].createElement(Text.Text, null,
|
|
131
251
|
"+",
|
|
132
252
|
visibleItems)))));
|
|
@@ -159,7 +279,7 @@ var css_248z$9 = ".fLmJZJJqMcE- {\n display: -ms-flexbox;\n display: flex;\n
|
|
|
159
279
|
var styles$9 = {"headerLabel":"fLmJZJJqMcE-","sortable":"UG8cHUT3Hds-"};
|
|
160
280
|
styleInject_es.styleInject(css_248z$9);
|
|
161
281
|
|
|
162
|
-
var css_248z$8 = ".AN5egORYy-0- {\n
|
|
282
|
+
var css_248z$8 = ".AN5egORYy-0- {\n width: calc(16px * 1.5);\n width: var(--space-large);\n height: calc(16px * 1.5);\n height: var(--space-large);\n margin-right: calc(16px / 2);\n margin-right: var(--space-small);\n}\n\n.AN5egORYy-0- path {\n fill: rgba(101, 120, 132, 1);\n fill: var(--color-greyBlue);\n transition: all 200ms ease;\n transition: all var(--timing-base) ease;\n}\n\n.AN5egORYy-0- path.F1uTDCK0Sb0- {\n fill: rgb(1, 41, 57);\n fill: var(--color-blue);\n}\n\n.AN5egORYy-0- path._6KYeQXWXLQ8- {\n fill: rgb(193, 201, 206);\n fill: var(--color-greyBlue--lighter);\n}\n";
|
|
163
283
|
var styles$8 = {"sortIcon":"AN5egORYy-0-","active":"F1uTDCK0Sb0-","inactive":"_6KYeQXWXLQ8-"};
|
|
164
284
|
styleInject_es.styleInject(css_248z$8);
|
|
165
285
|
|
|
@@ -174,18 +294,6 @@ function DataListSortingArrows({ order }) {
|
|
|
174
294
|
}
|
|
175
295
|
}
|
|
176
296
|
|
|
177
|
-
const defaultValues = {
|
|
178
|
-
title: "",
|
|
179
|
-
data: [],
|
|
180
|
-
headers: {},
|
|
181
|
-
children: [],
|
|
182
|
-
selected: [],
|
|
183
|
-
};
|
|
184
|
-
const DataListContext = React.createContext(defaultValues);
|
|
185
|
-
function useDataListContext() {
|
|
186
|
-
return React.useContext(DataListContext);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
297
|
function DataListHeaderTile({ headers, headerKey, }) {
|
|
190
298
|
const { sorting } = useDataListContext();
|
|
191
299
|
const isSortable = sorting === null || sorting === void 0 ? void 0 : sorting.sortable.includes(headerKey);
|
|
@@ -197,12 +305,13 @@ function DataListHeaderTile({ headers, headerKey, }) {
|
|
|
197
305
|
React__default["default"].createElement(Text.Text, { maxLines: "single" }, headers[headerKey]),
|
|
198
306
|
(sortingState === null || sortingState === void 0 ? void 0 : sortingState.key) === headerKey && (React__default["default"].createElement(DataListSortingArrows, { order: sortingState.order }))));
|
|
199
307
|
function toggleSorting(sortingKey) {
|
|
200
|
-
|
|
308
|
+
const isSameKey = sortingKey === (sortingState === null || sortingState === void 0 ? void 0 : sortingState.key);
|
|
309
|
+
if (isSameKey && (sortingState === null || sortingState === void 0 ? void 0 : sortingState.order) === "desc") {
|
|
201
310
|
sorting === null || sorting === void 0 ? void 0 : sorting.onSort(undefined);
|
|
202
311
|
return;
|
|
203
312
|
}
|
|
204
313
|
sorting === null || sorting === void 0 ? void 0 : sorting.onSort({
|
|
205
|
-
order: (sortingState === null || sortingState === void 0 ? void 0 : sortingState.order) === "asc" ? "desc" : "asc",
|
|
314
|
+
order: isSameKey && (sortingState === null || sortingState === void 0 ? void 0 : sortingState.order) === "asc" ? "desc" : "asc",
|
|
206
315
|
key: sortingKey,
|
|
207
316
|
});
|
|
208
317
|
}
|
|
@@ -231,10 +340,10 @@ function getCompoundComponents(children, type) {
|
|
|
231
340
|
return elements;
|
|
232
341
|
}
|
|
233
342
|
/**
|
|
234
|
-
* Generate the default
|
|
343
|
+
* Generate the default element the DataList would use on the data provided.
|
|
235
344
|
*/
|
|
236
|
-
function
|
|
237
|
-
return
|
|
345
|
+
function generateListItemElement(item) {
|
|
346
|
+
return Object.keys(item).reduce((acc, key) => {
|
|
238
347
|
const currentItem = item[key];
|
|
239
348
|
if (!currentItem) {
|
|
240
349
|
return acc;
|
|
@@ -256,7 +365,7 @@ function generateListItemElements(data) {
|
|
|
256
365
|
acc[key] = React__default["default"].createElement(Text.Text, { variation: "subdued" }, currentItem);
|
|
257
366
|
}
|
|
258
367
|
return acc;
|
|
259
|
-
}, {})
|
|
368
|
+
}, {});
|
|
260
369
|
}
|
|
261
370
|
/**
|
|
262
371
|
* Generate the header elements with the default styling
|
|
@@ -265,86 +374,32 @@ function generateHeaderElements(headers) {
|
|
|
265
374
|
const headerElements = Object.keys(headers).reduce((acc, key) => (Object.assign(Object.assign({}, acc), { [key]: React__default["default"].createElement(DataListHeaderTile, { headers: headers, headerKey: key }) })), {});
|
|
266
375
|
return isEmpty__default["default"](headerElements) ? undefined : headerElements;
|
|
267
376
|
}
|
|
268
|
-
function
|
|
377
|
+
function sortBreakpoints(sizeProp) {
|
|
269
378
|
return sizeProp.sort((a, b) => BREAKPOINTS.indexOf(a) - BREAKPOINTS.indexOf(b));
|
|
270
379
|
}
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
return isVisible;
|
|
282
|
-
});
|
|
283
|
-
return (layoutToRender && renderLayout(layoutToRender)) || React__default["default"].createElement(React__default["default"].Fragment, null);
|
|
284
|
-
}
|
|
285
|
-
/**
|
|
286
|
-
* Determine is layout is visible by checking a media query matches for the
|
|
287
|
-
* visible sizes of the layout and there isn't a larger layout that should be rendered
|
|
288
|
-
*/
|
|
289
|
-
function isLayoutVisible({ layoutSize, mediaMatches, sizePropsOfLayouts, }) {
|
|
290
|
-
const largerBreakpointsToHide = sizePropsOfLayouts === null || sizePropsOfLayouts === void 0 ? void 0 : sizePropsOfLayouts.filter(size => BREAKPOINTS.indexOf(size) > BREAKPOINTS.indexOf(layoutSize));
|
|
291
|
-
const sortedLargerBreakpoints = sortSizeProp(largerBreakpointsToHide || []);
|
|
292
|
-
const visibleBreakpoints = BREAKPOINTS.slice(BREAKPOINTS.indexOf(layoutSize), sortedLargerBreakpoints[0]
|
|
293
|
-
? BREAKPOINTS.indexOf(sortedLargerBreakpoints[0])
|
|
294
|
-
: undefined);
|
|
295
|
-
const isVisibleBreakpoint = visibleBreakpoints.some(breakpoint => {
|
|
296
|
-
return Boolean(mediaMatches === null || mediaMatches === void 0 ? void 0 : mediaMatches[breakpoint]);
|
|
297
|
-
});
|
|
298
|
-
const largerLayoutIsNotVisible = largerBreakpointsToHide === null || largerBreakpointsToHide === void 0 ? void 0 : largerBreakpointsToHide.reduce((acc, breakpoint) => {
|
|
299
|
-
return acc && !(mediaMatches === null || mediaMatches === void 0 ? void 0 : mediaMatches[breakpoint]);
|
|
300
|
-
}, true);
|
|
301
|
-
return isVisibleBreakpoint && largerLayoutIsNotVisible;
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
function DataListItemInternal({ children, item, }) {
|
|
305
|
-
const { selected, onSelect } = useDataListContext();
|
|
306
|
-
if (selected !== undefined && onSelect) {
|
|
307
|
-
return (React__default["default"].createElement("div", { className: classnames__default["default"](styles$d.selectable, {
|
|
308
|
-
[styles$d.selected]: selected === null || selected === void 0 ? void 0 : selected.length,
|
|
309
|
-
}) },
|
|
310
|
-
React__default["default"].createElement(Checkbox.Checkbox, { checked: selected === null || selected === void 0 ? void 0 : selected.includes(item.id), onChange: handleChange }),
|
|
311
|
-
children));
|
|
312
|
-
}
|
|
313
|
-
return children;
|
|
314
|
-
function handleChange() {
|
|
315
|
-
if (selected === null || selected === void 0 ? void 0 : selected.includes(item.id)) {
|
|
316
|
-
onSelect === null || onSelect === void 0 ? void 0 : onSelect(selected === null || selected === void 0 ? void 0 : selected.filter(id => id !== item.id));
|
|
317
|
-
}
|
|
318
|
-
else if (selected) {
|
|
319
|
-
onSelect === null || onSelect === void 0 ? void 0 : onSelect([...selected, item.id]);
|
|
380
|
+
function getExposedActions(childrenArray, childCount = 2) {
|
|
381
|
+
const firstNChildren = childrenArray.slice(0, childCount);
|
|
382
|
+
return firstNChildren.reduce((result, child, i) => {
|
|
383
|
+
const hasIcon = Boolean(child.props.icon);
|
|
384
|
+
if (!hasIcon)
|
|
385
|
+
return result; // If the child does not have an icon, continue.
|
|
386
|
+
const isLastChildAdded = result.length === i;
|
|
387
|
+
// If it's the first child or if the previous child was added, then add this child.
|
|
388
|
+
if (i === 0 || (i < childCount && isLastChildAdded)) {
|
|
389
|
+
return [...result, child];
|
|
320
390
|
}
|
|
321
|
-
|
|
391
|
+
return result;
|
|
392
|
+
}, []);
|
|
322
393
|
}
|
|
323
394
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
var css_248z$6 = ".iyg43v-S9yU- {\n display: -ms-flexbox;\n display: flex;\n width: 100%;\n min-height: 44px;\n padding: calc(16px / 2);\n padding: var(--space-small);\n border: none;\n border-radius: 0;\n text-align: left;\n background: none;\n cursor: pointer;\n transition: background 200ms ease;\n transition: background var(--timing-base) ease;\n -webkit-appearance: none;\n appearance: none;\n -ms-flex-align: center;\n align-items: center;\n gap: calc(16px / 2);\n gap: var(--space-small);\n}\n\n.iyg43v-S9yU-:hover,\n.iyg43v-S9yU-:focus {\n background-color: rgb(250, 246, 219);\n background-color: var(--color-surface--hover);\n}\n\n.AUJNqz93ZDA- {\n font-weight: 500;\n}\n";
|
|
329
|
-
var styles$6 = {"action":"iyg43v-S9yU-","label":"AUJNqz93ZDA-"};
|
|
330
|
-
styleInject_es.styleInject(css_248z$6);
|
|
331
|
-
|
|
332
|
-
function DataListAction(
|
|
333
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
334
|
-
_) {
|
|
335
|
-
return null;
|
|
336
|
-
}
|
|
337
|
-
function InternalDataListAction({ label, icon, destructive, onClick, item, }) {
|
|
338
|
-
const color = destructive ? "critical" : "blue";
|
|
339
|
-
return (React__default["default"].createElement("button", { className: styles$6.action, onClick: () => onClick === null || onClick === void 0 ? void 0 : onClick(item) },
|
|
340
|
-
icon && React__default["default"].createElement(Icon.Icon, { name: icon, color: color }),
|
|
341
|
-
React__default["default"].createElement(Typography.Typography, { textColor: color },
|
|
342
|
-
React__default["default"].createElement("span", { className: styles$6.label }, label))));
|
|
395
|
+
const DataListLayoutActionsContext = React.createContext({ activeItem: undefined });
|
|
396
|
+
function useDataListLayoutActionsContext() {
|
|
397
|
+
return React.useContext(DataListLayoutActionsContext);
|
|
343
398
|
}
|
|
344
399
|
|
|
345
|
-
var css_248z$
|
|
346
|
-
var styles$
|
|
347
|
-
styleInject_es.styleInject(css_248z$
|
|
400
|
+
var css_248z$7 = ".aokwZU8jbWU- {\n position: fixed;\n top: 0;\n top: var(--actions-menu-y, 0);\n left: 0;\n left: var(--actions-menu-x, 0);\n z-index: 6;\n z-index: var(--elevation-menu);\n min-width: 150px;\n box-shadow: 0px calc(16px / 16) calc(16px / 4) 0px\n rgba(0, 0, 0, 0.1),\n 0px calc(16px / 4) 12px 0px rgba(0, 0, 0, 0.05);\n box-shadow: var(--shadow-base);\n padding: calc(16px / 4);\n padding: var(--space-smaller);\n border: calc(16px / 16) solid rgb(217, 223, 225);\n border: var(--border-base) solid var(--color-border);\n border-radius: calc(16px / 2);\n border-radius: var(--radius-larger);\n background-color: rgba(255, 255, 255, 1);\n background-color: var(--color-surface);\n}\n\n.XtVRP97TVSE- {\n position: fixed;\n top: 0;\n left: 0;\n z-index: calc(6 - 1);\n z-index: calc(var(--elevation-menu) - 1);\n width: 100%;\n height: 100%;\n padding: 0;\n border: none;\n background-color: transparent;\n}\n";
|
|
401
|
+
var styles$7 = {"menu":"aokwZU8jbWU-","overlay":"XtVRP97TVSE-"};
|
|
402
|
+
styleInject_es.styleInject(css_248z$7);
|
|
348
403
|
|
|
349
404
|
const variants$1 = {
|
|
350
405
|
hidden: { opacity: 0, y: -10 },
|
|
@@ -355,10 +410,14 @@ function DataListActionsMenu({ visible = false, position, onRequestClose, childr
|
|
|
355
410
|
useRefocusOnActivator.useRefocusOnActivator(visible);
|
|
356
411
|
const focusTrapRef = useFocusTrap.useFocusTrap(visible);
|
|
357
412
|
useOnKeyDown.useOnKeyDown(onRequestClose, "Escape");
|
|
358
|
-
return (React__default["default"].createElement(framerMotion.AnimatePresence, null, visible && (React__default["default"].createElement(
|
|
359
|
-
React__default["default"].createElement(
|
|
360
|
-
React__default["default"].createElement(
|
|
361
|
-
|
|
413
|
+
return ReactDOM.createPortal(React__default["default"].createElement(framerMotion.AnimatePresence, null, visible && (React__default["default"].createElement("div", { ref: focusTrapRef, onClick: handleClick },
|
|
414
|
+
React__default["default"].createElement(framerMotion.motion.div, { role: "menu", ref: setRef, variants: variants$1, initial: "hidden", animate: "visible", exit: "hidden", transition: { duration: TRANSITION_DELAY_IN_SECONDS }, className: styles$7.menu, style: getPositionCssVars(), onClick: onRequestClose }, children),
|
|
415
|
+
React__default["default"].createElement("button", { type: "button", className: styles$7.overlay, onClick: onRequestClose, "aria-label": "Close menu" })))), document.body);
|
|
416
|
+
function handleClick(event) {
|
|
417
|
+
// Prevent menu from firing the parent's onClick event when it is nested
|
|
418
|
+
// within a clickable list item
|
|
419
|
+
event.stopPropagation();
|
|
420
|
+
}
|
|
362
421
|
function getPositionCssVars() {
|
|
363
422
|
const { posX, posY } = getPosition();
|
|
364
423
|
return {
|
|
@@ -369,27 +428,33 @@ function DataListActionsMenu({ visible = false, position, onRequestClose, childr
|
|
|
369
428
|
function getPosition() {
|
|
370
429
|
const rect = ref === null || ref === void 0 ? void 0 : ref.getBoundingClientRect();
|
|
371
430
|
const { width = 0, height = 0 } = rect || {};
|
|
372
|
-
const { x
|
|
431
|
+
const { x, y } = position;
|
|
373
432
|
const xIsOffScreen = x + width > window.innerWidth;
|
|
374
433
|
const yIsOffScreen = y + height > window.innerHeight;
|
|
434
|
+
const xOffSet = x + width - window.innerWidth + design.tokens["space-base"];
|
|
375
435
|
const yOffSet = y + height - window.innerHeight;
|
|
376
|
-
const newPosX = Math.floor(xIsOffScreen ? x -
|
|
436
|
+
const newPosX = Math.floor(xIsOffScreen ? x - xOffSet : x);
|
|
377
437
|
const newPosY = Math.floor(yIsOffScreen ? y - yOffSet : y);
|
|
378
438
|
return { posX: newPosX, posY: newPosY };
|
|
379
439
|
}
|
|
380
440
|
}
|
|
381
441
|
|
|
382
|
-
function DataListItemActionsOverflow({
|
|
442
|
+
function DataListItemActionsOverflow({ actions, }) {
|
|
383
443
|
const [menuPosition, setMenuPosition] = React.useState({ x: 0, y: 0 });
|
|
384
444
|
const [showMenu, setShowMenu] = React.useState(false);
|
|
445
|
+
if (actions.length === 0)
|
|
446
|
+
return null;
|
|
385
447
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
386
448
|
React__default["default"].createElement(Tooltip.Tooltip, { message: "More actions" },
|
|
387
449
|
React__default["default"].createElement(Button.Button, { icon: "more", ariaLabel: "More actions", type: "secondary", variation: "subtle", onClick: handleMoreClick })),
|
|
388
|
-
React__default["default"].createElement(DataListActionsMenu, { visible: showMenu, position: menuPosition, onRequestClose: handleClose },
|
|
450
|
+
React__default["default"].createElement(DataListActionsMenu, { visible: showMenu, position: menuPosition, onRequestClose: handleClose }, actions)));
|
|
389
451
|
function handleMoreClick(event) {
|
|
452
|
+
// Prevent firing the parent's onClick event when it is nested
|
|
453
|
+
// within a clickable list item
|
|
454
|
+
event.stopPropagation();
|
|
390
455
|
setShowMenu(true);
|
|
391
456
|
const rect = event.currentTarget.getBoundingClientRect();
|
|
392
|
-
const posX = rect.x
|
|
457
|
+
const posX = rect.x;
|
|
393
458
|
const posY = rect.y + rect.height;
|
|
394
459
|
setMenuPosition({ x: posX, y: posY });
|
|
395
460
|
}
|
|
@@ -398,6 +463,31 @@ function DataListItemActionsOverflow({ item, actions, }) {
|
|
|
398
463
|
}
|
|
399
464
|
}
|
|
400
465
|
|
|
466
|
+
function DataListActions({ children, itemsToExpose = 2, }) {
|
|
467
|
+
const { activeItem } = useDataListLayoutActionsContext();
|
|
468
|
+
const childrenArray = React.Children.toArray(children).filter(React.isValidElement);
|
|
469
|
+
const exposedActions = getExposedActions(childrenArray, itemsToExpose);
|
|
470
|
+
childrenArray.splice(0, exposedActions.length);
|
|
471
|
+
return (React__default["default"].createElement(DataListOverflowFade, null,
|
|
472
|
+
exposedActions.map(({ props }) => {
|
|
473
|
+
if (props.visible && !props.visible(activeItem))
|
|
474
|
+
return null;
|
|
475
|
+
if (!props.icon)
|
|
476
|
+
return null;
|
|
477
|
+
return (React__default["default"].createElement(Tooltip.Tooltip, { key: props.label, message: props.label },
|
|
478
|
+
React__default["default"].createElement(Button.Button, { icon: props.icon, ariaLabel: props.label, onClick: () => {
|
|
479
|
+
var _a, _b;
|
|
480
|
+
if (activeItem) {
|
|
481
|
+
(_a = props.onClick) === null || _a === void 0 ? void 0 : _a.call(props, activeItem);
|
|
482
|
+
}
|
|
483
|
+
else {
|
|
484
|
+
(_b = props.onClick) === null || _b === void 0 ? void 0 : _b.call(props);
|
|
485
|
+
}
|
|
486
|
+
}, type: "secondary", variation: "subtle" })));
|
|
487
|
+
}),
|
|
488
|
+
React__default["default"].createElement(DataListItemActionsOverflow, { actions: childrenArray })));
|
|
489
|
+
}
|
|
490
|
+
|
|
401
491
|
// This component is meant to capture the props of the DataList.ItemActions
|
|
402
492
|
function DataListItemActions(
|
|
403
493
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -408,74 +498,119 @@ const variants = {
|
|
|
408
498
|
hidden: { opacity: 0, y: 10 },
|
|
409
499
|
visible: { opacity: 1, y: 0 },
|
|
410
500
|
};
|
|
411
|
-
function InternalDataListItemActions({
|
|
412
|
-
const { itemActionComponent } = useDataListContext();
|
|
413
|
-
if (!itemActionComponent)
|
|
414
|
-
return null;
|
|
415
|
-
const { children } = itemActionComponent.props;
|
|
416
|
-
const childrenArray = React.Children.toArray(children).filter(React.isValidElement);
|
|
417
|
-
const exposedActions = getExposedActions(childrenArray);
|
|
418
|
-
childrenArray.splice(0, exposedActions.length);
|
|
501
|
+
function InternalDataListItemActions({ actions, }) {
|
|
419
502
|
return (React__default["default"].createElement(framerMotion.motion.div, { variants: variants, initial: "hidden", animate: "visible", exit: "hidden", transition: {
|
|
420
503
|
duration: TRANSITION_DURATION_IN_SECONDS,
|
|
421
504
|
delay: TRANSITION_DELAY_IN_SECONDS,
|
|
422
|
-
}, className: styles$
|
|
423
|
-
|
|
424
|
-
if (!props.icon)
|
|
425
|
-
return null;
|
|
426
|
-
return (React__default["default"].createElement(Tooltip.Tooltip, { key: props.label, message: props.label },
|
|
427
|
-
React__default["default"].createElement(Button.Button, { icon: props.icon, ariaLabel: props.label, onClick: () => { var _a; return (_a = props.onClick) === null || _a === void 0 ? void 0 : _a.call(props, item); }, type: "secondary", variation: "subtle" })));
|
|
428
|
-
}),
|
|
429
|
-
React__default["default"].createElement(DataListItemActionsOverflow, { actions: childrenArray, item: item })));
|
|
505
|
+
}, className: styles$c.menu, onContextMenu: handleContextMenu },
|
|
506
|
+
React__default["default"].createElement(DataListActions, null, actions)));
|
|
430
507
|
}
|
|
431
508
|
function handleContextMenu(event) {
|
|
432
509
|
event.stopPropagation();
|
|
433
510
|
}
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
511
|
+
|
|
512
|
+
function DataListItemInternal({ children, item, }) {
|
|
513
|
+
const { selected, onSelect } = useDataListContext();
|
|
514
|
+
if (selected !== undefined && onSelect) {
|
|
515
|
+
return (React__default["default"].createElement("div", { className: classnames__default["default"](styles$f.selectable, {
|
|
516
|
+
[styles$f.selected]: selected === null || selected === void 0 ? void 0 : selected.length,
|
|
517
|
+
}) },
|
|
518
|
+
children,
|
|
519
|
+
React__default["default"].createElement(Checkbox.Checkbox, { checked: selected === null || selected === void 0 ? void 0 : selected.includes(item.id), onChange: handleChange })));
|
|
520
|
+
}
|
|
521
|
+
return children;
|
|
522
|
+
function handleChange() {
|
|
523
|
+
if (selected === null || selected === void 0 ? void 0 : selected.includes(item.id)) {
|
|
524
|
+
onSelect === null || onSelect === void 0 ? void 0 : onSelect(selected === null || selected === void 0 ? void 0 : selected.filter(id => id !== item.id));
|
|
441
525
|
}
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
if (isSecondChild && hasIcon && hasFirstChild) {
|
|
445
|
-
return [...result, child];
|
|
526
|
+
else if (selected) {
|
|
527
|
+
onSelect === null || onSelect === void 0 ? void 0 : onSelect([...selected, item.id]);
|
|
446
528
|
}
|
|
447
|
-
|
|
448
|
-
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
function DataListItemClickableInternal({ onClick, url, to, children, }) {
|
|
533
|
+
const { activeItem } = useDataListLayoutActionsContext();
|
|
534
|
+
if (!activeItem)
|
|
535
|
+
return React__default["default"].createElement(React__default["default"].Fragment, null, children);
|
|
536
|
+
if (to) {
|
|
537
|
+
const computedTo = typeof to === "string" ? to : to(activeItem);
|
|
538
|
+
return (React__default["default"].createElement(reactRouterDom.Link, { className: styles$f.listItemClickable, to: computedTo, onClick: handleClick }, children));
|
|
539
|
+
}
|
|
540
|
+
if (url) {
|
|
541
|
+
const href = typeof url === "string" ? url : url(activeItem);
|
|
542
|
+
return (React__default["default"].createElement("a", { className: styles$f.listItemClickable, href: href, onClick: handleClick }, children));
|
|
543
|
+
}
|
|
544
|
+
if (onClick) {
|
|
545
|
+
return (
|
|
546
|
+
// A button can be nested within the list item. To prevent a button inside
|
|
547
|
+
// button error, we need to manually declare a div to be a button
|
|
548
|
+
React__default["default"].createElement("div", { role: "button", tabIndex: 0, className: styles$f.listItemClickable, onClick: handleClick, onKeyDown: e => {
|
|
549
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
550
|
+
e.preventDefault();
|
|
551
|
+
handleClick();
|
|
552
|
+
}
|
|
553
|
+
} }, children));
|
|
554
|
+
}
|
|
555
|
+
return React__default["default"].createElement(React__default["default"].Fragment, null, children);
|
|
556
|
+
function handleClick() {
|
|
557
|
+
activeItem && (onClick === null || onClick === void 0 ? void 0 : onClick(activeItem));
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
function DataListItemClickable({ children }) {
|
|
562
|
+
const { itemActionComponent } = useDataListContext();
|
|
563
|
+
if (itemActionComponent) {
|
|
564
|
+
const props = itemActionComponent.props;
|
|
565
|
+
return (React__default["default"].createElement(DataListItemClickableInternal, Object.assign({}, props), children));
|
|
566
|
+
}
|
|
567
|
+
return React__default["default"].createElement(React__default["default"].Fragment, null, children);
|
|
449
568
|
}
|
|
450
569
|
|
|
451
|
-
function
|
|
570
|
+
function useGetItemActions(item) {
|
|
452
571
|
const { itemActionComponent } = useDataListContext();
|
|
453
|
-
const
|
|
454
|
-
const
|
|
572
|
+
const itemActions = (itemActionComponent === null || itemActionComponent === void 0 ? void 0 : itemActionComponent.props.children) || [];
|
|
573
|
+
const actionsArray = React.Children.toArray(itemActions);
|
|
574
|
+
const actions = React.useMemo(() => {
|
|
575
|
+
return actionsArray.filter(action => {
|
|
576
|
+
if (React.isValidElement(action) && action.props.visible) {
|
|
577
|
+
return action.props.visible(item);
|
|
578
|
+
}
|
|
579
|
+
return true;
|
|
580
|
+
});
|
|
581
|
+
}, [itemActionComponent === null || itemActionComponent === void 0 ? void 0 : itemActionComponent.props.children, item]);
|
|
582
|
+
return {
|
|
583
|
+
actions: actions,
|
|
584
|
+
hasActions: Boolean(actions.length),
|
|
585
|
+
};
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
// eslint-disable-next-line max-statements
|
|
589
|
+
function DataListItem({ item, layout, }) {
|
|
590
|
+
const { hasInLayoutActions } = useDataListLayoutContext();
|
|
591
|
+
const [showMenu, setShowMenu] = React.useState(false);
|
|
455
592
|
const [contextPosition, setContextPosition] = React.useState();
|
|
456
|
-
const
|
|
593
|
+
const generatedItem = React.useMemo(() => generateListItemElement(item), [item]);
|
|
594
|
+
const { actions, hasActions } = useGetItemActions(item);
|
|
457
595
|
const isContextMenuVisible = Boolean(contextPosition);
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
React__default["default"].createElement(
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
function
|
|
472
|
-
|
|
473
|
-
}
|
|
474
|
-
function handleMouseLeave() {
|
|
475
|
-
!isContextMenuVisible && setActiveID(undefined);
|
|
596
|
+
const shouldShowContextMenu = showMenu && isContextMenuVisible && hasActions;
|
|
597
|
+
return (React__default["default"].createElement(DataListLayoutActionsContext.Provider, { value: { activeItem: item } },
|
|
598
|
+
React__default["default"].createElement("div", { onMouseEnter: handleShowMenu, onMouseLeave: handleHideMenu, onFocus: handleShowMenu, onBlur: handleHideMenu, onContextMenu: handleContextMenu, className: classnames__default["default"](styles$f.listItem, {
|
|
599
|
+
[styles$f.active]: showMenu && isContextMenuVisible,
|
|
600
|
+
}), key: item.id },
|
|
601
|
+
React__default["default"].createElement(DataListItemInternal, { item: item },
|
|
602
|
+
React__default["default"].createElement(DataListItemClickable, null, layout(generatedItem))),
|
|
603
|
+
React__default["default"].createElement(framerMotion.AnimatePresence, null,
|
|
604
|
+
showMenu && hasActions && !hasInLayoutActions && (React__default["default"].createElement(InternalDataListItemActions, { actions: actions })),
|
|
605
|
+
React__default["default"].createElement(DataListActionsMenu, { key: item.id, visible: shouldShowContextMenu, position: contextPosition || { x: 0, y: 0 }, onRequestClose: () => setContextPosition(undefined) }, actions)))));
|
|
606
|
+
function handleShowMenu() {
|
|
607
|
+
setShowMenu(true);
|
|
608
|
+
}
|
|
609
|
+
function handleHideMenu() {
|
|
610
|
+
setShowMenu(false);
|
|
476
611
|
}
|
|
477
612
|
function handleContextMenu(event) {
|
|
478
|
-
if (!
|
|
613
|
+
if (!hasActions || isContextMenuVisible)
|
|
479
614
|
return;
|
|
480
615
|
event.preventDefault();
|
|
481
616
|
setContextPosition({
|
|
@@ -485,21 +620,80 @@ function DataListItems({ layouts, mediaMatches, data, }) {
|
|
|
485
620
|
}
|
|
486
621
|
}
|
|
487
622
|
|
|
623
|
+
function DataListItems({ size = "xs", }) {
|
|
624
|
+
const { data, layouts } = useDataListContext();
|
|
625
|
+
const [hasInLayoutActions, setHasInLayoutActions] = React.useState(false);
|
|
626
|
+
const layout = layouts[size];
|
|
627
|
+
if (!layout)
|
|
628
|
+
return null;
|
|
629
|
+
return (React__default["default"].createElement(DataListLayoutContext.Provider, { value: {
|
|
630
|
+
isInLayoutProvider: true,
|
|
631
|
+
hasInLayoutActions,
|
|
632
|
+
setHasInLayoutActions,
|
|
633
|
+
} }, data.map((child, i) => (React__default["default"].createElement(DataListItem, { key: data[i].id, index: i, item: child, layout: layout })))));
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
function DataListLayout({ children, size = "xs", }) {
|
|
637
|
+
const { layoutBreakpoints, registerLayout, registerLayoutBreakpoints, loadingState, } = useDataListContext();
|
|
638
|
+
const breakpoints = useResponsiveSizing();
|
|
639
|
+
React.useEffect(() => {
|
|
640
|
+
registerLayoutBreakpoints(size);
|
|
641
|
+
}, [size]);
|
|
642
|
+
React.useEffect(() => {
|
|
643
|
+
registerLayout(size, children);
|
|
644
|
+
}, [size, children]);
|
|
645
|
+
const sizeIndex = layoutBreakpoints.indexOf(size);
|
|
646
|
+
const nextAvailableSize = layoutBreakpoints[sizeIndex + 1];
|
|
647
|
+
const shouldRenderList = breakpoints[size] && !breakpoints[nextAvailableSize];
|
|
648
|
+
if (loadingState !== "initial" && shouldRenderList) {
|
|
649
|
+
return React__default["default"].createElement(DataListItems, { size: size });
|
|
650
|
+
}
|
|
651
|
+
return null;
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
var css_248z$6 = ".v-GrdlFpBLk- {\n /* Offset the button's padding so the height of the header bar doesn't change */\n margin: calc((16px / 2) * -1) 0;\n margin: calc(calc(16px / 2) * -1) 0;\n margin: calc(var(--space-small) * -1) 0;\n}\n";
|
|
655
|
+
var styles$6 = {"bulkActions":"v-GrdlFpBLk-"};
|
|
656
|
+
styleInject_es.styleInject(css_248z$6);
|
|
657
|
+
|
|
658
|
+
// This component is meant to capture the props of the DataList.BulkActions
|
|
659
|
+
function DataListBulkActions(
|
|
660
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
661
|
+
_) {
|
|
662
|
+
return null;
|
|
663
|
+
}
|
|
664
|
+
function InternalDataListBulkActions() {
|
|
665
|
+
const { bulkActionsComponent } = useDataListContext();
|
|
666
|
+
if (!bulkActionsComponent)
|
|
667
|
+
return null;
|
|
668
|
+
const { children } = bulkActionsComponent.props;
|
|
669
|
+
const { sm } = useResponsiveSizing();
|
|
670
|
+
// Collapse all actions under "More actions" when breakpoint is smaller than sm
|
|
671
|
+
const itemsToExpose = sm ? 3 : 0;
|
|
672
|
+
return (React__default["default"].createElement("div", { className: styles$6.bulkActions },
|
|
673
|
+
React__default["default"].createElement(DataListActions, { itemsToExpose: itemsToExpose }, children)));
|
|
674
|
+
}
|
|
675
|
+
|
|
488
676
|
function DataListHeaderCheckbox({ children }) {
|
|
489
677
|
const { data, totalCount, selected = [], onSelectAll, onSelect, } = useDataListContext();
|
|
490
678
|
if (!onSelectAll && !onSelect)
|
|
491
679
|
return children;
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
680
|
+
const { sm } = useResponsiveSizing();
|
|
681
|
+
// Show "Deselect All" if breakpoint is sm or higher
|
|
682
|
+
const deselectText = sm ? "Deselect All" : "Deselect";
|
|
683
|
+
const selectedLabel = selected.length ? `${selected.length} selected` : "";
|
|
684
|
+
return (React__default["default"].createElement("div", { className: classnames__default["default"](styles$f.selectable) },
|
|
685
|
+
React__default["default"].createElement("div", { className: classnames__default["default"](styles$f.selectAllCheckbox, {
|
|
686
|
+
[styles$f.visible]: Boolean(onSelectAll),
|
|
495
687
|
}) },
|
|
496
|
-
React__default["default"].createElement(Checkbox.Checkbox, { checked: isAllSelected(), indeterminate: selected.length > 0 && !isAllSelected(), onChange: onSelectAll }
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
688
|
+
React__default["default"].createElement(Checkbox.Checkbox, { checked: isAllSelected(), indeterminate: selected.length > 0 && !isAllSelected(), onChange: onSelectAll },
|
|
689
|
+
React__default["default"].createElement("div", { className: styles$f.srOnly }, selectedLabel))),
|
|
690
|
+
React__default["default"].createElement(AnimatedSwitcher.AnimatedSwitcher, { switched: Boolean(selected.length), initialChild: children, switchTo: React__default["default"].createElement("div", { className: styles$f.batchSelectContainer },
|
|
691
|
+
React__default["default"].createElement("div", { className: styles$f.headerBatchSelect },
|
|
692
|
+
React__default["default"].createElement(Text.Text, null,
|
|
500
693
|
selected.length,
|
|
501
|
-
" selected")
|
|
502
|
-
|
|
694
|
+
" selected"),
|
|
695
|
+
React__default["default"].createElement(Button.Button, { label: deselectText, onClick: () => onSelect === null || onSelect === void 0 ? void 0 : onSelect([]), type: "tertiary" })),
|
|
696
|
+
React__default["default"].createElement(InternalDataListBulkActions, null)) })));
|
|
503
697
|
function isAllSelected() {
|
|
504
698
|
// If there's a totalCount, we can use that to accurately determine if the
|
|
505
699
|
// user have "selected all".
|
|
@@ -514,112 +708,62 @@ function DataListHeaderCheckbox({ children }) {
|
|
|
514
708
|
}
|
|
515
709
|
}
|
|
516
710
|
|
|
517
|
-
function
|
|
518
|
-
const
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
media.addEventListener("change", listener);
|
|
526
|
-
return () => media.removeEventListener("change", listener);
|
|
527
|
-
}, [CSSMediaQuery]);
|
|
528
|
-
return matches;
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
function useResponsiveSizing() {
|
|
532
|
-
const xs = useMediaQuery(`(width > ${BREAKPOINT_SIZES.xs}px)`);
|
|
533
|
-
const sm = useMediaQuery(`(width >= ${BREAKPOINT_SIZES.sm}px)`);
|
|
534
|
-
const md = useMediaQuery(`(width >= ${BREAKPOINT_SIZES.md}px)`);
|
|
535
|
-
const lg = useMediaQuery(`(width >= ${BREAKPOINT_SIZES.lg}px)`);
|
|
536
|
-
const xl = useMediaQuery(`(width >= ${BREAKPOINT_SIZES.xl}px)`);
|
|
537
|
-
return { xs, sm, md, lg, xl };
|
|
538
|
-
}
|
|
539
|
-
|
|
540
|
-
function useShowHeader() {
|
|
541
|
-
const { headerVisibility } = useDataListContext();
|
|
542
|
-
if (headerVisibility === undefined)
|
|
543
|
-
return true;
|
|
544
|
-
const sizes = useResponsiveSizing();
|
|
545
|
-
const sizeKeys = Object.keys(sizes);
|
|
546
|
-
const showHeader = sizeKeys.reduce((previous, breakpoint) => {
|
|
547
|
-
const isHeaderVisible = headerVisibility[breakpoint] || false;
|
|
548
|
-
const isBreakpointTriggered = sizes[breakpoint];
|
|
549
|
-
return previous || (isBreakpointTriggered && isHeaderVisible);
|
|
550
|
-
}, false);
|
|
551
|
-
return showHeader;
|
|
552
|
-
}
|
|
553
|
-
|
|
554
|
-
function DataListHeader({ layouts, mediaMatches, headerData, }) {
|
|
555
|
-
const showHeader = useShowHeader();
|
|
556
|
-
if (!showHeader || !headerData)
|
|
711
|
+
function DataListHeader() {
|
|
712
|
+
const breakpoints = useResponsiveSizing();
|
|
713
|
+
const { headerVisibility = { xs: true, sm: true, md: true, lg: true, xl: true }, headers, selected, layoutBreakpoints, } = useDataListContext();
|
|
714
|
+
const size = getVisibleSize();
|
|
715
|
+
const { layout } = useActiveLayout();
|
|
716
|
+
const visible = headerVisibility[size];
|
|
717
|
+
const noItemsSelected = (selected === null || selected === void 0 ? void 0 : selected.length) === 0;
|
|
718
|
+
if ((!visible && noItemsSelected) || !layout)
|
|
557
719
|
return null;
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
}, {}));
|
|
570
|
-
return (React__default["default"].createElement(DataListLayoutInternal, { layouts: layouts, mediaMatches: mediaMatches, renderLayout: layout => {
|
|
571
|
-
if (layout.props.size === "xs") {
|
|
572
|
-
return React__default["default"].createElement(LoadingStateXSBreakpoint, null);
|
|
573
|
-
}
|
|
574
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null, loadingElements.map((child, i) => (React__default["default"].createElement("div", { className: styles$b.loadingItem, key: i, "data-testid": DATALIST_LOADINGSTATE_ROW_TEST_ID }, layout.props.children(child))))));
|
|
575
|
-
} }));
|
|
576
|
-
}
|
|
577
|
-
function LoadingStateXSBreakpoint() {
|
|
578
|
-
const loadingData = new Array(LOADING_STATE_LIMIT_ITEMS).fill(0);
|
|
579
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null, loadingData.map((_, i) => {
|
|
580
|
-
return (React__default["default"].createElement("div", { className: styles$b.mobileLoadingState, key: i },
|
|
581
|
-
React__default["default"].createElement(Glimmer.Glimmer.Text, null)));
|
|
582
|
-
})));
|
|
583
|
-
}
|
|
584
|
-
|
|
585
|
-
function DataListLayout(
|
|
586
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
587
|
-
_) {
|
|
588
|
-
return React__default["default"].createElement(React__default["default"].Fragment, null);
|
|
720
|
+
const headerData = generateHeaderElements(headers);
|
|
721
|
+
if (!headerData)
|
|
722
|
+
return null;
|
|
723
|
+
return (React__default["default"].createElement("div", { className: styles$f.headerTitles },
|
|
724
|
+
React__default["default"].createElement(DataListHeaderCheckbox, null, layout(headerData))));
|
|
725
|
+
function getVisibleSize() {
|
|
726
|
+
const visibilityKeys = Object.keys(headerVisibility);
|
|
727
|
+
const headerBreakpoints = sortBreakpoints(visibilityKeys).reverse();
|
|
728
|
+
const visibleHeaderSize = headerBreakpoints.find(key => breakpoints[key]);
|
|
729
|
+
return visibleHeaderSize || layoutBreakpoints[0];
|
|
730
|
+
}
|
|
589
731
|
}
|
|
590
732
|
|
|
591
|
-
var css_248z$4 = ".E-mG3prPSN8- {\n -ms-flex-item-align: center;\n align-self: center;\n position: relative;\n min-width: 0;\n}\n\n._0LGNoZxtqSE- {\n display: grid;\n overflow-x: auto;\n grid-auto-flow: column;\n grid-auto-columns: -webkit-max-content;\n grid-auto-columns: max-content;\n -ms-flex-align: center;\n align-items: center;\n}\n\n._0LGNoZxtqSE- > :nth-child(n + 3):not(:last-child) {\n margin-left: calc(16px / 2);\n margin-left: var(--space-small);\n}\n\n.LA3-gtgehrE- {\n visibility: hidden;\n}\n\n.fSPvawYWzZ8-::before,\n.ChfEJMPPVTk-::after {\n content: \"\";\n position: absolute;\n top: 0;\n width: calc(16px * 1.5);\n width: var(--space-large);\n height: 100%;\n background-image: linear-gradient(\n to right,\n rgba(255, 255, 255, 1) 0%,\n rgba(255, 255, 255, 0) 100%\n );\n background-image: linear-gradient(\n var(--data-list-filters-overflow-shadow-angle, to right),\n var(--color-surface) 0%,\n rgba(var(--color-white--rgb), 0) 100%\n );\n pointer-events: none;\n}\n\n.fSPvawYWzZ8-::before {\n left: 0;\n}\n\n.ChfEJMPPVTk-::after {\n --data-list-filters-overflow-shadow-angle: to left;\n right: 0;\n}\n";
|
|
592
|
-
var styles$4 = {"filters":"E-mG3prPSN8-","filterActions":"_0LGNoZxtqSE-","overflowTrigger":"LA3-gtgehrE-","overflowLeft":"fSPvawYWzZ8-","overflowRight":"ChfEJMPPVTk-"};
|
|
593
|
-
styleInject_es.styleInject(css_248z$4);
|
|
594
|
-
|
|
595
|
-
const CONTAINER_TEST_ID = "ATL-DataListFilters-Container";
|
|
596
|
-
|
|
597
733
|
function DataListSort() {
|
|
598
734
|
const { sorting, headers } = useDataListContext();
|
|
599
|
-
const divRef = React.useRef(null);
|
|
600
|
-
const [showPopover, setShowPopover] = React.useState(false);
|
|
601
735
|
if (!sorting)
|
|
602
736
|
return null;
|
|
603
737
|
const { sortable, state, onSort } = sorting;
|
|
604
738
|
const sortByOptions = getSortByOptions();
|
|
605
|
-
|
|
606
|
-
return (React__default["default"].createElement(
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
739
|
+
console.log({ state });
|
|
740
|
+
return (React__default["default"].createElement(Combobox.Combobox, { onSelect: selection => {
|
|
741
|
+
handleKeyChange(selection[0].id.toString());
|
|
742
|
+
}, selected: [
|
|
743
|
+
{
|
|
744
|
+
id: `${state === null || state === void 0 ? void 0 : state.key},${state === null || state === void 0 ? void 0 : state.order}`,
|
|
745
|
+
label: (state === null || state === void 0 ? void 0 : state.order) || "",
|
|
746
|
+
},
|
|
747
|
+
] },
|
|
748
|
+
React__default["default"].createElement(Combobox.Combobox.Activator, null,
|
|
749
|
+
React__default["default"].createElement(Chip.Chip, { heading: "Sort", label: getButtonLabel(), variation: state ? "base" : "subtle" }, !state && (React__default["default"].createElement(Chip.Chip.Suffix, null,
|
|
750
|
+
React__default["default"].createElement(Icon.Icon, { name: "arrowDown", size: "small" }))))),
|
|
751
|
+
sortByOptions.map(({ label, value }) => {
|
|
752
|
+
return React__default["default"].createElement(Combobox.Combobox.Option, { key: value, id: value, label: label });
|
|
753
|
+
})));
|
|
617
754
|
function getSortByOptions() {
|
|
618
755
|
const options = sortable.reduce((acc, sort) => {
|
|
619
756
|
const label = headers[sort];
|
|
620
757
|
if (!label)
|
|
621
758
|
return acc;
|
|
622
|
-
|
|
759
|
+
if (label === "Last activity") {
|
|
760
|
+
acc.push({ label: "Last Activity (Newest)", value: `${sort},desc` });
|
|
761
|
+
acc.push({ label: "Last Activity (Oldest)", value: `${sort},asc` });
|
|
762
|
+
}
|
|
763
|
+
else {
|
|
764
|
+
acc.push({ label: `${label} (A-Z)`, value: `${sort},asc` });
|
|
765
|
+
acc.push({ label: `${label} (Z-A)`, value: `${sort},desc` });
|
|
766
|
+
}
|
|
623
767
|
return acc;
|
|
624
768
|
}, []);
|
|
625
769
|
// Inject a none option as the first option
|
|
@@ -627,24 +771,31 @@ function DataListSort() {
|
|
|
627
771
|
return options;
|
|
628
772
|
}
|
|
629
773
|
function getButtonLabel() {
|
|
630
|
-
const
|
|
631
|
-
|
|
632
|
-
return "Sort by";
|
|
633
|
-
return `Sort by: ${label}, ${state.order}`;
|
|
774
|
+
const selectedOption = sortByOptions.find(option => option.value === `${state === null || state === void 0 ? void 0 : state.key},${state === null || state === void 0 ? void 0 : state.order}`);
|
|
775
|
+
return (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.label) || "";
|
|
634
776
|
}
|
|
635
777
|
function handleKeyChange(value) {
|
|
636
778
|
if (value && value !== "none") {
|
|
637
|
-
|
|
779
|
+
const [key, order] = value.split(",");
|
|
780
|
+
onSort({ key, order: order });
|
|
638
781
|
return;
|
|
639
782
|
}
|
|
640
783
|
onSort(undefined);
|
|
641
784
|
}
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
function useShowHeader() {
|
|
788
|
+
const { headerVisibility } = useDataListContext();
|
|
789
|
+
if (headerVisibility === undefined)
|
|
790
|
+
return true;
|
|
791
|
+
const sizes = useResponsiveSizing();
|
|
792
|
+
const sizeKeys = Object.keys(sizes);
|
|
793
|
+
const showHeader = sizeKeys.reduce((previous, breakpoint) => {
|
|
794
|
+
const isHeaderVisible = headerVisibility[breakpoint] || false;
|
|
795
|
+
const isBreakpointTriggered = sizes[breakpoint];
|
|
796
|
+
return previous || (isBreakpointTriggered && isHeaderVisible);
|
|
797
|
+
}, false);
|
|
798
|
+
return showHeader;
|
|
648
799
|
}
|
|
649
800
|
|
|
650
801
|
// This component is meant to capture the props of the DataList.Filters
|
|
@@ -660,25 +811,17 @@ function InternalDataListFilters() {
|
|
|
660
811
|
const showHeader = useShowHeader();
|
|
661
812
|
const showSortButton = !showHeader;
|
|
662
813
|
const component = getCompoundComponent(parentChildren, DataListFilters);
|
|
663
|
-
const [leftRef, isLeftVisible] = useInView.useInView();
|
|
664
|
-
const [rightRef, isRightVisible] = useInView.useInView();
|
|
665
814
|
if (!showSortButton && !component)
|
|
666
815
|
return null;
|
|
667
816
|
const children = component === null || component === void 0 ? void 0 : component.props.children;
|
|
668
|
-
return (React__default["default"].createElement(
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
}) },
|
|
672
|
-
React__default["default"].createElement("div", { className: styles$4.filterActions },
|
|
673
|
-
React__default["default"].createElement("span", { ref: leftRef, className: styles$4.overflowTrigger }),
|
|
674
|
-
children && children,
|
|
675
|
-
showSortButton && React__default["default"].createElement(DataListSort, null),
|
|
676
|
-
React__default["default"].createElement("span", { ref: rightRef, className: styles$4.overflowTrigger }))));
|
|
817
|
+
return (React__default["default"].createElement(DataListOverflowFade, null,
|
|
818
|
+
children && children,
|
|
819
|
+
showSortButton && React__default["default"].createElement(DataListSort, null)));
|
|
677
820
|
}
|
|
678
821
|
|
|
679
|
-
var css_248z$
|
|
680
|
-
var styles$
|
|
681
|
-
styleInject_es.styleInject(css_248z$
|
|
822
|
+
var css_248z$5 = ".PGOHzrMh374- {\n --offset: 1px;\n --sticky-header-transition-properties: var(--timing-base) ease-in-out;\n\n position: sticky;\n top: calc(1px * -1);\n top: calc(var(--offset) * -1);\n z-index: 1;\n z-index: var(--elevation-base);\n padding-top: 1px;\n padding-top: var(--offset);\n background-color: rgba(255, 255, 255, 1);\n background-color: var(--color-surface);\n}\n\n/**\n * Draw a border that gets covered by the column headers border when it shows up.\n *\n * Mostly to prevent us from writing some complex JS to remove the border when\n * the column headers show up.\n */\n\n.PGOHzrMh374-::before {\n content: \"\";\n display: block;\n position: absolute;\n bottom: 0;\n left: 50%;\n z-index: -1;\n width: 0;\n height: 0;\n background-color: rgb(217, 223, 225);\n background-color: var(--color-border);\n -webkit-transform: translateX(-50%);\n transform: translateX(-50%);\n transition: height var(--sticky-header-transition-properties)\n 100ms,\n width var(--sticky-header-transition-properties);\n transition: height var(--sticky-header-transition-properties)\n var(--timing-quick),\n width var(--sticky-header-transition-properties);\n}\n\n.PGjWc5ocjpI-::before {\n width: 100%;\n height: calc(16px / 8);\n height: var(--border-thick);\n transition: height var(--sticky-header-transition-properties),\n width var(--sticky-header-transition-properties) 100ms;\n transition: height var(--sticky-header-transition-properties),\n width var(--sticky-header-transition-properties) var(--timing-quick);\n}\n";
|
|
823
|
+
var styles$5 = {"header":"PGOHzrMh374-","stuck":"PGjWc5ocjpI-"};
|
|
824
|
+
styleInject_es.styleInject(css_248z$5);
|
|
682
825
|
|
|
683
826
|
function DataListStickyHeader({ children }) {
|
|
684
827
|
const [isStuck, setIsStuck] = React.useState(false);
|
|
@@ -693,12 +836,12 @@ function DataListStickyHeader({ children }) {
|
|
|
693
836
|
ref.current && observer.unobserve(ref.current);
|
|
694
837
|
};
|
|
695
838
|
}, [handleObserver, ref.current]);
|
|
696
|
-
return (React__default["default"].createElement("div", { ref: ref, className: classnames__default["default"](styles$
|
|
839
|
+
return (React__default["default"].createElement("div", { ref: ref, className: classnames__default["default"](styles$5.header, { [styles$5.stuck]: isStuck }) }, children));
|
|
697
840
|
}
|
|
698
841
|
|
|
699
|
-
var css_248z$
|
|
700
|
-
var styles$
|
|
701
|
-
styleInject_es.styleInject(css_248z$
|
|
842
|
+
var css_248z$4 = ".SaPMOnvw-3c- {\n --transition-properties: var(--timing-base) ease-in-out;\n --button-offset: calc(var(--space-largest) - var(--space-smallest));\n\n position: absolute;\n /* Inputs are off by 1 when put beside a button */\n top: calc((16px / 2) + 1px);\n top: calc(calc(16px / 2) + 1px);\n top: calc(var(--space-small) + 1px);\n right: calc((16px * 3) - (16px / 8));\n right: calc(calc(16px * 3) - calc(16px / 8));\n right: var(--button-offset);\n visibility: hidden;\n width: 0;\n opacity: 0;\n transition: opacity 200ms ease-in-out,\n width 200ms ease-in-out, visibility 200ms ease-in-out;\n transition: opacity var(--transition-properties),\n width var(--transition-properties), visibility var(--transition-properties);\n}\n\n._3S1-91v2SYI- {\n visibility: visible;\n width: calc(100% - var(--button-offset));\n opacity: 1;\n}\n\n@media (min-width: 768px) {\n\n.SaPMOnvw-3c-,\n._3S1-91v2SYI- {\n position: static;\n visibility: visible;\n width: auto;\n opacity: 1;\n transition: none;\n}\n }\n\n@media (--medium-screens-and-up) {\n\n.SaPMOnvw-3c-,\n._3S1-91v2SYI- {\n position: static;\n visibility: visible;\n width: auto;\n opacity: 1;\n transition: none;\n}\n }\n\n._9GlBktsUALw- {\n display: block;\n}\n\n@media (min-width: 768px) {\n\n._9GlBktsUALw- {\n display: none;\n}\n }\n\n@media (--medium-screens-and-up) {\n\n._9GlBktsUALw- {\n display: none;\n}\n }\n\n/*\n * No Filters Styling\n *\n * When there are no filters, the search input is always visible.\n * ------------------------------------------------------------------------- */\n\n._3Pjrt42x454- .SaPMOnvw-3c- {\n position: static;\n visibility: visible;\n width: auto;\n opacity: 1;\n transition: none;\n}\n\n@media (min-width: 768px) {\n\n._3Pjrt42x454- .SaPMOnvw-3c- {\n max-width: 30%;\n}\n }\n\n@media (--medium-screens-and-up) {\n\n._3Pjrt42x454- .SaPMOnvw-3c- {\n max-width: 30%;\n}\n }\n\n._3Pjrt42x454- ._9GlBktsUALw- {\n display: none;\n}\n";
|
|
843
|
+
var styles$4 = {"searchInput":"SaPMOnvw-3c-","searchInputVisible":"_3S1-91v2SYI-","searchButton":"_9GlBktsUALw-","withNoFilters":"_3Pjrt42x454-"};
|
|
844
|
+
styleInject_es.styleInject(css_248z$4);
|
|
702
845
|
|
|
703
846
|
const DATA_LIST_SEARCH_TEST_ID = "ATL-DataList-Search-input-wrapper";
|
|
704
847
|
// This component is meant to capture the props of the DataList.Search
|
|
@@ -707,7 +850,7 @@ function DataListSearch(_) {
|
|
|
707
850
|
return null;
|
|
708
851
|
}
|
|
709
852
|
/**
|
|
710
|
-
* Renders the DataList.Search component
|
|
853
|
+
* Renders the DataList.Search component.
|
|
711
854
|
*/
|
|
712
855
|
function InternalDataListSearch() {
|
|
713
856
|
const inputRef = React.useRef(null);
|
|
@@ -716,15 +859,19 @@ function InternalDataListSearch() {
|
|
|
716
859
|
const debouncedSearch = React.useCallback(debounce__default["default"]((value) => { var _a; return (_a = searchComponent === null || searchComponent === void 0 ? void 0 : searchComponent.props) === null || _a === void 0 ? void 0 : _a.onSearch(value); }, SEARCH_DEBOUNCE_DELAY), [searchComponent === null || searchComponent === void 0 ? void 0 : searchComponent.props.onSearch]);
|
|
717
860
|
if (!searchComponent)
|
|
718
861
|
return null;
|
|
719
|
-
const { placeholder } = searchComponent.props;
|
|
862
|
+
const { placeholder, initialValue } = searchComponent.props;
|
|
720
863
|
return (React__default["default"].createElement("div", { className: classnames__default["default"]({
|
|
721
|
-
[styles$
|
|
864
|
+
[styles$4.withNoFilters]: !filterComponent && !sorting,
|
|
722
865
|
}) },
|
|
723
|
-
React__default["default"].createElement("div", { "data-testid": DATA_LIST_SEARCH_TEST_ID, className: classnames__default["default"](styles$
|
|
724
|
-
[styles$
|
|
866
|
+
React__default["default"].createElement("div", { "data-testid": DATA_LIST_SEARCH_TEST_ID, className: classnames__default["default"](styles$4.searchInput, {
|
|
867
|
+
[styles$4.searchInputVisible]: visible,
|
|
725
868
|
}) },
|
|
726
|
-
React__default["default"].createElement(InputText.InputText
|
|
727
|
-
|
|
869
|
+
React__default["default"].createElement(InputText.InputText
|
|
870
|
+
// If the initial value changes, reset the input.
|
|
871
|
+
, {
|
|
872
|
+
// If the initial value changes, reset the input.
|
|
873
|
+
key: initialValue, defaultValue: initialValue, ref: inputRef, placeholder: getPlaceholder(), onChange: debouncedSearch, prefix: { icon: "search" }, size: "small" })),
|
|
874
|
+
React__default["default"].createElement("div", { className: styles$4.searchButton },
|
|
728
875
|
React__default["default"].createElement(AnimatedSwitcher.AnimatedSwitcher, { switched: visible, initialChild: React__default["default"].createElement(Button.Button, { variation: "subtle", icon: "search", ariaLabel: "Search", onClick: toggleSearch }), switchTo: React__default["default"].createElement(Button.Button, { variation: "subtle", icon: "remove", ariaLabel: "Close search bar", onClick: toggleSearch }) }))));
|
|
729
876
|
function getPlaceholder() {
|
|
730
877
|
if (placeholder)
|
|
@@ -742,9 +889,9 @@ function InternalDataListSearch() {
|
|
|
742
889
|
}
|
|
743
890
|
}
|
|
744
891
|
|
|
745
|
-
var css_248z$
|
|
746
|
-
var styles$
|
|
747
|
-
styleInject_es.styleInject(css_248z$
|
|
892
|
+
var css_248z$3 = ".zg3w9nQga-M- {\n display: -ms-flexbox;\n display: flex;\n box-sizing: border-box;\n padding: calc(16px * 1);\n padding: var(--space-base);\n -ms-flex-pack: center;\n justify-content: center;\n -ms-flex-direction: column;\n flex-direction: column;\n row-gap: calc(16px * 1);\n row-gap: var(--space-base);\n -ms-flex-align: center;\n align-items: center;\n -ms-flex: 1;\n flex: 1;\n}\n";
|
|
893
|
+
var styles$3 = {"emptyStateWrapper":"zg3w9nQga-M-"};
|
|
894
|
+
styleInject_es.styleInject(css_248z$3);
|
|
748
895
|
|
|
749
896
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
750
897
|
function DataListEmptyState(_) {
|
|
@@ -753,7 +900,7 @@ function DataListEmptyState(_) {
|
|
|
753
900
|
function InternalDataListEmptyState() {
|
|
754
901
|
const { emptyStateComponents: components, filtered } = React.useContext(DataListContext);
|
|
755
902
|
const { message, action } = getMessages();
|
|
756
|
-
return (React__default["default"].createElement("div", { className: styles$
|
|
903
|
+
return (React__default["default"].createElement("div", { className: styles$3.emptyStateWrapper },
|
|
757
904
|
React__default["default"].createElement(Text.Text, { align: "center" }, message),
|
|
758
905
|
renderButton(action)));
|
|
759
906
|
function getMessages() {
|
|
@@ -787,9 +934,9 @@ function getEmptyStates(components) {
|
|
|
787
934
|
return { defaultEmptyState, filteredEmptyState };
|
|
788
935
|
}
|
|
789
936
|
|
|
790
|
-
var css_248z = ".IC-Y9bTIVFo- {\n position: relative;\n -webkit-transform: translateY(calc((16px * 3) * -1));\n -webkit-transform: translateY(calc(calc(16px * 3) * -1));\n -webkit-transform: translateY(calc(var(--space-largest) * -1));\n transform: translateY(calc((16px * 3) * -1));\n transform: translateY(calc(calc(16px * 3) * -1));\n transform: translateY(calc(var(--space-largest) * -1));\n}\n\n.PbZLGpbI6ZM-,\n._6zA6B-jmz6o- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: center;\n justify-content: center;\n padding: calc(16px / 2);\n padding: var(--space-small);\n}\n\n._6zA6B-jmz6o- {\n opacity: 0;\n -webkit-animation: gZ4DUv82g5I- 200ms ease 200ms forwards;\n -webkit-animation: gZ4DUv82g5I- var(--timing-base) ease var(--timing-base) forwards;\n animation: gZ4DUv82g5I- 200ms ease 200ms forwards;\n animation: gZ4DUv82g5I- var(--timing-base) ease var(--timing-base) forwards;\n}\n\n@-webkit-keyframes gZ4DUv82g5I- {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n@keyframes gZ4DUv82g5I- {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n";
|
|
791
|
-
var styles = {"trigger":"IC-Y9bTIVFo-","loadingMore":"PbZLGpbI6ZM-","backToTop":"_6zA6B-jmz6o-","fadeIn":"gZ4DUv82g5I-"};
|
|
792
|
-
styleInject_es.styleInject(css_248z);
|
|
937
|
+
var css_248z$2 = ".IC-Y9bTIVFo- {\n position: relative;\n -webkit-transform: translateY(calc((16px * 3) * -1));\n -webkit-transform: translateY(calc(calc(16px * 3) * -1));\n -webkit-transform: translateY(calc(var(--space-largest) * -1));\n transform: translateY(calc((16px * 3) * -1));\n transform: translateY(calc(calc(16px * 3) * -1));\n transform: translateY(calc(var(--space-largest) * -1));\n}\n\n.PbZLGpbI6ZM-,\n._6zA6B-jmz6o- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: center;\n justify-content: center;\n padding: calc(16px / 2);\n padding: var(--space-small);\n}\n\n._6zA6B-jmz6o- {\n opacity: 0;\n -webkit-animation: gZ4DUv82g5I- 200ms ease 200ms forwards;\n -webkit-animation: gZ4DUv82g5I- var(--timing-base) ease var(--timing-base) forwards;\n animation: gZ4DUv82g5I- 200ms ease 200ms forwards;\n animation: gZ4DUv82g5I- var(--timing-base) ease var(--timing-base) forwards;\n}\n\n@-webkit-keyframes gZ4DUv82g5I- {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n@keyframes gZ4DUv82g5I- {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n";
|
|
938
|
+
var styles$2 = {"trigger":"IC-Y9bTIVFo-","loadingMore":"PbZLGpbI6ZM-","backToTop":"_6zA6B-jmz6o-","fadeIn":"gZ4DUv82g5I-"};
|
|
939
|
+
styleInject_es.styleInject(css_248z$2);
|
|
793
940
|
|
|
794
941
|
function DataListLoadMoreTrigger() {
|
|
795
942
|
const { onLoadMore } = useDataListContext();
|
|
@@ -797,7 +944,7 @@ function DataListLoadMoreTrigger() {
|
|
|
797
944
|
React.useEffect(() => {
|
|
798
945
|
isInView && (onLoadMore === null || onLoadMore === void 0 ? void 0 : onLoadMore());
|
|
799
946
|
}, [isInView]);
|
|
800
|
-
return (React__default["default"].createElement("div", { ref: inViewRef, className: styles.trigger, "data-testid": DATA_LOAD_MORE_TEST_ID }));
|
|
947
|
+
return (React__default["default"].createElement("div", { ref: inViewRef, className: styles$2.trigger, "data-testid": DATA_LOAD_MORE_TEST_ID }));
|
|
801
948
|
}
|
|
802
949
|
|
|
803
950
|
const MAX_DATA_COUNT = 50;
|
|
@@ -806,77 +953,137 @@ function DataListLoadMore({ onBackToTop }) {
|
|
|
806
953
|
const showBackToTop = data.length > MAX_DATA_COUNT && loadingState !== "loadingMore";
|
|
807
954
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
808
955
|
React__default["default"].createElement(DataListLoadMoreTrigger, { key: data.length }),
|
|
809
|
-
loadingState === "loadingMore" && (React__default["default"].createElement("div", { "data-testid": DATA_LIST_LOADING_MORE_SPINNER_TEST_ID, className: styles.loadingMore },
|
|
956
|
+
loadingState === "loadingMore" && (React__default["default"].createElement("div", { "data-testid": DATA_LIST_LOADING_MORE_SPINNER_TEST_ID, className: styles$2.loadingMore },
|
|
810
957
|
React__default["default"].createElement(Spinner.Spinner, { size: "small" }))),
|
|
811
|
-
showBackToTop && (React__default["default"].createElement("div", { className: styles.backToTop },
|
|
958
|
+
showBackToTop && (React__default["default"].createElement("div", { className: styles$2.backToTop },
|
|
812
959
|
React__default["default"].createElement(Button.Button, { label: "Back to top", onClick: onBackToTop, size: "small", variation: "subtle" })))));
|
|
813
960
|
}
|
|
814
961
|
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
962
|
+
var css_248z$1 = ".iyg43v-S9yU- {\n display: -ms-flexbox;\n display: flex;\n width: 100%;\n min-height: 44px;\n padding: calc(16px / 2);\n padding: var(--space-small);\n border: none;\n border-radius: 0;\n font-size: calc((16px * 1) * 0.875);\n font-size: calc(calc(16px * 1) * 0.875);\n font-size: var(--typography--fontSize-base);\n text-align: left;\n background: none;\n cursor: pointer;\n transition: background 200ms ease;\n transition: background var(--timing-base) ease;\n -webkit-appearance: none;\n appearance: none;\n -ms-flex-align: center;\n align-items: center;\n gap: calc(16px / 2);\n gap: var(--space-small);\n}\n\n.iyg43v-S9yU-:hover,\n.iyg43v-S9yU-:focus {\n background-color: rgb(244, 246, 250);\n background-color: var(--color-surface--hover);\n}\n\n.AUJNqz93ZDA- {\n font-weight: 500;\n}\n";
|
|
963
|
+
var styles$1 = {"action":"iyg43v-S9yU-","label":"AUJNqz93ZDA-"};
|
|
964
|
+
styleInject_es.styleInject(css_248z$1);
|
|
965
|
+
|
|
966
|
+
function DataListAction({ label, icon, destructive, visible = () => true, onClick, }) {
|
|
967
|
+
const { activeItem } = useDataListLayoutActionsContext();
|
|
968
|
+
// Don't render if the item is not visible
|
|
969
|
+
if (activeItem && !visible(activeItem)) {
|
|
970
|
+
return null;
|
|
971
|
+
}
|
|
972
|
+
const color = destructive ? "critical" : "blue";
|
|
973
|
+
return (React__default["default"].createElement("button", { type: "button", className: styles$1.action, onClick: handleClick },
|
|
974
|
+
icon && React__default["default"].createElement(Icon.Icon, { name: icon, color: color }),
|
|
975
|
+
React__default["default"].createElement(Typography.Typography, { textColor: color },
|
|
976
|
+
React__default["default"].createElement("span", { className: styles$1.label }, label))));
|
|
977
|
+
function handleClick() {
|
|
978
|
+
if (activeItem) {
|
|
979
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(activeItem);
|
|
980
|
+
}
|
|
981
|
+
else {
|
|
982
|
+
onClick === null || onClick === void 0 ? void 0 : onClick();
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
var css_248z = "._0m75bgCVBhk- {\n visibility: hidden;\n}\n";
|
|
988
|
+
var styles = {"hidden":"_0m75bgCVBhk-"};
|
|
989
|
+
styleInject_es.styleInject(css_248z);
|
|
990
|
+
|
|
991
|
+
function DataListLayoutActions() {
|
|
992
|
+
const { itemActionComponent, loadingState } = useDataListContext();
|
|
993
|
+
const { setHasInLayoutActions } = useDataListLayoutContext();
|
|
994
|
+
const { children: actionsChildren } = (itemActionComponent === null || itemActionComponent === void 0 ? void 0 : itemActionComponent.props) || {};
|
|
995
|
+
const actions = React.Children.toArray(actionsChildren);
|
|
996
|
+
const hasActions = actions.length > 0;
|
|
824
997
|
React.useEffect(() => {
|
|
825
|
-
|
|
826
|
-
mediaQueries[breakpoint].addEventListener("change", handlers[breakpoint]);
|
|
827
|
-
});
|
|
998
|
+
setHasInLayoutActions(hasActions);
|
|
828
999
|
return () => {
|
|
829
|
-
|
|
830
|
-
mediaQueries[breakpoint].removeEventListener("change", handlers[breakpoint]);
|
|
831
|
-
});
|
|
1000
|
+
setHasInLayoutActions(false);
|
|
832
1001
|
};
|
|
833
|
-
}, [
|
|
834
|
-
|
|
1002
|
+
}, []);
|
|
1003
|
+
if (loadingState === "initial") {
|
|
1004
|
+
return React__default["default"].createElement(Glimmer.Glimmer, { shape: "square", size: "large" });
|
|
1005
|
+
}
|
|
1006
|
+
if (!hasActions)
|
|
1007
|
+
return null;
|
|
1008
|
+
return (React__default["default"].createElement(DataListLayoutActionsWrapper, null,
|
|
1009
|
+
React__default["default"].createElement(DataListItemActionsOverflow, { actions: actions })));
|
|
835
1010
|
}
|
|
836
|
-
function
|
|
837
|
-
|
|
1011
|
+
function DataListLayoutActionsWrapper({ children }) {
|
|
1012
|
+
const { isInLayoutProvider } = useDataListLayoutContext();
|
|
1013
|
+
if (isInLayoutProvider)
|
|
1014
|
+
return React__default["default"].createElement(React__default["default"].Fragment, null, children);
|
|
1015
|
+
return React__default["default"].createElement("div", { className: styles.hidden }, children);
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1018
|
+
// This component is meant to capture the props of the DataList.Filters
|
|
1019
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
1020
|
+
function DataListStatusBar(_) {
|
|
1021
|
+
return null;
|
|
1022
|
+
}
|
|
1023
|
+
/**
|
|
1024
|
+
* Renders the DataList.StatusBar component
|
|
1025
|
+
*/
|
|
1026
|
+
function InternalDataListStatusBar() {
|
|
1027
|
+
const { children: parentChildren } = useDataListContext();
|
|
1028
|
+
const component = getCompoundComponent(parentChildren, DataListStatusBar);
|
|
1029
|
+
if (!component)
|
|
1030
|
+
return null;
|
|
1031
|
+
const children = component === null || component === void 0 ? void 0 : component.props.children;
|
|
1032
|
+
return React__default["default"].createElement(React__default["default"].Fragment, null, children);
|
|
838
1033
|
}
|
|
839
1034
|
|
|
840
1035
|
function DataList(_a) {
|
|
841
|
-
var
|
|
842
|
-
|
|
1036
|
+
var { selected = [], sorting } = _a, props = tslib_es6.__rest(_a, ["selected", "sorting"]);
|
|
1037
|
+
const [layoutBreakpoints, setLayoutBreakpoints] = React.useState([]);
|
|
1038
|
+
const [layouts, setLayouts] = React.useState({});
|
|
843
1039
|
const searchComponent = getCompoundComponent(props.children, DataListSearch);
|
|
844
1040
|
const filterComponent = getCompoundComponent(props.children, DataListFilters);
|
|
845
1041
|
const layoutComponents = getCompoundComponents(props.children, DataListLayout);
|
|
846
1042
|
const emptyStateComponents = getCompoundComponents(props.children, DataListEmptyState);
|
|
847
1043
|
const itemActionComponent = getCompoundComponent(props.children, DataListItemActions);
|
|
1044
|
+
const bulkActionsComponent = getCompoundComponent(props.children, DataListBulkActions);
|
|
848
1045
|
return (React__default["default"].createElement(DataListContext.Provider, { value: Object.assign(Object.assign({ searchComponent,
|
|
849
1046
|
filterComponent,
|
|
850
1047
|
layoutComponents,
|
|
851
1048
|
emptyStateComponents,
|
|
852
|
-
itemActionComponent
|
|
1049
|
+
itemActionComponent,
|
|
1050
|
+
bulkActionsComponent,
|
|
1051
|
+
layoutBreakpoints,
|
|
1052
|
+
registerLayoutBreakpoints,
|
|
1053
|
+
layouts,
|
|
1054
|
+
registerLayout }, props), { selected,
|
|
853
1055
|
// T !== DataListObject
|
|
854
1056
|
sorting: sorting }) },
|
|
855
1057
|
React__default["default"].createElement(InternalDataList, null)));
|
|
1058
|
+
function registerLayoutBreakpoints(size) {
|
|
1059
|
+
setLayoutBreakpoints(prev => sortBreakpoints([...prev, size]));
|
|
1060
|
+
}
|
|
1061
|
+
function registerLayout(size, children) {
|
|
1062
|
+
setLayouts(prev => (Object.assign(Object.assign({}, prev), { [size]: children })));
|
|
1063
|
+
}
|
|
856
1064
|
}
|
|
857
1065
|
function InternalDataList() {
|
|
858
|
-
const { data,
|
|
1066
|
+
const { data, title, totalCount, loadingState = "none", layoutComponents, } = useDataListContext();
|
|
859
1067
|
const backToTopRef = React.useRef(null);
|
|
860
|
-
const headerData = generateHeaderElements(headers);
|
|
861
|
-
const mediaMatches = useLayoutMediaQueries();
|
|
862
1068
|
const initialLoading = loadingState === "initial";
|
|
863
1069
|
const showEmptyState = !initialLoading && data.length === 0;
|
|
864
1070
|
const shouldRenderLoadMoreTrigger = !initialLoading && !showEmptyState;
|
|
865
|
-
return (React__default["default"].createElement("div", { className: styles$
|
|
866
|
-
React__default["default"].createElement("div", { className: styles$
|
|
1071
|
+
return (React__default["default"].createElement("div", { className: styles$f.wrapper },
|
|
1072
|
+
React__default["default"].createElement("div", { className: styles$f.titleContainer },
|
|
867
1073
|
title && React__default["default"].createElement(Heading.Heading, { level: 3 }, title),
|
|
868
1074
|
React__default["default"].createElement(DataListTotalCount, { totalCount: totalCount, loading: initialLoading })),
|
|
869
1075
|
React__default["default"].createElement("div", { ref: backToTopRef }),
|
|
870
1076
|
React__default["default"].createElement(DataListStickyHeader, null,
|
|
871
|
-
React__default["default"].createElement("div", { className: styles$
|
|
1077
|
+
React__default["default"].createElement("div", { className: styles$f.headerFilters },
|
|
872
1078
|
React__default["default"].createElement(InternalDataListFilters, null),
|
|
873
1079
|
React__default["default"].createElement(InternalDataListSearch, null)),
|
|
874
|
-
|
|
875
|
-
|
|
1080
|
+
React__default["default"].createElement(InternalDataListStatusBar, null),
|
|
1081
|
+
React__default["default"].createElement(DataListHeader, null)),
|
|
1082
|
+
initialLoading && React__default["default"].createElement(DataListLoadingState, null),
|
|
876
1083
|
showEmptyState && React__default["default"].createElement(InternalDataListEmptyState, null),
|
|
877
|
-
|
|
878
|
-
loadingState === "filtering" && (React__default["default"].createElement("div", { "data-testid": DATA_LIST_FILTERING_SPINNER_TEST_ID, className: styles$
|
|
879
|
-
React__default["default"].createElement("div", { className: styles$
|
|
1084
|
+
layoutComponents,
|
|
1085
|
+
loadingState === "filtering" && (React__default["default"].createElement("div", { "data-testid": DATA_LIST_FILTERING_SPINNER_TEST_ID, className: styles$f.filtering },
|
|
1086
|
+
React__default["default"].createElement("div", { className: styles$f.filteringSpinner },
|
|
880
1087
|
React__default["default"].createElement(Spinner.Spinner, { size: "small" })))),
|
|
881
1088
|
shouldRenderLoadMoreTrigger && (React__default["default"].createElement(DataListLoadMore, { onBackToTop: handleBackToTop }))));
|
|
882
1089
|
function handleBackToTop() {
|
|
@@ -892,11 +1099,54 @@ function InternalDataList() {
|
|
|
892
1099
|
});
|
|
893
1100
|
}
|
|
894
1101
|
}
|
|
1102
|
+
/**
|
|
1103
|
+
* Sets the layout that the DataList item and header will use.
|
|
1104
|
+
*/
|
|
895
1105
|
DataList.Layout = DataListLayout;
|
|
1106
|
+
/**
|
|
1107
|
+
* By using this component, we can render the actions anywhere in the layout
|
|
1108
|
+
* instead of being added automatically on hover.
|
|
1109
|
+
*/
|
|
1110
|
+
DataList.LayoutActions = DataListLayoutActions;
|
|
1111
|
+
/**
|
|
1112
|
+
* When the DataList is either empty and/or filtered, this component will be
|
|
1113
|
+
* rendered.
|
|
1114
|
+
*/
|
|
896
1115
|
DataList.EmptyState = DataListEmptyState;
|
|
1116
|
+
/**
|
|
1117
|
+
* Adds the filter components of your choosing to the DataList.
|
|
1118
|
+
*/
|
|
897
1119
|
DataList.Filters = DataListFilters;
|
|
1120
|
+
/**
|
|
1121
|
+
* Enables the search functionality of the DataList.
|
|
1122
|
+
*
|
|
1123
|
+
* Since the debounce is implemented within the component, it can only be an
|
|
1124
|
+
* uncontrolled component. Thus the lack of a `value` prop.
|
|
1125
|
+
*/
|
|
898
1126
|
DataList.Search = DataListSearch;
|
|
1127
|
+
/**
|
|
1128
|
+
* Defines the group actions you could do on a single DataList item.
|
|
1129
|
+
*/
|
|
899
1130
|
DataList.ItemActions = DataListItemActions;
|
|
900
|
-
|
|
1131
|
+
/**
|
|
1132
|
+
* Defines the group actions you could do on multiple DataList items.
|
|
1133
|
+
*/
|
|
1134
|
+
DataList.BulkActions = DataListBulkActions;
|
|
1135
|
+
/**
|
|
1136
|
+
* Defines the action in a DataList. This should be used inside the
|
|
1137
|
+
* DataListItemActions component.
|
|
1138
|
+
*/
|
|
1139
|
+
DataList.ItemAction = DataListAction;
|
|
1140
|
+
/**
|
|
1141
|
+
* Defines the batch action in a DataList. This should be used inside the
|
|
1142
|
+
* DataListBulkActions component.
|
|
1143
|
+
*/
|
|
1144
|
+
DataList.BatchAction = function DataListBatchAction(props) {
|
|
1145
|
+
return React__default["default"].createElement(DataListAction, Object.assign({}, props));
|
|
1146
|
+
};
|
|
1147
|
+
/**
|
|
1148
|
+
* Defines a status bar that is rendered between the filters and the header.
|
|
1149
|
+
*/
|
|
1150
|
+
DataList.StatusBar = DataListStatusBar;
|
|
901
1151
|
|
|
902
1152
|
exports.DataList = DataList;
|