@jobber/components 4.42.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 +8 -3
- package/dist/DataList/DataList.types.d.ts +71 -7
- 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/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/DataListLayoutContext/DataListLayoutContext.d.ts +4 -0
- package/dist/DataList/components/DataListLayoutActions/DataListLayoutContext/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 +3 -3
- package/dist/DataList/context/DataListLayoutContext/DataListLayoutContext.d.ts +4 -4
- package/dist/DataList/hooks/useActiveLayout.d.ts +4 -0
- package/dist/DataList/hooks/useGetItemActions.d.ts +6 -0
- package/dist/DataList/index.js +583 -417
- 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,62 +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
|
-
var ReactDOM = 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');
|
|
29
|
-
var
|
|
30
|
-
var
|
|
24
|
+
var ReactDOM = require('react-dom');
|
|
25
|
+
var Checkbox = require('../Checkbox-ad7ec2e7.js');
|
|
26
|
+
var reactRouterDom = require('react-router-dom');
|
|
31
27
|
var AnimatedSwitcher = require('../AnimatedSwitcher-d1e1ddcf.js');
|
|
28
|
+
var Combobox = require('../Combobox-0044641d.js');
|
|
29
|
+
var Chip = require('../Chip-55e6da05.js');
|
|
32
30
|
var Icon = require('../Icon-405a216c.js');
|
|
33
|
-
var useInView = require('@jobber/hooks/useInView');
|
|
34
|
-
var Popover = require('../Popover-bbfc6aa1.js');
|
|
35
|
-
var Content = require('../Content-2ca1ffe1.js');
|
|
36
|
-
var Chip = require('../Chip-4916a642.js');
|
|
37
|
-
require('@jobber/hooks/useAssert');
|
|
38
|
-
require('../Avatar-1aa30ee1.js');
|
|
39
|
-
require('color');
|
|
40
31
|
var debounce = require('lodash/debounce');
|
|
41
|
-
var InputText = require('../InputText-
|
|
32
|
+
var InputText = require('../InputText-dcf6c428.js');
|
|
42
33
|
var Spinner = require('../Spinner-9d8fc7ff.js');
|
|
43
|
-
require('../
|
|
44
|
-
require('
|
|
45
|
-
require('
|
|
46
|
-
require('
|
|
47
|
-
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');
|
|
48
44
|
|
|
49
45
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
50
46
|
|
|
51
47
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
48
|
+
var noop__default = /*#__PURE__*/_interopDefaultLegacy(noop);
|
|
52
49
|
var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
|
|
53
50
|
var isEmpty__default = /*#__PURE__*/_interopDefaultLegacy(isEmpty);
|
|
54
|
-
var noop__default = /*#__PURE__*/_interopDefaultLegacy(noop);
|
|
55
51
|
var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce);
|
|
56
52
|
|
|
57
|
-
var css_248z$
|
|
58
|
-
var styles$
|
|
59
|
-
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);
|
|
60
56
|
|
|
61
|
-
var css_248z$
|
|
62
|
-
var styles$
|
|
63
|
-
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);
|
|
64
60
|
|
|
65
61
|
const DATALIST_TOTALCOUNT_TEST_ID = "ATL-DataList-TotalCount";
|
|
66
62
|
function DataListTotalCount({ totalCount, loading, }) {
|
|
@@ -76,12 +72,57 @@ function DataListTotalCount({ totalCount, loading, }) {
|
|
|
76
72
|
totalCount.toLocaleString(),
|
|
77
73
|
" results)"));
|
|
78
74
|
}
|
|
79
|
-
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));
|
|
80
76
|
}
|
|
81
77
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
+
}
|
|
85
126
|
|
|
86
127
|
const EMPTY_RESULTS_MESSAGE = "List is looking empty";
|
|
87
128
|
const EMPTY_FILTER_RESULTS_MESSAGE = "No results for selected filters";
|
|
@@ -104,14 +145,88 @@ const DATA_LOAD_MORE_TEST_ID = "ATL-DataList-LoadMore-trigger";
|
|
|
104
145
|
const TRANSITION_DURATION_IN_SECONDS = design.tokens["timing-base"] / 1000;
|
|
105
146
|
const TRANSITION_DELAY_IN_SECONDS = design.tokens["timing-quick"] / 1000;
|
|
106
147
|
|
|
107
|
-
|
|
108
|
-
|
|
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-"};
|
|
109
206
|
styleInject_es.styleInject(css_248z$b);
|
|
110
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-"};
|
|
223
|
+
styleInject_es.styleInject(css_248z$a);
|
|
224
|
+
|
|
111
225
|
function DataListTags({ items }) {
|
|
112
226
|
const ref = React.useRef(null);
|
|
113
227
|
const [visibleIndex, setVisibleIndex] = React.useState([]);
|
|
114
228
|
const visibleItems = visibleIndex.filter(Boolean).length;
|
|
229
|
+
const shouldShowTagCount = Boolean(visibleItems);
|
|
115
230
|
React.useEffect(() => {
|
|
116
231
|
var _a;
|
|
117
232
|
if (!window.IntersectionObserver)
|
|
@@ -126,10 +241,12 @@ function DataListTags({ items }) {
|
|
|
126
241
|
elements === null || elements === void 0 ? void 0 : elements.forEach(element => observer.unobserve(element));
|
|
127
242
|
};
|
|
128
243
|
}, [items]);
|
|
129
|
-
return (React__default["default"].createElement("div", { className: styles$
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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 },
|
|
133
250
|
React__default["default"].createElement(Text.Text, null,
|
|
134
251
|
"+",
|
|
135
252
|
visibleItems)))));
|
|
@@ -158,54 +275,43 @@ function buildIntersectionThreshold(items) {
|
|
|
158
275
|
return thresholds;
|
|
159
276
|
}
|
|
160
277
|
|
|
161
|
-
var css_248z$
|
|
162
|
-
var styles$
|
|
163
|
-
styleInject_es.styleInject(css_248z$a);
|
|
164
|
-
|
|
165
|
-
var css_248z$9 = ".AN5egORYy-0- {\n padding-right: calc(16px / 2);\n padding-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";
|
|
166
|
-
var styles$9 = {"sortIcon":"AN5egORYy-0-","active":"F1uTDCK0Sb0-","inactive":"_6KYeQXWXLQ8-"};
|
|
278
|
+
var css_248z$9 = ".fLmJZJJqMcE- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n padding: 0;\n border: none;\n background-color: transparent;\n}\n\n.UG8cHUT3Hds- {\n cursor: pointer;\n}\n";
|
|
279
|
+
var styles$9 = {"headerLabel":"fLmJZJJqMcE-","sortable":"UG8cHUT3Hds-"};
|
|
167
280
|
styleInject_es.styleInject(css_248z$9);
|
|
168
281
|
|
|
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";
|
|
283
|
+
var styles$8 = {"sortIcon":"AN5egORYy-0-","active":"F1uTDCK0Sb0-","inactive":"_6KYeQXWXLQ8-"};
|
|
284
|
+
styleInject_es.styleInject(css_248z$8);
|
|
285
|
+
|
|
169
286
|
const SORTING_ICON_TEST_ID = "ATL-DataList-Sorting-Icon";
|
|
170
287
|
function DataListSortingArrows({ order }) {
|
|
171
|
-
return (React__default["default"].createElement("div", { className: styles$
|
|
288
|
+
return (React__default["default"].createElement("div", { className: styles$8.sortIcon, "data-testid": SORTING_ICON_TEST_ID },
|
|
172
289
|
React__default["default"].createElement("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
|
|
173
290
|
React__default["default"].createElement("path", { className: getActiveClassName("asc"), d: "M16.2929 10.6661C15.9024 11.0566 15.2692 11.0566 14.8787 10.6661L12.2891 8.14263L9.70711 10.6661C9.31658 11.0566 8.68342 11.0566 8.29289 10.6661C7.90237 10.2756 7.90237 9.64239 8.29289 9.25186L11.5858 5.95897C11.9763 5.56845 12.6095 5.56845 13 5.95897L16.2929 9.25186C16.6834 9.64239 16.6834 10.2756 16.2929 10.6661Z" }),
|
|
174
291
|
React__default["default"].createElement("path", { className: getActiveClassName("desc"), d: "M8.29292 13.3339C8.68345 12.9434 9.31661 12.9434 9.70714 13.3339L12.2968 15.8573L14.8787 13.3339C15.2692 12.9434 15.9024 12.9434 16.2929 13.3339C16.6834 13.7244 16.6834 14.3576 16.2929 14.7481L13 18.041C12.6095 18.4315 11.9763 18.4315 11.5858 18.041L8.29292 14.7481C7.9024 14.3576 7.9024 13.7244 8.29292 13.3339Z" }))));
|
|
175
292
|
function getActiveClassName(targetOrder) {
|
|
176
|
-
return order === targetOrder ? styles$
|
|
293
|
+
return order === targetOrder ? styles$8.active : styles$8.inactive;
|
|
177
294
|
}
|
|
178
295
|
}
|
|
179
296
|
|
|
180
|
-
const defaultValues$1 = {
|
|
181
|
-
title: "",
|
|
182
|
-
data: [],
|
|
183
|
-
headers: {},
|
|
184
|
-
children: [],
|
|
185
|
-
selected: [],
|
|
186
|
-
};
|
|
187
|
-
const DataListContext = React.createContext(defaultValues$1);
|
|
188
|
-
function useDataListContext() {
|
|
189
|
-
return React.useContext(DataListContext);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
297
|
function DataListHeaderTile({ headers, headerKey, }) {
|
|
193
298
|
const { sorting } = useDataListContext();
|
|
194
299
|
const isSortable = sorting === null || sorting === void 0 ? void 0 : sorting.sortable.includes(headerKey);
|
|
195
300
|
const sortingState = sorting === null || sorting === void 0 ? void 0 : sorting.state;
|
|
196
301
|
const Tag = isSortable ? "button" : "div";
|
|
197
|
-
return (React__default["default"].createElement(Tag, { className: classnames__default["default"](styles$
|
|
198
|
-
[styles$
|
|
302
|
+
return (React__default["default"].createElement(Tag, { className: classnames__default["default"](styles$9.headerLabel, {
|
|
303
|
+
[styles$9.sortable]: isSortable,
|
|
199
304
|
}), onClick: handleOnClick },
|
|
200
305
|
React__default["default"].createElement(Text.Text, { maxLines: "single" }, headers[headerKey]),
|
|
201
306
|
(sortingState === null || sortingState === void 0 ? void 0 : sortingState.key) === headerKey && (React__default["default"].createElement(DataListSortingArrows, { order: sortingState.order }))));
|
|
202
307
|
function toggleSorting(sortingKey) {
|
|
203
|
-
|
|
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") {
|
|
204
310
|
sorting === null || sorting === void 0 ? void 0 : sorting.onSort(undefined);
|
|
205
311
|
return;
|
|
206
312
|
}
|
|
207
313
|
sorting === null || sorting === void 0 ? void 0 : sorting.onSort({
|
|
208
|
-
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",
|
|
209
315
|
key: sortingKey,
|
|
210
316
|
});
|
|
211
317
|
}
|
|
@@ -234,10 +340,10 @@ function getCompoundComponents(children, type) {
|
|
|
234
340
|
return elements;
|
|
235
341
|
}
|
|
236
342
|
/**
|
|
237
|
-
* Generate the default
|
|
343
|
+
* Generate the default element the DataList would use on the data provided.
|
|
238
344
|
*/
|
|
239
|
-
function
|
|
240
|
-
return
|
|
345
|
+
function generateListItemElement(item) {
|
|
346
|
+
return Object.keys(item).reduce((acc, key) => {
|
|
241
347
|
const currentItem = item[key];
|
|
242
348
|
if (!currentItem) {
|
|
243
349
|
return acc;
|
|
@@ -259,7 +365,7 @@ function generateListItemElements(data) {
|
|
|
259
365
|
acc[key] = React__default["default"].createElement(Text.Text, { variation: "subdued" }, currentItem);
|
|
260
366
|
}
|
|
261
367
|
return acc;
|
|
262
|
-
}, {})
|
|
368
|
+
}, {});
|
|
263
369
|
}
|
|
264
370
|
/**
|
|
265
371
|
* Generate the header elements with the default styling
|
|
@@ -268,86 +374,32 @@ function generateHeaderElements(headers) {
|
|
|
268
374
|
const headerElements = Object.keys(headers).reduce((acc, key) => (Object.assign(Object.assign({}, acc), { [key]: React__default["default"].createElement(DataListHeaderTile, { headers: headers, headerKey: key }) })), {});
|
|
269
375
|
return isEmpty__default["default"](headerElements) ? undefined : headerElements;
|
|
270
376
|
}
|
|
271
|
-
function
|
|
377
|
+
function sortBreakpoints(sizeProp) {
|
|
272
378
|
return sizeProp.sort((a, b) => BREAKPOINTS.indexOf(a) - BREAKPOINTS.indexOf(b));
|
|
273
379
|
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
return isVisible;
|
|
285
|
-
});
|
|
286
|
-
return (layoutToRender && renderLayout(layoutToRender)) || React__default["default"].createElement(React__default["default"].Fragment, null);
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Determine is layout is visible by checking a media query matches for the
|
|
290
|
-
* visible sizes of the layout and there isn't a larger layout that should be rendered
|
|
291
|
-
*/
|
|
292
|
-
function isLayoutVisible({ layoutSize, mediaMatches, sizePropsOfLayouts, }) {
|
|
293
|
-
const largerBreakpointsToHide = sizePropsOfLayouts === null || sizePropsOfLayouts === void 0 ? void 0 : sizePropsOfLayouts.filter(size => BREAKPOINTS.indexOf(size) > BREAKPOINTS.indexOf(layoutSize));
|
|
294
|
-
const sortedLargerBreakpoints = sortSizeProp(largerBreakpointsToHide || []);
|
|
295
|
-
const visibleBreakpoints = BREAKPOINTS.slice(BREAKPOINTS.indexOf(layoutSize), sortedLargerBreakpoints[0]
|
|
296
|
-
? BREAKPOINTS.indexOf(sortedLargerBreakpoints[0])
|
|
297
|
-
: undefined);
|
|
298
|
-
const isVisibleBreakpoint = visibleBreakpoints.some(breakpoint => {
|
|
299
|
-
return Boolean(mediaMatches === null || mediaMatches === void 0 ? void 0 : mediaMatches[breakpoint]);
|
|
300
|
-
});
|
|
301
|
-
const largerLayoutIsNotVisible = largerBreakpointsToHide === null || largerBreakpointsToHide === void 0 ? void 0 : largerBreakpointsToHide.reduce((acc, breakpoint) => {
|
|
302
|
-
return acc && !(mediaMatches === null || mediaMatches === void 0 ? void 0 : mediaMatches[breakpoint]);
|
|
303
|
-
}, true);
|
|
304
|
-
return isVisibleBreakpoint && largerLayoutIsNotVisible;
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
function DataListItemInternal({ children, item, }) {
|
|
308
|
-
const { selected, onSelect } = useDataListContext();
|
|
309
|
-
if (selected !== undefined && onSelect) {
|
|
310
|
-
return (React__default["default"].createElement("div", { className: classnames__default["default"](styles$e.selectable, {
|
|
311
|
-
[styles$e.selected]: selected === null || selected === void 0 ? void 0 : selected.length,
|
|
312
|
-
}) },
|
|
313
|
-
React__default["default"].createElement(Checkbox.Checkbox, { checked: selected === null || selected === void 0 ? void 0 : selected.includes(item.id), onChange: handleChange }),
|
|
314
|
-
children));
|
|
315
|
-
}
|
|
316
|
-
return children;
|
|
317
|
-
function handleChange() {
|
|
318
|
-
if (selected === null || selected === void 0 ? void 0 : selected.includes(item.id)) {
|
|
319
|
-
onSelect === null || onSelect === void 0 ? void 0 : onSelect(selected === null || selected === void 0 ? void 0 : selected.filter(id => id !== item.id));
|
|
320
|
-
}
|
|
321
|
-
else if (selected) {
|
|
322
|
-
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];
|
|
323
390
|
}
|
|
324
|
-
|
|
391
|
+
return result;
|
|
392
|
+
}, []);
|
|
325
393
|
}
|
|
326
394
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
var css_248z$7 = ".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(250, 246, 219);\n background-color: var(--color-surface--hover);\n}\n\n.AUJNqz93ZDA- {\n font-weight: 500;\n}\n";
|
|
332
|
-
var styles$7 = {"action":"iyg43v-S9yU-","label":"AUJNqz93ZDA-"};
|
|
333
|
-
styleInject_es.styleInject(css_248z$7);
|
|
334
|
-
|
|
335
|
-
function DataListAction(
|
|
336
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
337
|
-
_) {
|
|
338
|
-
return null;
|
|
339
|
-
}
|
|
340
|
-
function InternalDataListAction({ label, icon, destructive, onClick, item, }) {
|
|
341
|
-
const color = destructive ? "critical" : "blue";
|
|
342
|
-
return (React__default["default"].createElement("button", { className: styles$7.action, onClick: () => onClick === null || onClick === void 0 ? void 0 : onClick(item) },
|
|
343
|
-
icon && React__default["default"].createElement(Icon.Icon, { name: icon, color: color }),
|
|
344
|
-
React__default["default"].createElement(Typography.Typography, { textColor: color },
|
|
345
|
-
React__default["default"].createElement("span", { className: styles$7.label }, label))));
|
|
395
|
+
const DataListLayoutActionsContext = React.createContext({ activeItem: undefined });
|
|
396
|
+
function useDataListLayoutActionsContext() {
|
|
397
|
+
return React.useContext(DataListLayoutActionsContext);
|
|
346
398
|
}
|
|
347
399
|
|
|
348
|
-
var css_248z$
|
|
349
|
-
var styles$
|
|
350
|
-
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);
|
|
351
403
|
|
|
352
404
|
const variants$1 = {
|
|
353
405
|
hidden: { opacity: 0, y: -10 },
|
|
@@ -358,10 +410,14 @@ function DataListActionsMenu({ visible = false, position, onRequestClose, childr
|
|
|
358
410
|
useRefocusOnActivator.useRefocusOnActivator(visible);
|
|
359
411
|
const focusTrapRef = useFocusTrap.useFocusTrap(visible);
|
|
360
412
|
useOnKeyDown.useOnKeyDown(onRequestClose, "Escape");
|
|
361
|
-
return ReactDOM.createPortal(React__default["default"].createElement(framerMotion.AnimatePresence, null, visible && (React__default["default"].createElement(
|
|
362
|
-
React__default["default"].createElement(
|
|
363
|
-
React__default["default"].createElement(
|
|
364
|
-
|
|
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
|
+
}
|
|
365
421
|
function getPositionCssVars() {
|
|
366
422
|
const { posX, posY } = getPosition();
|
|
367
423
|
return {
|
|
@@ -372,10 +428,10 @@ function DataListActionsMenu({ visible = false, position, onRequestClose, childr
|
|
|
372
428
|
function getPosition() {
|
|
373
429
|
const rect = ref === null || ref === void 0 ? void 0 : ref.getBoundingClientRect();
|
|
374
430
|
const { width = 0, height = 0 } = rect || {};
|
|
375
|
-
const { x
|
|
431
|
+
const { x, y } = position;
|
|
376
432
|
const xIsOffScreen = x + width > window.innerWidth;
|
|
377
433
|
const yIsOffScreen = y + height > window.innerHeight;
|
|
378
|
-
const xOffSet = x + width - window.innerWidth +
|
|
434
|
+
const xOffSet = x + width - window.innerWidth + design.tokens["space-base"];
|
|
379
435
|
const yOffSet = y + height - window.innerHeight;
|
|
380
436
|
const newPosX = Math.floor(xIsOffScreen ? x - xOffSet : x);
|
|
381
437
|
const newPosY = Math.floor(yIsOffScreen ? y - yOffSet : y);
|
|
@@ -383,14 +439,19 @@ function DataListActionsMenu({ visible = false, position, onRequestClose, childr
|
|
|
383
439
|
}
|
|
384
440
|
}
|
|
385
441
|
|
|
386
|
-
function DataListItemActionsOverflow({
|
|
442
|
+
function DataListItemActionsOverflow({ actions, }) {
|
|
387
443
|
const [menuPosition, setMenuPosition] = React.useState({ x: 0, y: 0 });
|
|
388
444
|
const [showMenu, setShowMenu] = React.useState(false);
|
|
445
|
+
if (actions.length === 0)
|
|
446
|
+
return null;
|
|
389
447
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
390
448
|
React__default["default"].createElement(Tooltip.Tooltip, { message: "More actions" },
|
|
391
449
|
React__default["default"].createElement(Button.Button, { icon: "more", ariaLabel: "More actions", type: "secondary", variation: "subtle", onClick: handleMoreClick })),
|
|
392
|
-
|
|
450
|
+
React__default["default"].createElement(DataListActionsMenu, { visible: showMenu, position: menuPosition, onRequestClose: handleClose }, actions)));
|
|
393
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();
|
|
394
455
|
setShowMenu(true);
|
|
395
456
|
const rect = event.currentTarget.getBoundingClientRect();
|
|
396
457
|
const posX = rect.x;
|
|
@@ -402,6 +463,31 @@ function DataListItemActionsOverflow({ item, actions, }) {
|
|
|
402
463
|
}
|
|
403
464
|
}
|
|
404
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
|
+
|
|
405
491
|
// This component is meant to capture the props of the DataList.ItemActions
|
|
406
492
|
function DataListItemActions(
|
|
407
493
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -412,101 +498,119 @@ const variants = {
|
|
|
412
498
|
hidden: { opacity: 0, y: 10 },
|
|
413
499
|
visible: { opacity: 1, y: 0 },
|
|
414
500
|
};
|
|
415
|
-
function InternalDataListItemActions({
|
|
416
|
-
const { itemActionComponent } = useDataListContext();
|
|
417
|
-
if (!itemActionComponent)
|
|
418
|
-
return null;
|
|
419
|
-
const { children } = itemActionComponent.props;
|
|
420
|
-
const childrenArray = React.Children.toArray(children).filter(React.isValidElement);
|
|
421
|
-
const exposedActions = getExposedActions(childrenArray);
|
|
422
|
-
childrenArray.splice(0, exposedActions.length);
|
|
501
|
+
function InternalDataListItemActions({ actions, }) {
|
|
423
502
|
return (React__default["default"].createElement(framerMotion.motion.div, { variants: variants, initial: "hidden", animate: "visible", exit: "hidden", transition: {
|
|
424
503
|
duration: TRANSITION_DURATION_IN_SECONDS,
|
|
425
504
|
delay: TRANSITION_DELAY_IN_SECONDS,
|
|
426
|
-
}, className: styles$
|
|
427
|
-
|
|
428
|
-
if (!props.icon)
|
|
429
|
-
return null;
|
|
430
|
-
return (React__default["default"].createElement(Tooltip.Tooltip, { key: props.label, message: props.label },
|
|
431
|
-
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" })));
|
|
432
|
-
}),
|
|
433
|
-
React__default["default"].createElement(DataListItemActionsOverflow, { actions: childrenArray, item: item })));
|
|
505
|
+
}, className: styles$c.menu, onContextMenu: handleContextMenu },
|
|
506
|
+
React__default["default"].createElement(DataListActions, null, actions)));
|
|
434
507
|
}
|
|
435
508
|
function handleContextMenu(event) {
|
|
436
509
|
event.stopPropagation();
|
|
437
510
|
}
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
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));
|
|
445
525
|
}
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
if (isSecondChild && hasIcon && hasFirstChild) {
|
|
449
|
-
return [...result, child];
|
|
526
|
+
else if (selected) {
|
|
527
|
+
onSelect === null || onSelect === void 0 ? void 0 : onSelect([...selected, item.id]);
|
|
450
528
|
}
|
|
451
|
-
|
|
452
|
-
}, []);
|
|
529
|
+
}
|
|
453
530
|
}
|
|
454
531
|
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
const
|
|
461
|
-
|
|
462
|
-
|
|
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
|
+
}
|
|
463
559
|
}
|
|
464
560
|
|
|
465
|
-
function
|
|
561
|
+
function DataListItemClickable({ children }) {
|
|
466
562
|
const { itemActionComponent } = useDataListContext();
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
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);
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
function useGetItemActions(item) {
|
|
571
|
+
const { itemActionComponent } = useDataListContext();
|
|
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);
|
|
471
592
|
const [contextPosition, setContextPosition] = React.useState();
|
|
472
|
-
const
|
|
593
|
+
const generatedItem = React.useMemo(() => generateListItemElement(item), [item]);
|
|
594
|
+
const { actions, hasActions } = useGetItemActions(item);
|
|
473
595
|
const isContextMenuVisible = Boolean(contextPosition);
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
// children are clicked
|
|
487
|
-
onClick: handleSetActiveItem(item), onMouseEnter: handleSetActiveItem(item), onMouseLeave: handleUnsetActiveItem, onContextMenu: handleContextMenu, className: classnames__default["default"](styles$e.listItem, {
|
|
488
|
-
[styles$e.active]: isActive && isContextMenuVisible,
|
|
489
|
-
}), key: item.id },
|
|
490
|
-
React__default["default"].createElement(DataListItemInternal, { item: data[i] }, layout.props.children(child)),
|
|
491
|
-
React__default["default"].createElement(framerMotion.AnimatePresence, null,
|
|
492
|
-
activeID === item.id && !hasInLayoutActions && (React__default["default"].createElement(InternalDataListItemActions, { item: item })),
|
|
493
|
-
React__default["default"].createElement(DataListActionsMenu, { key: item.id, visible: shouldShowContextMenu, position: contextPosition || { x: 0, y: 0 }, onRequestClose: () => setContextPosition(undefined) }, contextMenuActions &&
|
|
494
|
-
React.Children.map(contextMenuActions, action => (React__default["default"].createElement(InternalDataListAction, Object.assign({ key: item.id }, action.props, { item: item }))))))));
|
|
495
|
-
}))) })));
|
|
496
|
-
function handleSetActiveItem(item) {
|
|
497
|
-
return () => {
|
|
498
|
-
setActiveID(item.id);
|
|
499
|
-
setActiveItem(item);
|
|
500
|
-
};
|
|
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);
|
|
501
608
|
}
|
|
502
|
-
function
|
|
503
|
-
|
|
504
|
-
return;
|
|
505
|
-
setActiveID(undefined);
|
|
506
|
-
setActiveItem(undefined);
|
|
609
|
+
function handleHideMenu() {
|
|
610
|
+
setShowMenu(false);
|
|
507
611
|
}
|
|
508
612
|
function handleContextMenu(event) {
|
|
509
|
-
if (!
|
|
613
|
+
if (!hasActions || isContextMenuVisible)
|
|
510
614
|
return;
|
|
511
615
|
event.preventDefault();
|
|
512
616
|
setContextPosition({
|
|
@@ -516,21 +620,80 @@ function DataListItems({ layouts, mediaMatches, data, }) {
|
|
|
516
620
|
}
|
|
517
621
|
}
|
|
518
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
|
+
|
|
519
676
|
function DataListHeaderCheckbox({ children }) {
|
|
520
677
|
const { data, totalCount, selected = [], onSelectAll, onSelect, } = useDataListContext();
|
|
521
678
|
if (!onSelectAll && !onSelect)
|
|
522
679
|
return children;
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
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),
|
|
526
687
|
}) },
|
|
527
|
-
React__default["default"].createElement(Checkbox.Checkbox, { checked: isAllSelected(), indeterminate: selected.length > 0 && !isAllSelected(), onChange: onSelectAll }
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
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,
|
|
531
693
|
selected.length,
|
|
532
|
-
" selected")
|
|
533
|
-
|
|
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)) })));
|
|
534
697
|
function isAllSelected() {
|
|
535
698
|
// If there's a totalCount, we can use that to accurately determine if the
|
|
536
699
|
// user have "selected all".
|
|
@@ -545,112 +708,62 @@ function DataListHeaderCheckbox({ children }) {
|
|
|
545
708
|
}
|
|
546
709
|
}
|
|
547
710
|
|
|
548
|
-
function
|
|
549
|
-
const
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
media.addEventListener("change", listener);
|
|
557
|
-
return () => media.removeEventListener("change", listener);
|
|
558
|
-
}, [CSSMediaQuery]);
|
|
559
|
-
return matches;
|
|
560
|
-
}
|
|
561
|
-
|
|
562
|
-
function useResponsiveSizing() {
|
|
563
|
-
const xs = useMediaQuery(`(width > ${BREAKPOINT_SIZES.xs}px)`);
|
|
564
|
-
const sm = useMediaQuery(`(width >= ${BREAKPOINT_SIZES.sm}px)`);
|
|
565
|
-
const md = useMediaQuery(`(width >= ${BREAKPOINT_SIZES.md}px)`);
|
|
566
|
-
const lg = useMediaQuery(`(width >= ${BREAKPOINT_SIZES.lg}px)`);
|
|
567
|
-
const xl = useMediaQuery(`(width >= ${BREAKPOINT_SIZES.xl}px)`);
|
|
568
|
-
return { xs, sm, md, lg, xl };
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
function useShowHeader() {
|
|
572
|
-
const { headerVisibility } = useDataListContext();
|
|
573
|
-
if (headerVisibility === undefined)
|
|
574
|
-
return true;
|
|
575
|
-
const sizes = useResponsiveSizing();
|
|
576
|
-
const sizeKeys = Object.keys(sizes);
|
|
577
|
-
const showHeader = sizeKeys.reduce((previous, breakpoint) => {
|
|
578
|
-
const isHeaderVisible = headerVisibility[breakpoint] || false;
|
|
579
|
-
const isBreakpointTriggered = sizes[breakpoint];
|
|
580
|
-
return previous || (isBreakpointTriggered && isHeaderVisible);
|
|
581
|
-
}, false);
|
|
582
|
-
return showHeader;
|
|
583
|
-
}
|
|
584
|
-
|
|
585
|
-
function DataListHeader({ layouts, mediaMatches, headerData, }) {
|
|
586
|
-
const showHeader = useShowHeader();
|
|
587
|
-
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)
|
|
588
719
|
return null;
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
}, {}));
|
|
601
|
-
return (React__default["default"].createElement(DataListLayoutInternal, { layouts: layouts, mediaMatches: mediaMatches, renderLayout: layout => {
|
|
602
|
-
if (layout.props.size === "xs") {
|
|
603
|
-
return React__default["default"].createElement(LoadingStateXSBreakpoint, null);
|
|
604
|
-
}
|
|
605
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null, loadingElements.map((child, i) => (React__default["default"].createElement("div", { className: styles$c.loadingItem, key: i, "data-testid": DATALIST_LOADINGSTATE_ROW_TEST_ID }, layout.props.children(child))))));
|
|
606
|
-
} }));
|
|
607
|
-
}
|
|
608
|
-
function LoadingStateXSBreakpoint() {
|
|
609
|
-
const loadingData = new Array(LOADING_STATE_LIMIT_ITEMS).fill(0);
|
|
610
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null, loadingData.map((_, i) => {
|
|
611
|
-
return (React__default["default"].createElement("div", { className: styles$c.mobileLoadingState, key: i },
|
|
612
|
-
React__default["default"].createElement(Glimmer.Glimmer.Text, null)));
|
|
613
|
-
})));
|
|
614
|
-
}
|
|
615
|
-
|
|
616
|
-
function DataListLayout(
|
|
617
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
618
|
-
_) {
|
|
619
|
-
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
|
+
}
|
|
620
731
|
}
|
|
621
732
|
|
|
622
|
-
var css_248z$5 = ".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";
|
|
623
|
-
var styles$5 = {"filters":"E-mG3prPSN8-","filterActions":"_0LGNoZxtqSE-","overflowTrigger":"LA3-gtgehrE-","overflowLeft":"fSPvawYWzZ8-","overflowRight":"ChfEJMPPVTk-"};
|
|
624
|
-
styleInject_es.styleInject(css_248z$5);
|
|
625
|
-
|
|
626
|
-
const CONTAINER_TEST_ID = "ATL-DataListFilters-Container";
|
|
627
|
-
|
|
628
733
|
function DataListSort() {
|
|
629
734
|
const { sorting, headers } = useDataListContext();
|
|
630
|
-
const divRef = React.useRef(null);
|
|
631
|
-
const [showPopover, setShowPopover] = React.useState(false);
|
|
632
735
|
if (!sorting)
|
|
633
736
|
return null;
|
|
634
737
|
const { sortable, state, onSort } = sorting;
|
|
635
738
|
const sortByOptions = getSortByOptions();
|
|
636
|
-
|
|
637
|
-
return (React__default["default"].createElement(
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
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
|
+
})));
|
|
648
754
|
function getSortByOptions() {
|
|
649
755
|
const options = sortable.reduce((acc, sort) => {
|
|
650
756
|
const label = headers[sort];
|
|
651
757
|
if (!label)
|
|
652
758
|
return acc;
|
|
653
|
-
|
|
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
|
+
}
|
|
654
767
|
return acc;
|
|
655
768
|
}, []);
|
|
656
769
|
// Inject a none option as the first option
|
|
@@ -658,24 +771,31 @@ function DataListSort() {
|
|
|
658
771
|
return options;
|
|
659
772
|
}
|
|
660
773
|
function getButtonLabel() {
|
|
661
|
-
const
|
|
662
|
-
|
|
663
|
-
return "Sort by";
|
|
664
|
-
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) || "";
|
|
665
776
|
}
|
|
666
777
|
function handleKeyChange(value) {
|
|
667
778
|
if (value && value !== "none") {
|
|
668
|
-
|
|
779
|
+
const [key, order] = value.split(",");
|
|
780
|
+
onSort({ key, order: order });
|
|
669
781
|
return;
|
|
670
782
|
}
|
|
671
783
|
onSort(undefined);
|
|
672
784
|
}
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
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;
|
|
679
799
|
}
|
|
680
800
|
|
|
681
801
|
// This component is meant to capture the props of the DataList.Filters
|
|
@@ -691,25 +811,17 @@ function InternalDataListFilters() {
|
|
|
691
811
|
const showHeader = useShowHeader();
|
|
692
812
|
const showSortButton = !showHeader;
|
|
693
813
|
const component = getCompoundComponent(parentChildren, DataListFilters);
|
|
694
|
-
const [leftRef, isLeftVisible] = useInView.useInView();
|
|
695
|
-
const [rightRef, isRightVisible] = useInView.useInView();
|
|
696
814
|
if (!showSortButton && !component)
|
|
697
815
|
return null;
|
|
698
816
|
const children = component === null || component === void 0 ? void 0 : component.props.children;
|
|
699
|
-
return (React__default["default"].createElement(
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
}) },
|
|
703
|
-
React__default["default"].createElement("div", { className: styles$5.filterActions },
|
|
704
|
-
React__default["default"].createElement("span", { ref: leftRef, className: styles$5.overflowTrigger }),
|
|
705
|
-
children && children,
|
|
706
|
-
showSortButton && React__default["default"].createElement(DataListSort, null),
|
|
707
|
-
React__default["default"].createElement("span", { ref: rightRef, className: styles$5.overflowTrigger }))));
|
|
817
|
+
return (React__default["default"].createElement(DataListOverflowFade, null,
|
|
818
|
+
children && children,
|
|
819
|
+
showSortButton && React__default["default"].createElement(DataListSort, null)));
|
|
708
820
|
}
|
|
709
821
|
|
|
710
|
-
var css_248z$
|
|
711
|
-
var styles$
|
|
712
|
-
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);
|
|
713
825
|
|
|
714
826
|
function DataListStickyHeader({ children }) {
|
|
715
827
|
const [isStuck, setIsStuck] = React.useState(false);
|
|
@@ -724,12 +836,12 @@ function DataListStickyHeader({ children }) {
|
|
|
724
836
|
ref.current && observer.unobserve(ref.current);
|
|
725
837
|
};
|
|
726
838
|
}, [handleObserver, ref.current]);
|
|
727
|
-
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));
|
|
728
840
|
}
|
|
729
841
|
|
|
730
|
-
var css_248z$
|
|
731
|
-
var styles$
|
|
732
|
-
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);
|
|
733
845
|
|
|
734
846
|
const DATA_LIST_SEARCH_TEST_ID = "ATL-DataList-Search-input-wrapper";
|
|
735
847
|
// This component is meant to capture the props of the DataList.Search
|
|
@@ -738,7 +850,7 @@ function DataListSearch(_) {
|
|
|
738
850
|
return null;
|
|
739
851
|
}
|
|
740
852
|
/**
|
|
741
|
-
* Renders the DataList.Search component
|
|
853
|
+
* Renders the DataList.Search component.
|
|
742
854
|
*/
|
|
743
855
|
function InternalDataListSearch() {
|
|
744
856
|
const inputRef = React.useRef(null);
|
|
@@ -747,15 +859,19 @@ function InternalDataListSearch() {
|
|
|
747
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]);
|
|
748
860
|
if (!searchComponent)
|
|
749
861
|
return null;
|
|
750
|
-
const { placeholder } = searchComponent.props;
|
|
862
|
+
const { placeholder, initialValue } = searchComponent.props;
|
|
751
863
|
return (React__default["default"].createElement("div", { className: classnames__default["default"]({
|
|
752
|
-
[styles$
|
|
864
|
+
[styles$4.withNoFilters]: !filterComponent && !sorting,
|
|
753
865
|
}) },
|
|
754
|
-
React__default["default"].createElement("div", { "data-testid": DATA_LIST_SEARCH_TEST_ID, className: classnames__default["default"](styles$
|
|
755
|
-
[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,
|
|
756
868
|
}) },
|
|
757
|
-
React__default["default"].createElement(InputText.InputText
|
|
758
|
-
|
|
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 },
|
|
759
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 }) }))));
|
|
760
876
|
function getPlaceholder() {
|
|
761
877
|
if (placeholder)
|
|
@@ -773,9 +889,9 @@ function InternalDataListSearch() {
|
|
|
773
889
|
}
|
|
774
890
|
}
|
|
775
891
|
|
|
776
|
-
var css_248z$
|
|
777
|
-
var styles$
|
|
778
|
-
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);
|
|
779
895
|
|
|
780
896
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
781
897
|
function DataListEmptyState(_) {
|
|
@@ -784,7 +900,7 @@ function DataListEmptyState(_) {
|
|
|
784
900
|
function InternalDataListEmptyState() {
|
|
785
901
|
const { emptyStateComponents: components, filtered } = React.useContext(DataListContext);
|
|
786
902
|
const { message, action } = getMessages();
|
|
787
|
-
return (React__default["default"].createElement("div", { className: styles$
|
|
903
|
+
return (React__default["default"].createElement("div", { className: styles$3.emptyStateWrapper },
|
|
788
904
|
React__default["default"].createElement(Text.Text, { align: "center" }, message),
|
|
789
905
|
renderButton(action)));
|
|
790
906
|
function getMessages() {
|
|
@@ -818,9 +934,9 @@ function getEmptyStates(components) {
|
|
|
818
934
|
return { defaultEmptyState, filteredEmptyState };
|
|
819
935
|
}
|
|
820
936
|
|
|
821
|
-
var css_248z$
|
|
822
|
-
var styles$
|
|
823
|
-
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);
|
|
824
940
|
|
|
825
941
|
function DataListLoadMoreTrigger() {
|
|
826
942
|
const { onLoadMore } = useDataListContext();
|
|
@@ -828,7 +944,7 @@ function DataListLoadMoreTrigger() {
|
|
|
828
944
|
React.useEffect(() => {
|
|
829
945
|
isInView && (onLoadMore === null || onLoadMore === void 0 ? void 0 : onLoadMore());
|
|
830
946
|
}, [isInView]);
|
|
831
|
-
return (React__default["default"].createElement("div", { ref: inViewRef, className: styles$
|
|
947
|
+
return (React__default["default"].createElement("div", { ref: inViewRef, className: styles$2.trigger, "data-testid": DATA_LOAD_MORE_TEST_ID }));
|
|
832
948
|
}
|
|
833
949
|
|
|
834
950
|
const MAX_DATA_COUNT = 50;
|
|
@@ -837,19 +953,44 @@ function DataListLoadMore({ onBackToTop }) {
|
|
|
837
953
|
const showBackToTop = data.length > MAX_DATA_COUNT && loadingState !== "loadingMore";
|
|
838
954
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
839
955
|
React__default["default"].createElement(DataListLoadMoreTrigger, { key: data.length }),
|
|
840
|
-
loadingState === "loadingMore" && (React__default["default"].createElement("div", { "data-testid": DATA_LIST_LOADING_MORE_SPINNER_TEST_ID, className: styles$
|
|
956
|
+
loadingState === "loadingMore" && (React__default["default"].createElement("div", { "data-testid": DATA_LIST_LOADING_MORE_SPINNER_TEST_ID, className: styles$2.loadingMore },
|
|
841
957
|
React__default["default"].createElement(Spinner.Spinner, { size: "small" }))),
|
|
842
|
-
showBackToTop && (React__default["default"].createElement("div", { className: styles$
|
|
958
|
+
showBackToTop && (React__default["default"].createElement("div", { className: styles$2.backToTop },
|
|
843
959
|
React__default["default"].createElement(Button.Button, { label: "Back to top", onClick: onBackToTop, size: "small", variation: "subtle" })))));
|
|
844
960
|
}
|
|
845
961
|
|
|
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
|
+
|
|
846
987
|
var css_248z = "._0m75bgCVBhk- {\n visibility: hidden;\n}\n";
|
|
847
988
|
var styles = {"hidden":"_0m75bgCVBhk-"};
|
|
848
989
|
styleInject_es.styleInject(css_248z);
|
|
849
990
|
|
|
850
991
|
function DataListLayoutActions() {
|
|
851
|
-
const { itemActionComponent } = useDataListContext();
|
|
852
|
-
const { setHasInLayoutActions
|
|
992
|
+
const { itemActionComponent, loadingState } = useDataListContext();
|
|
993
|
+
const { setHasInLayoutActions } = useDataListLayoutContext();
|
|
853
994
|
const { children: actionsChildren } = (itemActionComponent === null || itemActionComponent === void 0 ? void 0 : itemActionComponent.props) || {};
|
|
854
995
|
const actions = React.Children.toArray(actionsChildren);
|
|
855
996
|
const hasActions = actions.length > 0;
|
|
@@ -859,10 +1000,13 @@ function DataListLayoutActions() {
|
|
|
859
1000
|
setHasInLayoutActions(false);
|
|
860
1001
|
};
|
|
861
1002
|
}, []);
|
|
1003
|
+
if (loadingState === "initial") {
|
|
1004
|
+
return React__default["default"].createElement(Glimmer.Glimmer, { shape: "square", size: "large" });
|
|
1005
|
+
}
|
|
862
1006
|
if (!hasActions)
|
|
863
1007
|
return null;
|
|
864
1008
|
return (React__default["default"].createElement(DataListLayoutActionsWrapper, null,
|
|
865
|
-
React__default["default"].createElement(DataListItemActionsOverflow, { actions: actions
|
|
1009
|
+
React__default["default"].createElement(DataListItemActionsOverflow, { actions: actions })));
|
|
866
1010
|
}
|
|
867
1011
|
function DataListLayoutActionsWrapper({ children }) {
|
|
868
1012
|
const { isInLayoutProvider } = useDataListLayoutContext();
|
|
@@ -871,71 +1015,75 @@ function DataListLayoutActionsWrapper({ children }) {
|
|
|
871
1015
|
return React__default["default"].createElement("div", { className: styles.hidden }, children);
|
|
872
1016
|
}
|
|
873
1017
|
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
const handlers = BREAKPOINTS.reduce((previous, breakpoint) => {
|
|
879
|
-
const handler = (e) => setMatches(previousMatches => (Object.assign(Object.assign({}, previousMatches), { [breakpoint]: e.matches })));
|
|
880
|
-
return Object.assign(Object.assign({}, previous), { [breakpoint]: handler });
|
|
881
|
-
}, {});
|
|
882
|
-
// Set up mediaQuery event handlers
|
|
883
|
-
React.useEffect(() => {
|
|
884
|
-
BREAKPOINTS.forEach(breakpoint => {
|
|
885
|
-
mediaQueries[breakpoint].addEventListener("change", handlers[breakpoint]);
|
|
886
|
-
});
|
|
887
|
-
return () => {
|
|
888
|
-
BREAKPOINTS.forEach(breakpoint => {
|
|
889
|
-
mediaQueries[breakpoint].removeEventListener("change", handlers[breakpoint]);
|
|
890
|
-
});
|
|
891
|
-
};
|
|
892
|
-
}, [mediaQueries]);
|
|
893
|
-
return matches;
|
|
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;
|
|
894
1022
|
}
|
|
895
|
-
|
|
896
|
-
|
|
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);
|
|
897
1033
|
}
|
|
898
1034
|
|
|
899
1035
|
function DataList(_a) {
|
|
900
|
-
var
|
|
901
|
-
|
|
1036
|
+
var { selected = [], sorting } = _a, props = tslib_es6.__rest(_a, ["selected", "sorting"]);
|
|
1037
|
+
const [layoutBreakpoints, setLayoutBreakpoints] = React.useState([]);
|
|
1038
|
+
const [layouts, setLayouts] = React.useState({});
|
|
902
1039
|
const searchComponent = getCompoundComponent(props.children, DataListSearch);
|
|
903
1040
|
const filterComponent = getCompoundComponent(props.children, DataListFilters);
|
|
904
1041
|
const layoutComponents = getCompoundComponents(props.children, DataListLayout);
|
|
905
1042
|
const emptyStateComponents = getCompoundComponents(props.children, DataListEmptyState);
|
|
906
1043
|
const itemActionComponent = getCompoundComponent(props.children, DataListItemActions);
|
|
1044
|
+
const bulkActionsComponent = getCompoundComponent(props.children, DataListBulkActions);
|
|
907
1045
|
return (React__default["default"].createElement(DataListContext.Provider, { value: Object.assign(Object.assign({ searchComponent,
|
|
908
1046
|
filterComponent,
|
|
909
1047
|
layoutComponents,
|
|
910
1048
|
emptyStateComponents,
|
|
911
|
-
itemActionComponent
|
|
1049
|
+
itemActionComponent,
|
|
1050
|
+
bulkActionsComponent,
|
|
1051
|
+
layoutBreakpoints,
|
|
1052
|
+
registerLayoutBreakpoints,
|
|
1053
|
+
layouts,
|
|
1054
|
+
registerLayout }, props), { selected,
|
|
912
1055
|
// T !== DataListObject
|
|
913
1056
|
sorting: sorting }) },
|
|
914
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
|
+
}
|
|
915
1064
|
}
|
|
916
1065
|
function InternalDataList() {
|
|
917
|
-
const { data,
|
|
1066
|
+
const { data, title, totalCount, loadingState = "none", layoutComponents, } = useDataListContext();
|
|
918
1067
|
const backToTopRef = React.useRef(null);
|
|
919
|
-
const headerData = generateHeaderElements(headers);
|
|
920
|
-
const mediaMatches = useLayoutMediaQueries();
|
|
921
1068
|
const initialLoading = loadingState === "initial";
|
|
922
1069
|
const showEmptyState = !initialLoading && data.length === 0;
|
|
923
1070
|
const shouldRenderLoadMoreTrigger = !initialLoading && !showEmptyState;
|
|
924
|
-
return (React__default["default"].createElement("div", { className: styles$
|
|
925
|
-
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 },
|
|
926
1073
|
title && React__default["default"].createElement(Heading.Heading, { level: 3 }, title),
|
|
927
1074
|
React__default["default"].createElement(DataListTotalCount, { totalCount: totalCount, loading: initialLoading })),
|
|
928
1075
|
React__default["default"].createElement("div", { ref: backToTopRef }),
|
|
929
1076
|
React__default["default"].createElement(DataListStickyHeader, null,
|
|
930
|
-
React__default["default"].createElement("div", { className: styles$
|
|
1077
|
+
React__default["default"].createElement("div", { className: styles$f.headerFilters },
|
|
931
1078
|
React__default["default"].createElement(InternalDataListFilters, null),
|
|
932
1079
|
React__default["default"].createElement(InternalDataListSearch, null)),
|
|
933
|
-
|
|
934
|
-
|
|
1080
|
+
React__default["default"].createElement(InternalDataListStatusBar, null),
|
|
1081
|
+
React__default["default"].createElement(DataListHeader, null)),
|
|
1082
|
+
initialLoading && React__default["default"].createElement(DataListLoadingState, null),
|
|
935
1083
|
showEmptyState && React__default["default"].createElement(InternalDataListEmptyState, null),
|
|
936
|
-
|
|
937
|
-
loadingState === "filtering" && (React__default["default"].createElement("div", { "data-testid": DATA_LIST_FILTERING_SPINNER_TEST_ID, className: styles$
|
|
938
|
-
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 },
|
|
939
1087
|
React__default["default"].createElement(Spinner.Spinner, { size: "small" })))),
|
|
940
1088
|
shouldRenderLoadMoreTrigger && (React__default["default"].createElement(DataListLoadMore, { onBackToTop: handleBackToTop }))));
|
|
941
1089
|
function handleBackToTop() {
|
|
@@ -971,16 +1119,34 @@ DataList.EmptyState = DataListEmptyState;
|
|
|
971
1119
|
DataList.Filters = DataListFilters;
|
|
972
1120
|
/**
|
|
973
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.
|
|
974
1125
|
*/
|
|
975
1126
|
DataList.Search = DataListSearch;
|
|
976
1127
|
/**
|
|
977
1128
|
* Defines the group actions you could do on a single DataList item.
|
|
978
1129
|
*/
|
|
979
1130
|
DataList.ItemActions = DataListItemActions;
|
|
1131
|
+
/**
|
|
1132
|
+
* Defines the group actions you could do on multiple DataList items.
|
|
1133
|
+
*/
|
|
1134
|
+
DataList.BulkActions = DataListBulkActions;
|
|
980
1135
|
/**
|
|
981
1136
|
* Defines the action in a DataList. This should be used inside the
|
|
982
1137
|
* DataListItemActions component.
|
|
983
1138
|
*/
|
|
984
|
-
DataList.
|
|
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;
|
|
985
1151
|
|
|
986
1152
|
exports.DataList = DataList;
|