@payloadcms/ui 4.0.0-internal.af6aad0 → 4.0.0-internal.b8e7c89
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/elements/AddNewRelation/index.css +4 -0
- package/dist/elements/AddNewRelation/index.js +2 -2
- package/dist/elements/AddNewRelation/index.js.map +1 -1
- package/dist/elements/AppHeader/index.css +0 -4
- package/dist/elements/AppHeader/index.d.ts +8 -1
- package/dist/elements/AppHeader/index.d.ts.map +1 -1
- package/dist/elements/AppHeader/index.js +14 -5
- package/dist/elements/AppHeader/index.js.map +1 -1
- package/dist/elements/Autosave/index.d.ts.map +1 -1
- package/dist/elements/Autosave/index.js +2 -3
- package/dist/elements/Autosave/index.js.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/index.js +2 -3
- package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
- package/dist/elements/Button/index.css +0 -23
- package/dist/elements/Button/types.d.ts +1 -1
- package/dist/elements/Button/types.d.ts.map +1 -1
- package/dist/elements/Button/types.js.map +1 -1
- package/dist/elements/CopyLocaleData/index.d.ts.map +1 -1
- package/dist/elements/CopyLocaleData/index.js +8 -9
- package/dist/elements/CopyLocaleData/index.js.map +1 -1
- package/dist/elements/DefaultListViewTabs/index.css +0 -1
- package/dist/elements/DefaultListViewTabs/index.d.ts.map +1 -1
- package/dist/elements/DefaultListViewTabs/index.js +62 -84
- package/dist/elements/DefaultListViewTabs/index.js.map +1 -1
- package/dist/elements/DeleteMany/index.d.ts.map +1 -1
- package/dist/elements/DeleteMany/index.js +2 -3
- package/dist/elements/DeleteMany/index.js.map +1 -1
- package/dist/elements/DocumentDrawer/types.d.ts +1 -1
- package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
- package/dist/elements/DocumentDrawer/types.js.map +1 -1
- package/dist/elements/Drawer/types.d.ts +2 -2
- package/dist/elements/Drawer/types.d.ts.map +1 -1
- package/dist/elements/Drawer/types.js.map +1 -1
- package/dist/elements/DuplicateDocument/index.d.ts.map +1 -1
- package/dist/elements/DuplicateDocument/index.js +2 -3
- package/dist/elements/DuplicateDocument/index.js.map +1 -1
- package/dist/elements/EditMany/DrawerContent.d.ts.map +1 -1
- package/dist/elements/EditMany/DrawerContent.js +2 -3
- package/dist/elements/EditMany/DrawerContent.js.map +1 -1
- package/dist/elements/Hierarchy/ColumnBrowser/Column/index.css +4 -22
- package/dist/elements/Hierarchy/ColumnBrowser/Column/index.d.ts.map +1 -1
- package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js +49 -68
- package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js.map +1 -1
- package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.css +15 -100
- package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.d.ts.map +1 -1
- package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.js +137 -97
- package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.js.map +1 -1
- package/dist/elements/Hierarchy/ColumnBrowser/index.d.ts +1 -1
- package/dist/elements/Hierarchy/ColumnBrowser/index.d.ts.map +1 -1
- package/dist/elements/Hierarchy/ColumnBrowser/index.js +23 -51
- package/dist/elements/Hierarchy/ColumnBrowser/index.js.map +1 -1
- package/dist/elements/Hierarchy/ColumnBrowser/types.d.ts +3 -26
- package/dist/elements/Hierarchy/ColumnBrowser/types.d.ts.map +1 -1
- package/dist/elements/Hierarchy/ColumnBrowser/types.js.map +1 -1
- package/dist/elements/Hierarchy/DocHeaderButton/index.d.ts.map +1 -1
- package/dist/elements/Hierarchy/DocHeaderButton/index.js +1 -6
- package/dist/elements/Hierarchy/DocHeaderButton/index.js.map +1 -1
- package/dist/elements/Hierarchy/DocHeaderButton/index.server.js +3 -1
- package/dist/elements/Hierarchy/DocHeaderButton/index.server.js.map +1 -1
- package/dist/elements/Hierarchy/Field/SelectedHierarchies.css +36 -0
- package/dist/elements/Hierarchy/Field/SelectedHierarchies.d.ts +13 -0
- package/dist/elements/Hierarchy/Field/SelectedHierarchies.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Field/SelectedHierarchies.js +141 -0
- package/dist/elements/Hierarchy/Field/SelectedHierarchies.js.map +1 -0
- package/dist/elements/Hierarchy/Field/index.client.d.ts +0 -5
- package/dist/elements/Hierarchy/Field/index.client.d.ts.map +1 -1
- package/dist/elements/Hierarchy/Field/index.client.js +95 -120
- package/dist/elements/Hierarchy/Field/index.client.js.map +1 -1
- package/dist/elements/Hierarchy/Field/index.css +34 -3
- package/dist/elements/Hierarchy/Modal/fetchAncestorPath.d.ts +4 -18
- package/dist/elements/Hierarchy/Modal/fetchAncestorPath.d.ts.map +1 -1
- package/dist/elements/Hierarchy/Modal/fetchAncestorPath.js +24 -88
- package/dist/elements/Hierarchy/Modal/fetchAncestorPath.js.map +1 -1
- package/dist/elements/Hierarchy/Modal/index.css +53 -4
- package/dist/elements/Hierarchy/Modal/index.d.ts +2 -5
- package/dist/elements/Hierarchy/Modal/index.d.ts.map +1 -1
- package/dist/elements/Hierarchy/Modal/index.js +99 -136
- package/dist/elements/Hierarchy/Modal/index.js.map +1 -1
- package/dist/elements/Hierarchy/Modal/types.d.ts +0 -15
- package/dist/elements/Hierarchy/Modal/types.d.ts.map +1 -1
- package/dist/elements/Hierarchy/Modal/types.js.map +1 -1
- package/dist/elements/Hierarchy/MoveMany/index.d.ts +3 -7
- package/dist/elements/Hierarchy/MoveMany/index.d.ts.map +1 -1
- package/dist/elements/Hierarchy/MoveMany/index.js +171 -45
- package/dist/elements/Hierarchy/MoveMany/index.js.map +1 -1
- package/dist/elements/Hierarchy/Search/index.css +9 -2
- package/dist/elements/Hierarchy/Search/index.d.ts.map +1 -1
- package/dist/elements/Hierarchy/Search/index.js +73 -6
- package/dist/elements/Hierarchy/Search/index.js.map +1 -1
- package/dist/elements/Hierarchy/Search/types.d.ts +6 -2
- package/dist/elements/Hierarchy/Search/types.d.ts.map +1 -1
- package/dist/elements/Hierarchy/Search/types.js.map +1 -1
- package/dist/elements/Hierarchy/Search/useHierarchySearch.d.ts.map +1 -1
- package/dist/elements/Hierarchy/Search/useHierarchySearch.js +2 -3
- package/dist/elements/Hierarchy/Search/useHierarchySearch.js.map +1 -1
- package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.d.ts +4 -0
- package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.d.ts.map +1 -1
- package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js +186 -101
- package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js.map +1 -1
- package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.d.ts.map +1 -1
- package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js +21 -1
- package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js.map +1 -1
- package/dist/elements/Hierarchy/Tree/LoadMore/index.css +3 -3
- package/dist/elements/Hierarchy/Tree/TreeNode/index.css +29 -59
- package/dist/elements/Hierarchy/Tree/TreeNode/index.d.ts +1 -1
- package/dist/elements/Hierarchy/Tree/TreeNode/index.d.ts.map +1 -1
- package/dist/elements/Hierarchy/Tree/TreeNode/index.js +10 -54
- package/dist/elements/Hierarchy/Tree/TreeNode/index.js.map +1 -1
- package/dist/elements/Hierarchy/Tree/index.css +9 -8
- package/dist/elements/Hierarchy/Tree/index.d.ts.map +1 -1
- package/dist/elements/Hierarchy/Tree/index.js +47 -29
- package/dist/elements/Hierarchy/Tree/index.js.map +1 -1
- package/dist/elements/Hierarchy/Tree/types.d.ts +1 -9
- package/dist/elements/Hierarchy/Tree/types.d.ts.map +1 -1
- package/dist/elements/Hierarchy/Tree/types.js.map +1 -1
- package/dist/elements/Hierarchy/Tree/useChildren.d.ts.map +1 -1
- package/dist/elements/Hierarchy/Tree/useChildren.js +1 -11
- package/dist/elements/Hierarchy/Tree/useChildren.js.map +1 -1
- package/dist/elements/ListControls/index.d.ts.map +1 -1
- package/dist/elements/ListControls/index.js +2 -3
- package/dist/elements/ListControls/index.js.map +1 -1
- package/dist/elements/ListControls/types.d.ts +0 -4
- package/dist/elements/ListControls/types.d.ts.map +1 -1
- package/dist/elements/ListControls/types.js.map +1 -1
- package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.d.ts.map +1 -1
- package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js +2 -3
- package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js.map +1 -1
- package/dist/elements/LivePreview/Window/index.js +1 -1
- package/dist/elements/LivePreview/Window/index.js.map +1 -1
- package/dist/elements/Localizer/index.js +1 -1
- package/dist/elements/Localizer/index.js.map +1 -1
- package/dist/elements/Nav/NavSidebarToggle/index.js +1 -1
- package/dist/elements/Nav/NavSidebarToggle/index.js.map +1 -1
- package/dist/elements/Nav/NavWrapper/index.d.ts +0 -1
- package/dist/elements/Nav/NavWrapper/index.d.ts.map +1 -1
- package/dist/elements/Nav/NavWrapper/index.js +18 -12
- package/dist/elements/Nav/NavWrapper/index.js.map +1 -1
- package/dist/elements/Nav/SidebarTabs/index.css +2 -1
- package/dist/elements/Nav/context.d.ts +1 -0
- package/dist/elements/Nav/context.d.ts.map +1 -1
- package/dist/elements/Nav/context.js +67 -92
- package/dist/elements/Nav/context.js.map +1 -1
- package/dist/elements/Nav/index.css +42 -47
- package/dist/elements/Nav/index.d.ts +0 -4
- package/dist/elements/Nav/index.d.ts.map +1 -1
- package/dist/elements/Nav/index.js +1 -16
- package/dist/elements/Nav/index.js.map +1 -1
- package/dist/elements/NavGroup/index.css +15 -29
- package/dist/elements/Popup/PopupButtonList/index.css +16 -32
- package/dist/elements/Popup/index.css +0 -6
- package/dist/elements/Popup/index.d.ts +0 -10
- package/dist/elements/Popup/index.d.ts.map +1 -1
- package/dist/elements/Popup/index.js +5 -12
- package/dist/elements/Popup/index.js.map +1 -1
- package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts.map +1 -1
- package/dist/elements/PublishButton/ScheduleDrawer/index.js +8 -30
- package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -1
- package/dist/elements/PublishButton/ScheduleDrawer/types.d.ts +1 -1
- package/dist/elements/PublishButton/ScheduleDrawer/types.d.ts.map +1 -1
- package/dist/elements/PublishButton/ScheduleDrawer/types.js.map +1 -1
- package/dist/elements/PublishButton/index.d.ts.map +1 -1
- package/dist/elements/PublishButton/index.js +5 -6
- package/dist/elements/PublishButton/index.js.map +1 -1
- package/dist/elements/PublishMany/DrawerContent.d.ts.map +1 -1
- package/dist/elements/PublishMany/DrawerContent.js +2 -3
- package/dist/elements/PublishMany/DrawerContent.js.map +1 -1
- package/dist/elements/ReactSelect/types.d.ts +0 -5
- package/dist/elements/ReactSelect/types.d.ts.map +1 -1
- package/dist/elements/ReactSelect/types.js.map +1 -1
- package/dist/elements/RestoreMany/index.d.ts.map +1 -1
- package/dist/elements/RestoreMany/index.js +2 -3
- package/dist/elements/RestoreMany/index.js.map +1 -1
- package/dist/elements/SaveDraftButton/index.d.ts.map +1 -1
- package/dist/elements/SaveDraftButton/index.js +2 -3
- package/dist/elements/SaveDraftButton/index.js.map +1 -1
- package/dist/elements/SelectAll/index.d.ts.map +1 -1
- package/dist/elements/SelectAll/index.js +2 -1
- package/dist/elements/SelectAll/index.js.map +1 -1
- package/dist/elements/SelectRow/index.d.ts.map +1 -1
- package/dist/elements/SelectRow/index.js +2 -1
- package/dist/elements/SelectRow/index.js.map +1 -1
- package/dist/elements/SidebarRow/index.css +5 -1
- package/dist/elements/SidebarToggle/index.css +1 -3
- package/dist/elements/Status/index.d.ts.map +1 -1
- package/dist/elements/Status/index.js +2 -3
- package/dist/elements/Status/index.js.map +1 -1
- package/dist/elements/StepNav/index.d.ts.map +1 -1
- package/dist/elements/StepNav/index.js +10 -14
- package/dist/elements/StepNav/index.js.map +1 -1
- package/dist/elements/StepNav/types.d.ts +0 -6
- package/dist/elements/StepNav/types.d.ts.map +1 -1
- package/dist/elements/StepNav/types.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.css +7 -5
- package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js +3 -14
- package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js.map +1 -1
- package/dist/elements/Table/OrderableTable.d.ts.map +1 -1
- package/dist/elements/Table/OrderableTable.js +2 -3
- package/dist/elements/Table/OrderableTable.js.map +1 -1
- package/dist/elements/Table/RelationshipProvider/index.d.ts.map +1 -1
- package/dist/elements/Table/RelationshipProvider/index.js +2 -3
- package/dist/elements/Table/RelationshipProvider/index.js.map +1 -1
- package/dist/elements/UnpublishButton/index.d.ts.map +1 -1
- package/dist/elements/UnpublishButton/index.js +3 -4
- package/dist/elements/UnpublishButton/index.js.map +1 -1
- package/dist/elements/UnpublishMany/DrawerContent.d.ts.map +1 -1
- package/dist/elements/UnpublishMany/DrawerContent.js +2 -3
- package/dist/elements/UnpublishMany/DrawerContent.js.map +1 -1
- package/dist/elements/UserMenu/LanguageMenu/index.d.ts.map +1 -1
- package/dist/elements/UserMenu/LanguageMenu/index.js +39 -83
- package/dist/elements/UserMenu/LanguageMenu/index.js.map +1 -1
- package/dist/elements/UserMenu/SettingsMenu/index.d.ts.map +1 -1
- package/dist/elements/UserMenu/SettingsMenu/index.js +21 -57
- package/dist/elements/UserMenu/SettingsMenu/index.js.map +1 -1
- package/dist/elements/UserMenu/ThemeMenu/index.d.ts.map +1 -1
- package/dist/elements/UserMenu/ThemeMenu/index.js +39 -83
- package/dist/elements/UserMenu/ThemeMenu/index.js.map +1 -1
- package/dist/elements/UserMenu/index.css +2 -32
- package/dist/elements/UserMenu/index.d.ts +0 -1
- package/dist/elements/UserMenu/index.d.ts.map +1 -1
- package/dist/elements/UserMenu/index.js +51 -77
- package/dist/elements/UserMenu/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Relationship/index.js +1 -1
- package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
- package/dist/exports/client/index.d.ts +0 -4
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +1 -1
- package/dist/exports/client/index.js.map +3 -3
- package/dist/fields/Array/index.d.ts.map +1 -1
- package/dist/fields/Array/index.js +2 -3
- package/dist/fields/Array/index.js.map +1 -1
- package/dist/fields/Blocks/index.d.ts.map +1 -1
- package/dist/fields/Blocks/index.js +2 -3
- package/dist/fields/Blocks/index.js.map +1 -1
- package/dist/fields/Checkbox/Input.d.ts +2 -2
- package/dist/fields/Checkbox/Input.d.ts.map +1 -1
- package/dist/fields/Checkbox/Input.js +152 -134
- package/dist/fields/Checkbox/Input.js.map +1 -1
- package/dist/fields/Checkbox/index.css +155 -168
- package/dist/fields/FieldLabel/index.d.ts.map +1 -1
- package/dist/fields/FieldLabel/index.js +4 -5
- package/dist/fields/FieldLabel/index.js.map +1 -1
- package/dist/fields/Relationship/Input.d.ts.map +1 -1
- package/dist/fields/Relationship/Input.js +8 -27
- package/dist/fields/Relationship/Input.js.map +1 -1
- package/dist/fields/Relationship/optionsReducer.d.ts.map +1 -1
- package/dist/fields/Relationship/optionsReducer.js +0 -2
- package/dist/fields/Relationship/optionsReducer.js.map +1 -1
- package/dist/fields/Relationship/types.d.ts +0 -24
- package/dist/fields/Relationship/types.d.ts.map +1 -1
- package/dist/fields/Relationship/types.js.map +1 -1
- package/dist/fields/Slug/index.d.ts.map +1 -1
- package/dist/fields/Slug/index.js +2 -3
- package/dist/fields/Slug/index.js.map +1 -1
- package/dist/fields/Upload/Input.d.ts.map +1 -1
- package/dist/fields/Upload/Input.js +2 -3
- package/dist/fields/Upload/Input.js.map +1 -1
- package/dist/fields/Upload/Input.spec.js +2 -1
- package/dist/fields/Upload/Input.spec.js.map +1 -1
- package/dist/fields/shared/index.d.ts +1 -1
- package/dist/fields/shared/index.d.ts.map +1 -1
- package/dist/fields/shared/index.js.map +1 -1
- package/dist/forms/Form/index.d.ts.map +1 -1
- package/dist/forms/Form/index.js +2 -3
- package/dist/forms/Form/index.js.map +1 -1
- package/dist/forms/NullifyField/index.d.ts.map +1 -1
- package/dist/forms/NullifyField/index.js +2 -3
- package/dist/forms/NullifyField/index.js.map +1 -1
- package/dist/hooks/usePayloadAPI.d.ts.map +1 -1
- package/dist/hooks/usePayloadAPI.js +2 -3
- package/dist/hooks/usePayloadAPI.js.map +1 -1
- package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
- package/dist/providers/DocumentInfo/index.js +2 -3
- package/dist/providers/DocumentInfo/index.js.map +1 -1
- package/dist/providers/Hierarchy/index.d.ts.map +1 -1
- package/dist/providers/Hierarchy/index.js +24 -53
- package/dist/providers/Hierarchy/index.js.map +1 -1
- package/dist/providers/Hierarchy/types.d.ts +0 -2
- package/dist/providers/Hierarchy/types.d.ts.map +1 -1
- package/dist/providers/Hierarchy/types.js.map +1 -1
- package/dist/providers/LivePreview/index.d.ts.map +1 -1
- package/dist/providers/LivePreview/index.js +13 -6
- package/dist/providers/LivePreview/index.js.map +1 -1
- package/dist/providers/Locale/index.d.ts +1 -5
- package/dist/providers/Locale/index.d.ts.map +1 -1
- package/dist/providers/Locale/index.js +61 -139
- package/dist/providers/Locale/index.js.map +1 -1
- package/dist/providers/Selection/index.d.ts.map +1 -1
- package/dist/providers/Selection/index.js +2 -3
- package/dist/providers/Selection/index.js.map +1 -1
- package/dist/providers/ServerFunctions/index.d.ts +5 -1
- package/dist/providers/ServerFunctions/index.d.ts.map +1 -1
- package/dist/providers/ServerFunctions/index.js +15 -0
- package/dist/providers/ServerFunctions/index.js.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/index.d.ts.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/index.js +0 -1
- package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/templates/Default/Wrapper/index.css +1 -2
- package/dist/templates/Default/Wrapper/index.d.ts +0 -2
- package/dist/templates/Default/Wrapper/index.d.ts.map +1 -1
- package/dist/templates/Default/Wrapper/index.js +6 -12
- package/dist/templates/Default/Wrapper/index.js.map +1 -1
- package/dist/templates/Default/index.css +1 -3
- package/dist/templates/Default/index.d.ts.map +1 -1
- package/dist/templates/Default/index.js +15 -17
- package/dist/templates/Default/index.js.map +1 -1
- package/dist/utilities/formatAbsoluteURL.d.ts +1 -1
- package/dist/utilities/formatAbsoluteURL.d.ts.map +1 -1
- package/dist/utilities/formatAbsoluteURL.js +18 -8
- package/dist/utilities/formatAbsoluteURL.js.map +1 -1
- package/dist/utilities/formatAbsoluteURL.spec.js +27 -0
- package/dist/utilities/formatAbsoluteURL.spec.js.map +1 -0
- package/dist/utilities/getHasScheduledPublish.d.ts +2 -3
- package/dist/utilities/getHasScheduledPublish.d.ts.map +1 -1
- package/dist/utilities/getHasScheduledPublish.js +2 -5
- package/dist/utilities/getHasScheduledPublish.js.map +1 -1
- package/dist/utilities/isAbsoluteURL.d.ts +3 -0
- package/dist/utilities/isAbsoluteURL.d.ts.map +1 -0
- package/dist/utilities/isAbsoluteURL.js +15 -0
- package/dist/utilities/isAbsoluteURL.js.map +1 -0
- package/dist/utilities/isAbsoluteURL.spec.js +11 -0
- package/dist/utilities/isAbsoluteURL.spec.js.map +1 -0
- package/dist/utilities/isHttpURL.d.ts +3 -0
- package/dist/utilities/isHttpURL.d.ts.map +1 -0
- package/dist/utilities/isHttpURL.js +12 -0
- package/dist/utilities/isHttpURL.js.map +1 -0
- package/dist/utilities/isHttpURL.spec.js +25 -0
- package/dist/utilities/isHttpURL.spec.js.map +1 -0
- package/dist/utilities/schedulePublishHandler.d.ts +8 -1
- package/dist/utilities/schedulePublishHandler.d.ts.map +1 -1
- package/dist/utilities/schedulePublishHandler.js +68 -4
- package/dist/utilities/schedulePublishHandler.js.map +1 -1
- package/dist/utilities/serverFunctionRegistry.d.ts.map +1 -1
- package/dist/utilities/serverFunctionRegistry.js +2 -1
- package/dist/utilities/serverFunctionRegistry.js.map +1 -1
- package/dist/utilities/slugify.d.ts.map +1 -1
- package/dist/utilities/slugify.js +2 -0
- package/dist/utilities/slugify.js.map +1 -1
- package/dist/views/API/index.client.d.ts.map +1 -1
- package/dist/views/API/index.client.js +2 -3
- package/dist/views/API/index.client.js.map +1 -1
- package/dist/views/Document/index.d.ts.map +1 -1
- package/dist/views/Document/index.js +1 -2
- package/dist/views/Document/index.js.map +1 -1
- package/dist/views/HierarchyList/DocumentListSelection/index.d.ts.map +1 -1
- package/dist/views/HierarchyList/DocumentListSelection/index.js +105 -100
- package/dist/views/HierarchyList/DocumentListSelection/index.js.map +1 -1
- package/dist/views/HierarchyList/HierarchyListHeader/index.d.ts +1 -6
- package/dist/views/HierarchyList/HierarchyListHeader/index.d.ts.map +1 -1
- package/dist/views/HierarchyList/HierarchyListHeader/index.js +8 -10
- package/dist/views/HierarchyList/HierarchyListHeader/index.js.map +1 -1
- package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.d.ts.map +1 -1
- package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.js +10 -11
- package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.js.map +1 -1
- package/dist/views/HierarchyList/HierarchyTable/SlotTable.d.ts.map +1 -1
- package/dist/views/HierarchyList/HierarchyTable/SlotTable.js +6 -3
- package/dist/views/HierarchyList/HierarchyTable/SlotTable.js.map +1 -1
- package/dist/views/HierarchyList/HierarchyTable/index.css +0 -51
- package/dist/views/HierarchyList/HierarchyTable/index.d.ts +1 -13
- package/dist/views/HierarchyList/HierarchyTable/index.d.ts.map +1 -1
- package/dist/views/HierarchyList/HierarchyTable/index.js +38 -156
- package/dist/views/HierarchyList/HierarchyTable/index.js.map +1 -1
- package/dist/views/HierarchyList/HierarchyTable/types.d.ts +0 -6
- package/dist/views/HierarchyList/HierarchyTable/types.d.ts.map +1 -1
- package/dist/views/HierarchyList/HierarchyTable/types.js.map +1 -1
- package/dist/views/HierarchyList/index.d.ts.map +1 -1
- package/dist/views/HierarchyList/index.js +20 -103
- package/dist/views/HierarchyList/index.js.map +1 -1
- package/dist/views/List/ListSelection/index.d.ts.map +1 -1
- package/dist/views/List/ListSelection/index.js +122 -138
- package/dist/views/List/ListSelection/index.js.map +1 -1
- package/dist/views/List/handleHierarchy.d.ts +1 -6
- package/dist/views/List/handleHierarchy.d.ts.map +1 -1
- package/dist/views/List/handleHierarchy.js +3 -34
- package/dist/views/List/handleHierarchy.js.map +1 -1
- package/dist/views/List/index.client.d.ts.map +1 -1
- package/dist/views/List/index.client.js +5 -129
- package/dist/views/List/index.client.js.map +1 -1
- package/dist/views/List/index.d.ts.map +1 -1
- package/dist/views/List/index.js +16 -27
- package/dist/views/List/index.js.map +1 -1
- package/dist/views/Root/getRouteData.d.ts.map +1 -1
- package/dist/views/Root/getRouteData.js +2 -8
- package/dist/views/Root/getRouteData.js.map +1 -1
- package/dist/views/Version/Default/SetStepNav.d.ts.map +1 -1
- package/dist/views/Version/Default/SetStepNav.js +10 -13
- package/dist/views/Version/Default/SetStepNav.js.map +1 -1
- package/dist/views/Version/Default/index.d.ts.map +1 -1
- package/dist/views/Version/Default/index.js +12 -13
- package/dist/views/Version/Default/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.d.ts +1 -0
- package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js +56 -50
- package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js +41 -27
- package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.spec.js +258 -0
- package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.spec.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js +10 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js +33 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js +56 -2
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.d.ts +8 -2
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.js +17 -19
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js +3 -13
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js.map +1 -1
- package/dist/views/Versions/VersionPillLabel/VersionPillLabel.d.ts.map +1 -1
- package/dist/views/Versions/VersionPillLabel/VersionPillLabel.js +2 -3
- package/dist/views/Versions/VersionPillLabel/VersionPillLabel.js.map +1 -1
- package/package.json +6 -5
- package/dist/elements/Hierarchy/CreateNewButton/index.css +0 -9
- package/dist/elements/Hierarchy/CreateNewButton/index.d.ts +0 -9
- package/dist/elements/Hierarchy/CreateNewButton/index.d.ts.map +0 -1
- package/dist/elements/Hierarchy/CreateNewButton/index.js +0 -111
- package/dist/elements/Hierarchy/CreateNewButton/index.js.map +0 -1
- package/dist/elements/Hierarchy/Modal/Footer/index.css +0 -45
- package/dist/elements/Hierarchy/Modal/Footer/index.d.ts +0 -28
- package/dist/elements/Hierarchy/Modal/Footer/index.d.ts.map +0 -1
- package/dist/elements/Hierarchy/Modal/Footer/index.js +0 -166
- package/dist/elements/Hierarchy/Modal/Footer/index.js.map +0 -1
- package/dist/elements/Hierarchy/getFolderHierarchySlug.d.ts +0 -22
- package/dist/elements/Hierarchy/getFolderHierarchySlug.d.ts.map +0 -1
- package/dist/elements/Hierarchy/getFolderHierarchySlug.js +0 -17
- package/dist/elements/Hierarchy/getFolderHierarchySlug.js.map +0 -1
- package/dist/elements/Hierarchy/move/moveDocuments.d.ts +0 -34
- package/dist/elements/Hierarchy/move/moveDocuments.d.ts.map +0 -1
- package/dist/elements/Hierarchy/move/moveDocuments.js +0 -94
- package/dist/elements/Hierarchy/move/moveDocuments.js.map +0 -1
- package/dist/elements/SegmentedControl/index.css +0 -58
- package/dist/elements/SegmentedControl/index.d.ts +0 -19
- package/dist/elements/SegmentedControl/index.d.ts.map +0 -1
- package/dist/elements/SegmentedControl/index.js +0 -104
- package/dist/elements/SegmentedControl/index.js.map +0 -1
- package/dist/elements/StepNav/DropTarget/index.css +0 -20
- package/dist/elements/StepNav/DropTarget/index.d.ts +0 -16
- package/dist/elements/StepNav/DropTarget/index.d.ts.map +0 -1
- package/dist/elements/StepNav/DropTarget/index.js +0 -71
- package/dist/elements/StepNav/DropTarget/index.js.map +0 -1
- package/dist/elements/UserMenu/HoverSubmenuGroup.d.ts +0 -18
- package/dist/elements/UserMenu/HoverSubmenuGroup.d.ts.map +0 -1
- package/dist/elements/UserMenu/HoverSubmenuGroup.js +0 -38
- package/dist/elements/UserMenu/HoverSubmenuGroup.js.map +0 -1
- package/dist/elements/UserMenu/useHoverSubmenu.d.ts +0 -21
- package/dist/elements/UserMenu/useHoverSubmenu.d.ts.map +0 -1
- package/dist/elements/UserMenu/useHoverSubmenu.js +0 -260
- package/dist/elements/UserMenu/useHoverSubmenu.js.map +0 -1
- package/dist/elements/ViewModeToggle/index.d.ts +0 -8
- package/dist/elements/ViewModeToggle/index.d.ts.map +0 -1
- package/dist/elements/ViewModeToggle/index.js +0 -29
- package/dist/elements/ViewModeToggle/index.js.map +0 -1
- package/dist/icons/CollapseLayers/index.css +0 -5
- package/dist/icons/CollapseLayers/index.d.ts +0 -7
- package/dist/icons/CollapseLayers/index.d.ts.map +0 -1
- package/dist/icons/CollapseLayers/index.js +0 -23
- package/dist/icons/CollapseLayers/index.js.map +0 -1
- package/dist/icons/Table/index.css +0 -5
- package/dist/icons/Table/index.d.ts +0 -7
- package/dist/icons/Table/index.d.ts.map +0 -1
- package/dist/icons/Table/index.js +0 -25
- package/dist/icons/Table/index.js.map +0 -1
- package/dist/providers/HierarchyDnd/index.css +0 -51
- package/dist/providers/HierarchyDnd/index.d.ts +0 -21
- package/dist/providers/HierarchyDnd/index.d.ts.map +0 -1
- package/dist/providers/HierarchyDnd/index.js +0 -163
- package/dist/providers/HierarchyDnd/index.js.map +0 -1
- package/dist/providers/HierarchyDnd/types.d.ts +0 -56
- package/dist/providers/HierarchyDnd/types.d.ts.map +0 -1
- package/dist/providers/HierarchyDnd/types.js +0 -21
- package/dist/providers/HierarchyDnd/types.js.map +0 -1
- package/dist/views/HierarchyList/HierarchyCards/DocumentCard/index.css +0 -216
- package/dist/views/HierarchyList/HierarchyCards/DocumentCard/index.d.ts +0 -20
- package/dist/views/HierarchyList/HierarchyCards/DocumentCard/index.d.ts.map +0 -1
- package/dist/views/HierarchyList/HierarchyCards/DocumentCard/index.js +0 -182
- package/dist/views/HierarchyList/HierarchyCards/DocumentCard/index.js.map +0 -1
- package/dist/views/HierarchyList/HierarchyCards/DragPreviewItem/index.css +0 -38
- package/dist/views/HierarchyList/HierarchyCards/DragPreviewItem/index.d.ts +0 -15
- package/dist/views/HierarchyList/HierarchyCards/DragPreviewItem/index.d.ts.map +0 -1
- package/dist/views/HierarchyList/HierarchyCards/DragPreviewItem/index.js +0 -85
- package/dist/views/HierarchyList/HierarchyCards/DragPreviewItem/index.js.map +0 -1
- package/dist/views/HierarchyList/HierarchyCards/FolderCard/index.css +0 -98
- package/dist/views/HierarchyList/HierarchyCards/FolderCard/index.d.ts +0 -27
- package/dist/views/HierarchyList/HierarchyCards/FolderCard/index.d.ts.map +0 -1
- package/dist/views/HierarchyList/HierarchyCards/FolderCard/index.js +0 -84
- package/dist/views/HierarchyList/HierarchyCards/FolderCard/index.js.map +0 -1
- package/dist/views/HierarchyList/HierarchyCards/HierarchyCard/index.d.ts +0 -19
- package/dist/views/HierarchyList/HierarchyCards/HierarchyCard/index.d.ts.map +0 -1
- package/dist/views/HierarchyList/HierarchyCards/HierarchyCard/index.js +0 -100
- package/dist/views/HierarchyList/HierarchyCards/HierarchyCard/index.js.map +0 -1
- package/dist/views/HierarchyList/HierarchyCards/PlaneItem/index.d.ts +0 -53
- package/dist/views/HierarchyList/HierarchyCards/PlaneItem/index.d.ts.map +0 -1
- package/dist/views/HierarchyList/HierarchyCards/PlaneItem/index.js +0 -145
- package/dist/views/HierarchyList/HierarchyCards/PlaneItem/index.js.map +0 -1
- package/dist/views/HierarchyList/HierarchyCards/getThumbnailSrc.d.ts +0 -8
- package/dist/views/HierarchyList/HierarchyCards/getThumbnailSrc.d.ts.map +0 -1
- package/dist/views/HierarchyList/HierarchyCards/getThumbnailSrc.js +0 -21
- package/dist/views/HierarchyList/HierarchyCards/getThumbnailSrc.js.map +0 -1
- package/dist/views/HierarchyList/HierarchyCards/index.css +0 -115
- package/dist/views/HierarchyList/HierarchyCards/index.d.ts +0 -80
- package/dist/views/HierarchyList/HierarchyCards/index.d.ts.map +0 -1
- package/dist/views/HierarchyList/HierarchyCards/index.js +0 -457
- package/dist/views/HierarchyList/HierarchyCards/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["getTranslation","DEFAULT_HIERARCHY_TREE_LIMIT","React","useCallback","useId","useMemo","useRef","CollapseLayersIcon","useConfig","useHierarchy","useRouter","useTranslation","Button","CreateDocumentButton","DelayedSpinner","LoadMore","TreeFocusProvider","useTreeFocus","TreeNode","useChildren","baseClass","ROOT_ANCESTOR_IDS","getDocumentTitle","doc","useAsTitle","docId","id","idStr","String","value","HierarchyTreeInner","baseFilter","collectionSlug","filterByCollections","icon","initialData","initialDataProp","initialExpandedNodes","initialExpandedNodesProp","onNodeClick","selectedNodeId","useAsTitleProp","focusedId","moveFocus","setFocusedId","router","i18n","t","getEntityConfig","createDrawerSlug","collapseAllForCollection","getExpandedNodesForCollection","getTreeDataForCollection","toggleNodeForCollection","typeFieldName","collectionConfig","hierarchyConfig","hierarchy","undefined","parentFieldName","treeLimit","admin","allPossibleTypeValues","relatedCollections","Object","keys","contextData","baseFilterKey","JSON","stringify","contextBaseFilterKey","contextSeededRef","lastInitialExpandedRef","current","expandedNodes","contextExpanded","size","Set","handleToggleNode","wasSeeded","length","initialSet","map","isCurrentlyExpanded","has","nodeId","handleCollapseAll","childrenCache","Map","prevBaseFilterKeyRef","clear","docs","docsByParent","parentId","parentKey","set","get","push","filterKey","slice","sort","join","cacheKey","parentMeta","loadedParents","loadedCount","children","hasMore","page","Math","ceil","totalDocs","treeRef","rootNodes","isLoading","loadMore","loadMoreFromHook","refresh","cache","enabled","limit","handleLoadMore","handleNodeClick","rootFocusableIds","node","firstRootFocusableId","lastRootFocusableId","handleTreeKeyDown","e","key","preventDefault","_jsx","className","collectionLabel","buttonStyle","collections","drawerSlug","label","labels","singular","onSave","isAllSelected","handleAllClick","_jsxs","onKeyDown","ref","role","tabIndex","filter","Boolean","onClick","plural","margin","tooltip","nodeIdStr","nodeTitle","ancestorIds","depth","dropParentFieldName","hasChildren","title","onSelect","onToggle","selected","currentCount","onLoadMore","HierarchyTree","props"],"sources":["../../../../src/elements/Hierarchy/Tree/index.tsx"],"sourcesContent":["'use client'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { DEFAULT_HIERARCHY_TREE_LIMIT } from 'payload/shared'\nimport React, { useCallback, useId, useMemo, useRef } from 'react'\n\nimport type { CachedChildren, HierarchyTreeProps, TreeDocument } from './types.js'\n\nimport { CollapseLayersIcon } from '../../../icons/CollapseLayers/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useHierarchy } from '../../../providers/Hierarchy/index.js'\nimport { useRouter } from '../../../providers/RouterAdapter/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { Button } from '../../Button/index.js'\nimport { CreateDocumentButton } from '../../CreateDocumentButton/index.js'\nimport { DelayedSpinner } from '../../DelayedSpinner/index.js'\nimport { LoadMore } from './LoadMore/index.js'\nimport { TreeFocusProvider, useTreeFocus } from './TreeFocusContext.js'\nimport { TreeNode } from './TreeNode/index.js'\nimport { useChildren } from './useChildren.js'\nimport './index.css'\n\nconst baseClass = 'tree'\n\n/** Root nodes have no ancestors; hoisted so the reference stays stable across renders. */\nconst ROOT_ANCESTOR_IDS: (number | string)[] = []\n\nconst getDocumentTitle = (doc: TreeDocument, useAsTitle: string | undefined): string => {\n const docId: number | string = doc.id\n const idStr = typeof docId === 'number' ? String(docId) : docId\n\n if (!useAsTitle) {\n return idStr\n }\n\n const value = doc[useAsTitle]\n if (value && (typeof value === 'string' || typeof value === 'number')) {\n return String(value)\n }\n return idStr\n}\n\nconst HierarchyTreeInner: React.FC<HierarchyTreeProps> = ({\n baseFilter,\n collectionSlug,\n filterByCollections,\n icon,\n initialData: initialDataProp,\n initialExpandedNodes: initialExpandedNodesProp,\n onNodeClick,\n selectedNodeId,\n useAsTitle: useAsTitleProp,\n}) => {\n const { focusedId, moveFocus, setFocusedId } = useTreeFocus()\n const router = useRouter()\n const { i18n, t } = useTranslation()\n const { getEntityConfig } = useConfig()\n const createDrawerSlug = `tree-create-${useId()}`\n\n const {\n collapseAllForCollection,\n getExpandedNodesForCollection,\n getTreeDataForCollection,\n toggleNodeForCollection,\n typeFieldName,\n } = useHierarchy()\n\n const collectionConfig = getEntityConfig({ collectionSlug })\n const hierarchyConfig =\n collectionConfig.hierarchy && typeof collectionConfig.hierarchy === 'object'\n ? collectionConfig.hierarchy\n : undefined\n const parentFieldName = hierarchyConfig?.parentFieldName\n const treeLimit = hierarchyConfig?.admin?.treeLimit ?? DEFAULT_HIERARCHY_TREE_LIMIT\n const useAsTitle = useAsTitleProp ?? collectionConfig.admin?.useAsTitle\n\n const allPossibleTypeValues = useMemo(\n () =>\n hierarchyConfig?.relatedCollections\n ? Object.keys(hierarchyConfig.relatedCollections)\n : undefined,\n [hierarchyConfig?.relatedCollections],\n )\n\n const contextData = getTreeDataForCollection(collectionSlug)\n const baseFilterKey = baseFilter ? JSON.stringify(baseFilter) : ''\n const contextBaseFilterKey = contextData?.baseFilter ? JSON.stringify(contextData.baseFilter) : ''\n const initialData =\n baseFilterKey === contextBaseFilterKey ? (contextData ?? initialDataProp) : initialDataProp\n // Tracks whether context has been seeded at least once since the last navigation.\n // Resets when initialExpandedNodesProp changes (new array reference = navigation).\n // Allows the memo to distinguish \"not yet seeded\" (fall back to prop) from\n // \"user collapsed all nodes\" (trust empty context).\n const contextSeededRef = useRef(false)\n const lastInitialExpandedRef = useRef(initialExpandedNodesProp)\n if (lastInitialExpandedRef.current !== initialExpandedNodesProp) {\n lastInitialExpandedRef.current = initialExpandedNodesProp\n contextSeededRef.current = false\n }\n\n const expandedNodes = useMemo(() => {\n const contextExpanded = getExpandedNodesForCollection(collectionSlug)\n if (contextExpanded.size > 0) {\n contextSeededRef.current = true\n return contextExpanded\n }\n if (contextSeededRef.current) {\n // Context was seeded (had nodes since last navigation) — trust empty set as \"all collapsed\"\n return contextExpanded\n }\n return initialExpandedNodesProp ? new Set(initialExpandedNodesProp) : contextExpanded\n }, [collectionSlug, getExpandedNodesForCollection, initialExpandedNodesProp])\n\n const handleToggleNode = useCallback(\n ({ id }: { id: number | string }) => {\n // Mark context as seeded so the memo never falls back to the prop after this interaction.\n // Capture the previous value first — seeding is only needed on the very first interaction.\n const wasSeeded = contextSeededRef.current\n contextSeededRef.current = true\n const contextExpanded = getExpandedNodesForCollection(collectionSlug)\n if (!wasSeeded && contextExpanded.size === 0 && initialExpandedNodesProp?.length) {\n // Context not yet seeded. Seed it with all initial nodes, applying the toggle correctly:\n // exclude the target if collapsing, include it if expanding.\n const initialSet = new Set(initialExpandedNodesProp.map(String))\n const isCurrentlyExpanded = initialSet.has(String(id))\n for (const nodeId of initialExpandedNodesProp) {\n if (!isCurrentlyExpanded || String(nodeId) !== String(id)) {\n toggleNodeForCollection(collectionSlug, nodeId)\n }\n }\n if (!isCurrentlyExpanded) {\n toggleNodeForCollection(collectionSlug, id)\n }\n return\n }\n toggleNodeForCollection(collectionSlug, id)\n },\n [\n collectionSlug,\n getExpandedNodesForCollection,\n initialExpandedNodesProp,\n toggleNodeForCollection,\n ],\n )\n\n const handleCollapseAll = useCallback(() => {\n // Mark context as seeded so the expandedNodes memo trusts the now-empty context\n // rather than falling back to the server-provided initial nodes.\n contextSeededRef.current = true\n collapseAllForCollection(collectionSlug)\n }, [collapseAllForCollection, collectionSlug])\n\n // Pre-populate cache with initialData synchronously before first render\n const childrenCache = useRef<Map<string, CachedChildren>>(new Map())\n\n const prevBaseFilterKeyRef = useRef(baseFilterKey)\n if (prevBaseFilterKeyRef.current !== baseFilterKey) {\n prevBaseFilterKeyRef.current = baseFilterKey\n childrenCache.current.clear()\n }\n\n useMemo(() => {\n if (!initialData || initialData.docs.length === 0) {\n return\n }\n\n const docsByParent = new Map<string, TreeDocument[]>()\n for (const doc of initialData.docs) {\n const parentId = doc[parentFieldName] || 'null'\n const parentKey = String(parentId)\n if (!docsByParent.has(parentKey)) {\n docsByParent.set(parentKey, [])\n }\n docsByParent.get(parentKey).push(doc)\n }\n\n const filterKey = filterByCollections?.length\n ? filterByCollections.slice().sort().join(',')\n : ''\n for (const [parentKey, docs] of docsByParent) {\n const cacheKey = `${collectionSlug}-${parentKey}-${filterKey}-${baseFilterKey}`\n const parentMeta = initialData.loadedParents[parentKey]\n\n if (parentMeta) {\n const loadedCount = parentMeta.loadedCount ?? docs.length\n childrenCache.current.set(cacheKey, {\n children: docs,\n hasMore: parentMeta.hasMore,\n page: Math.ceil(loadedCount / treeLimit) || 1,\n totalDocs: parentMeta.totalDocs,\n })\n } else {\n childrenCache.current.set(cacheKey, {\n children: docs,\n hasMore: false,\n page: 1,\n totalDocs: docs.length,\n })\n }\n }\n }, [initialData, filterByCollections, parentFieldName, collectionSlug, treeLimit, baseFilterKey])\n\n const treeRef = useRef<HTMLDivElement>(null)\n\n const {\n children: rootNodes,\n hasMore,\n isLoading,\n loadMore: loadMoreFromHook,\n refresh,\n totalDocs,\n } = useChildren({\n allPossibleTypeValues,\n baseFilter,\n cache: childrenCache,\n collectionSlug,\n enabled: true,\n filterByCollections,\n initialData,\n limit: treeLimit,\n parentFieldName,\n parentId: 'null',\n typeFieldName,\n useAsTitle,\n })\n\n const handleLoadMore = useCallback(async () => {\n await loadMoreFromHook()\n }, [loadMoreFromHook])\n\n const handleNodeClick = useCallback(\n ({ id }: { id: number | string }) => {\n onNodeClick?.({ id })\n },\n [onNodeClick],\n )\n\n const rootFocusableIds = useMemo(\n () => (rootNodes ? rootNodes.map((node) => `node-${String(node.id)}`) : []),\n [rootNodes],\n )\n\n const firstRootFocusableId = rootFocusableIds[0]\n const lastRootFocusableId = rootFocusableIds[rootFocusableIds.length - 1]\n\n const handleTreeKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n\n if (\n focusedId &&\n firstRootFocusableId &&\n lastRootFocusableId &&\n focusedId === lastRootFocusableId\n ) {\n setFocusedId(firstRootFocusableId)\n return\n }\n\n moveFocus('down')\n } else if (e.key === 'ArrowUp') {\n e.preventDefault()\n\n if (\n focusedId &&\n firstRootFocusableId &&\n lastRootFocusableId &&\n focusedId === firstRootFocusableId\n ) {\n setFocusedId(lastRootFocusableId)\n return\n }\n\n moveFocus('up')\n }\n },\n [firstRootFocusableId, focusedId, lastRootFocusableId, moveFocus, setFocusedId],\n )\n\n if (isLoading && !rootNodes) {\n return (\n <div className={baseClass}>\n <DelayedSpinner baseClass={baseClass} isLoading={true} />\n </div>\n )\n }\n\n if (!rootNodes || rootNodes.length === 0) {\n const collectionLabel = getEntityConfig({ collectionSlug })\n return (\n <div className={baseClass}>\n <CreateDocumentButton\n buttonStyle=\"primary\"\n collections={[{ collectionSlug }]}\n drawerSlug={createDrawerSlug}\n label={t('general:createNewLabel', {\n label: getTranslation(collectionLabel.labels.singular, i18n),\n })}\n onSave={async () => {\n await refresh()\n router.refresh()\n }}\n />\n </div>\n )\n }\n\n const isAllSelected = selectedNodeId === null\n const handleAllClick = () => onNodeClick?.({ id: null })\n\n return (\n <div\n className={baseClass}\n onKeyDown={handleTreeKeyDown}\n ref={treeRef}\n role=\"tree\"\n tabIndex={-1}\n >\n <div className={`${baseClass}__all-option-wrapper`}>\n <div\n aria-selected={isAllSelected}\n className={[\n `${baseClass}__all-option`,\n 'sidebar-row',\n isAllSelected && `${baseClass}__all-option--selected`,\n isAllSelected && 'sidebar-row--selected',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={handleAllClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleAllClick()\n }\n }}\n role=\"treeitem\"\n tabIndex={0}\n >\n {Boolean(icon) && <span className=\"sidebar-row__icon\">{icon}</span>}\n <span className=\"sidebar-row__title\">\n {getTranslation(getEntityConfig({ collectionSlug })?.labels?.plural, i18n)}\n </span>\n </div>\n {expandedNodes.size > 0 && (\n <Button\n aria-label={t('fields:collapseAll')}\n buttonStyle=\"ghost\"\n className={`${baseClass}__collapse-all-button`}\n margin={false}\n onClick={handleCollapseAll}\n tooltip={t('fields:collapseAll')}\n >\n <CollapseLayersIcon />\n </Button>\n )}\n </div>\n {rootNodes.map((node) => {\n const nodeId: number | string = node.id\n const nodeIdStr = typeof nodeId === 'number' ? String(nodeId) : nodeId\n const nodeTitle = getDocumentTitle(node, useAsTitle)\n\n return (\n <TreeNode\n allPossibleTypeValues={allPossibleTypeValues}\n ancestorIds={ROOT_ANCESTOR_IDS}\n baseFilter={baseFilter}\n cache={childrenCache}\n collectionSlug={collectionSlug}\n depth={0}\n dropParentFieldName={parentFieldName}\n expandedNodes={expandedNodes}\n filterByCollections={filterByCollections}\n key={nodeIdStr}\n limit={treeLimit}\n node={{ id: nodeId, hasChildren: true, title: nodeTitle }}\n onSelect={handleNodeClick}\n onToggle={handleToggleNode}\n parentFieldName={parentFieldName}\n selected={nodeIdStr === String(selectedNodeId)}\n selectedNodeId={selectedNodeId}\n typeFieldName={typeFieldName}\n useAsTitle={useAsTitle}\n />\n )\n })}\n {hasMore && (\n <LoadMore\n currentCount={rootNodes.length}\n depth={0}\n id=\"load-more-root\"\n onLoadMore={handleLoadMore}\n totalDocs={totalDocs}\n />\n )}\n </div>\n )\n}\n\nexport const HierarchyTree: React.FC<HierarchyTreeProps> = (props) => {\n return (\n <TreeFocusProvider>\n <HierarchyTreeInner {...props} />\n </TreeFocusProvider>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["useModal","getTranslation","DEFAULT_HIERARCHY_TREE_LIMIT","React","useCallback","useId","useMemo","useRef","useState","PlusIcon","useAuth","useConfig","useHierarchy","useRouter","useTranslation","Button","CreateDocumentButton","DelayedSpinner","DocumentDrawer","LoadMore","TreeFocusProvider","useTreeFocus","TreeNode","useChildren","baseClass","getDocumentTitle","doc","useAsTitle","docId","id","idStr","String","value","HierarchyTreeInner","baseFilter","collectionSlug","filterByCollections","icon","initialData","initialDataProp","initialExpandedNodes","initialExpandedNodesProp","onNodeClick","selectedNodeId","useAsTitleProp","focusedId","moveFocus","setFocusedId","router","i18n","t","permissions","getEntityConfig","closeModal","openModal","createDrawerSlug","isCreateDrawerOpen","setIsCreateDrawerOpen","getExpandedNodesForCollection","getTreeDataForCollection","toggleNodeForCollection","typeFieldName","collectionConfig","hierarchyConfig","hierarchy","undefined","parentFieldName","treeLimit","admin","canCreate","Boolean","collections","create","allPossibleTypeValues","relatedCollections","Object","keys","contextData","baseFilterKey","JSON","stringify","contextBaseFilterKey","contextSeededRef","lastInitialExpandedRef","current","expandedNodes","contextExpanded","size","Set","handleToggleNode","wasSeeded","length","initialSet","map","isCurrentlyExpanded","has","nodeId","childrenCache","Map","prevBaseFilterKeyRef","clear","docs","docsByParent","parentId","parentKey","set","get","push","filterKey","slice","sort","join","cacheKey","parentMeta","loadedParents","loadedCount","children","hasMore","page","Math","ceil","totalDocs","treeRef","rootNodes","isLoading","loadMore","loadMoreFromHook","refresh","cache","enabled","limit","handleLoadMore","handleNodeClick","rootFocusableIds","node","firstRootFocusableId","lastRootFocusableId","handleTreeKeyDown","e","key","preventDefault","_jsx","className","collectionLabel","buttonStyle","drawerSlug","label","labels","singular","onSave","isAllSelected","handleAllClick","_jsxs","onKeyDown","ref","role","tabIndex","filter","onClick","plural","_Fragment","margin","redirectAfterCreate","nodeIdStr","nodeTitle","depth","hasChildren","title","onSelect","onToggle","selected","currentCount","onLoadMore","HierarchyTree","props"],"sources":["../../../../src/elements/Hierarchy/Tree/index.tsx"],"sourcesContent":["'use client'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { DEFAULT_HIERARCHY_TREE_LIMIT } from 'payload/shared'\nimport React, { useCallback, useId, useMemo, useRef, useState } from 'react'\n\nimport type { CachedChildren, HierarchyTreeProps, TreeDocument } from './types.js'\n\nimport { PlusIcon } from '../../../icons/Plus/index.js'\nimport { useAuth } from '../../../providers/Auth/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useHierarchy } from '../../../providers/Hierarchy/index.js'\nimport { useRouter } from '../../../providers/RouterAdapter/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { Button } from '../../Button/index.js'\nimport { CreateDocumentButton } from '../../CreateDocumentButton/index.js'\nimport { DelayedSpinner } from '../../DelayedSpinner/index.js'\nimport { DocumentDrawer } from '../../DocumentDrawer/index.js'\nimport { LoadMore } from './LoadMore/index.js'\nimport { TreeFocusProvider, useTreeFocus } from './TreeFocusContext.js'\nimport { TreeNode } from './TreeNode/index.js'\nimport { useChildren } from './useChildren.js'\nimport './index.css'\n\nconst baseClass = 'tree'\n\nconst getDocumentTitle = (doc: TreeDocument, useAsTitle: string | undefined): string => {\n const docId: number | string = doc.id\n const idStr = typeof docId === 'number' ? String(docId) : docId\n\n if (!useAsTitle) {\n return idStr\n }\n\n const value = doc[useAsTitle]\n if (value && (typeof value === 'string' || typeof value === 'number')) {\n return String(value)\n }\n return idStr\n}\n\nconst HierarchyTreeInner: React.FC<HierarchyTreeProps> = ({\n baseFilter,\n collectionSlug,\n filterByCollections,\n icon,\n initialData: initialDataProp,\n initialExpandedNodes: initialExpandedNodesProp,\n onNodeClick,\n selectedNodeId,\n useAsTitle: useAsTitleProp,\n}) => {\n const { focusedId, moveFocus, setFocusedId } = useTreeFocus()\n const router = useRouter()\n const { i18n, t } = useTranslation()\n const { permissions } = useAuth()\n const { getEntityConfig } = useConfig()\n const { closeModal, openModal } = useModal()\n const createDrawerSlug = `tree-create-${useId()}`\n const [isCreateDrawerOpen, setIsCreateDrawerOpen] = useState(false)\n\n const {\n getExpandedNodesForCollection,\n getTreeDataForCollection,\n toggleNodeForCollection,\n typeFieldName,\n } = useHierarchy()\n\n const collectionConfig = getEntityConfig({ collectionSlug })\n const hierarchyConfig =\n collectionConfig.hierarchy && typeof collectionConfig.hierarchy === 'object'\n ? collectionConfig.hierarchy\n : undefined\n const parentFieldName = hierarchyConfig?.parentFieldName\n const treeLimit = hierarchyConfig?.admin?.treeLimit ?? DEFAULT_HIERARCHY_TREE_LIMIT\n const useAsTitle = useAsTitleProp ?? collectionConfig.admin?.useAsTitle\n const canCreate = Boolean(permissions?.collections?.[collectionSlug]?.create)\n\n const allPossibleTypeValues = useMemo(\n () =>\n hierarchyConfig?.relatedCollections\n ? Object.keys(hierarchyConfig.relatedCollections)\n : undefined,\n [hierarchyConfig?.relatedCollections],\n )\n\n const contextData = getTreeDataForCollection(collectionSlug)\n const baseFilterKey = baseFilter ? JSON.stringify(baseFilter) : ''\n const contextBaseFilterKey = contextData?.baseFilter ? JSON.stringify(contextData.baseFilter) : ''\n const initialData =\n baseFilterKey === contextBaseFilterKey ? (contextData ?? initialDataProp) : initialDataProp\n // Tracks whether context has been seeded at least once since the last navigation.\n // Resets when initialExpandedNodesProp changes (new array reference = navigation).\n // Allows the memo to distinguish \"not yet seeded\" (fall back to prop) from\n // \"user collapsed all nodes\" (trust empty context).\n const contextSeededRef = useRef(false)\n const lastInitialExpandedRef = useRef(initialExpandedNodesProp)\n if (lastInitialExpandedRef.current !== initialExpandedNodesProp) {\n lastInitialExpandedRef.current = initialExpandedNodesProp\n contextSeededRef.current = false\n }\n\n const expandedNodes = useMemo(() => {\n const contextExpanded = getExpandedNodesForCollection(collectionSlug)\n if (contextExpanded.size > 0) {\n contextSeededRef.current = true\n return contextExpanded\n }\n if (contextSeededRef.current) {\n // Context was seeded (had nodes since last navigation) — trust empty set as \"all collapsed\"\n return contextExpanded\n }\n return initialExpandedNodesProp ? new Set(initialExpandedNodesProp) : contextExpanded\n }, [collectionSlug, getExpandedNodesForCollection, initialExpandedNodesProp])\n\n const handleToggleNode = useCallback(\n ({ id }: { id: number | string }) => {\n // Mark context as seeded so the memo never falls back to the prop after this interaction.\n // Capture the previous value first — seeding is only needed on the very first interaction.\n const wasSeeded = contextSeededRef.current\n contextSeededRef.current = true\n const contextExpanded = getExpandedNodesForCollection(collectionSlug)\n if (!wasSeeded && contextExpanded.size === 0 && initialExpandedNodesProp?.length) {\n // Context not yet seeded. Seed it with all initial nodes, applying the toggle correctly:\n // exclude the target if collapsing, include it if expanding.\n const initialSet = new Set(initialExpandedNodesProp.map(String))\n const isCurrentlyExpanded = initialSet.has(String(id))\n for (const nodeId of initialExpandedNodesProp) {\n if (!isCurrentlyExpanded || String(nodeId) !== String(id)) {\n toggleNodeForCollection(collectionSlug, nodeId)\n }\n }\n if (!isCurrentlyExpanded) {\n toggleNodeForCollection(collectionSlug, id)\n }\n return\n }\n toggleNodeForCollection(collectionSlug, id)\n },\n [\n collectionSlug,\n getExpandedNodesForCollection,\n initialExpandedNodesProp,\n toggleNodeForCollection,\n ],\n )\n\n // Pre-populate cache with initialData synchronously before first render\n const childrenCache = useRef<Map<string, CachedChildren>>(new Map())\n\n const prevBaseFilterKeyRef = useRef(baseFilterKey)\n if (prevBaseFilterKeyRef.current !== baseFilterKey) {\n prevBaseFilterKeyRef.current = baseFilterKey\n childrenCache.current.clear()\n }\n\n useMemo(() => {\n if (!initialData || initialData.docs.length === 0) {\n return\n }\n\n const docsByParent = new Map<string, TreeDocument[]>()\n for (const doc of initialData.docs) {\n const parentId = doc[parentFieldName] || 'null'\n const parentKey = String(parentId)\n if (!docsByParent.has(parentKey)) {\n docsByParent.set(parentKey, [])\n }\n docsByParent.get(parentKey).push(doc)\n }\n\n const filterKey = filterByCollections?.length\n ? filterByCollections.slice().sort().join(',')\n : ''\n for (const [parentKey, docs] of docsByParent) {\n const cacheKey = `${collectionSlug}-${parentKey}-${filterKey}-${baseFilterKey}`\n const parentMeta = initialData.loadedParents[parentKey]\n\n if (parentMeta) {\n const loadedCount = parentMeta.loadedCount ?? docs.length\n childrenCache.current.set(cacheKey, {\n children: docs,\n hasMore: parentMeta.hasMore,\n page: Math.ceil(loadedCount / treeLimit) || 1,\n totalDocs: parentMeta.totalDocs,\n })\n } else {\n childrenCache.current.set(cacheKey, {\n children: docs,\n hasMore: false,\n page: 1,\n totalDocs: docs.length,\n })\n }\n }\n }, [initialData, filterByCollections, parentFieldName, collectionSlug, treeLimit, baseFilterKey])\n\n const treeRef = useRef<HTMLDivElement>(null)\n\n const {\n children: rootNodes,\n hasMore,\n isLoading,\n loadMore: loadMoreFromHook,\n refresh,\n totalDocs,\n } = useChildren({\n allPossibleTypeValues,\n baseFilter,\n cache: childrenCache,\n collectionSlug,\n enabled: true,\n filterByCollections,\n initialData,\n limit: treeLimit,\n parentFieldName,\n parentId: 'null',\n typeFieldName,\n useAsTitle,\n })\n\n const handleLoadMore = useCallback(async () => {\n await loadMoreFromHook()\n }, [loadMoreFromHook])\n\n const handleNodeClick = useCallback(\n ({ id }: { id: number | string }) => {\n onNodeClick?.({ id })\n },\n [onNodeClick],\n )\n\n const rootFocusableIds = useMemo(\n () => (rootNodes ? rootNodes.map((node) => `node-${String(node.id)}`) : []),\n [rootNodes],\n )\n\n const firstRootFocusableId = rootFocusableIds[0]\n const lastRootFocusableId = rootFocusableIds[rootFocusableIds.length - 1]\n\n const handleTreeKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n\n if (\n focusedId &&\n firstRootFocusableId &&\n lastRootFocusableId &&\n focusedId === lastRootFocusableId\n ) {\n setFocusedId(firstRootFocusableId)\n return\n }\n\n moveFocus('down')\n } else if (e.key === 'ArrowUp') {\n e.preventDefault()\n\n if (\n focusedId &&\n firstRootFocusableId &&\n lastRootFocusableId &&\n focusedId === firstRootFocusableId\n ) {\n setFocusedId(lastRootFocusableId)\n return\n }\n\n moveFocus('up')\n }\n },\n [firstRootFocusableId, focusedId, lastRootFocusableId, moveFocus, setFocusedId],\n )\n\n if (isLoading && !rootNodes) {\n return (\n <div className={baseClass}>\n <DelayedSpinner baseClass={baseClass} isLoading={true} />\n </div>\n )\n }\n\n if (!rootNodes || rootNodes.length === 0) {\n const collectionLabel = getEntityConfig({ collectionSlug })\n return (\n <div className={baseClass}>\n <CreateDocumentButton\n buttonStyle=\"primary\"\n collections={[{ collectionSlug }]}\n drawerSlug={createDrawerSlug}\n label={t('general:createNewLabel', {\n label: getTranslation(collectionLabel.labels.singular, i18n),\n })}\n onSave={async () => {\n await refresh()\n router.refresh()\n }}\n />\n </div>\n )\n }\n\n const isAllSelected = selectedNodeId === null\n const handleAllClick = () => onNodeClick?.({ id: null })\n\n return (\n <div\n className={baseClass}\n onKeyDown={handleTreeKeyDown}\n ref={treeRef}\n role=\"tree\"\n tabIndex={-1}\n >\n <div className={`${baseClass}__all-option-wrapper`}>\n <div\n aria-selected={isAllSelected}\n className={[\n `${baseClass}__all-option`,\n 'sidebar-row',\n isAllSelected && `${baseClass}__all-option--selected`,\n isAllSelected && 'sidebar-row--selected',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={handleAllClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleAllClick()\n }\n }}\n role=\"treeitem\"\n tabIndex={0}\n >\n <span className=\"sidebar-row__title\">\n {t('general:all')}{' '}\n {getTranslation(getEntityConfig({ collectionSlug })?.labels?.plural, i18n)}\n </span>\n </div>\n {canCreate && (\n <>\n <Button\n aria-label={t('general:createNew')}\n buttonStyle=\"ghost\"\n className={`${baseClass}__create-button`}\n margin={false}\n onClick={() => {\n setIsCreateDrawerOpen(true)\n openModal(createDrawerSlug)\n }}\n >\n <PlusIcon size={24} />\n </Button>\n {isCreateDrawerOpen && (\n <DocumentDrawer\n collectionSlug={collectionSlug}\n drawerSlug={createDrawerSlug}\n initialData={parentFieldName ? { [parentFieldName]: null } : undefined}\n onSave={async () => {\n closeModal(createDrawerSlug)\n setIsCreateDrawerOpen(false)\n await refresh()\n router.refresh()\n }}\n redirectAfterCreate={false}\n />\n )}\n </>\n )}\n </div>\n {rootNodes.map((node) => {\n const nodeId: number | string = node.id\n const nodeIdStr = typeof nodeId === 'number' ? String(nodeId) : nodeId\n const nodeTitle = getDocumentTitle(node, useAsTitle)\n\n return (\n <TreeNode\n allPossibleTypeValues={allPossibleTypeValues}\n baseFilter={baseFilter}\n cache={childrenCache}\n collectionSlug={collectionSlug}\n depth={0}\n expandedNodes={expandedNodes}\n filterByCollections={filterByCollections}\n icon={icon}\n key={nodeIdStr}\n limit={treeLimit}\n node={{ id: nodeId, hasChildren: true, title: nodeTitle }}\n onSelect={handleNodeClick}\n onToggle={handleToggleNode}\n parentFieldName={parentFieldName}\n selected={nodeIdStr === String(selectedNodeId)}\n selectedNodeId={selectedNodeId}\n typeFieldName={typeFieldName}\n useAsTitle={useAsTitle}\n />\n )\n })}\n {hasMore && (\n <LoadMore\n currentCount={rootNodes.length}\n depth={0}\n id=\"load-more-root\"\n onLoadMore={handleLoadMore}\n totalDocs={totalDocs}\n />\n )}\n </div>\n )\n}\n\nexport const HierarchyTree: React.FC<HierarchyTreeProps> = (props) => {\n return (\n <TreeFocusProvider>\n <HierarchyTreeInner {...props} />\n </TreeFocusProvider>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -53,21 +53,13 @@ export type TreeInitialData = {
|
|
|
53
53
|
};
|
|
54
54
|
export type TreeNodeProps = {
|
|
55
55
|
allPossibleTypeValues?: string[];
|
|
56
|
-
/**
|
|
57
|
-
* Ids of this node's ancestors, so a folder can't be dropped into its own subtree.
|
|
58
|
-
*/
|
|
59
|
-
ancestorIds?: (number | string)[];
|
|
60
56
|
baseFilter?: null | Where;
|
|
61
57
|
cache: TreeCache;
|
|
62
58
|
collectionSlug: string;
|
|
63
59
|
depth: number;
|
|
64
|
-
/**
|
|
65
|
-
* Parent field name to set on documents dropped onto this node. Omit to make the tree inert as a
|
|
66
|
-
* drop target.
|
|
67
|
-
*/
|
|
68
|
-
dropParentFieldName?: string;
|
|
69
60
|
expandedNodes: Set<number | string>;
|
|
70
61
|
filterByCollections?: string[];
|
|
62
|
+
icon?: ReactNode;
|
|
71
63
|
limit: number;
|
|
72
64
|
node: TreeNodeData;
|
|
73
65
|
onSelect?: ({ id }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/elements/Hierarchy/Tree/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB,GAAG,UAAU,CAAA;AAEd,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,CAAC,EAAE,IAAI,GAAG,KAAK,CAAA;IACzB,IAAI,EAAE,iBAAiB,EAAE,CAAA;IAEzB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC7F,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,CAAC,EAAE,IAAI,GAAG,KAAK,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;IACtB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC9B,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,gHAAgH;IAChH,WAAW,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAA;IACzC,qHAAqH;IACrH,oBAAoB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IAC1C,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAC9D,cAAc,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAA;IACvC,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAID,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;IACtB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,EAAE,OAAO,CAAA;IACpB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAA;AAE9D,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,YAAY,EAAE,CAAA;IACpB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC7F,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAA;IAChC
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/elements/Hierarchy/Tree/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/elements/Hierarchy/Tree/types.ts"],"sourcesContent":["import type { TypeWithID, Where } from 'payload'\nimport type { ReactNode, RefObject } from 'react'\n\nexport type HierarchyDocument = {\n [key: string]: unknown\n} & TypeWithID\n\nexport type HierarchyInitialData = {\n baseFilter?: null | Where\n docs: HierarchyDocument[]\n // Metadata about what was loaded - keyed by parent ID ('null' for root)\n loadedParents: Record<string, { hasMore: boolean; loadedCount?: number; totalDocs: number }>\n}\n\nexport type HierarchyTreeProps = {\n baseFilter?: null | Where\n collectionSlug: string\n filterByCollections?: string[]\n icon?: ReactNode\n /** Initial data for first render (before context hydration). After hydration, context data takes precedence. */\n initialData?: HierarchyInitialData | null\n /** Initial expanded nodes for first render (before context hydration). After hydration, context takes precedence. */\n initialExpandedNodes?: (number | string)[]\n onNodeClick?: ({ id }: { id: null | number | string }) => void\n selectedNodeId?: null | number | string\n useAsTitle?: string\n}\n\n// Tree primitive types (used by TreeNode, useChildren, HierarchyTree)\n\nexport type TreeDocument = {\n [key: string]: unknown\n id: number | string\n}\n\nexport type TreeNodeData = {\n hasChildren: boolean\n id: number | string\n title: string\n}\n\nexport type CachedChildren = {\n children: TreeDocument[]\n hasMore: boolean\n page: number\n totalDocs: number\n}\n\nexport type TreeCache = RefObject<Map<string, CachedChildren>>\n\nexport type TreeInitialData = {\n docs: TreeDocument[]\n loadedParents: Record<string, { hasMore: boolean; loadedCount?: number; totalDocs: number }>\n}\n\nexport type TreeNodeProps = {\n allPossibleTypeValues?: string[]\n
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/elements/Hierarchy/Tree/types.ts"],"sourcesContent":["import type { TypeWithID, Where } from 'payload'\nimport type { ReactNode, RefObject } from 'react'\n\nexport type HierarchyDocument = {\n [key: string]: unknown\n} & TypeWithID\n\nexport type HierarchyInitialData = {\n baseFilter?: null | Where\n docs: HierarchyDocument[]\n // Metadata about what was loaded - keyed by parent ID ('null' for root)\n loadedParents: Record<string, { hasMore: boolean; loadedCount?: number; totalDocs: number }>\n}\n\nexport type HierarchyTreeProps = {\n baseFilter?: null | Where\n collectionSlug: string\n filterByCollections?: string[]\n icon?: ReactNode\n /** Initial data for first render (before context hydration). After hydration, context data takes precedence. */\n initialData?: HierarchyInitialData | null\n /** Initial expanded nodes for first render (before context hydration). After hydration, context takes precedence. */\n initialExpandedNodes?: (number | string)[]\n onNodeClick?: ({ id }: { id: null | number | string }) => void\n selectedNodeId?: null | number | string\n useAsTitle?: string\n}\n\n// Tree primitive types (used by TreeNode, useChildren, HierarchyTree)\n\nexport type TreeDocument = {\n [key: string]: unknown\n id: number | string\n}\n\nexport type TreeNodeData = {\n hasChildren: boolean\n id: number | string\n title: string\n}\n\nexport type CachedChildren = {\n children: TreeDocument[]\n hasMore: boolean\n page: number\n totalDocs: number\n}\n\nexport type TreeCache = RefObject<Map<string, CachedChildren>>\n\nexport type TreeInitialData = {\n docs: TreeDocument[]\n loadedParents: Record<string, { hasMore: boolean; loadedCount?: number; totalDocs: number }>\n}\n\nexport type TreeNodeProps = {\n allPossibleTypeValues?: string[]\n baseFilter?: null | Where\n cache: TreeCache\n collectionSlug: string\n depth: number\n expandedNodes: Set<number | string>\n filterByCollections?: string[]\n icon?: ReactNode\n limit: number\n node: TreeNodeData\n onSelect?: ({ id }: { id: number | string }) => void\n onToggle: ({ id }: { id: number | string }) => void\n parentFieldName: string\n selected?: boolean\n selectedNodeId?: number | string\n typeFieldName?: null | string\n useAsTitle?: string\n}\n"],"mappings":"AAuDA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChildren.d.ts","sourceRoot":"","sources":["../../../../src/elements/Hierarchy/Tree/useChildren.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAMpC,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAK1E,KAAK,eAAe,GAAG;IACrB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAA;IAChC,gEAAgE;IAChE,UAAU,CAAC,EAAE,IAAI,GAAG,KAAK,CAAA;IACzB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC9B,WAAW,CAAC,EAAE,IAAI,GAAG,eAAe,CAAA;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;IACzB,aAAa,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,IAAI,GAAG,YAAY,EAAE,CAAA;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,wFAAwF;IACxF,IAAI,EAAE,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IACnC,QAAQ,EAAE,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IACvC,OAAO,EAAE,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IACtC,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,WAAW,kMAcrB,eAAe,KAAG,
|
|
1
|
+
{"version":3,"file":"useChildren.d.ts","sourceRoot":"","sources":["../../../../src/elements/Hierarchy/Tree/useChildren.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAMpC,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAK1E,KAAK,eAAe,GAAG;IACrB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAA;IAChC,gEAAgE;IAChE,UAAU,CAAC,EAAE,IAAI,GAAG,KAAK,CAAA;IACzB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC9B,WAAW,CAAC,EAAE,IAAI,GAAG,eAAe,CAAA;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;IACzB,aAAa,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,IAAI,GAAG,YAAY,EAAE,CAAA;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,wFAAwF;IACxF,IAAI,EAAE,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IACnC,QAAQ,EAAE,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IACvC,OAAO,EAAE,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IACtC,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,WAAW,kMAcrB,eAAe,KAAG,iBAyPpB,CAAA"}
|
|
@@ -125,17 +125,7 @@ export const useChildren = ({
|
|
|
125
125
|
// Client-side filter: only show items that are a superset of required collections
|
|
126
126
|
// Server query uses ANY (due to PG limitations), but we want ALL (superset)
|
|
127
127
|
const newDocs = filterByCollections?.length && typeFieldName ? allDocs.filter(doc => isSuperset(doc[typeFieldName], filterByCollections)) : allDocs;
|
|
128
|
-
|
|
129
|
-
if (pageToFetch === 1) {
|
|
130
|
-
newChildren = newDocs;
|
|
131
|
-
} else {
|
|
132
|
-
// Dedupe against already-loaded children: page-number math can drift from the
|
|
133
|
-
// actual loaded count (e.g. after a cache merge), causing an overlapping page
|
|
134
|
-
// to be re-fetched here.
|
|
135
|
-
const existingIds = new Set((currentChildren || []).map(doc => doc.id));
|
|
136
|
-
const dedupedNewDocs = newDocs.filter(doc => !existingIds.has(doc.id));
|
|
137
|
-
newChildren = [...(currentChildren || []), ...dedupedNewDocs];
|
|
138
|
-
}
|
|
128
|
+
const newChildren = pageToFetch === 1 ? newDocs : [...(currentChildren || []), ...newDocs];
|
|
139
129
|
setChildren(newChildren);
|
|
140
130
|
setTotalDocs(data.totalDocs || 0);
|
|
141
131
|
setHasMore(data.hasNextPage || false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChildren.js","names":["combineWhereConstraints","formatAdminURL","qs","useCallback","useEffect","useRef","useState","useConfig","isSuperset","useChildren","allPossibleTypeValues","baseFilter","cache","cacheKey","cacheKeyProp","collectionSlug","enabled","filterByCollections","initialData","limit","parentFieldName","parentId","typeFieldName","useAsTitle","filterKey","length","slice","sort","join","baseFilterKey","JSON","stringify","String","cachedData","current","get","parentKey","parentMeta","loadedParents","hasInitialData","initialDocsForParent","docs","filter","doc","docParent","children","setChildren","isLoading","setIsLoading","page","setPage","totalDocs","setTotalDocs","hasMore","setHasMore","initializedRef","childrenRef","isLoadingRef","config","routes","api","serverURL","fetchPage","pageToFetch","currentChildren","parentCondition","or","exists","equals","filterCondition","in","not_in","undefined","where","queryParams","queryString","addQueryPrefix","url","apiRoute","path","response","fetch","credentials","ok","Error","data","json","allDocs","newDocs","newChildren","existingIds","Set","map","id","dedupedNewDocs","has","hasNextPage","set","emptyChildren","prevFilterKeyRef","load","currentCachedData","loadMore","shouldRefetchPage1","refresh","delete","effectiveChildren"],"sources":["../../../../src/elements/Hierarchy/Tree/useChildren.tsx"],"sourcesContent":["import type { Where } from 'payload'\n\nimport { combineWhereConstraints, formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\nimport type { TreeCache, TreeDocument, TreeInitialData } from './types.js'\n\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { isSuperset } from '../../../utilities/isSuperset.js'\n\ntype UseChildrenArgs = {\n allPossibleTypeValues?: string[]\n /** Base filter to apply to all queries (e.g., tenant filter) */\n baseFilter?: null | Where\n cache?: TreeCache\n /** Pre-computed cache key to ensure consistency with cache population */\n cacheKey?: string\n collectionSlug: string\n enabled?: boolean\n filterByCollections?: string[]\n initialData?: null | TreeInitialData\n limit?: number\n parentFieldName: string\n parentId: number | string\n typeFieldName?: null | string\n useAsTitle?: string\n}\n\ntype UseChildrenReturn = {\n children: null | TreeDocument[]\n hasMore: boolean\n isLoading: boolean\n /** Explicitly load children. Safe to call multiple times — no-ops if already loaded. */\n load: () => Promise<TreeDocument[]>\n loadMore: () => Promise<TreeDocument[]>\n refresh: () => Promise<TreeDocument[]>\n totalDocs: number\n}\n\nexport const useChildren = ({\n allPossibleTypeValues,\n baseFilter,\n cache,\n cacheKey: cacheKeyProp,\n collectionSlug,\n enabled = true,\n filterByCollections,\n initialData,\n limit = 2,\n parentFieldName,\n parentId,\n typeFieldName,\n useAsTitle,\n}: UseChildrenArgs): UseChildrenReturn => {\n const filterKey = filterByCollections?.length ? filterByCollections.slice().sort().join(',') : ''\n const baseFilterKey = baseFilter ? JSON.stringify(baseFilter) : ''\n // Use provided cacheKey for consistency with cache population, or compute if not provided\n const cacheKey =\n cacheKeyProp ?? `${collectionSlug}-${String(parentId)}-${filterKey}-${baseFilterKey}`\n const cachedData = cache?.current.get(cacheKey)\n\n // Check if we have initial data for this specific parent\n const parentKey = parentId === 'null' ? 'null' : String(parentId)\n const parentMeta = initialData?.loadedParents?.[parentKey]\n const hasInitialData = !!parentMeta\n\n // Extract docs for this parent from initialData if available\n // Apply same superset filter as fetchPage for consistency\n const initialDocsForParent = hasInitialData\n ? initialData.docs.filter((doc) => {\n const docParent = doc[parentFieldName] || 'null'\n if (String(docParent) !== parentKey) {\n return false\n }\n if (filterByCollections?.length && typeFieldName) {\n return isSuperset(doc[typeFieldName] as string[] | undefined, filterByCollections)\n }\n return true\n })\n : null\n\n const [children, setChildren] = useState<null | TreeDocument[]>(\n initialDocsForParent || cachedData?.children || null,\n )\n const [isLoading, setIsLoading] = useState(false)\n const [page, setPage] = useState(cachedData?.page || 1)\n const [totalDocs, setTotalDocs] = useState(parentMeta?.totalDocs || cachedData?.totalDocs || 0)\n const [hasMore, setHasMore] = useState(parentMeta?.hasMore || cachedData?.hasMore || false)\n const initializedRef = useRef(!!hasInitialData)\n // Refs for stable access inside load() without adding state to its dep array\n const childrenRef = useRef(children)\n childrenRef.current = children\n const isLoadingRef = useRef(isLoading)\n isLoadingRef.current = isLoading\n const {\n config: {\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n const fetchPage = useCallback(\n async (\n pageToFetch: number,\n currentChildren: null | TreeDocument[],\n ): Promise<TreeDocument[]> => {\n setIsLoading(true)\n\n try {\n const parentCondition =\n parentId === 'null' || parentId === null\n ? {\n or: [\n { [parentFieldName]: { exists: false } },\n { [parentFieldName]: { equals: null } },\n ],\n }\n : { [parentFieldName]: { equals: parentId } }\n\n // Build filter condition for collection type filtering\n // Matches items that:\n // - allow ANY of the selected collections, OR\n // - are unrestricted (type field doesn't exist), OR\n // - have empty allowedTypes array (unrestricted)\n const filterCondition: undefined | Where =\n filterByCollections?.length && typeFieldName\n ? {\n or: [\n { [typeFieldName]: { in: filterByCollections } },\n { [typeFieldName]: { exists: false } },\n // Using not_in with all possible values matches empty arrays in both MongoDB and Postgres\n ...(allPossibleTypeValues?.length\n ? [{ [typeFieldName]: { not_in: allPossibleTypeValues } }]\n : []),\n ],\n }\n : undefined\n\n // Combine conditions: parent + filter + baseFilter\n const where = combineWhereConstraints([parentCondition, filterCondition, baseFilter])\n\n const queryParams: Record<string, unknown> = {\n limit,\n page: pageToFetch,\n sort: useAsTitle ?? 'id',\n where,\n }\n\n const queryString = qs.stringify(queryParams, { addQueryPrefix: true })\n const url = formatAdminURL({\n apiRoute: api,\n path: `/${collectionSlug}${queryString}`,\n serverURL,\n })\n const response = await fetch(url, {\n credentials: 'include',\n })\n\n if (!response.ok) {\n throw new Error('Failed to fetch children')\n }\n\n const data = await response.json()\n const allDocs: TreeDocument[] = data.docs || []\n\n // Client-side filter: only show items that are a superset of required collections\n // Server query uses ANY (due to PG limitations), but we want ALL (superset)\n const newDocs =\n filterByCollections?.length && typeFieldName\n ? allDocs.filter((doc) =>\n isSuperset(doc[typeFieldName] as string[] | undefined, filterByCollections),\n )\n : allDocs\n\n let newChildren: TreeDocument[]\n if (pageToFetch === 1) {\n newChildren = newDocs\n } else {\n // Dedupe against already-loaded children: page-number math can drift from the\n // actual loaded count (e.g. after a cache merge), causing an overlapping page\n // to be re-fetched here.\n const existingIds = new Set((currentChildren || []).map((doc) => doc.id))\n const dedupedNewDocs = newDocs.filter((doc) => !existingIds.has(doc.id))\n newChildren = [...(currentChildren || []), ...dedupedNewDocs]\n }\n\n setChildren(newChildren)\n setTotalDocs(data.totalDocs || 0)\n setHasMore(data.hasNextPage || false)\n setPage(pageToFetch)\n\n if (cache) {\n cache.current.set(cacheKey, {\n children: newChildren,\n hasMore: data.hasNextPage || false,\n page: pageToFetch,\n totalDocs: data.totalDocs || 0,\n })\n }\n\n return newDocs\n } catch {\n if (pageToFetch === 1) {\n const emptyChildren: TreeDocument[] = []\n setChildren(emptyChildren)\n setHasMore(false)\n\n if (cache) {\n cache.current.set(cacheKey, {\n children: emptyChildren,\n hasMore: false,\n page: 1,\n totalDocs: 0,\n })\n }\n }\n\n return []\n } finally {\n setIsLoading(false)\n }\n },\n [\n allPossibleTypeValues,\n baseFilter,\n parentId,\n parentFieldName,\n filterByCollections,\n typeFieldName,\n limit,\n useAsTitle,\n api,\n collectionSlug,\n serverURL,\n cache,\n cacheKey,\n ],\n )\n\n // Reset state and reload when filter changes\n const prevFilterKeyRef = useRef(filterKey)\n useEffect(() => {\n if (prevFilterKeyRef.current !== filterKey) {\n prevFilterKeyRef.current = filterKey\n setChildren(null)\n setPage(1)\n setTotalDocs(0)\n setHasMore(false)\n // If the node is currently expanded, immediately reload with the new filter\n if (enabled) {\n void fetchPage(1, null)\n }\n }\n }, [filterKey, enabled, fetchPage])\n\n // Load children explicitly. Safe to call multiple times — no-ops if already loaded or loading.\n const load = useCallback(async (): Promise<TreeDocument[]> => {\n // Consume initialData on first call without re-fetching\n if (initializedRef.current && childrenRef.current !== null) {\n initializedRef.current = false\n return childrenRef.current\n }\n\n // Already loaded\n if (childrenRef.current !== null) {\n return childrenRef.current\n }\n\n // Guard against concurrent calls\n if (isLoadingRef.current) {\n return []\n }\n\n // Restore from cache when available (e.g., after a filter reset)\n const currentCachedData = cache?.current.get(cacheKey)\n if (currentCachedData) {\n setChildren(currentCachedData.children)\n setPage(currentCachedData.page)\n setTotalDocs(currentCachedData.totalDocs)\n setHasMore(currentCachedData.hasMore)\n return currentCachedData.children\n }\n\n return fetchPage(1, null)\n }, [cache, cacheKey, fetchPage])\n\n const loadMore = useCallback(async (): Promise<TreeDocument[]> => {\n if (isLoading || !hasMore) {\n return []\n }\n\n // If we have fewer items than our limit, the cached data was fetched with a smaller limit\n // We need to re-fetch page 1 with our limit to get the full first page\n const shouldRefetchPage1 = children && children.length < limit\n\n return fetchPage(shouldRefetchPage1 ? 1 : page + 1, children)\n }, [isLoading, hasMore, page, children, fetchPage, limit])\n\n const refresh = useCallback(async (): Promise<TreeDocument[]> => {\n if (cache) {\n cache.current.delete(cacheKey)\n }\n setChildren(null)\n setPage(1)\n return fetchPage(1, null)\n }, [cache, cacheKey, fetchPage])\n // If state hasn't been loaded yet, read directly from cache as a synchronous fallback.\n // Tree's useMemo pre-populates the cache before child TreeNodes render, so this eliminates\n // the brief null-children flash that occurs when a node becomes expanded after context updates.\n const effectiveChildren = children ?? cache?.current.get(cacheKey)?.children ?? null\n\n return { children: effectiveChildren, hasMore, isLoading, load, loadMore, refresh, totalDocs }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"useChildren.js","names":["combineWhereConstraints","formatAdminURL","qs","useCallback","useEffect","useRef","useState","useConfig","isSuperset","useChildren","allPossibleTypeValues","baseFilter","cache","cacheKey","cacheKeyProp","collectionSlug","enabled","filterByCollections","initialData","limit","parentFieldName","parentId","typeFieldName","useAsTitle","filterKey","length","slice","sort","join","baseFilterKey","JSON","stringify","String","cachedData","current","get","parentKey","parentMeta","loadedParents","hasInitialData","initialDocsForParent","docs","filter","doc","docParent","children","setChildren","isLoading","setIsLoading","page","setPage","totalDocs","setTotalDocs","hasMore","setHasMore","initializedRef","childrenRef","isLoadingRef","config","routes","api","serverURL","fetchPage","pageToFetch","currentChildren","parentCondition","or","exists","equals","filterCondition","in","not_in","undefined","where","queryParams","queryString","addQueryPrefix","url","apiRoute","path","response","fetch","credentials","ok","Error","data","json","allDocs","newDocs","newChildren","hasNextPage","set","emptyChildren","prevFilterKeyRef","load","currentCachedData","loadMore","shouldRefetchPage1","refresh","delete","effectiveChildren"],"sources":["../../../../src/elements/Hierarchy/Tree/useChildren.tsx"],"sourcesContent":["import type { Where } from 'payload'\n\nimport { combineWhereConstraints, formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\nimport type { TreeCache, TreeDocument, TreeInitialData } from './types.js'\n\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { isSuperset } from '../../../utilities/isSuperset.js'\n\ntype UseChildrenArgs = {\n allPossibleTypeValues?: string[]\n /** Base filter to apply to all queries (e.g., tenant filter) */\n baseFilter?: null | Where\n cache?: TreeCache\n /** Pre-computed cache key to ensure consistency with cache population */\n cacheKey?: string\n collectionSlug: string\n enabled?: boolean\n filterByCollections?: string[]\n initialData?: null | TreeInitialData\n limit?: number\n parentFieldName: string\n parentId: number | string\n typeFieldName?: null | string\n useAsTitle?: string\n}\n\ntype UseChildrenReturn = {\n children: null | TreeDocument[]\n hasMore: boolean\n isLoading: boolean\n /** Explicitly load children. Safe to call multiple times — no-ops if already loaded. */\n load: () => Promise<TreeDocument[]>\n loadMore: () => Promise<TreeDocument[]>\n refresh: () => Promise<TreeDocument[]>\n totalDocs: number\n}\n\nexport const useChildren = ({\n allPossibleTypeValues,\n baseFilter,\n cache,\n cacheKey: cacheKeyProp,\n collectionSlug,\n enabled = true,\n filterByCollections,\n initialData,\n limit = 2,\n parentFieldName,\n parentId,\n typeFieldName,\n useAsTitle,\n}: UseChildrenArgs): UseChildrenReturn => {\n const filterKey = filterByCollections?.length ? filterByCollections.slice().sort().join(',') : ''\n const baseFilterKey = baseFilter ? JSON.stringify(baseFilter) : ''\n // Use provided cacheKey for consistency with cache population, or compute if not provided\n const cacheKey =\n cacheKeyProp ?? `${collectionSlug}-${String(parentId)}-${filterKey}-${baseFilterKey}`\n const cachedData = cache?.current.get(cacheKey)\n\n // Check if we have initial data for this specific parent\n const parentKey = parentId === 'null' ? 'null' : String(parentId)\n const parentMeta = initialData?.loadedParents?.[parentKey]\n const hasInitialData = !!parentMeta\n\n // Extract docs for this parent from initialData if available\n // Apply same superset filter as fetchPage for consistency\n const initialDocsForParent = hasInitialData\n ? initialData.docs.filter((doc) => {\n const docParent = doc[parentFieldName] || 'null'\n if (String(docParent) !== parentKey) {\n return false\n }\n if (filterByCollections?.length && typeFieldName) {\n return isSuperset(doc[typeFieldName] as string[] | undefined, filterByCollections)\n }\n return true\n })\n : null\n\n const [children, setChildren] = useState<null | TreeDocument[]>(\n initialDocsForParent || cachedData?.children || null,\n )\n const [isLoading, setIsLoading] = useState(false)\n const [page, setPage] = useState(cachedData?.page || 1)\n const [totalDocs, setTotalDocs] = useState(parentMeta?.totalDocs || cachedData?.totalDocs || 0)\n const [hasMore, setHasMore] = useState(parentMeta?.hasMore || cachedData?.hasMore || false)\n const initializedRef = useRef(!!hasInitialData)\n // Refs for stable access inside load() without adding state to its dep array\n const childrenRef = useRef(children)\n childrenRef.current = children\n const isLoadingRef = useRef(isLoading)\n isLoadingRef.current = isLoading\n const {\n config: {\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n const fetchPage = useCallback(\n async (\n pageToFetch: number,\n currentChildren: null | TreeDocument[],\n ): Promise<TreeDocument[]> => {\n setIsLoading(true)\n\n try {\n const parentCondition =\n parentId === 'null' || parentId === null\n ? {\n or: [\n { [parentFieldName]: { exists: false } },\n { [parentFieldName]: { equals: null } },\n ],\n }\n : { [parentFieldName]: { equals: parentId } }\n\n // Build filter condition for collection type filtering\n // Matches items that:\n // - allow ANY of the selected collections, OR\n // - are unrestricted (type field doesn't exist), OR\n // - have empty allowedTypes array (unrestricted)\n const filterCondition: undefined | Where =\n filterByCollections?.length && typeFieldName\n ? {\n or: [\n { [typeFieldName]: { in: filterByCollections } },\n { [typeFieldName]: { exists: false } },\n // Using not_in with all possible values matches empty arrays in both MongoDB and Postgres\n ...(allPossibleTypeValues?.length\n ? [{ [typeFieldName]: { not_in: allPossibleTypeValues } }]\n : []),\n ],\n }\n : undefined\n\n // Combine conditions: parent + filter + baseFilter\n const where = combineWhereConstraints([parentCondition, filterCondition, baseFilter])\n\n const queryParams: Record<string, unknown> = {\n limit,\n page: pageToFetch,\n sort: useAsTitle ?? 'id',\n where,\n }\n\n const queryString = qs.stringify(queryParams, { addQueryPrefix: true })\n const url = formatAdminURL({\n apiRoute: api,\n path: `/${collectionSlug}${queryString}`,\n serverURL,\n })\n const response = await fetch(url, {\n credentials: 'include',\n })\n\n if (!response.ok) {\n throw new Error('Failed to fetch children')\n }\n\n const data = await response.json()\n const allDocs: TreeDocument[] = data.docs || []\n\n // Client-side filter: only show items that are a superset of required collections\n // Server query uses ANY (due to PG limitations), but we want ALL (superset)\n const newDocs =\n filterByCollections?.length && typeFieldName\n ? allDocs.filter((doc) =>\n isSuperset(doc[typeFieldName] as string[] | undefined, filterByCollections),\n )\n : allDocs\n\n const newChildren = pageToFetch === 1 ? newDocs : [...(currentChildren || []), ...newDocs]\n\n setChildren(newChildren)\n setTotalDocs(data.totalDocs || 0)\n setHasMore(data.hasNextPage || false)\n setPage(pageToFetch)\n\n if (cache) {\n cache.current.set(cacheKey, {\n children: newChildren,\n hasMore: data.hasNextPage || false,\n page: pageToFetch,\n totalDocs: data.totalDocs || 0,\n })\n }\n\n return newDocs\n } catch {\n if (pageToFetch === 1) {\n const emptyChildren: TreeDocument[] = []\n setChildren(emptyChildren)\n setHasMore(false)\n\n if (cache) {\n cache.current.set(cacheKey, {\n children: emptyChildren,\n hasMore: false,\n page: 1,\n totalDocs: 0,\n })\n }\n }\n\n return []\n } finally {\n setIsLoading(false)\n }\n },\n [\n allPossibleTypeValues,\n baseFilter,\n parentId,\n parentFieldName,\n filterByCollections,\n typeFieldName,\n limit,\n useAsTitle,\n api,\n collectionSlug,\n serverURL,\n cache,\n cacheKey,\n ],\n )\n\n // Reset state and reload when filter changes\n const prevFilterKeyRef = useRef(filterKey)\n useEffect(() => {\n if (prevFilterKeyRef.current !== filterKey) {\n prevFilterKeyRef.current = filterKey\n setChildren(null)\n setPage(1)\n setTotalDocs(0)\n setHasMore(false)\n // If the node is currently expanded, immediately reload with the new filter\n if (enabled) {\n void fetchPage(1, null)\n }\n }\n }, [filterKey, enabled, fetchPage])\n\n // Load children explicitly. Safe to call multiple times — no-ops if already loaded or loading.\n const load = useCallback(async (): Promise<TreeDocument[]> => {\n // Consume initialData on first call without re-fetching\n if (initializedRef.current && childrenRef.current !== null) {\n initializedRef.current = false\n return childrenRef.current\n }\n\n // Already loaded\n if (childrenRef.current !== null) {\n return childrenRef.current\n }\n\n // Guard against concurrent calls\n if (isLoadingRef.current) {\n return []\n }\n\n // Restore from cache when available (e.g., after a filter reset)\n const currentCachedData = cache?.current.get(cacheKey)\n if (currentCachedData) {\n setChildren(currentCachedData.children)\n setPage(currentCachedData.page)\n setTotalDocs(currentCachedData.totalDocs)\n setHasMore(currentCachedData.hasMore)\n return currentCachedData.children\n }\n\n return fetchPage(1, null)\n }, [cache, cacheKey, fetchPage])\n\n const loadMore = useCallback(async (): Promise<TreeDocument[]> => {\n if (isLoading || !hasMore) {\n return []\n }\n\n // If we have fewer items than our limit, the cached data was fetched with a smaller limit\n // We need to re-fetch page 1 with our limit to get the full first page\n const shouldRefetchPage1 = children && children.length < limit\n\n return fetchPage(shouldRefetchPage1 ? 1 : page + 1, children)\n }, [isLoading, hasMore, page, children, fetchPage, limit])\n\n const refresh = useCallback(async (): Promise<TreeDocument[]> => {\n if (cache) {\n cache.current.delete(cacheKey)\n }\n setChildren(null)\n setPage(1)\n return fetchPage(1, null)\n }, [cache, cacheKey, fetchPage])\n // If state hasn't been loaded yet, read directly from cache as a synchronous fallback.\n // Tree's useMemo pre-populates the cache before child TreeNodes render, so this eliminates\n // the brief null-children flash that occurs when a node becomes expanded after context updates.\n const effectiveChildren = children ?? cache?.current.get(cacheKey)?.children ?? null\n\n return { children: effectiveChildren, hasMore, isLoading, load, loadMore, refresh, totalDocs }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/ListControls/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAgD,MAAM,OAAO,CAAA;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAanD,OAAO,aAAa,CAAA;AAIpB;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/ListControls/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAgD,MAAM,OAAO,CAAA;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAanD,OAAO,aAAa,CAAA;AAIpB;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA0JpD,CAAA"}
|
|
@@ -40,8 +40,7 @@ export const ListControls = props => {
|
|
|
40
40
|
queryPreset: activePreset,
|
|
41
41
|
queryPresetPermissions,
|
|
42
42
|
renderedFilters,
|
|
43
|
-
resolvedFilterOptions
|
|
44
|
-
viewModeToggle
|
|
43
|
+
resolvedFilterOptions
|
|
45
44
|
} = props;
|
|
46
45
|
const enableColumns = t0 === undefined ? true : t0;
|
|
47
46
|
const enableFilters = t1 === undefined ? true : t1;
|
|
@@ -158,7 +157,7 @@ export const ListControls = props => {
|
|
|
158
157
|
onClick: () => setVisibleDrawer(visibleDrawer !== "sort" ? "sort" : undefined),
|
|
159
158
|
size: "medium",
|
|
160
159
|
children: t("general:sort")
|
|
161
|
-
}),
|
|
160
|
+
}), hasCreatePermission && newDocumentURL && _jsx(Button, {
|
|
162
161
|
buttonStyle: "primary",
|
|
163
162
|
className: `${baseClass}__create-new`,
|
|
164
163
|
el: "link",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","useWindowInfo","React","Fragment","useEffect","useRef","useState","Popup","PopupList","ChevronIcon","Dots","useListQuery","useTranslation","Button","ListColumnSelectionButton","ListGroupByButton","ListWhereBuilder","QueryPresetBar","ListSearchFilter","baseClass","ListControls","props","$","beforeActions","collectionConfig","collectionSlug","disableQueryPresets","enableColumns","t0","enableFilters","t1","enableSort","t2","hasCreatePermission","isWhereOpen","isWhereOpenFromProps","listMenuItems","newDocumentURL","onWhereToggle","queryPreset","activePreset","queryPresetPermissions","renderedFilters","resolvedFilterOptions","viewModeToggle","undefined","isControlled","handleSearchChange","hasActiveFilters","query","t","breakpoints","t3","s","smallBreak","searchLabelTranslated","label","split","hasWhereParam","Boolean","where","visibleDrawer","setVisibleDrawer","t4","current","t5","t6","t7","handleWhereToggle","_jsxs","className","children","_jsx","onSearchChange","searchQueryParam","search","enableQueryPresets","buttonStyle","extraButtonProps","icon","direction","size","onClick","selected","slug","fields","el","id","to","Array","isArray","length","button","ariaLabel","horizontalAlign","verticalAlign","ButtonGroup","map","_temp","collectionPluralLabel","labels","plural","onEmptyRemove","item","i"],"sources":["../../../src/elements/ListControls/index.tsx"],"sourcesContent":["'use client'\n\nimport { useWindowInfo } from '@faceless-ui/window-info'\nimport React, { Fragment, useEffect, useRef, useState } from 'react'\n\nimport type { ListControlsProps } from './types.js'\n\nimport { Popup, PopupList } from '../../elements/Popup/index.js'\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { Dots } from '../../icons/Dots/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport { ListColumnSelectionButton } from '../ListColumnSelectionButton/index.js'\nimport { ListGroupByButton } from '../ListGroupByButton/index.js'\nimport { ListWhereBuilder } from '../ListWhereBuilder/index.js'\nimport { QueryPresetBar } from '../QueryPresets/QueryPresetBar/index.js'\nimport { ListSearchFilter } from '../Search/ListSearchFilter/index.js'\nimport './index.css'\n\nconst baseClass = 'list-controls'\n\n/**\n * The ListControls component is used to render the controls (search, filter, where)\n * for a collection's list view. You can find those directly above the table which lists\n * the collection's documents.\n */\nexport const ListControls: React.FC<ListControlsProps> = (props) => {\n const {\n beforeActions,\n collectionConfig,\n collectionSlug,\n disableQueryPresets,\n enableColumns = true,\n enableFilters = true,\n enableSort = false,\n hasCreatePermission,\n isWhereOpen: isWhereOpenFromProps,\n listMenuItems,\n newDocumentURL,\n onWhereToggle,\n queryPreset: activePreset,\n queryPresetPermissions,\n renderedFilters,\n resolvedFilterOptions,\n viewModeToggle,\n } = props\n\n const isControlled = typeof onWhereToggle === 'function'\n\n const { handleSearchChange, hasActiveFilters, query } = useListQuery()\n\n const { t } = useTranslation()\n\n const {\n breakpoints: { s: smallBreak },\n } = useWindowInfo()\n\n // Simplified placeholder - just \"Search\" instead of \"Search by X, Y, Z\"\n const searchLabelTranslated = t('general:searchBy', { label: '' }).split(' ')[0]\n\n const hasWhereParam = useRef(Boolean(query?.where))\n\n const [visibleDrawer, setVisibleDrawer] = useState<'columns' | 'sort' | 'where'>(\n hasActiveFilters ? 'where' : undefined,\n )\n\n useEffect(() => {\n if (hasWhereParam.current && !query?.where) {\n hasWhereParam.current = false\n } else if (query?.where) {\n hasWhereParam.current = true\n }\n }, [setVisibleDrawer, query?.where])\n\n const isWhereOpen = isControlled ? Boolean(isWhereOpenFromProps) : visibleDrawer === 'where'\n const handleWhereToggle = isControlled\n ? onWhereToggle\n : () => setVisibleDrawer(visibleDrawer !== 'where' ? 'where' : undefined)\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__search-row`}>\n <div className={`${baseClass}__left`}>\n <ListSearchFilter\n key={collectionSlug}\n label={searchLabelTranslated}\n onSearchChange={handleSearchChange}\n searchQueryParam={query?.search}\n />\n {collectionConfig?.enableQueryPresets && !disableQueryPresets && (\n <QueryPresetBar\n activePreset={activePreset}\n collectionSlug={collectionSlug}\n queryPresetPermissions={queryPresetPermissions}\n />\n )}\n </div>\n <div className={`${baseClass}__spacer`} />\n <div className={`${baseClass}__actions`}>\n {!smallBreak && beforeActions}\n {enableFilters && (\n <Button\n buttonStyle=\"secondary\"\n className={`${baseClass}__toggle-where`}\n extraButtonProps={{\n 'aria-controls': `${baseClass}-where`,\n 'aria-expanded': isWhereOpen,\n }}\n icon={<ChevronIcon direction={isWhereOpen ? 'up' : 'down'} size={16} />}\n id=\"toggle-list-filters\"\n onClick={handleWhereToggle}\n selected={isWhereOpen || hasActiveFilters}\n size=\"medium\"\n >\n {t('general:filters')}\n </Button>\n )}\n <ListGroupByButton\n collectionSlug={collectionConfig.slug}\n fields={collectionConfig.fields}\n />\n {enableColumns && <ListColumnSelectionButton collectionSlug={collectionConfig.slug} />}\n {enableSort && (\n <Button\n buttonStyle=\"secondary\"\n className={`${baseClass}__toggle-sort`}\n extraButtonProps={{\n 'aria-controls': `${baseClass}-sort`,\n 'aria-expanded': visibleDrawer === 'sort',\n }}\n icon={<ChevronIcon size={16} />}\n id=\"toggle-list-sort\"\n onClick={() => setVisibleDrawer(visibleDrawer !== 'sort' ? 'sort' : undefined)}\n size=\"medium\"\n >\n {t('general:sort')}\n </Button>\n )}\n {viewModeToggle}\n {hasCreatePermission && newDocumentURL && (\n <Button\n buttonStyle=\"primary\"\n className={`${baseClass}__create-new`}\n el=\"link\"\n id=\"create-new-doc\"\n size=\"medium\"\n to={newDocumentURL}\n >\n {t('general:createNew')}\n </Button>\n )}\n {listMenuItems && Array.isArray(listMenuItems) && listMenuItems.length > 0 && (\n <Popup\n button={<Dots ariaLabel={t('general:moreOptions')} />}\n className={`${baseClass}__popup`}\n horizontalAlign=\"right\"\n id=\"list-menu\"\n verticalAlign=\"bottom\"\n >\n <PopupList.ButtonGroup>\n {listMenuItems.map((item, i) => (\n <Fragment key={`list-menu-item-${i}`}>{item}</Fragment>\n ))}\n </PopupList.ButtonGroup>\n </Popup>\n )}\n </div>\n </div>\n {!isControlled && isWhereOpen && (\n <div className={`${baseClass}__where`} id={`${baseClass}-where`}>\n <ListWhereBuilder\n collectionPluralLabel={collectionConfig?.labels?.plural}\n collectionSlug={collectionConfig.slug}\n fields={collectionConfig?.fields}\n onEmptyRemove={() => setVisibleDrawer(undefined)}\n renderedFilters={renderedFilters}\n resolvedFilterOptions={resolvedFilterOptions}\n />\n </div>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","useWindowInfo","React","Fragment","useEffect","useRef","useState","Popup","PopupList","ChevronIcon","Dots","useListQuery","useTranslation","Button","ListColumnSelectionButton","ListGroupByButton","ListWhereBuilder","QueryPresetBar","ListSearchFilter","baseClass","ListControls","props","$","beforeActions","collectionConfig","collectionSlug","disableQueryPresets","enableColumns","t0","enableFilters","t1","enableSort","t2","hasCreatePermission","isWhereOpen","isWhereOpenFromProps","listMenuItems","newDocumentURL","onWhereToggle","queryPreset","activePreset","queryPresetPermissions","renderedFilters","resolvedFilterOptions","undefined","isControlled","handleSearchChange","hasActiveFilters","query","t","breakpoints","t3","s","smallBreak","searchLabelTranslated","label","split","hasWhereParam","Boolean","where","visibleDrawer","setVisibleDrawer","t4","current","t5","t6","t7","handleWhereToggle","_jsxs","className","children","_jsx","onSearchChange","searchQueryParam","search","enableQueryPresets","buttonStyle","extraButtonProps","icon","direction","size","onClick","selected","slug","fields","el","id","to","Array","isArray","length","button","ariaLabel","horizontalAlign","verticalAlign","ButtonGroup","map","_temp","collectionPluralLabel","labels","plural","onEmptyRemove","item","i"],"sources":["../../../src/elements/ListControls/index.tsx"],"sourcesContent":["'use client'\n\nimport { useWindowInfo } from '@faceless-ui/window-info'\nimport React, { Fragment, useEffect, useRef, useState } from 'react'\n\nimport type { ListControlsProps } from './types.js'\n\nimport { Popup, PopupList } from '../../elements/Popup/index.js'\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { Dots } from '../../icons/Dots/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport { ListColumnSelectionButton } from '../ListColumnSelectionButton/index.js'\nimport { ListGroupByButton } from '../ListGroupByButton/index.js'\nimport { ListWhereBuilder } from '../ListWhereBuilder/index.js'\nimport { QueryPresetBar } from '../QueryPresets/QueryPresetBar/index.js'\nimport { ListSearchFilter } from '../Search/ListSearchFilter/index.js'\nimport './index.css'\n\nconst baseClass = 'list-controls'\n\n/**\n * The ListControls component is used to render the controls (search, filter, where)\n * for a collection's list view. You can find those directly above the table which lists\n * the collection's documents.\n */\nexport const ListControls: React.FC<ListControlsProps> = (props) => {\n const {\n beforeActions,\n collectionConfig,\n collectionSlug,\n disableQueryPresets,\n enableColumns = true,\n enableFilters = true,\n enableSort = false,\n hasCreatePermission,\n isWhereOpen: isWhereOpenFromProps,\n listMenuItems,\n newDocumentURL,\n onWhereToggle,\n queryPreset: activePreset,\n queryPresetPermissions,\n renderedFilters,\n resolvedFilterOptions,\n } = props\n\n const isControlled = typeof onWhereToggle === 'function'\n\n const { handleSearchChange, hasActiveFilters, query } = useListQuery()\n\n const { t } = useTranslation()\n\n const {\n breakpoints: { s: smallBreak },\n } = useWindowInfo()\n\n // Simplified placeholder - just \"Search\" instead of \"Search by X, Y, Z\"\n const searchLabelTranslated = t('general:searchBy', { label: '' }).split(' ')[0]\n\n const hasWhereParam = useRef(Boolean(query?.where))\n\n const [visibleDrawer, setVisibleDrawer] = useState<'columns' | 'sort' | 'where'>(\n hasActiveFilters ? 'where' : undefined,\n )\n\n useEffect(() => {\n if (hasWhereParam.current && !query?.where) {\n hasWhereParam.current = false\n } else if (query?.where) {\n hasWhereParam.current = true\n }\n }, [setVisibleDrawer, query?.where])\n\n const isWhereOpen = isControlled ? Boolean(isWhereOpenFromProps) : visibleDrawer === 'where'\n const handleWhereToggle = isControlled\n ? onWhereToggle\n : () => setVisibleDrawer(visibleDrawer !== 'where' ? 'where' : undefined)\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__search-row`}>\n <div className={`${baseClass}__left`}>\n <ListSearchFilter\n key={collectionSlug}\n label={searchLabelTranslated}\n onSearchChange={handleSearchChange}\n searchQueryParam={query?.search}\n />\n {collectionConfig?.enableQueryPresets && !disableQueryPresets && (\n <QueryPresetBar\n activePreset={activePreset}\n collectionSlug={collectionSlug}\n queryPresetPermissions={queryPresetPermissions}\n />\n )}\n </div>\n <div className={`${baseClass}__spacer`} />\n <div className={`${baseClass}__actions`}>\n {!smallBreak && beforeActions}\n {enableFilters && (\n <Button\n buttonStyle=\"secondary\"\n className={`${baseClass}__toggle-where`}\n extraButtonProps={{\n 'aria-controls': `${baseClass}-where`,\n 'aria-expanded': isWhereOpen,\n }}\n icon={<ChevronIcon direction={isWhereOpen ? 'up' : 'down'} size={16} />}\n id=\"toggle-list-filters\"\n onClick={handleWhereToggle}\n selected={isWhereOpen || hasActiveFilters}\n size=\"medium\"\n >\n {t('general:filters')}\n </Button>\n )}\n <ListGroupByButton\n collectionSlug={collectionConfig.slug}\n fields={collectionConfig.fields}\n />\n {enableColumns && <ListColumnSelectionButton collectionSlug={collectionConfig.slug} />}\n {enableSort && (\n <Button\n buttonStyle=\"secondary\"\n className={`${baseClass}__toggle-sort`}\n extraButtonProps={{\n 'aria-controls': `${baseClass}-sort`,\n 'aria-expanded': visibleDrawer === 'sort',\n }}\n icon={<ChevronIcon size={16} />}\n id=\"toggle-list-sort\"\n onClick={() => setVisibleDrawer(visibleDrawer !== 'sort' ? 'sort' : undefined)}\n size=\"medium\"\n >\n {t('general:sort')}\n </Button>\n )}\n {hasCreatePermission && newDocumentURL && (\n <Button\n buttonStyle=\"primary\"\n className={`${baseClass}__create-new`}\n el=\"link\"\n id=\"create-new-doc\"\n size=\"medium\"\n to={newDocumentURL}\n >\n {t('general:createNew')}\n </Button>\n )}\n {listMenuItems && Array.isArray(listMenuItems) && listMenuItems.length > 0 && (\n <Popup\n button={<Dots ariaLabel={t('general:moreOptions')} />}\n className={`${baseClass}__popup`}\n horizontalAlign=\"right\"\n id=\"list-menu\"\n verticalAlign=\"bottom\"\n >\n <PopupList.ButtonGroup>\n {listMenuItems.map((item, i) => (\n <Fragment key={`list-menu-item-${i}`}>{item}</Fragment>\n ))}\n </PopupList.ButtonGroup>\n </Popup>\n )}\n </div>\n </div>\n {!isControlled && isWhereOpen && (\n <div className={`${baseClass}__where`} id={`${baseClass}-where`}>\n <ListWhereBuilder\n collectionPluralLabel={collectionConfig?.labels?.plural}\n collectionSlug={collectionConfig.slug}\n fields={collectionConfig?.fields}\n onEmptyRemove={() => setVisibleDrawer(undefined)}\n renderedFilters={renderedFilters}\n resolvedFilterOptions={resolvedFilterOptions}\n />\n </div>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -29,9 +29,5 @@ export type ListControlsProps = {
|
|
|
29
29
|
readonly queryPresetPermissions?: SanitizedCollectionPermission;
|
|
30
30
|
readonly renderedFilters?: Map<string, React.ReactNode>;
|
|
31
31
|
readonly resolvedFilterOptions?: Map<string, ResolvedFilterOptions>;
|
|
32
|
-
/**
|
|
33
|
-
* Renders a table/grid segmented control before the "Create new" button, e.g. `ViewModeToggle`.
|
|
34
|
-
*/
|
|
35
|
-
readonly viewModeToggle?: React.ReactNode;
|
|
36
32
|
};
|
|
37
33
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/elements/ListControls/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,WAAW,EACX,qBAAqB,EACrB,6BAA6B,EAC7B,KAAK,EACN,MAAM,SAAS,CAAA;AAEhB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAA;IACjD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IACpC;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;IAClC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACtD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IACnD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IAC1C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;IAClC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,6BAA6B,CAAA;IAC/D,QAAQ,CAAC,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IACvD,QAAQ,CAAC,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/elements/ListControls/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,WAAW,EACX,qBAAqB,EACrB,6BAA6B,EAC7B,KAAK,EACN,MAAM,SAAS,CAAA;AAEhB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAA;IACjD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IACpC;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;IAClC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACtD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IACnD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IAC1C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;IAClC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,6BAA6B,CAAA;IAC/D,QAAQ,CAAC,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IACvD,QAAQ,CAAC,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;CACpE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../src/elements/ListControls/types.ts"],"sourcesContent":["import type {\n ClientCollectionConfig,\n QueryPreset,\n ResolvedFilterOptions,\n SanitizedCollectionPermission,\n Where,\n} from 'payload'\n\nexport type ListControlsProps = {\n readonly beforeActions?: React.ReactNode[]\n readonly collectionConfig: ClientCollectionConfig\n readonly collectionSlug: string\n /**\n * @deprecated\n * These are now handled by the `ListSelection` component\n */\n readonly disableBulkDelete?: boolean\n /**\n * @deprecated\n * These are now handled by the `ListSelection` component\n */\n readonly disableBulkEdit?: boolean\n readonly disableQueryPresets?: boolean\n readonly enableColumns?: boolean\n readonly enableFilters?: boolean\n readonly enableSort?: boolean\n readonly handleSearchChange?: (search: string) => void\n readonly handleSortChange?: (sort: string) => void\n readonly handleWhereChange?: (where: Where) => void\n readonly hasCreatePermission?: boolean\n readonly isWhereOpen?: boolean\n readonly listMenuItems?: React.ReactNode[]\n readonly newDocumentURL?: string\n readonly onWhereToggle?: () => void\n readonly queryPreset?: QueryPreset\n readonly queryPresetPermissions?: SanitizedCollectionPermission\n readonly renderedFilters?: Map<string, React.ReactNode>\n readonly resolvedFilterOptions?: Map<string, ResolvedFilterOptions>\n
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../src/elements/ListControls/types.ts"],"sourcesContent":["import type {\n ClientCollectionConfig,\n QueryPreset,\n ResolvedFilterOptions,\n SanitizedCollectionPermission,\n Where,\n} from 'payload'\n\nexport type ListControlsProps = {\n readonly beforeActions?: React.ReactNode[]\n readonly collectionConfig: ClientCollectionConfig\n readonly collectionSlug: string\n /**\n * @deprecated\n * These are now handled by the `ListSelection` component\n */\n readonly disableBulkDelete?: boolean\n /**\n * @deprecated\n * These are now handled by the `ListSelection` component\n */\n readonly disableBulkEdit?: boolean\n readonly disableQueryPresets?: boolean\n readonly enableColumns?: boolean\n readonly enableFilters?: boolean\n readonly enableSort?: boolean\n readonly handleSearchChange?: (search: string) => void\n readonly handleSortChange?: (sort: string) => void\n readonly handleWhereChange?: (where: Where) => void\n readonly hasCreatePermission?: boolean\n readonly isWhereOpen?: boolean\n readonly listMenuItems?: React.ReactNode[]\n readonly newDocumentURL?: string\n readonly onWhereToggle?: () => void\n readonly queryPreset?: QueryPreset\n readonly queryPresetPermissions?: SanitizedCollectionPermission\n readonly renderedFilters?: Map<string, React.ReactNode>\n readonly resolvedFilterOptions?: Map<string, ResolvedFilterOptions>\n}\n"],"mappings":"AAQA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListEmptyTrashButton.d.ts","sourceRoot":"","sources":["../../../../src/elements/ListHeader/TitleActions/ListEmptyTrashButton.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAMrD,OAAO,KAAK,MAAM,OAAO,CAAA;AAezB,wBAAgB,oBAAoB,CAAC,EACnC,gBAAgB,EAChB,mBAAmB,GACpB,EAAE;IACD,gBAAgB,EAAE,sBAAsB,CAAA;IACxC,mBAAmB,EAAE,OAAO,CAAA;CAC7B,
|
|
1
|
+
{"version":3,"file":"ListEmptyTrashButton.d.ts","sourceRoot":"","sources":["../../../../src/elements/ListHeader/TitleActions/ListEmptyTrashButton.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAMrD,OAAO,KAAK,MAAM,OAAO,CAAA;AAezB,wBAAgB,oBAAoB,CAAC,EACnC,gBAAgB,EAChB,mBAAmB,GACpB,EAAE;IACD,gBAAgB,EAAE,sBAAsB,CAAA;IACxC,mBAAmB,EAAE,OAAO,CAAA;CAC7B,qBAgLA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListEmptyTrashButton.js","names":["useModal","getTranslation","formatAdminURL","qs","React","toast","useConfig","useLocale","useRouteCache","useRouter","useSearchParams","useTranslation","requests","Button","ConfirmationModal","Translation","confirmEmptyTrashSlug","ListEmptyTrashButton","collectionConfig","hasDeletePermission","i18n","t","code","locale","config","openModal","router","searchParams","clearRouteCache","trashCount","setTrashCount","useState","useEffect","fetchTrashCount","queryString","stringify","depth","limit","trash","where","deletedAt","exists","addQueryPrefix","res","get","apiRoute","routes","api","path","slug","headers","language","json","totalDocs","handleEmptyTrash","useCallback","labels","delete","deletedCount","docs","length","status","success","count","label","plural","errors","error","message","description","map","err","join","replace","Object","fromEntries","entries","page","_jsxs","Fragment","_jsx","buttonStyle","disabled","id","onClick","size","body","elements","0","children","1","i18nKey","variables","singular","confirmingLabel","heading","modalSlug","onConfirm"],"sources":["../../../../src/elements/ListHeader/TitleActions/ListEmptyTrashButton.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useLocale } from '../../../providers/Locale/index.js'\nimport { useRouteCache } from '../../../providers/RouteCache/index.js'\nimport { useRouter, useSearchParams } from '../../../providers/RouterAdapter/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { requests } from '../../../utilities/api.js'\nimport { Button } from '../../Button/index.js'\nimport { ConfirmationModal } from '../../ConfirmationModal/index.js'\nimport { Translation } from '../../Translation/index.js'\n\nconst confirmEmptyTrashSlug = 'confirm-empty-trash'\n\nexport function ListEmptyTrashButton({\n collectionConfig,\n hasDeletePermission,\n}: {\n collectionConfig: ClientCollectionConfig\n hasDeletePermission: boolean\n}) {\n const { i18n, t } = useTranslation()\n const { code: locale } = useLocale()\n const { config } = useConfig()\n const { openModal } = useModal()\n const router = useRouter()\n const searchParams = useSearchParams()\n const { clearRouteCache } = useRouteCache()\n\n const [trashCount, setTrashCount] = React.useState<null | number>(null)\n\n React.useEffect(() => {\n const fetchTrashCount = async () => {\n const queryString = qs.stringify(\n {\n depth: 0,\n limit: 0,\n locale,\n trash: true,\n where: {\n deletedAt: {\n exists: true,\n },\n },\n },\n { addQueryPrefix: true },\n )\n\n try {\n const res = await requests.get(\n formatAdminURL({\n apiRoute: config.routes.api,\n path: `/${collectionConfig.slug}${queryString}`,\n }),\n {\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n },\n )\n\n const json = await res.json()\n setTrashCount(json?.totalDocs ?? 0)\n } catch {\n setTrashCount(0)\n }\n }\n\n void fetchTrashCount()\n }, [collectionConfig.slug, config, i18n.language, locale])\n\n const handleEmptyTrash = React.useCallback(async () => {\n if (!hasDeletePermission) {\n return\n }\n\n const { slug, labels } = collectionConfig\n\n const queryString = qs.stringify(\n {\n limit: 0,\n locale,\n trash: true,\n where: {\n deletedAt: {\n exists: true,\n },\n },\n },\n { addQueryPrefix: true },\n )\n\n const res = await requests.delete(\n formatAdminURL({\n apiRoute: config.routes.api,\n path: `/${slug}${queryString}`,\n }),\n {\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n },\n )\n\n try {\n const json = await res.json()\n const deletedCount = json?.docs?.length || 0\n\n if (res.status < 400) {\n toast.success(\n t('general:permanentlyDeletedCountSuccessfully', {\n count: deletedCount,\n label: getTranslation(labels?.plural, i18n),\n }),\n )\n }\n\n if (json?.errors?.length > 0) {\n toast.error(json.message, {\n description: json.errors.map((err) => err.message).join('\\n'),\n })\n }\n\n router.replace(\n qs.stringify(\n {\n ...Object.fromEntries(searchParams.entries()),\n page: '1',\n },\n { addQueryPrefix: true },\n ),\n )\n\n clearRouteCache()\n } catch {\n toast.error(t('error:unknown'))\n }\n }, [\n collectionConfig,\n config,\n hasDeletePermission,\n i18n,\n t,\n locale,\n searchParams,\n router,\n clearRouteCache,\n ])\n\n return (\n <React.Fragment>\n <Button\n aria-label={t('general:emptyTrashLabel', {\n label: getTranslation(collectionConfig?.labels?.plural, i18n),\n })}\n buttonStyle=\"pill\"\n disabled={trashCount === 0}\n id=\"empty-trash-button\"\n key=\"empty-trash-button\"\n onClick={() => {\n openModal(confirmEmptyTrashSlug)\n }}\n size=\"medium\"\n >\n {t('general:emptyTrash')}\n </Button>\n <ConfirmationModal\n body={\n <Translation\n elements={{\n '0': ({ children }) => <strong>{children}</strong>,\n '1': ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"general:aboutToPermanentlyDeleteTrash\"\n t={t}\n variables={{\n count: trashCount ?? 0,\n label: getTranslation(\n trashCount === 1\n ? collectionConfig.labels?.singular\n : collectionConfig.labels?.plural,\n i18n,\n ),\n }}\n />\n }\n confirmingLabel={t('general:deleting')}\n heading={t('general:confirmDeletion')}\n modalSlug={confirmEmptyTrashSlug}\n onConfirm={handleEmptyTrash}\n />\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ListEmptyTrashButton.js","names":["useModal","getTranslation","formatAdminURL","qs","React","toast","useConfig","useLocale","useRouteCache","useRouter","useSearchParams","useTranslation","requests","Button","ConfirmationModal","Translation","confirmEmptyTrashSlug","ListEmptyTrashButton","collectionConfig","hasDeletePermission","i18n","t","currentLocale","locale","code","config","openModal","router","searchParams","clearRouteCache","trashCount","setTrashCount","useState","useEffect","fetchTrashCount","queryString","stringify","depth","limit","trash","where","deletedAt","exists","addQueryPrefix","res","get","apiRoute","routes","api","path","slug","headers","language","json","totalDocs","handleEmptyTrash","useCallback","labels","delete","deletedCount","docs","length","status","success","count","label","plural","errors","error","message","description","map","err","join","replace","Object","fromEntries","entries","page","_jsxs","Fragment","_jsx","buttonStyle","disabled","id","onClick","size","body","elements","0","children","1","i18nKey","variables","singular","confirmingLabel","heading","modalSlug","onConfirm"],"sources":["../../../../src/elements/ListHeader/TitleActions/ListEmptyTrashButton.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useLocale } from '../../../providers/Locale/index.js'\nimport { useRouteCache } from '../../../providers/RouteCache/index.js'\nimport { useRouter, useSearchParams } from '../../../providers/RouterAdapter/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { requests } from '../../../utilities/api.js'\nimport { Button } from '../../Button/index.js'\nimport { ConfirmationModal } from '../../ConfirmationModal/index.js'\nimport { Translation } from '../../Translation/index.js'\n\nconst confirmEmptyTrashSlug = 'confirm-empty-trash'\n\nexport function ListEmptyTrashButton({\n collectionConfig,\n hasDeletePermission,\n}: {\n collectionConfig: ClientCollectionConfig\n hasDeletePermission: boolean\n}) {\n const { i18n, t } = useTranslation()\n const currentLocale = useLocale()\n const locale = currentLocale?.code\n const { config } = useConfig()\n const { openModal } = useModal()\n const router = useRouter()\n const searchParams = useSearchParams()\n const { clearRouteCache } = useRouteCache()\n\n const [trashCount, setTrashCount] = React.useState<null | number>(null)\n\n React.useEffect(() => {\n const fetchTrashCount = async () => {\n const queryString = qs.stringify(\n {\n depth: 0,\n limit: 0,\n locale,\n trash: true,\n where: {\n deletedAt: {\n exists: true,\n },\n },\n },\n { addQueryPrefix: true },\n )\n\n try {\n const res = await requests.get(\n formatAdminURL({\n apiRoute: config.routes.api,\n path: `/${collectionConfig.slug}${queryString}`,\n }),\n {\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n },\n )\n\n const json = await res.json()\n setTrashCount(json?.totalDocs ?? 0)\n } catch {\n setTrashCount(0)\n }\n }\n\n void fetchTrashCount()\n }, [collectionConfig.slug, config, i18n.language, locale])\n\n const handleEmptyTrash = React.useCallback(async () => {\n if (!hasDeletePermission) {\n return\n }\n\n const { slug, labels } = collectionConfig\n\n const queryString = qs.stringify(\n {\n limit: 0,\n locale,\n trash: true,\n where: {\n deletedAt: {\n exists: true,\n },\n },\n },\n { addQueryPrefix: true },\n )\n\n const res = await requests.delete(\n formatAdminURL({\n apiRoute: config.routes.api,\n path: `/${slug}${queryString}`,\n }),\n {\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n },\n )\n\n try {\n const json = await res.json()\n const deletedCount = json?.docs?.length || 0\n\n if (res.status < 400) {\n toast.success(\n t('general:permanentlyDeletedCountSuccessfully', {\n count: deletedCount,\n label: getTranslation(labels?.plural, i18n),\n }),\n )\n }\n\n if (json?.errors?.length > 0) {\n toast.error(json.message, {\n description: json.errors.map((err) => err.message).join('\\n'),\n })\n }\n\n router.replace(\n qs.stringify(\n {\n ...Object.fromEntries(searchParams.entries()),\n page: '1',\n },\n { addQueryPrefix: true },\n ),\n )\n\n clearRouteCache()\n } catch {\n toast.error(t('error:unknown'))\n }\n }, [\n collectionConfig,\n config,\n hasDeletePermission,\n i18n,\n t,\n locale,\n searchParams,\n router,\n clearRouteCache,\n ])\n\n return (\n <React.Fragment>\n <Button\n aria-label={t('general:emptyTrashLabel', {\n label: getTranslation(collectionConfig?.labels?.plural, i18n),\n })}\n buttonStyle=\"pill\"\n disabled={trashCount === 0}\n id=\"empty-trash-button\"\n key=\"empty-trash-button\"\n onClick={() => {\n openModal(confirmEmptyTrashSlug)\n }}\n size=\"medium\"\n >\n {t('general:emptyTrash')}\n </Button>\n <ConfirmationModal\n body={\n <Translation\n elements={{\n '0': ({ children }) => <strong>{children}</strong>,\n '1': ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"general:aboutToPermanentlyDeleteTrash\"\n t={t}\n variables={{\n count: trashCount ?? 0,\n label: getTranslation(\n trashCount === 1\n ? collectionConfig.labels?.singular\n : collectionConfig.labels?.plural,\n i18n,\n ),\n }}\n />\n }\n confirmingLabel={t('general:deleting')}\n heading={t('general:confirmDeletion')}\n modalSlug={confirmEmptyTrashSlug}\n onConfirm={handleEmptyTrash}\n />\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -67,7 +67,7 @@ export const LivePreviewWindow = props => {
|
|
|
67
67
|
data: values,
|
|
68
68
|
externallyUpdatedRelationship: mostRecentUpdate,
|
|
69
69
|
globalSlug,
|
|
70
|
-
locale: locale
|
|
70
|
+
locale: locale?.code
|
|
71
71
|
});
|
|
72
72
|
}, [formState, collectionSlug, globalSlug, id, appIsReady, mostRecentUpdate, locale, hasActiveTarget, loadedURL, lastReadyAt, postMessageToTargets]);
|
|
73
73
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["reduceFieldsToValues","React","useCallback","useEffect","useAllFormFields","useDocumentEvents","useDocumentInfo","useLivePreviewContext","useLocale","IframeLoader","DeviceContainer","LivePreviewToolbar","baseClass","LivePreviewWindow","props","appIsReady","breakpoint","iframeRef","isExpanded","isLivePreviewing","lastReadyAt","loadedURL","popupRef","setLoadedURL","shouldRenderIframe","url","zoom","locale","mostRecentUpdate","formState","id","collectionSlug","globalSlug","postMessageToTargets","message","current","closed","postMessage","contentWindow","hasActiveTarget","values","type","data","externallyUpdatedRelationship","code","_jsx","className","filter","Boolean","join","_jsxs","onLoad","ref","src","style","transform","undefined"],"sources":["../../../../src/elements/LivePreview/Window/index.tsx"],"sourcesContent":["'use client'\n\nimport type { EditViewProps } from 'payload'\n\nimport { reduceFieldsToValues } from 'payload/shared'\nimport React, { useCallback, useEffect } from 'react'\n\nimport { useAllFormFields } from '../../../forms/Form/context.js'\nimport { useDocumentEvents } from '../../../providers/DocumentEvents/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useLivePreviewContext } from '../../../providers/LivePreview/context.js'\nimport { useLocale } from '../../../providers/Locale/index.js'\nimport { IframeLoader } from '../../IframeLoader/index.js'\nimport { DeviceContainer } from '../Device/index.js'\nimport { LivePreviewToolbar } from '../Toolbar/index.js'\nimport './index.css'\n\nconst baseClass = 'live-preview-window'\n\nexport const LivePreviewWindow: React.FC<EditViewProps> = (props) => {\n const {\n appIsReady,\n breakpoint,\n iframeRef,\n isExpanded,\n isLivePreviewing,\n lastReadyAt,\n loadedURL,\n popupRef,\n setLoadedURL,\n shouldRenderIframe,\n url,\n zoom,\n } = useLivePreviewContext()\n\n const locale = useLocale()\n\n const { mostRecentUpdate } = useDocumentEvents()\n\n const [formState] = useAllFormFields()\n const { id, collectionSlug, globalSlug } = useDocumentInfo()\n\n const postMessageToTargets = useCallback(\n (message: object) => {\n if (popupRef.current && !popupRef.current.closed) {\n popupRef.current.postMessage(message, url)\n }\n\n if (iframeRef.current) {\n iframeRef.current.contentWindow?.postMessage(message, url)\n }\n },\n [iframeRef, popupRef, url],\n )\n\n const hasActiveTarget = isLivePreviewing || (popupRef.current && !popupRef.current.closed)\n\n /**\n * For client-side apps, send data through `window.postMessage`\n * The preview could either be an iframe embedded on the page\n * Or it could be a separate popup window\n * Also fires when a preview signals ready (lastReadyAt) to sync initial state\n */\n useEffect(() => {\n if (!hasActiveTarget || !appIsReady || !formState) {\n return\n }\n\n const values = reduceFieldsToValues(formState, true)\n\n if (!values.id) {\n values.id = id\n }\n\n postMessageToTargets({\n type: 'payload-live-preview',\n collectionSlug,\n data: values,\n externallyUpdatedRelationship: mostRecentUpdate,\n globalSlug,\n locale: locale
|
|
1
|
+
{"version":3,"file":"index.js","names":["reduceFieldsToValues","React","useCallback","useEffect","useAllFormFields","useDocumentEvents","useDocumentInfo","useLivePreviewContext","useLocale","IframeLoader","DeviceContainer","LivePreviewToolbar","baseClass","LivePreviewWindow","props","appIsReady","breakpoint","iframeRef","isExpanded","isLivePreviewing","lastReadyAt","loadedURL","popupRef","setLoadedURL","shouldRenderIframe","url","zoom","locale","mostRecentUpdate","formState","id","collectionSlug","globalSlug","postMessageToTargets","message","current","closed","postMessage","contentWindow","hasActiveTarget","values","type","data","externallyUpdatedRelationship","code","_jsx","className","filter","Boolean","join","_jsxs","onLoad","ref","src","style","transform","undefined"],"sources":["../../../../src/elements/LivePreview/Window/index.tsx"],"sourcesContent":["'use client'\n\nimport type { EditViewProps } from 'payload'\n\nimport { reduceFieldsToValues } from 'payload/shared'\nimport React, { useCallback, useEffect } from 'react'\n\nimport { useAllFormFields } from '../../../forms/Form/context.js'\nimport { useDocumentEvents } from '../../../providers/DocumentEvents/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useLivePreviewContext } from '../../../providers/LivePreview/context.js'\nimport { useLocale } from '../../../providers/Locale/index.js'\nimport { IframeLoader } from '../../IframeLoader/index.js'\nimport { DeviceContainer } from '../Device/index.js'\nimport { LivePreviewToolbar } from '../Toolbar/index.js'\nimport './index.css'\n\nconst baseClass = 'live-preview-window'\n\nexport const LivePreviewWindow: React.FC<EditViewProps> = (props) => {\n const {\n appIsReady,\n breakpoint,\n iframeRef,\n isExpanded,\n isLivePreviewing,\n lastReadyAt,\n loadedURL,\n popupRef,\n setLoadedURL,\n shouldRenderIframe,\n url,\n zoom,\n } = useLivePreviewContext()\n\n const locale = useLocale()\n\n const { mostRecentUpdate } = useDocumentEvents()\n\n const [formState] = useAllFormFields()\n const { id, collectionSlug, globalSlug } = useDocumentInfo()\n\n const postMessageToTargets = useCallback(\n (message: object) => {\n if (popupRef.current && !popupRef.current.closed) {\n popupRef.current.postMessage(message, url)\n }\n\n if (iframeRef.current) {\n iframeRef.current.contentWindow?.postMessage(message, url)\n }\n },\n [iframeRef, popupRef, url],\n )\n\n const hasActiveTarget = isLivePreviewing || (popupRef.current && !popupRef.current.closed)\n\n /**\n * For client-side apps, send data through `window.postMessage`\n * The preview could either be an iframe embedded on the page\n * Or it could be a separate popup window\n * Also fires when a preview signals ready (lastReadyAt) to sync initial state\n */\n useEffect(() => {\n if (!hasActiveTarget || !appIsReady || !formState) {\n return\n }\n\n const values = reduceFieldsToValues(formState, true)\n\n if (!values.id) {\n values.id = id\n }\n\n postMessageToTargets({\n type: 'payload-live-preview',\n collectionSlug,\n data: values,\n externallyUpdatedRelationship: mostRecentUpdate,\n globalSlug,\n locale: locale?.code,\n })\n }, [\n formState,\n collectionSlug,\n globalSlug,\n id,\n appIsReady,\n mostRecentUpdate,\n locale,\n hasActiveTarget,\n loadedURL,\n lastReadyAt,\n postMessageToTargets,\n ])\n\n /**\n * To support SSR, we transmit a `window.postMessage` event without a payload\n * This is because the event will ultimately trigger a server-side roundtrip\n * i.e., save, save draft, autosave, etc. will fire `router.refresh()`\n */\n useEffect(() => {\n if (!hasActiveTarget || !appIsReady) {\n return\n }\n\n postMessageToTargets({ type: 'payload-document-event' })\n }, [mostRecentUpdate, hasActiveTarget, appIsReady, postMessageToTargets])\n\n return (\n <div\n className={[\n baseClass,\n isLivePreviewing && `${baseClass}--is-live-previewing`,\n isExpanded && `${baseClass}--is-expanded`,\n breakpoint &&\n breakpoint !== 'responsive' &&\n breakpoint !== 'custom' &&\n `${baseClass}--has-breakpoint`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <div className={`${baseClass}__wrapper`}>\n <LivePreviewToolbar {...props} />\n <div className={`${baseClass}__main`}>\n <DeviceContainer>\n {shouldRenderIframe && (\n <IframeLoader\n className=\"live-preview-iframe\"\n id=\"live-preview-iframe\"\n onLoad={() => {\n setLoadedURL(url)\n }}\n ref={iframeRef}\n src={url}\n style={{\n transform: typeof zoom === 'number' ? `scale(${zoom}) ` : undefined,\n }}\n />\n )}\n </DeviceContainer>\n </div>\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|