@planningcenter/tapestry 4.12.0 → 4.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/componentRegistrars.d.ts +1 -0
- package/dist/componentRegistrars.d.ts.map +1 -1
- package/dist/componentRegistrars.js +6 -2
- package/dist/componentRegistrars.js.map +1 -1
- package/dist/components/DataTable/ActiveFilters.d.ts +23 -1
- package/dist/components/DataTable/ActiveFilters.d.ts.map +1 -1
- package/dist/components/DataTable/ActiveFilters.js +49 -4
- package/dist/components/DataTable/ActiveFilters.js.map +1 -1
- package/dist/components/DataTable/CollectionEditorsLazy.d.ts.map +1 -1
- package/dist/components/DataTable/CollectionEditorsLazy.js +20 -18
- package/dist/components/DataTable/CollectionEditorsLazy.js.map +1 -1
- package/dist/components/DataTable/DataTable.d.ts +66 -50
- package/dist/components/DataTable/DataTable.d.ts.map +1 -1
- package/dist/components/DataTable/DataTable.js +78 -17
- package/dist/components/DataTable/DataTable.js.map +1 -1
- package/dist/components/DataTable/ManageSavedViewsModal.d.ts +18 -7
- package/dist/components/DataTable/ManageSavedViewsModal.d.ts.map +1 -1
- package/dist/components/DataTable/ManageSavedViewsModal.js +120 -104
- package/dist/components/DataTable/ManageSavedViewsModal.js.map +1 -1
- package/dist/components/DataTable/ManageSavedViewsModal.module.css.js +1 -1
- package/dist/components/DataTable/NewSavedViewButton.d.ts.map +1 -1
- package/dist/components/DataTable/NewSavedViewButton.js +1 -1
- package/dist/components/DataTable/NewSavedViewButton.js.map +1 -1
- package/dist/components/DataTable/SavedViewActions.d.ts +19 -0
- package/dist/components/DataTable/SavedViewActions.d.ts.map +1 -0
- package/dist/components/DataTable/SavedViewActions.js +34 -0
- package/dist/components/DataTable/SavedViewActions.js.map +1 -0
- package/dist/components/DataTable/SavedViewMenu.d.ts +18 -0
- package/dist/components/DataTable/SavedViewMenu.d.ts.map +1 -0
- package/dist/components/DataTable/SavedViewMenu.js +25 -0
- package/dist/components/DataTable/SavedViewMenu.js.map +1 -0
- package/dist/components/DataTable/SavedViewsBar.d.ts +25 -13
- package/dist/components/DataTable/SavedViewsBar.d.ts.map +1 -1
- package/dist/components/DataTable/SavedViewsBar.js +81 -93
- package/dist/components/DataTable/SavedViewsBar.js.map +1 -1
- package/dist/components/DataTable/TableActions.d.ts +4 -2
- package/dist/components/DataTable/TableActions.d.ts.map +1 -1
- package/dist/components/DataTable/TableActions.js +11 -14
- package/dist/components/DataTable/TableActions.js.map +1 -1
- package/dist/components/DataTable/index.d.ts +2 -0
- package/dist/components/DataTable/index.d.ts.map +1 -1
- package/dist/components/DataTable/saveErrorMessage.d.ts +3 -0
- package/dist/components/DataTable/saveErrorMessage.d.ts.map +1 -0
- package/dist/components/DataTable/saveErrorMessage.js +9 -0
- package/dist/components/DataTable/saveErrorMessage.js.map +1 -0
- package/dist/components/DataTable/savedViews.d.ts +15 -30
- package/dist/components/DataTable/savedViews.d.ts.map +1 -1
- package/dist/components/DataTable/savedViews.js +51 -98
- package/dist/components/DataTable/savedViews.js.map +1 -1
- package/dist/components/DataTable/useActiveSavedView.d.ts +1 -1
- package/dist/components/DataTable/useActiveSavedView.d.ts.map +1 -1
- package/dist/components/DataTable/useActiveSavedView.js +5 -4
- package/dist/components/DataTable/useActiveSavedView.js.map +1 -1
- package/dist/components/DataTable/useColumnVisibility.d.ts +7 -7
- package/dist/components/DataTable/useColumnVisibility.d.ts.map +1 -1
- package/dist/components/DataTable/useColumnVisibility.js +14 -14
- package/dist/components/DataTable/useColumnVisibility.js.map +1 -1
- package/dist/components/DataTable/useResultsAnnouncement.d.ts +26 -0
- package/dist/components/DataTable/useResultsAnnouncement.d.ts.map +1 -0
- package/dist/components/DataTable/{useFilterAnnouncement.js → useResultsAnnouncement.js} +16 -12
- package/dist/components/DataTable/useResultsAnnouncement.js.map +1 -0
- package/dist/components/DataTable/useSaveStatus.d.ts +32 -0
- package/dist/components/DataTable/useSaveStatus.d.ts.map +1 -0
- package/dist/components/DataTable/useSaveStatus.js +80 -0
- package/dist/components/DataTable/useSaveStatus.js.map +1 -0
- package/dist/components/DataTable/useSavedViewNameModal.d.ts +14 -0
- package/dist/components/DataTable/useSavedViewNameModal.d.ts.map +1 -0
- package/dist/components/DataTable/useSavedViewNameModal.js +43 -0
- package/dist/components/DataTable/useSavedViewNameModal.js.map +1 -0
- package/dist/components/DataTable/useSavedViewsClient.d.ts +58 -0
- package/dist/components/DataTable/useSavedViewsClient.d.ts.map +1 -0
- package/dist/components/DataTable/useSavedViewsClient.js +87 -0
- package/dist/components/DataTable/useSavedViewsClient.js.map +1 -0
- package/dist/components/DataTable/useSavedViewsState.d.ts +35 -0
- package/dist/components/DataTable/useSavedViewsState.d.ts.map +1 -0
- package/dist/components/DataTable/useSavedViewsState.js +192 -0
- package/dist/components/DataTable/useSavedViewsState.js.map +1 -0
- package/dist/components/DataTable/useUpdateSavedViewName.d.ts +2 -3
- package/dist/components/DataTable/useUpdateSavedViewName.d.ts.map +1 -1
- package/dist/components/DataTable/useUpdateSavedViewName.js +1 -2
- package/dist/components/DataTable/useUpdateSavedViewName.js.map +1 -1
- package/dist/components/DataTable/useVisibleSavedViews.d.ts +31 -0
- package/dist/components/DataTable/useVisibleSavedViews.d.ts.map +1 -0
- package/dist/components/DataTable/useVisibleSavedViews.js +178 -0
- package/dist/components/DataTable/useVisibleSavedViews.js.map +1 -0
- package/dist/components/button/BaseButton.d.ts +2 -0
- package/dist/components/button/BaseButton.d.ts.map +1 -1
- package/dist/components/button/BaseButton.js +8 -17
- package/dist/components/button/BaseButton.js.map +1 -1
- package/dist/components/internal/LoadingAnnouncement.d.ts +6 -0
- package/dist/components/internal/LoadingAnnouncement.d.ts.map +1 -1
- package/dist/components/internal/LoadingAnnouncement.js +12 -3
- package/dist/components/internal/LoadingAnnouncement.js.map +1 -1
- package/dist/components/internal/index.d.ts +1 -1
- package/dist/components/internal/index.d.ts.map +1 -1
- package/dist/components/internal/reorderable-list-box/ReorderableListBox.d.ts +6 -0
- package/dist/components/internal/reorderable-list-box/ReorderableListBox.d.ts.map +1 -1
- package/dist/components/internal/reorderable-list-box/ReorderableListBox.js +9 -2
- package/dist/components/internal/reorderable-list-box/ReorderableListBox.js.map +1 -1
- package/dist/components/internal/tooltip/useTooltipTriggerProps.d.ts +13 -0
- package/dist/components/internal/tooltip/useTooltipTriggerProps.d.ts.map +1 -0
- package/dist/components/internal/tooltip/useTooltipTriggerProps.js +24 -0
- package/dist/components/internal/tooltip/useTooltipTriggerProps.js.map +1 -0
- package/dist/components/link/BaseLink.d.ts.map +1 -1
- package/dist/components/link/BaseLink.js +3 -13
- package/dist/components/link/BaseLink.js.map +1 -1
- package/dist/components/segmented-control/IconSegment.d.ts +30 -8
- package/dist/components/segmented-control/IconSegment.d.ts.map +1 -1
- package/dist/components/segmented-control/IconSegment.js +10 -3
- package/dist/components/segmented-control/IconSegment.js.map +1 -1
- package/dist/components/segmented-control/SegmentBase.d.ts.map +1 -1
- package/dist/components/segmented-control/SegmentBase.js +4 -2
- package/dist/components/segmented-control/SegmentBase.js.map +1 -1
- package/dist/components/segmented-control/SegmentedControl.d.ts.map +1 -1
- package/dist/components/segmented-control/SegmentedControl.js +10 -3
- package/dist/components/segmented-control/SegmentedControl.js.map +1 -1
- package/dist/index.css +28 -12
- package/dist/index.css.map +1 -1
- package/dist/packages/tapestry-render/dist/{buildComponent-C5PfOgH9.js → buildComponent-DzY2PDMT.js} +23 -23
- package/dist/packages/tapestry-render/dist/buildComponent-DzY2PDMT.js.map +1 -0
- package/dist/packages/tapestry-render/dist/index.js +2 -2
- package/dist/packages/tapestry-render/dist/index.js.map +1 -1
- package/dist/packages/tapestry-render/dist/legacy.js +2 -2
- package/dist/packages/tapestry-render/dist/legacy.js.map +1 -1
- package/dist/product-tokens/giving.css +1 -0
- package/dist/reactRender.css +773 -658
- package/dist/reactRender.css.map +1 -1
- package/dist/reactRender.js +1 -1
- package/dist/reactRenderLegacy.css +773 -658
- package/dist/reactRenderLegacy.css.map +1 -1
- package/dist/reactRenderLegacy.js +1 -1
- package/dist/tapestryMount.css +773 -658
- package/dist/tapestryMount.css.map +1 -1
- package/dist/tapestryMount.js +1 -1
- package/dist/tapestryMountLegacy.css +773 -658
- package/dist/tapestryMountLegacy.css.map +1 -1
- package/dist/tapestryMountLegacy.js +1 -1
- package/dist/tokens-dark.css +2 -2
- package/dist/tokens-dark.css.map +1 -1
- package/dist/tokens.css +11 -10
- package/dist/tokens.css.map +1 -1
- package/dist/unstable.css +418 -303
- package/dist/unstable.css.map +1 -1
- package/dist/unstable.js +1 -0
- package/dist/unstable.js.map +1 -1
- package/package.json +8 -9
- package/dist/components/DataTable/useFilterAnnouncement.d.ts +0 -24
- package/dist/components/DataTable/useFilterAnnouncement.d.ts.map +0 -1
- package/dist/components/DataTable/useFilterAnnouncement.js.map +0 -1
- package/dist/packages/tapestry-render/dist/buildComponent-C5PfOgH9.js.map +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export declare function registerComboBox(): void;
|
|
2
2
|
export declare function registerDatePicker(): void;
|
|
3
3
|
export declare function registerDropdown(): void;
|
|
4
|
+
export declare function registerIconButton(): void;
|
|
4
5
|
export declare function registerNumberStepper(): void;
|
|
5
6
|
export declare function registerPageHeader(): void;
|
|
6
7
|
export declare function registerSearchInput(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"componentRegistrars.d.ts","sourceRoot":"","sources":["../src/componentRegistrars.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"componentRegistrars.d.ts","sourceRoot":"","sources":["../src/componentRegistrars.ts"],"names":[],"mappings":"AA6BA,wBAAgB,gBAAgB,IAAI,IAAI,CAIvC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAUvC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED,wBAAgB,WAAW,IAAI,IAAI,CAWlC"}
|
|
@@ -2,7 +2,7 @@ import './components/button/ActionsDropdownIconButton.js';
|
|
|
2
2
|
import './components/button/Button.js';
|
|
3
3
|
import { DropdownButton } from './components/button/DropdownButton.js';
|
|
4
4
|
import { DropdownIconButton } from './components/button/DropdownIconButton.js';
|
|
5
|
-
import './components/button/IconButton.js';
|
|
5
|
+
import { IconButton } from './components/button/IconButton.js';
|
|
6
6
|
import './components/button/LoadingButton.js';
|
|
7
7
|
import { PageHeaderActionsDropdownButton } from './components/button/PageHeaderActionsDropdownButton.js';
|
|
8
8
|
import { ComboBox, ComboBoxItem, ComboBoxSection } from './components/combo-box/ComboBox.js';
|
|
@@ -39,6 +39,9 @@ function registerDropdown() {
|
|
|
39
39
|
r("DropdownSeparator", DropdownSeparator);
|
|
40
40
|
r("DropdownTrigger", DropdownTrigger);
|
|
41
41
|
}
|
|
42
|
+
function registerIconButton() {
|
|
43
|
+
r("IconButton", IconButton);
|
|
44
|
+
}
|
|
42
45
|
function registerNumberStepper() {
|
|
43
46
|
r("NumberStepper", NumberStepper);
|
|
44
47
|
}
|
|
@@ -66,6 +69,7 @@ function registerAll() {
|
|
|
66
69
|
registerComboBox();
|
|
67
70
|
registerDatePicker();
|
|
68
71
|
registerDropdown();
|
|
72
|
+
registerIconButton();
|
|
69
73
|
registerNumberStepper();
|
|
70
74
|
registerPageHeader();
|
|
71
75
|
registerSearchInput();
|
|
@@ -74,5 +78,5 @@ function registerAll() {
|
|
|
74
78
|
registerTimeField();
|
|
75
79
|
}
|
|
76
80
|
|
|
77
|
-
export { registerAll, registerComboBox, registerDatePicker, registerDropdown, registerNumberStepper, registerPageHeader, registerSearchInput, registerSelect, registerSidenav, registerTimeField };
|
|
81
|
+
export { registerAll, registerComboBox, registerDatePicker, registerDropdown, registerIconButton, registerNumberStepper, registerPageHeader, registerSearchInput, registerSelect, registerSidenav, registerTimeField };
|
|
78
82
|
//# sourceMappingURL=componentRegistrars.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"componentRegistrars.js","sources":["../src/componentRegistrars.ts"],"sourcesContent":["import {\n DropdownButton,\n DropdownIconButton,\n PageHeaderActionsDropdownButton,\n} from \"@components/button\"\nimport { ComboBox, ComboBoxItem, ComboBoxSection } from \"@components/combo-box\"\nimport { DatePicker } from \"@components/date-picker\"\nimport {\n Dropdown,\n DropdownAction,\n DropdownLink,\n DropdownMenu,\n DropdownSection,\n DropdownSeparator,\n DropdownTrigger,\n} from \"@components/dropdown\"\nimport { NumberStepper } from \"@components/number-stepper\"\nimport { definePageHeaderElements } from \"@components/page-header/defineElements\"\nimport { PageHeader } from \"@components/page-header/PageHeader\"\nimport { SearchInput } from \"@components/search-input\"\nimport { Select } from \"@components/select\"\nimport { defineSidenavElements } from \"@components/sidenav/defineElements\"\nimport { Sidenav } from \"@components/sidenav/Sidenav\"\nimport { SidenavItem } from \"@components/sidenav/SidenavItem\"\nimport { SidenavSection } from \"@components/sidenav/SidenavSection\"\nimport { TimeField } from \"@components/time-field\"\nimport { register } from \"@planningcenter/tapestry-render/registry\"\n\nexport function registerComboBox(): void {\n register(\"ComboBox\", ComboBox)\n register(\"ComboBoxItem\", ComboBoxItem)\n register(\"ComboBoxSection\", ComboBoxSection)\n}\n\nexport function registerDatePicker(): void {\n register(\"DatePicker\", DatePicker)\n}\n\nexport function registerDropdown(): void {\n register(\"Dropdown\", Dropdown)\n register(\"DropdownAction\", DropdownAction)\n register(\"DropdownButton\", DropdownButton)\n register(\"DropdownIconButton\", DropdownIconButton)\n register(\"DropdownLink\", DropdownLink)\n register(\"DropdownMenu\", DropdownMenu)\n register(\"DropdownSection\", DropdownSection)\n register(\"DropdownSeparator\", DropdownSeparator)\n register(\"DropdownTrigger\", DropdownTrigger)\n}\n\nexport function registerNumberStepper(): void {\n register(\"NumberStepper\", NumberStepper)\n}\n\nexport function registerPageHeader(): void {\n definePageHeaderElements()\n register(\"PageHeader\", PageHeader)\n register(\"PageHeaderActionsDropdownButton\", PageHeaderActionsDropdownButton)\n}\n\nexport function registerSearchInput(): void {\n register(\"SearchInput\", SearchInput)\n}\n\nexport function registerSelect(): void {\n register(\"Select\", Select)\n}\n\nexport function registerSidenav(): void {\n defineSidenavElements()\n register(\"Sidenav\", Sidenav)\n register(\"SidenavItem\", SidenavItem)\n register(\"SidenavSection\", SidenavSection)\n}\n\nexport function registerTimeField(): void {\n register(\"TimeField\", TimeField)\n}\n\nexport function registerAll(): void {\n registerComboBox()\n registerDatePicker()\n registerDropdown()\n registerNumberStepper()\n registerPageHeader()\n registerSearchInput()\n registerSelect()\n registerSidenav()\n registerTimeField()\n}\n"],"names":["register"],"mappings":";;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"componentRegistrars.js","sources":["../src/componentRegistrars.ts"],"sourcesContent":["import {\n DropdownButton,\n DropdownIconButton,\n IconButton,\n PageHeaderActionsDropdownButton,\n} from \"@components/button\"\nimport { ComboBox, ComboBoxItem, ComboBoxSection } from \"@components/combo-box\"\nimport { DatePicker } from \"@components/date-picker\"\nimport {\n Dropdown,\n DropdownAction,\n DropdownLink,\n DropdownMenu,\n DropdownSection,\n DropdownSeparator,\n DropdownTrigger,\n} from \"@components/dropdown\"\nimport { NumberStepper } from \"@components/number-stepper\"\nimport { definePageHeaderElements } from \"@components/page-header/defineElements\"\nimport { PageHeader } from \"@components/page-header/PageHeader\"\nimport { SearchInput } from \"@components/search-input\"\nimport { Select } from \"@components/select\"\nimport { defineSidenavElements } from \"@components/sidenav/defineElements\"\nimport { Sidenav } from \"@components/sidenav/Sidenav\"\nimport { SidenavItem } from \"@components/sidenav/SidenavItem\"\nimport { SidenavSection } from \"@components/sidenav/SidenavSection\"\nimport { TimeField } from \"@components/time-field\"\nimport { register } from \"@planningcenter/tapestry-render/registry\"\n\nexport function registerComboBox(): void {\n register(\"ComboBox\", ComboBox)\n register(\"ComboBoxItem\", ComboBoxItem)\n register(\"ComboBoxSection\", ComboBoxSection)\n}\n\nexport function registerDatePicker(): void {\n register(\"DatePicker\", DatePicker)\n}\n\nexport function registerDropdown(): void {\n register(\"Dropdown\", Dropdown)\n register(\"DropdownAction\", DropdownAction)\n register(\"DropdownButton\", DropdownButton)\n register(\"DropdownIconButton\", DropdownIconButton)\n register(\"DropdownLink\", DropdownLink)\n register(\"DropdownMenu\", DropdownMenu)\n register(\"DropdownSection\", DropdownSection)\n register(\"DropdownSeparator\", DropdownSeparator)\n register(\"DropdownTrigger\", DropdownTrigger)\n}\n\nexport function registerIconButton(): void {\n register(\"IconButton\", IconButton)\n}\n\nexport function registerNumberStepper(): void {\n register(\"NumberStepper\", NumberStepper)\n}\n\nexport function registerPageHeader(): void {\n definePageHeaderElements()\n register(\"PageHeader\", PageHeader)\n register(\"PageHeaderActionsDropdownButton\", PageHeaderActionsDropdownButton)\n}\n\nexport function registerSearchInput(): void {\n register(\"SearchInput\", SearchInput)\n}\n\nexport function registerSelect(): void {\n register(\"Select\", Select)\n}\n\nexport function registerSidenav(): void {\n defineSidenavElements()\n register(\"Sidenav\", Sidenav)\n register(\"SidenavItem\", SidenavItem)\n register(\"SidenavSection\", SidenavSection)\n}\n\nexport function registerTimeField(): void {\n register(\"TimeField\", TimeField)\n}\n\nexport function registerAll(): void {\n registerComboBox()\n registerDatePicker()\n registerDropdown()\n registerIconButton()\n registerNumberStepper()\n registerPageHeader()\n registerSearchInput()\n registerSelect()\n registerSidenav()\n registerTimeField()\n}\n"],"names":["register"],"mappings":";;;;;;;;;;;;;;;;;;;;;;SA6BgB,gBAAgB,GAAA;AAC9B,IAAAA,CAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC9B,IAAAA,CAAQ,CAAC,cAAc,EAAE,YAAY,CAAC;AACtC,IAAAA,CAAQ,CAAC,iBAAiB,EAAE,eAAe,CAAC;AAC9C;SAEgB,kBAAkB,GAAA;AAChC,IAAAA,CAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;AACpC;SAEgB,gBAAgB,GAAA;AAC9B,IAAAA,CAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC9B,IAAAA,CAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC;AAC1C,IAAAA,CAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC;AAC1C,IAAAA,CAAQ,CAAC,oBAAoB,EAAE,kBAAkB,CAAC;AAClD,IAAAA,CAAQ,CAAC,cAAc,EAAE,YAAY,CAAC;AACtC,IAAAA,CAAQ,CAAC,cAAc,EAAE,YAAY,CAAC;AACtC,IAAAA,CAAQ,CAAC,iBAAiB,EAAE,eAAe,CAAC;AAC5C,IAAAA,CAAQ,CAAC,mBAAmB,EAAE,iBAAiB,CAAC;AAChD,IAAAA,CAAQ,CAAC,iBAAiB,EAAE,eAAe,CAAC;AAC9C;SAEgB,kBAAkB,GAAA;AAChC,IAAAA,CAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;AACpC;SAEgB,qBAAqB,GAAA;AACnC,IAAAA,CAAQ,CAAC,eAAe,EAAE,aAAa,CAAC;AAC1C;SAEgB,kBAAkB,GAAA;AAChC,IAAA,wBAAwB,EAAE;AAC1B,IAAAA,CAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;AAClC,IAAAA,CAAQ,CAAC,iCAAiC,EAAE,+BAA+B,CAAC;AAC9E;SAEgB,mBAAmB,GAAA;AACjC,IAAAA,CAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;AACtC;SAEgB,cAAc,GAAA;AAC5B,IAAAA,CAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC5B;SAEgB,eAAe,GAAA;AAC7B,IAAA,qBAAqB,EAAE;AACvB,IAAAA,CAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;AAC5B,IAAAA,CAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;AACpC,IAAAA,CAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC;AAC5C;SAEgB,iBAAiB,GAAA;AAC/B,IAAAA,CAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;AAClC;SAEgB,WAAW,GAAA;AACzB,IAAA,gBAAgB,EAAE;AAClB,IAAA,kBAAkB,EAAE;AACpB,IAAA,gBAAgB,EAAE;AAClB,IAAA,kBAAkB,EAAE;AACpB,IAAA,qBAAqB,EAAE;AACvB,IAAA,kBAAkB,EAAE;AACpB,IAAA,mBAAmB,EAAE;AACrB,IAAA,cAAc,EAAE;AAChB,IAAA,eAAe,EAAE;AACjB,IAAA,iBAAiB,EAAE;AACrB;;;;"}
|
|
@@ -1,12 +1,34 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import type { ActiveFilter, FilterChange } from "./FilterTypes";
|
|
3
|
-
|
|
3
|
+
import { type SavedView } from "./savedViews";
|
|
4
|
+
import { type useSaveStatus } from "./useSaveStatus";
|
|
5
|
+
export declare function ActiveFilters({ activeFilters, activeSavedView, currentState, hasFilters, onActiveFiltersChange, onClear, onSavedViewApply, onSavedViewCreate, onSavedViewUpdate, saveStatus, selectSavedViewWhenSaved, }: {
|
|
4
6
|
activeFilters: ActiveFilter[];
|
|
7
|
+
/**
|
|
8
|
+
* The selected view, while it has changes. Shows the actions to update the
|
|
9
|
+
* view, save the changes as a new one, or discard them.
|
|
10
|
+
*/
|
|
11
|
+
activeSavedView?: SavedView;
|
|
12
|
+
/** What Update view and Save as new view save. */
|
|
13
|
+
currentState?: Omit<SavedView, "id" | "name">;
|
|
5
14
|
/** Whether the filter schema has loaded. */
|
|
6
15
|
hasFilters: boolean;
|
|
7
16
|
onActiveFiltersChange: (activeFilters: ActiveFilter[]) => void;
|
|
8
17
|
/** Called by the Clear button. Defaults to `onActiveFiltersChange([])`. */
|
|
9
18
|
onClear?: () => void;
|
|
19
|
+
/** Discard changes applies the view again. */
|
|
20
|
+
onSavedViewApply?: (savedView: SavedView) => void;
|
|
21
|
+
/** Omit to leave out Save as new view. */
|
|
22
|
+
onSavedViewCreate?: (savedView: Omit<SavedView, "id">) => Promise<SavedView> | SavedView;
|
|
23
|
+
/** Omit to disable Update view. */
|
|
24
|
+
onSavedViewUpdate?: (savedView: SavedView) => Promise<SavedView> | SavedView;
|
|
25
|
+
/**
|
|
26
|
+
* Tracks Update view and Save as new view saves, so their status shows in
|
|
27
|
+
* the saved views bar.
|
|
28
|
+
*/
|
|
29
|
+
saveStatus?: ReturnType<typeof useSaveStatus>;
|
|
30
|
+
/** Selects a view made with Save as new view once it's saved. */
|
|
31
|
+
selectSavedViewWhenSaved?: (savedView: Promise<SavedView | undefined> | SavedView) => Promise<SavedView | undefined>;
|
|
10
32
|
}): React.JSX.Element;
|
|
11
33
|
declare function ActiveFilter({ activeFilter, onChange, onOpened, removeActiveFilter, pending, shouldOpen, }: {
|
|
12
34
|
activeFilter: ActiveFilter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActiveFilters.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/ActiveFilters.tsx"],"names":[],"mappings":"AAMA,OAAO,KAMN,MAAM,OAAO,CAAA;AAad,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"ActiveFilters.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/ActiveFilters.tsx"],"names":[],"mappings":"AAMA,OAAO,KAMN,MAAM,OAAO,CAAA;AAad,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAK/D,OAAO,EAAE,KAAK,SAAS,EAAsB,MAAM,cAAc,CAAA;AACjE,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAK9D,wBAAgB,aAAa,CAAC,EAC5B,aAAa,EACb,eAAe,EACf,YAAY,EACZ,UAAU,EACV,qBAAqB,EACrB,OAAyC,EACzC,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,wBAAwB,GACzB,EAAE;IACD,aAAa,EAAE,YAAY,EAAE,CAAA;IAC7B;;;OAGG;IACH,eAAe,CAAC,EAAE,SAAS,CAAA;IAC3B,kDAAkD;IAClD,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC,CAAA;IAC7C,4CAA4C;IAC5C,UAAU,EAAE,OAAO,CAAA;IACnB,qBAAqB,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,KAAK,IAAI,CAAA;IAC9D,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAA;IACjD,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,CAClB,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAC7B,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAAA;IACnC,mCAAmC;IACnC,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAAA;IAC5E;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAA;IAC7C,iEAAiE;IACjE,wBAAwB,CAAC,EAAE,CACzB,SAAS,EAAE,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,SAAS,KAClD,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAAA;CACpC,qBA+NA;AAsBD,iBAAS,YAAY,CAAC,EACpB,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,kBAAkB,EAClB,OAAe,EACf,UAAkB,GACnB,EAAE;IACD,YAAY,EAAE,YAAY,CAAA;IAC1B,QAAQ,EAAE,YAAY,CAAA;IACtB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAC9B,uEAAuE;IACvE,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,qBA4FA"}
|
|
@@ -6,7 +6,7 @@ import '../button/IconButton.js';
|
|
|
6
6
|
import '../button/LoadingButton.js';
|
|
7
7
|
import '../button/PageHeaderActionsDropdownButton.js';
|
|
8
8
|
import { Popover, PopoverTrigger, PopoverContent } from '../popover/Popover.js';
|
|
9
|
-
import React__default, { useState,
|
|
9
|
+
import React__default, { useState, useRef, useLayoutEffect, useMemo, useEffect } from 'react';
|
|
10
10
|
import { FilterChip, FilterChipSegments, FilterChipStaticSegments } from './FilterChip.js';
|
|
11
11
|
import { useRestoreFilterFocus, useRelatedFilterOperator } from './FilterContext.js';
|
|
12
12
|
import { getFilterKey, keepFilterKey, getFilterSequence } from './filterKeys.js';
|
|
@@ -14,12 +14,51 @@ import { useFilterOpenRequest, useRequestedOpen } from './FilterOpenRequest.js';
|
|
|
14
14
|
import { FocusFirstControl } from './FocusFirstControl.js';
|
|
15
15
|
import { OperatorSelect } from './OperatorSelect.js';
|
|
16
16
|
import { usePendingFilters } from './PendingFilterContext.js';
|
|
17
|
+
import { SavedViewActions } from './SavedViewActions.js';
|
|
18
|
+
import { savedViewDuplicate } from './savedViews.js';
|
|
19
|
+
import { NEW_VIEW } from './useSaveStatus.js';
|
|
17
20
|
|
|
18
|
-
function ActiveFilters({ activeFilters, hasFilters, onActiveFiltersChange, onClear = () => onActiveFiltersChange([]), }) {
|
|
21
|
+
function ActiveFilters({ activeFilters, activeSavedView, currentState, hasFilters, onActiveFiltersChange, onClear = () => onActiveFiltersChange([]), onSavedViewApply, onSavedViewCreate, onSavedViewUpdate, saveStatus, selectSavedViewWhenSaved, }) {
|
|
19
22
|
const { pendingFilters, removePendingFilter, updatePendingFilter } = usePendingFilters();
|
|
20
23
|
const restoreFilterFocus = useRestoreFilterFocus();
|
|
21
24
|
const { clearFilterOpenRequest, filterOpenRequest } = useFilterOpenRequest();
|
|
22
25
|
const [promotions, setPromotions] = useState([]);
|
|
26
|
+
const clearButtonRef = useRef(null);
|
|
27
|
+
// Includes a menu or modal the actions opened, since React events reach
|
|
28
|
+
// here through their portals.
|
|
29
|
+
const hasActionsFocus = useRef(false);
|
|
30
|
+
// The selected view with its changes, which Update view saves over it and
|
|
31
|
+
// Save as new view saves as a copy.
|
|
32
|
+
const modifiedView = activeSavedView &&
|
|
33
|
+
currentState && { ...activeSavedView, ...currentState };
|
|
34
|
+
const savedViewActions = activeSavedView &&
|
|
35
|
+
modifiedView &&
|
|
36
|
+
onSavedViewApply &&
|
|
37
|
+
saveStatus && {
|
|
38
|
+
onDiscard: () => onSavedViewApply(activeSavedView),
|
|
39
|
+
onSaveAsNew: onSavedViewCreate &&
|
|
40
|
+
selectSavedViewWhenSaved &&
|
|
41
|
+
((name) => saveStatus.track(NEW_VIEW, selectSavedViewWhenSaved(onSavedViewCreate(savedViewDuplicate(modifiedView, name))), name)),
|
|
42
|
+
onUpdate: onSavedViewUpdate &&
|
|
43
|
+
(() => saveStatus.track(modifiedView.id, onSavedViewUpdate(modifiedView), modifiedView.name)),
|
|
44
|
+
savedViewName: activeSavedView.name,
|
|
45
|
+
};
|
|
46
|
+
const hasSavedViewActions = Boolean(savedViewActions);
|
|
47
|
+
// Saving or discarding removes the actions, so focus moves to Clear
|
|
48
|
+
// instead of being lost.
|
|
49
|
+
useLayoutEffect(() => {
|
|
50
|
+
if (hasSavedViewActions || !hasActionsFocus.current)
|
|
51
|
+
return;
|
|
52
|
+
hasActionsFocus.current = false;
|
|
53
|
+
clearButtonRef.current?.focus();
|
|
54
|
+
}, [hasSavedViewActions]);
|
|
55
|
+
// Discarding changes to a view without filters empties the shelf, which
|
|
56
|
+
// removes Clear too, so focus moves to Add filter. It waits for the open
|
|
57
|
+
// menu to unmount, since the menu keeps focus inside it until then.
|
|
58
|
+
useLayoutEffect(() => () => {
|
|
59
|
+
if (hasActionsFocus.current)
|
|
60
|
+
queueMicrotask(restoreFilterFocus);
|
|
61
|
+
}, [restoreFilterFocus]);
|
|
23
62
|
// Keep each pending chip, and its open popover, mounted until the host
|
|
24
63
|
// applies its promotion.
|
|
25
64
|
const confirmed = useMemo(() => promotions.flatMap((promotion) => {
|
|
@@ -123,8 +162,14 @@ function ActiveFilters({ activeFilters, hasFilters, onActiveFiltersChange, onCle
|
|
|
123
162
|
}
|
|
124
163
|
sendWithout(index);
|
|
125
164
|
} })))),
|
|
126
|
-
React__default.createElement("div", { className: "tds-data-table-filters-active-actions"
|
|
127
|
-
|
|
165
|
+
React__default.createElement("div", { className: "tds-data-table-filters-active-actions", onBlur: (event) => {
|
|
166
|
+
if (!event.currentTarget.contains(event.relatedTarget))
|
|
167
|
+
hasActionsFocus.current = false;
|
|
168
|
+
}, onFocus: () => {
|
|
169
|
+
hasActionsFocus.current = true;
|
|
170
|
+
} },
|
|
171
|
+
savedViewActions && React__default.createElement(SavedViewActions, { ...savedViewActions }),
|
|
172
|
+
React__default.createElement(Button, { ref: clearButtonRef, "aria-label": "Clear filters", disabled: !hasFilters, kind: "secondary", label: "Clear", size: "sm", onClick: () => {
|
|
128
173
|
setPromotions([]);
|
|
129
174
|
onClear();
|
|
130
175
|
restoreFilterFocus();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActiveFilters.js","sources":["../../../src/components/DataTable/ActiveFilters.tsx"],"sourcesContent":["import { Button } from \"@components/button\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@components/popover/Popover\"\nimport React, {\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\"\n\nimport {\n FilterChip,\n FilterChipSegments,\n FilterChipStaticSegments,\n} from \"./FilterChip\"\nimport {\n useRelatedFilterOperator,\n useRestoreFilterFocus,\n} from \"./FilterContext\"\nimport { getFilterKey, getFilterSequence, keepFilterKey } from \"./filterKeys\"\nimport { useFilterOpenRequest, useRequestedOpen } from \"./FilterOpenRequest\"\nimport type { ActiveFilter, FilterChange } from \"./FilterTypes\"\nimport { FocusFirstControl } from \"./FocusFirstControl\"\nimport { OperatorSelect } from \"./OperatorSelect\"\nimport { usePendingFilters } from \"./PendingFilterContext\"\n\n/** A promoted filter the host may not have applied yet. */\ntype Promotion = { filter: ActiveFilter; index: number; key?: string }\n\nexport function ActiveFilters({\n activeFilters,\n hasFilters,\n onActiveFiltersChange,\n onClear = () => onActiveFiltersChange([]),\n}: {\n activeFilters: ActiveFilter[]\n /** Whether the filter schema has loaded. */\n hasFilters: boolean\n onActiveFiltersChange: (activeFilters: ActiveFilter[]) => void\n /** Called by the Clear button. Defaults to `onActiveFiltersChange([])`. */\n onClear?: () => void\n}) {\n const { pendingFilters, removePendingFilter, updatePendingFilter } =\n usePendingFilters()\n const restoreFilterFocus = useRestoreFilterFocus()\n const { clearFilterOpenRequest, filterOpenRequest } = useFilterOpenRequest()\n const [promotions, setPromotions] = useState<Promotion[]>([])\n\n // Keep each pending chip, and its open popover, mounted until the host\n // applies its promotion.\n const confirmed = useMemo(\n () =>\n promotions.flatMap((promotion) => {\n const promotedFilter = activeFilters[promotion.index]\n const pendingCopy =\n promotedFilter &&\n pendingFilters.find(\n (filter) => getFilterKey(filter) === promotion.key\n )\n if (!pendingCopy) return []\n keepFilterKey(pendingCopy, promotedFilter)\n return [{ pendingCopy, promotion }]\n }),\n [activeFilters, pendingFilters, promotions]\n )\n const pendingCopies = confirmed.map(({ pendingCopy }) => pendingCopy)\n\n useLayoutEffect(() => {\n if (confirmed.length === 0) return\n confirmed.forEach(({ pendingCopy }) => removePendingFilter(pendingCopy))\n const done = confirmed.map(({ promotion }) => promotion)\n setPromotions((prev) => prev.filter((p) => !done.includes(p)))\n }, [confirmed, removePendingFilter])\n\n // Hosts apply updates in order, so build each one on top of promotions they\n // haven't applied yet. A list without an entry supersedes one that had it.\n const inFlight = promotions.filter((p) => p.index >= activeFilters.length)\n const optimisticFilters = [...activeFilters, ...inFlight.map((p) => p.filter)]\n\n function sendWithout(index: number) {\n setPromotions((prev) =>\n prev\n .filter((p) => p.index !== index)\n .map((p) => (p.index > index ? { ...p, index: p.index - 1 } : p))\n )\n onActiveFiltersChange(optimisticFilters.filter((_, i) => i !== index))\n }\n\n function retractPromotion(filter: ActiveFilter) {\n const promotion = inFlight.find((p) => p.key === getFilterKey(filter))\n if (promotion) sendWithout(promotion.index)\n }\n\n function promote(filter: ActiveFilter, promoted: ActiveFilter) {\n const key = getFilterKey(filter)\n const existing = inFlight.find((p) => p.key === key)\n const index = existing?.index ?? optimisticFilters.length\n const next = [...optimisticFilters]\n next[index] = promoted\n setPromotions((prev) =>\n existing\n ? prev.map((p) => (p.key === key ? { ...p, filter: promoted } : p))\n : [...prev, { filter: promoted, index, key }]\n )\n onActiveFiltersChange(next)\n }\n\n // Hosts may return rebuilt, keyless filters (e.g. a JSON round trip). An\n // unchanged length means an edit, so carry keys over by position.\n const previousActiveFilters = useRef(activeFilters)\n if (activeFilters.length === previousActiveFilters.current.length) {\n activeFilters.forEach((filter, index) => {\n if (!getFilterKey(filter)) {\n keepFilterKey(previousActiveFilters.current[index], filter)\n }\n })\n }\n useLayoutEffect(() => {\n previousActiveFilters.current = activeFilters\n })\n\n // One list: React matches keys only within a list, so separate lists would\n // remount a promoted chip despite its stable key.\n const entries = inCreationOrder([\n ...activeFilters.map((filter, index) => ({\n filter,\n index,\n pending: false as const,\n })),\n ...pendingFilters\n .filter((filter) => !pendingCopies.includes(filter))\n .map((filter, index) => ({\n filter,\n index,\n pending: true as const,\n })),\n ])\n\n // Several chips can answer one request, but only one may act on it. A\n // request without a scope takes the first chip carrying the filter name.\n const openRequestSlot = filterOpenRequest\n ? entries.findIndex(\n ({ filter }) =>\n filter.name === filterOpenRequest.name &&\n (filterOpenRequest.scope === undefined ||\n filter.scope === filterOpenRequest.scope)\n )\n : -1\n\n return (\n <div className=\"tds-data-table-filters-active\">\n <div className=\"tds-data-table-filters-active-list\">\n {entries.map(({ filter, index, pending }, slot) => (\n <ActiveFilter\n key={\n getFilterKey(filter) ??\n `${pending ? \"pending\" : \"active\"}-${index}`\n }\n activeFilter={filter}\n onOpened={clearFilterOpenRequest}\n pending={pending}\n shouldOpen={slot === openRequestSlot}\n onChange={(updates, { complete = true } = {}) => {\n if (pending) {\n updatePendingFilter(filter, updates)\n if (complete) promote(filter, { ...filter, ...updates })\n else retractPromotion(filter)\n return\n }\n const next = [...optimisticFilters]\n next[index] = keepFilterKey(filter, { ...filter, ...updates })\n onActiveFiltersChange(next)\n }}\n removeActiveFilter={() => {\n if (pending) {\n removePendingFilter(filter)\n retractPromotion(filter)\n return\n }\n sendWithout(index)\n }}\n />\n ))}\n </div>\n <div className=\"tds-data-table-filters-active-actions\">\n {/* TODO: SavedViewActions, once \"modified\" is defined. */}\n <Button\n aria-label=\"Clear filters\"\n disabled={!hasFilters}\n kind=\"secondary\"\n label=\"Clear\"\n size=\"sm\"\n onClick={() => {\n setPromotions([])\n onClear()\n restoreFilterFocus()\n }}\n />\n </div>\n </div>\n )\n}\n\n// A promoted filter is appended to `activeFilters`, ahead of every pending\n// chip. Sorting keyed chips by creation order keeps it in place, so its open\n// popover stays anchored under it.\nfunction inCreationOrder<T extends { filter: ActiveFilter }>(entries: T[]) {\n const keyedSlots = entries.flatMap((entry, slot) =>\n getFilterSequence(entry.filter) === undefined ? [] : [slot]\n )\n const keyedEntries = keyedSlots\n .map((slot) => entries[slot])\n .sort(\n (a, b) =>\n (getFilterSequence(a.filter) ?? 0) - (getFilterSequence(b.filter) ?? 0)\n )\n const sorted = [...entries]\n keyedSlots.forEach((slot, i) => {\n sorted[slot] = keyedEntries[i]\n })\n return sorted\n}\n\nfunction ActiveFilter({\n activeFilter,\n onChange,\n onOpened,\n removeActiveFilter,\n pending = false,\n shouldOpen = false,\n}: {\n activeFilter: ActiveFilter\n onChange: FilterChange\n /** Called once this chip has acted on `shouldOpen`. */\n onOpened: () => void\n pending?: boolean\n removeActiveFilter: () => void\n /** Whether the add-filter menu asked this chip to open its popover. */\n shouldOpen?: boolean\n}) {\n const { relatedFilter, operator } = useRelatedFilterOperator(activeFilter)\n const activeFilterInstance =\n relatedFilter &&\n operator &&\n relatedFilter.createActiveFilterInstance(activeFilter, operator)\n const [isOpen, setIsOpen] = useRequestedOpen({\n initiallyOpen: pending,\n onOpened,\n shouldOpen,\n })\n\n const autoPromoted = useRef(false)\n useEffect(() => {\n if (\n !pending ||\n !activeFilterInstance?.isCompleteWithoutInput ||\n autoPromoted.current\n )\n return\n autoPromoted.current = true\n onChange({}, { complete: true })\n })\n\n if (!relatedFilter || !operator || !activeFilterInstance)\n return (\n <FilterChip\n label=\"Unrecognized filter\"\n onRemove={removeActiveFilter}\n status=\"invalid\"\n >\n <FilterChipSegments segments={[\"Unrecognized filter\"]} />\n </FilterChip>\n )\n\n const editor = activeFilterInstance.renderEditor(onChange)\n const segments = activeFilterInstance.toSegments()\n\n const isEditable = relatedFilter.operators.length > 1 || editor != null\n\n return (\n <FilterChip\n label={`${relatedFilter.label} filter${pending ? \" (pending)\" : \"\"}`}\n onRemove={removeActiveFilter}\n status={pending ? \"inactive\" : undefined}\n >\n {!isEditable ? (\n <FilterChipStaticSegments segments={segments} />\n ) : (\n <Popover open={isOpen} onOpenChange={setIsOpen}>\n <PopoverTrigger>\n <FilterChipSegments segments={segments} />\n </PopoverTrigger>\n <PopoverContent\n className=\"tds-popover--data-table-filters-popover\"\n modal={false}\n >\n <h2 className=\"tds-data-table-filters-popover-label\">\n {relatedFilter.label}\n {relatedFilter.operators.length === 1 && (\n <span className=\"tds-data-table-filters-popover-label-operator\">\n {\" \"}\n {operator.label}\n </span>\n )}\n </h2>\n {relatedFilter.description && (\n <p className=\"tds-data-table-filters-popover-description\">\n {relatedFilter.description}\n </p>\n )}\n <OperatorSelect\n operator={operator}\n relatedFilter={relatedFilter}\n updateActiveFilter={(updates) =>\n onChange(updates, {\n complete: relatedFilter.createActiveFilterInstance(\n { ...activeFilter, ...updates },\n relatedFilter.operators.find(\n ({ name }) => name === updates.operator\n ) ?? operator\n ).isCompleteWithoutInput,\n })\n }\n />\n {editor}\n <FocusFirstControl />\n </PopoverContent>\n </Popover>\n )}\n </FilterChip>\n )\n}\n"],"names":["React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ActiveFilters.js","sources":["../../../src/components/DataTable/ActiveFilters.tsx"],"sourcesContent":["import { Button } from \"@components/button\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@components/popover/Popover\"\nimport React, {\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\"\n\nimport {\n FilterChip,\n FilterChipSegments,\n FilterChipStaticSegments,\n} from \"./FilterChip\"\nimport {\n useRelatedFilterOperator,\n useRestoreFilterFocus,\n} from \"./FilterContext\"\nimport { getFilterKey, getFilterSequence, keepFilterKey } from \"./filterKeys\"\nimport { useFilterOpenRequest, useRequestedOpen } from \"./FilterOpenRequest\"\nimport type { ActiveFilter, FilterChange } from \"./FilterTypes\"\nimport { FocusFirstControl } from \"./FocusFirstControl\"\nimport { OperatorSelect } from \"./OperatorSelect\"\nimport { usePendingFilters } from \"./PendingFilterContext\"\nimport { SavedViewActions } from \"./SavedViewActions\"\nimport { type SavedView, savedViewDuplicate } from \"./savedViews\"\nimport { NEW_VIEW, type useSaveStatus } from \"./useSaveStatus\"\n\n/** A promoted filter the host may not have applied yet. */\ntype Promotion = { filter: ActiveFilter; index: number; key?: string }\n\nexport function ActiveFilters({\n activeFilters,\n activeSavedView,\n currentState,\n hasFilters,\n onActiveFiltersChange,\n onClear = () => onActiveFiltersChange([]),\n onSavedViewApply,\n onSavedViewCreate,\n onSavedViewUpdate,\n saveStatus,\n selectSavedViewWhenSaved,\n}: {\n activeFilters: ActiveFilter[]\n /**\n * The selected view, while it has changes. Shows the actions to update the\n * view, save the changes as a new one, or discard them.\n */\n activeSavedView?: SavedView\n /** What Update view and Save as new view save. */\n currentState?: Omit<SavedView, \"id\" | \"name\">\n /** Whether the filter schema has loaded. */\n hasFilters: boolean\n onActiveFiltersChange: (activeFilters: ActiveFilter[]) => void\n /** Called by the Clear button. Defaults to `onActiveFiltersChange([])`. */\n onClear?: () => void\n /** Discard changes applies the view again. */\n onSavedViewApply?: (savedView: SavedView) => void\n /** Omit to leave out Save as new view. */\n onSavedViewCreate?: (\n savedView: Omit<SavedView, \"id\">\n ) => Promise<SavedView> | SavedView\n /** Omit to disable Update view. */\n onSavedViewUpdate?: (savedView: SavedView) => Promise<SavedView> | SavedView\n /**\n * Tracks Update view and Save as new view saves, so their status shows in\n * the saved views bar.\n */\n saveStatus?: ReturnType<typeof useSaveStatus>\n /** Selects a view made with Save as new view once it's saved. */\n selectSavedViewWhenSaved?: (\n savedView: Promise<SavedView | undefined> | SavedView\n ) => Promise<SavedView | undefined>\n}) {\n const { pendingFilters, removePendingFilter, updatePendingFilter } =\n usePendingFilters()\n const restoreFilterFocus = useRestoreFilterFocus()\n const { clearFilterOpenRequest, filterOpenRequest } = useFilterOpenRequest()\n const [promotions, setPromotions] = useState<Promotion[]>([])\n const clearButtonRef = useRef<HTMLButtonElement>(null)\n // Includes a menu or modal the actions opened, since React events reach\n // here through their portals.\n const hasActionsFocus = useRef(false)\n // The selected view with its changes, which Update view saves over it and\n // Save as new view saves as a copy.\n const modifiedView = activeSavedView &&\n currentState && { ...activeSavedView, ...currentState }\n const savedViewActions = activeSavedView &&\n modifiedView &&\n onSavedViewApply &&\n saveStatus && {\n onDiscard: () => onSavedViewApply(activeSavedView),\n onSaveAsNew:\n onSavedViewCreate &&\n selectSavedViewWhenSaved &&\n ((name: string) =>\n saveStatus.track(\n NEW_VIEW,\n selectSavedViewWhenSaved(\n onSavedViewCreate(savedViewDuplicate(modifiedView, name))\n ),\n name\n )),\n onUpdate:\n onSavedViewUpdate &&\n (() =>\n saveStatus.track(\n modifiedView.id,\n onSavedViewUpdate(modifiedView),\n modifiedView.name\n )),\n savedViewName: activeSavedView.name,\n }\n const hasSavedViewActions = Boolean(savedViewActions)\n\n // Saving or discarding removes the actions, so focus moves to Clear\n // instead of being lost.\n useLayoutEffect(() => {\n if (hasSavedViewActions || !hasActionsFocus.current) return\n hasActionsFocus.current = false\n clearButtonRef.current?.focus()\n }, [hasSavedViewActions])\n\n // Discarding changes to a view without filters empties the shelf, which\n // removes Clear too, so focus moves to Add filter. It waits for the open\n // menu to unmount, since the menu keeps focus inside it until then.\n useLayoutEffect(\n () => () => {\n if (hasActionsFocus.current) queueMicrotask(restoreFilterFocus)\n },\n [restoreFilterFocus]\n )\n\n // Keep each pending chip, and its open popover, mounted until the host\n // applies its promotion.\n const confirmed = useMemo(\n () =>\n promotions.flatMap((promotion) => {\n const promotedFilter = activeFilters[promotion.index]\n const pendingCopy =\n promotedFilter &&\n pendingFilters.find(\n (filter) => getFilterKey(filter) === promotion.key\n )\n if (!pendingCopy) return []\n keepFilterKey(pendingCopy, promotedFilter)\n return [{ pendingCopy, promotion }]\n }),\n [activeFilters, pendingFilters, promotions]\n )\n const pendingCopies = confirmed.map(({ pendingCopy }) => pendingCopy)\n\n useLayoutEffect(() => {\n if (confirmed.length === 0) return\n confirmed.forEach(({ pendingCopy }) => removePendingFilter(pendingCopy))\n const done = confirmed.map(({ promotion }) => promotion)\n setPromotions((prev) => prev.filter((p) => !done.includes(p)))\n }, [confirmed, removePendingFilter])\n\n // Hosts apply updates in order, so build each one on top of promotions they\n // haven't applied yet. A list without an entry supersedes one that had it.\n const inFlight = promotions.filter((p) => p.index >= activeFilters.length)\n const optimisticFilters = [...activeFilters, ...inFlight.map((p) => p.filter)]\n\n function sendWithout(index: number) {\n setPromotions((prev) =>\n prev\n .filter((p) => p.index !== index)\n .map((p) => (p.index > index ? { ...p, index: p.index - 1 } : p))\n )\n onActiveFiltersChange(optimisticFilters.filter((_, i) => i !== index))\n }\n\n function retractPromotion(filter: ActiveFilter) {\n const promotion = inFlight.find((p) => p.key === getFilterKey(filter))\n if (promotion) sendWithout(promotion.index)\n }\n\n function promote(filter: ActiveFilter, promoted: ActiveFilter) {\n const key = getFilterKey(filter)\n const existing = inFlight.find((p) => p.key === key)\n const index = existing?.index ?? optimisticFilters.length\n const next = [...optimisticFilters]\n next[index] = promoted\n setPromotions((prev) =>\n existing\n ? prev.map((p) => (p.key === key ? { ...p, filter: promoted } : p))\n : [...prev, { filter: promoted, index, key }]\n )\n onActiveFiltersChange(next)\n }\n\n // Hosts may return rebuilt, keyless filters (e.g. a JSON round trip). An\n // unchanged length means an edit, so carry keys over by position.\n const previousActiveFilters = useRef(activeFilters)\n if (activeFilters.length === previousActiveFilters.current.length) {\n activeFilters.forEach((filter, index) => {\n if (!getFilterKey(filter)) {\n keepFilterKey(previousActiveFilters.current[index], filter)\n }\n })\n }\n useLayoutEffect(() => {\n previousActiveFilters.current = activeFilters\n })\n\n // One list: React matches keys only within a list, so separate lists would\n // remount a promoted chip despite its stable key.\n const entries = inCreationOrder([\n ...activeFilters.map((filter, index) => ({\n filter,\n index,\n pending: false as const,\n })),\n ...pendingFilters\n .filter((filter) => !pendingCopies.includes(filter))\n .map((filter, index) => ({\n filter,\n index,\n pending: true as const,\n })),\n ])\n\n // Several chips can answer one request, but only one may act on it. A\n // request without a scope takes the first chip carrying the filter name.\n const openRequestSlot = filterOpenRequest\n ? entries.findIndex(\n ({ filter }) =>\n filter.name === filterOpenRequest.name &&\n (filterOpenRequest.scope === undefined ||\n filter.scope === filterOpenRequest.scope)\n )\n : -1\n\n return (\n <div className=\"tds-data-table-filters-active\">\n <div className=\"tds-data-table-filters-active-list\">\n {entries.map(({ filter, index, pending }, slot) => (\n <ActiveFilter\n key={\n getFilterKey(filter) ??\n `${pending ? \"pending\" : \"active\"}-${index}`\n }\n activeFilter={filter}\n onOpened={clearFilterOpenRequest}\n pending={pending}\n shouldOpen={slot === openRequestSlot}\n onChange={(updates, { complete = true } = {}) => {\n if (pending) {\n updatePendingFilter(filter, updates)\n if (complete) promote(filter, { ...filter, ...updates })\n else retractPromotion(filter)\n return\n }\n const next = [...optimisticFilters]\n next[index] = keepFilterKey(filter, { ...filter, ...updates })\n onActiveFiltersChange(next)\n }}\n removeActiveFilter={() => {\n if (pending) {\n removePendingFilter(filter)\n retractPromotion(filter)\n return\n }\n sendWithout(index)\n }}\n />\n ))}\n </div>\n <div\n className=\"tds-data-table-filters-active-actions\"\n onBlur={(event) => {\n if (!event.currentTarget.contains(event.relatedTarget))\n hasActionsFocus.current = false\n }}\n onFocus={() => {\n hasActionsFocus.current = true\n }}\n >\n {savedViewActions && <SavedViewActions {...savedViewActions} />}\n <Button\n ref={clearButtonRef}\n aria-label=\"Clear filters\"\n disabled={!hasFilters}\n kind=\"secondary\"\n label=\"Clear\"\n size=\"sm\"\n onClick={() => {\n setPromotions([])\n onClear()\n restoreFilterFocus()\n }}\n />\n </div>\n </div>\n )\n}\n\n// A promoted filter is appended to `activeFilters`, ahead of every pending\n// chip. Sorting keyed chips by creation order keeps it in place, so its open\n// popover stays anchored under it.\nfunction inCreationOrder<T extends { filter: ActiveFilter }>(entries: T[]) {\n const keyedSlots = entries.flatMap((entry, slot) =>\n getFilterSequence(entry.filter) === undefined ? [] : [slot]\n )\n const keyedEntries = keyedSlots\n .map((slot) => entries[slot])\n .sort(\n (a, b) =>\n (getFilterSequence(a.filter) ?? 0) - (getFilterSequence(b.filter) ?? 0)\n )\n const sorted = [...entries]\n keyedSlots.forEach((slot, i) => {\n sorted[slot] = keyedEntries[i]\n })\n return sorted\n}\n\nfunction ActiveFilter({\n activeFilter,\n onChange,\n onOpened,\n removeActiveFilter,\n pending = false,\n shouldOpen = false,\n}: {\n activeFilter: ActiveFilter\n onChange: FilterChange\n /** Called once this chip has acted on `shouldOpen`. */\n onOpened: () => void\n pending?: boolean\n removeActiveFilter: () => void\n /** Whether the add-filter menu asked this chip to open its popover. */\n shouldOpen?: boolean\n}) {\n const { relatedFilter, operator } = useRelatedFilterOperator(activeFilter)\n const activeFilterInstance =\n relatedFilter &&\n operator &&\n relatedFilter.createActiveFilterInstance(activeFilter, operator)\n const [isOpen, setIsOpen] = useRequestedOpen({\n initiallyOpen: pending,\n onOpened,\n shouldOpen,\n })\n\n const autoPromoted = useRef(false)\n useEffect(() => {\n if (\n !pending ||\n !activeFilterInstance?.isCompleteWithoutInput ||\n autoPromoted.current\n )\n return\n autoPromoted.current = true\n onChange({}, { complete: true })\n })\n\n if (!relatedFilter || !operator || !activeFilterInstance)\n return (\n <FilterChip\n label=\"Unrecognized filter\"\n onRemove={removeActiveFilter}\n status=\"invalid\"\n >\n <FilterChipSegments segments={[\"Unrecognized filter\"]} />\n </FilterChip>\n )\n\n const editor = activeFilterInstance.renderEditor(onChange)\n const segments = activeFilterInstance.toSegments()\n\n const isEditable = relatedFilter.operators.length > 1 || editor != null\n\n return (\n <FilterChip\n label={`${relatedFilter.label} filter${pending ? \" (pending)\" : \"\"}`}\n onRemove={removeActiveFilter}\n status={pending ? \"inactive\" : undefined}\n >\n {!isEditable ? (\n <FilterChipStaticSegments segments={segments} />\n ) : (\n <Popover open={isOpen} onOpenChange={setIsOpen}>\n <PopoverTrigger>\n <FilterChipSegments segments={segments} />\n </PopoverTrigger>\n <PopoverContent\n className=\"tds-popover--data-table-filters-popover\"\n modal={false}\n >\n <h2 className=\"tds-data-table-filters-popover-label\">\n {relatedFilter.label}\n {relatedFilter.operators.length === 1 && (\n <span className=\"tds-data-table-filters-popover-label-operator\">\n {\" \"}\n {operator.label}\n </span>\n )}\n </h2>\n {relatedFilter.description && (\n <p className=\"tds-data-table-filters-popover-description\">\n {relatedFilter.description}\n </p>\n )}\n <OperatorSelect\n operator={operator}\n relatedFilter={relatedFilter}\n updateActiveFilter={(updates) =>\n onChange(updates, {\n complete: relatedFilter.createActiveFilterInstance(\n { ...activeFilter, ...updates },\n relatedFilter.operators.find(\n ({ name }) => name === updates.operator\n ) ?? operator\n ).isCompleteWithoutInput,\n })\n }\n />\n {editor}\n <FocusFirstControl />\n </PopoverContent>\n </Popover>\n )}\n </FilterChip>\n )\n}\n"],"names":["React"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CollectionEditorsLazy.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/CollectionEditorsLazy.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CollectionEditorsLazy.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/CollectionEditorsLazy.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAgD,MAAM,OAAO,CAAA;AAGpE,OAAO,KAAK,EACV,2BAA2B,EAG5B,MAAM,2BAA2B,CAAA;AAuBlC,wBAAgB,0BAA0B,CAAC,EACzC,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,MAAM,EACN,KAAK,EACL,KAAK,GACN,EAAE,2BAA2B,qBA6C7B;AA6FD,wBAAgB,OAAO,sBAQtB;AAED,wBAAgB,SAAS,sBAMxB"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { ComboBoxItem } from '../combo-box/ComboBox.js';
|
|
2
2
|
import LoadingSpinner from '../internal/LoadingSpinner.js';
|
|
3
|
-
import
|
|
4
|
-
import 'react-aria/private/live-announcer/LiveAnnouncer';
|
|
3
|
+
import { LoadingAnnouncement, SuppressLoadingAnnouncementContext } from '../internal/LoadingAnnouncement.js';
|
|
5
4
|
import '../internal/tooltip/Tooltip.js';
|
|
6
5
|
import { useDebouncedValue } from '../../utilities/useDebouncedValue.js';
|
|
6
|
+
import React__default, { useCallback, useState, useEffect } from 'react';
|
|
7
7
|
import styles from './CollectionEditorsLazy.module.css.js';
|
|
8
8
|
import { CollectionEditorCombobox } from './CollectionEditorsShared.js';
|
|
9
9
|
import { CollectionEditorCheckboxes, CollectionEditorRadios, CollectionEditorSelect } from './CollectionEditorsStatic.js';
|
|
@@ -67,25 +67,27 @@ function CollectionEditorComboboxLazy({ error, onCommit, options, query, loading
|
|
|
67
67
|
setLoadingState("idle");
|
|
68
68
|
}
|
|
69
69
|
}, [loading]);
|
|
70
|
-
return (React__default.createElement(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
70
|
+
return (React__default.createElement(SuppressLoadingAnnouncementContext.Provider, { value: loadingState === "loading" },
|
|
71
|
+
React__default.createElement(CollectionEditorCombobox, { ...props, loadingState: error ? "error" : loadingState, inputValue: query, onInputChange: (q) => {
|
|
72
|
+
setLoadingState("filtering");
|
|
73
|
+
setQuery(q);
|
|
74
|
+
}, onChange: (value) => {
|
|
75
|
+
if (value === null)
|
|
76
|
+
return;
|
|
77
|
+
const resolvedValue = Array.isArray(value)
|
|
78
|
+
? value.map(String)
|
|
79
|
+
: String(value);
|
|
80
|
+
onCommit(resolvedValue);
|
|
81
|
+
}, items: options, renderEmptyState: error ? React__default.createElement(LoadError, null) : "No results" }, (o) => {
|
|
82
|
+
const option = o;
|
|
83
|
+
return (React__default.createElement(ComboBoxItem, { key: option.value, id: option.value }, option.label));
|
|
84
|
+
})));
|
|
84
85
|
}
|
|
85
86
|
function Loading() {
|
|
86
|
-
return (React__default.createElement("div", { className: styles["loading"]
|
|
87
|
+
return (React__default.createElement("div", { className: styles["loading"] },
|
|
87
88
|
React__default.createElement("span", null, "Loading..."),
|
|
88
|
-
React__default.createElement(LoadingSpinner, null)
|
|
89
|
+
React__default.createElement(LoadingSpinner, null),
|
|
90
|
+
React__default.createElement(LoadingAnnouncement, { message: "Loading" })));
|
|
89
91
|
}
|
|
90
92
|
function LoadError() {
|
|
91
93
|
return (React__default.createElement("div", { className: styles["load-error"], role: "alert" }, "Error: Failed to load options"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CollectionEditorsLazy.js","sources":["../../../src/components/DataTable/CollectionEditorsLazy.tsx"],"sourcesContent":["import { ComboBoxItem } from \"@components/combo-box\"\nimport { LoadingSpinner } from \"@components/internal\"\nimport { useDebouncedValue } from \"@utilities/useDebouncedValue\"\nimport React, { Key, useCallback, useEffect, useState } from \"react\"\n\nimport styles from \"./CollectionEditorsLazy.module.css\"\nimport type {\n CollectionFilterEditorProps,\n CollectionFilterValue,\n CollectionOptionsLazy,\n} from \"./CollectionEditorsShared\"\nimport { CollectionEditorCombobox } from \"./CollectionEditorsShared\"\nimport {\n CollectionEditorCheckboxes,\n CollectionEditorRadios,\n CollectionEditorSelect,\n CollectionEditorStaticProps,\n} from \"./CollectionEditorsStatic\"\nimport type { CollectionDisplay, CollectionOption } from \"./collectionFilter\"\nimport type { ActiveFilterLabel } from \"./FilterTypes\"\nimport { useFocusFirstControlAfterLoad } from \"./FocusFirstControl\"\nimport { useLazyOptions } from \"./useLazyOptions\"\nimport { isEmptyValue } from \"./utils\"\n\ntype CollectionEditorLazyProps = CollectionEditorStaticProps & {\n error: unknown\n loading: boolean\n query: string | undefined\n setQuery: (query: string | undefined) => void\n}\n\nconst DEBOUNCE_MS = 300\n\nexport function CollectionFilterEditorLazy({\n config,\n onChange,\n operator,\n value,\n filter,\n label,\n scope,\n}: CollectionFilterEditorProps) {\n const { display, multiple } = config\n const loadOptions = config.options as CollectionOptionsLazy\n const options = useCallback(\n (query?: string) => loadOptions(query, scope),\n [loadOptions, scope]\n )\n const [query, setQuery] = useState<string | undefined>()\n const debouncedQuery = useDebouncedValue(query, DEBOUNCE_MS)\n const {\n error,\n loading,\n options: resolvedOptions,\n } = useLazyOptions(options, debouncedQuery)\n useFocusFirstControlAfterLoad(loading)\n const onCommit = useCallback(\n (newValue: CollectionFilterValue) => {\n const newLabel = findLabelFromOptions(resolvedOptions, newValue, {\n label,\n value,\n })\n return onChange(\n { label: newLabel, value: newValue },\n { complete: !isEmptyValue(newValue) }\n )\n },\n [resolvedOptions, onChange, value, label]\n )\n const Editor = getLazyEditor(display)\n\n return (\n <Editor\n error={error}\n loading={loading}\n query={query}\n setQuery={setQuery}\n value={value}\n onCommit={onCommit}\n options={resolvedOptions}\n multiple={multiple}\n operator={operator}\n filterLabel={filter.label}\n filterName={filter.name}\n />\n )\n}\n\nfunction getLazyEditor(display: CollectionDisplay) {\n if (display === \"combobox\") return CollectionEditorComboboxLazy\n if (display === \"checkboxes\") return CollectionEditorCheckboxesLazy\n if (display === \"radios\") return CollectionEditorRadiosLazy\n return CollectionEditorSelectLazy\n}\n\nfunction CollectionEditorCheckboxesLazy({\n error,\n loading,\n ...props\n}: CollectionEditorLazyProps) {\n if (loading) return <Loading />\n if (error) return <LoadError />\n return <CollectionEditorCheckboxes {...props} />\n}\n\nfunction CollectionEditorRadiosLazy({\n error,\n loading,\n ...props\n}: CollectionEditorLazyProps) {\n if (loading) return <Loading />\n if (error) return <LoadError />\n return <CollectionEditorRadios {...props} />\n}\n\nfunction CollectionEditorSelectLazy({\n error,\n loading,\n ...props\n}: CollectionEditorLazyProps) {\n if (loading) return <Loading />\n if (error) return <LoadError />\n return <CollectionEditorSelect {...props} />\n}\n\nfunction CollectionEditorComboboxLazy({\n error,\n onCommit,\n options,\n query,\n loading,\n setQuery,\n ...props\n}: CollectionEditorLazyProps) {\n const [loadingState, setLoadingState] = useState<\n \"loading\" | \"filtering\" | \"idle\"\n >(loading ? \"loading\" : \"idle\")\n useEffect(() => {\n if (!loading) {\n setLoadingState(\"idle\")\n }\n }, [loading])\n\n return (\n <CollectionEditorCombobox\n {...props}\n loadingState={error ? \"error\" : loadingState}\n inputValue={query}\n onInputChange={(q: string) => {\n setLoadingState(\"filtering\")\n setQuery(q)\n }}\n onChange={(value: Key | Key[] | null) => {\n if (value === null) return\n\n const resolvedValue = Array.isArray(value)\n ? value.map(String)\n : String(value)\n onCommit(resolvedValue)\n }}\n items={options}\n renderEmptyState={error ? <LoadError /> : \"No results\"}\n >\n {(o) => {\n const option = o as CollectionOption\n return (\n <ComboBoxItem key={option.value} id={option.value}>\n {option.label}\n </ComboBoxItem>\n )\n }}\n </CollectionEditorCombobox>\n )\n}\n\nexport function Loading() {\n return (\n <div className={styles[\"loading\"]} role=\"status\">\n <span>Loading...</span>\n <LoadingSpinner />\n </div>\n )\n}\n\nexport function LoadError() {\n return (\n <div className={styles[\"load-error\"]} role=\"alert\">\n Error: Failed to load options\n </div>\n )\n}\n\nfunction findLabelFromOptions(\n options: CollectionOption[],\n value: CollectionFilterValue,\n previous: { label?: ActiveFilterLabel; value: CollectionFilterValue }\n) {\n const previousLabelByValue = buildPreviousLabelByValue(previous)\n const labelFor = (v: string) =>\n options.find((option) => option.value === v)?.label ??\n previousLabelByValue.get(v)\n\n return Array.isArray(value)\n ? value.map(labelFor).filter((label) => label !== undefined)\n : labelFor(value)\n}\n\nfunction buildPreviousLabelByValue(previous: {\n label?: ActiveFilterLabel\n value: CollectionFilterValue\n}): Map<string, string | undefined> {\n const previousValues = normalizeValueToArray(previous.value)\n const previousLabels = normalizeValueToArray(previous.label)\n return new Map(previousValues.map((v, index) => [v, previousLabels[index]]))\n}\n\nfunction normalizeValueToArray(value: string | string[] | undefined): string[] {\n if (value === undefined) return []\n return Array.isArray(value) ? value : [value]\n}\n"],"names":["React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CollectionEditorsLazy.js","sources":["../../../src/components/DataTable/CollectionEditorsLazy.tsx"],"sourcesContent":["import { ComboBoxItem } from \"@components/combo-box\"\nimport {\n LoadingAnnouncement,\n LoadingSpinner,\n SuppressLoadingAnnouncementContext,\n} from \"@components/internal\"\nimport { useDebouncedValue } from \"@utilities/useDebouncedValue\"\nimport React, { Key, useCallback, useEffect, useState } from \"react\"\n\nimport styles from \"./CollectionEditorsLazy.module.css\"\nimport type {\n CollectionFilterEditorProps,\n CollectionFilterValue,\n CollectionOptionsLazy,\n} from \"./CollectionEditorsShared\"\nimport { CollectionEditorCombobox } from \"./CollectionEditorsShared\"\nimport {\n CollectionEditorCheckboxes,\n CollectionEditorRadios,\n CollectionEditorSelect,\n CollectionEditorStaticProps,\n} from \"./CollectionEditorsStatic\"\nimport type { CollectionDisplay, CollectionOption } from \"./collectionFilter\"\nimport type { ActiveFilterLabel } from \"./FilterTypes\"\nimport { useFocusFirstControlAfterLoad } from \"./FocusFirstControl\"\nimport { useLazyOptions } from \"./useLazyOptions\"\nimport { isEmptyValue } from \"./utils\"\n\ntype CollectionEditorLazyProps = CollectionEditorStaticProps & {\n error: unknown\n loading: boolean\n query: string | undefined\n setQuery: (query: string | undefined) => void\n}\n\nconst DEBOUNCE_MS = 300\n\nexport function CollectionFilterEditorLazy({\n config,\n onChange,\n operator,\n value,\n filter,\n label,\n scope,\n}: CollectionFilterEditorProps) {\n const { display, multiple } = config\n const loadOptions = config.options as CollectionOptionsLazy\n const options = useCallback(\n (query?: string) => loadOptions(query, scope),\n [loadOptions, scope]\n )\n const [query, setQuery] = useState<string | undefined>()\n const debouncedQuery = useDebouncedValue(query, DEBOUNCE_MS)\n const {\n error,\n loading,\n options: resolvedOptions,\n } = useLazyOptions(options, debouncedQuery)\n useFocusFirstControlAfterLoad(loading)\n const onCommit = useCallback(\n (newValue: CollectionFilterValue) => {\n const newLabel = findLabelFromOptions(resolvedOptions, newValue, {\n label,\n value,\n })\n return onChange(\n { label: newLabel, value: newValue },\n { complete: !isEmptyValue(newValue) }\n )\n },\n [resolvedOptions, onChange, value, label]\n )\n const Editor = getLazyEditor(display)\n\n return (\n <Editor\n error={error}\n loading={loading}\n query={query}\n setQuery={setQuery}\n value={value}\n onCommit={onCommit}\n options={resolvedOptions}\n multiple={multiple}\n operator={operator}\n filterLabel={filter.label}\n filterName={filter.name}\n />\n )\n}\n\nfunction getLazyEditor(display: CollectionDisplay) {\n if (display === \"combobox\") return CollectionEditorComboboxLazy\n if (display === \"checkboxes\") return CollectionEditorCheckboxesLazy\n if (display === \"radios\") return CollectionEditorRadiosLazy\n return CollectionEditorSelectLazy\n}\n\nfunction CollectionEditorCheckboxesLazy({\n error,\n loading,\n ...props\n}: CollectionEditorLazyProps) {\n if (loading) return <Loading />\n if (error) return <LoadError />\n return <CollectionEditorCheckboxes {...props} />\n}\n\nfunction CollectionEditorRadiosLazy({\n error,\n loading,\n ...props\n}: CollectionEditorLazyProps) {\n if (loading) return <Loading />\n if (error) return <LoadError />\n return <CollectionEditorRadios {...props} />\n}\n\nfunction CollectionEditorSelectLazy({\n error,\n loading,\n ...props\n}: CollectionEditorLazyProps) {\n if (loading) return <Loading />\n if (error) return <LoadError />\n return <CollectionEditorSelect {...props} />\n}\n\nfunction CollectionEditorComboboxLazy({\n error,\n onCommit,\n options,\n query,\n loading,\n setQuery,\n ...props\n}: CollectionEditorLazyProps) {\n const [loadingState, setLoadingState] = useState<\n \"loading\" | \"filtering\" | \"idle\"\n >(loading ? \"loading\" : \"idle\")\n useEffect(() => {\n if (!loading) {\n setLoadingState(\"idle\")\n }\n }, [loading])\n\n return (\n <SuppressLoadingAnnouncementContext.Provider\n value={loadingState === \"loading\"}\n >\n <CollectionEditorCombobox\n {...props}\n loadingState={error ? \"error\" : loadingState}\n inputValue={query}\n onInputChange={(q: string) => {\n setLoadingState(\"filtering\")\n setQuery(q)\n }}\n onChange={(value: Key | Key[] | null) => {\n if (value === null) return\n\n const resolvedValue = Array.isArray(value)\n ? value.map(String)\n : String(value)\n onCommit(resolvedValue)\n }}\n items={options}\n renderEmptyState={error ? <LoadError /> : \"No results\"}\n >\n {(o) => {\n const option = o as CollectionOption\n return (\n <ComboBoxItem key={option.value} id={option.value}>\n {option.label}\n </ComboBoxItem>\n )\n }}\n </CollectionEditorCombobox>\n </SuppressLoadingAnnouncementContext.Provider>\n )\n}\n\nexport function Loading() {\n return (\n <div className={styles[\"loading\"]}>\n <span>Loading...</span>\n <LoadingSpinner />\n <LoadingAnnouncement message=\"Loading\" />\n </div>\n )\n}\n\nexport function LoadError() {\n return (\n <div className={styles[\"load-error\"]} role=\"alert\">\n Error: Failed to load options\n </div>\n )\n}\n\nfunction findLabelFromOptions(\n options: CollectionOption[],\n value: CollectionFilterValue,\n previous: { label?: ActiveFilterLabel; value: CollectionFilterValue }\n) {\n const previousLabelByValue = buildPreviousLabelByValue(previous)\n const labelFor = (v: string) =>\n options.find((option) => option.value === v)?.label ??\n previousLabelByValue.get(v)\n\n return Array.isArray(value)\n ? value.map(labelFor).filter((label) => label !== undefined)\n : labelFor(value)\n}\n\nfunction buildPreviousLabelByValue(previous: {\n label?: ActiveFilterLabel\n value: CollectionFilterValue\n}): Map<string, string | undefined> {\n const previousValues = normalizeValueToArray(previous.value)\n const previousLabels = normalizeValueToArray(previous.label)\n return new Map(previousValues.map((v, index) => [v, previousLabels[index]]))\n}\n\nfunction normalizeValueToArray(value: string | string[] | undefined): string[] {\n if (value === undefined) return []\n return Array.isArray(value) ? value : [value]\n}\n"],"names":["React"],"mappings":"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"}
|