@payloadcms/ui 3.80.0-internal.37a8509 → 3.80.0-internal.52ab774
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/BulkUpload/EditForm/index.d.ts.map +1 -1
- package/dist/elements/BulkUpload/EditForm/index.js +0 -12
- package/dist/elements/BulkUpload/EditForm/index.js.map +1 -1
- package/dist/elements/Button/index.d.ts.map +1 -1
- package/dist/elements/Button/index.js +5 -3
- package/dist/elements/Button/index.js.map +1 -1
- package/dist/elements/Button/index.scss +38 -5
- 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/CheckboxPopup/index.d.ts.map +1 -1
- package/dist/elements/CheckboxPopup/index.js +0 -1
- package/dist/elements/CheckboxPopup/index.js.map +1 -1
- package/dist/elements/CheckboxPopup/index.scss +1 -0
- package/dist/elements/CreateDocumentButton/index.d.ts +26 -0
- package/dist/elements/CreateDocumentButton/index.d.ts.map +1 -0
- package/dist/elements/CreateDocumentButton/index.js +182 -0
- package/dist/elements/CreateDocumentButton/index.js.map +1 -0
- package/dist/elements/DefaultListViewTabs/index.d.ts.map +1 -1
- package/dist/elements/DefaultListViewTabs/index.js +28 -54
- package/dist/elements/DefaultListViewTabs/index.js.map +1 -1
- package/dist/elements/DelayedSpinner/index.d.ts +23 -0
- package/dist/elements/DelayedSpinner/index.d.ts.map +1 -0
- package/dist/elements/DelayedSpinner/index.js +61 -0
- package/dist/elements/DelayedSpinner/index.js.map +1 -0
- package/dist/elements/DocumentControls/index.d.ts +1 -0
- package/dist/elements/DocumentControls/index.d.ts.map +1 -1
- package/dist/elements/DocumentControls/index.js +6 -10
- package/dist/elements/DocumentControls/index.js.map +1 -1
- package/dist/elements/DocumentControls/index.scss +1 -1
- package/dist/elements/DocumentDrawer/index.d.ts.map +1 -1
- package/dist/elements/DocumentDrawer/index.js +54 -141
- package/dist/elements/DocumentDrawer/index.js.map +1 -1
- package/dist/elements/DocumentDrawer/types.d.ts +7 -1
- package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
- package/dist/elements/DocumentDrawer/types.js.map +1 -1
- package/dist/elements/DrawerActionHeader/index.d.ts.map +1 -1
- package/dist/elements/DrawerActionHeader/index.js +2 -0
- package/dist/elements/DrawerActionHeader/index.js.map +1 -1
- package/dist/elements/DrawerActionHeader/index.scss +2 -2
- package/dist/elements/Hierarchy/ColumnBrowser/Column/index.d.ts +5 -0
- package/dist/elements/Hierarchy/ColumnBrowser/Column/index.d.ts.map +1 -0
- package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js +166 -0
- package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js.map +1 -0
- package/dist/elements/Hierarchy/ColumnBrowser/Column/index.scss +63 -0
- package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.d.ts +5 -0
- package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.d.ts.map +1 -0
- package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.js +161 -0
- package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.js.map +1 -0
- package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.scss +105 -0
- package/dist/elements/Hierarchy/ColumnBrowser/index.d.ts +8 -0
- package/dist/elements/Hierarchy/ColumnBrowser/index.d.ts.map +1 -0
- package/dist/elements/Hierarchy/ColumnBrowser/index.js +473 -0
- package/dist/elements/Hierarchy/ColumnBrowser/index.js.map +1 -0
- package/dist/elements/Hierarchy/ColumnBrowser/index.scss +20 -0
- package/dist/elements/Hierarchy/ColumnBrowser/types.d.ts +106 -0
- package/dist/elements/Hierarchy/ColumnBrowser/types.d.ts.map +1 -0
- package/dist/elements/Hierarchy/ColumnBrowser/types.js +2 -0
- package/dist/elements/Hierarchy/ColumnBrowser/types.js.map +1 -0
- package/dist/elements/Hierarchy/DocHeaderButton/index.d.ts +11 -0
- package/dist/elements/Hierarchy/DocHeaderButton/index.d.ts.map +1 -0
- package/dist/elements/Hierarchy/DocHeaderButton/index.js +126 -0
- package/dist/elements/Hierarchy/DocHeaderButton/index.js.map +1 -0
- package/dist/elements/{FolderView/MoveDocToFolder → Hierarchy/DocHeaderButton}/index.scss +7 -1
- package/dist/elements/Hierarchy/DocHeaderButton/index.server.d.ts +10 -0
- package/dist/elements/Hierarchy/DocHeaderButton/index.server.d.ts.map +1 -0
- package/dist/elements/Hierarchy/DocHeaderButton/index.server.js +34 -0
- package/dist/elements/Hierarchy/DocHeaderButton/index.server.js.map +1 -0
- package/dist/elements/Hierarchy/Drawer/fetchAncestorPath.d.ts +15 -0
- package/dist/elements/Hierarchy/Drawer/fetchAncestorPath.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Drawer/fetchAncestorPath.js +60 -0
- package/dist/elements/Hierarchy/Drawer/fetchAncestorPath.js.map +1 -0
- package/dist/elements/Hierarchy/Drawer/index.d.ts +20 -0
- package/dist/elements/Hierarchy/Drawer/index.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Drawer/index.js +291 -0
- package/dist/elements/Hierarchy/Drawer/index.js.map +1 -0
- package/dist/elements/Hierarchy/Drawer/index.scss +81 -0
- package/dist/elements/Hierarchy/Drawer/types.d.ts +68 -0
- package/dist/elements/Hierarchy/Drawer/types.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Drawer/types.js +3 -0
- package/dist/elements/Hierarchy/Drawer/types.js.map +1 -0
- package/dist/elements/Hierarchy/Drawer/useHierarchyDrawer.d.ts +30 -0
- package/dist/elements/Hierarchy/Drawer/useHierarchyDrawer.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Drawer/useHierarchyDrawer.js +148 -0
- package/dist/elements/Hierarchy/Drawer/useHierarchyDrawer.js.map +1 -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 +185 -0
- package/dist/elements/Hierarchy/Field/SelectedHierarchies.js.map +1 -0
- package/dist/elements/Hierarchy/Field/SelectedHierarchies.scss +78 -0
- package/dist/elements/Hierarchy/Field/index.client.d.ts +8 -0
- package/dist/elements/Hierarchy/Field/index.client.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Field/index.client.js +186 -0
- package/dist/elements/Hierarchy/Field/index.client.js.map +1 -0
- package/dist/elements/Hierarchy/Field/index.scss +35 -0
- package/dist/elements/Hierarchy/Field/index.server.d.ts +3 -0
- package/dist/elements/Hierarchy/Field/index.server.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Field/index.server.js +30 -0
- package/dist/elements/Hierarchy/Field/index.server.js.map +1 -0
- package/dist/elements/Hierarchy/HydrateProvider/index.d.ts +4 -0
- package/dist/elements/Hierarchy/HydrateProvider/index.d.ts.map +1 -0
- package/dist/elements/Hierarchy/HydrateProvider/index.js +70 -0
- package/dist/elements/Hierarchy/HydrateProvider/index.js.map +1 -0
- package/dist/elements/Hierarchy/MoveMany/index.d.ts +22 -0
- package/dist/elements/Hierarchy/MoveMany/index.d.ts.map +1 -0
- package/dist/elements/Hierarchy/MoveMany/index.js +278 -0
- package/dist/elements/Hierarchy/MoveMany/index.js.map +1 -0
- package/dist/elements/Hierarchy/MoveMany/index.scss +7 -0
- package/dist/elements/Hierarchy/Search/HierarchySearchInput.d.ts +18 -0
- package/dist/elements/Hierarchy/Search/HierarchySearchInput.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Search/HierarchySearchInput.js +115 -0
- package/dist/elements/Hierarchy/Search/HierarchySearchInput.js.map +1 -0
- package/dist/elements/Hierarchy/Search/HierarchySearchResultItem.d.ts +13 -0
- package/dist/elements/Hierarchy/Search/HierarchySearchResultItem.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Search/HierarchySearchResultItem.js +88 -0
- package/dist/elements/Hierarchy/Search/HierarchySearchResultItem.js.map +1 -0
- package/dist/elements/Hierarchy/Search/HierarchySearchResults.d.ts +17 -0
- package/dist/elements/Hierarchy/Search/HierarchySearchResults.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Search/HierarchySearchResults.js +85 -0
- package/dist/elements/Hierarchy/Search/HierarchySearchResults.js.map +1 -0
- package/dist/elements/Hierarchy/Search/index.d.ts +10 -0
- package/dist/elements/Hierarchy/Search/index.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Search/index.js +144 -0
- package/dist/elements/Hierarchy/Search/index.js.map +1 -0
- package/dist/elements/Hierarchy/Search/index.scss +212 -0
- package/dist/elements/Hierarchy/Search/types.d.ts +21 -0
- package/dist/elements/Hierarchy/Search/types.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Search/types.js +2 -0
- package/dist/elements/Hierarchy/Search/types.js.map +1 -0
- package/dist/elements/Hierarchy/Search/useHierarchySearch.d.ts +20 -0
- package/dist/elements/Hierarchy/Search/useHierarchySearch.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Search/useHierarchySearch.js +122 -0
- package/dist/elements/Hierarchy/Search/useHierarchySearch.js.map +1 -0
- package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.d.ts +21 -0
- package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js +194 -0
- package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js.map +1 -0
- package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.d.ts +7 -0
- package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js +177 -0
- package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js.map +1 -0
- package/dist/elements/Hierarchy/Tree/LoadMore/LoadMoreButton.d.ts +8 -0
- package/dist/elements/Hierarchy/Tree/LoadMore/LoadMoreButton.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Tree/LoadMore/LoadMoreButton.js +36 -0
- package/dist/elements/Hierarchy/Tree/LoadMore/LoadMoreButton.js.map +1 -0
- package/dist/elements/Hierarchy/Tree/LoadMore/index.d.ts +12 -0
- package/dist/elements/Hierarchy/Tree/LoadMore/index.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Tree/LoadMore/index.js +29 -0
- package/dist/elements/Hierarchy/Tree/LoadMore/index.js.map +1 -0
- package/dist/elements/Hierarchy/Tree/LoadMore/index.scss +26 -0
- package/dist/elements/Hierarchy/Tree/TreeConnector.d.ts +7 -0
- package/dist/elements/Hierarchy/Tree/TreeConnector.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Tree/TreeConnector.js +23 -0
- package/dist/elements/Hierarchy/Tree/TreeConnector.js.map +1 -0
- package/dist/elements/Hierarchy/Tree/TreeFocusContext.d.ts +28 -0
- package/dist/elements/Hierarchy/Tree/TreeFocusContext.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Tree/TreeFocusContext.js +140 -0
- package/dist/elements/Hierarchy/Tree/TreeFocusContext.js.map +1 -0
- package/dist/elements/Hierarchy/Tree/TreeNode/index.d.ts +5 -0
- package/dist/elements/Hierarchy/Tree/TreeNode/index.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Tree/TreeNode/index.js +225 -0
- package/dist/elements/Hierarchy/Tree/TreeNode/index.js.map +1 -0
- package/dist/elements/Hierarchy/Tree/TreeNode/index.scss +110 -0
- package/dist/elements/Hierarchy/Tree/index.d.ts +5 -0
- package/dist/elements/Hierarchy/Tree/index.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Tree/index.js +305 -0
- package/dist/elements/Hierarchy/Tree/index.js.map +1 -0
- package/dist/elements/Hierarchy/Tree/index.scss +60 -0
- package/dist/elements/Hierarchy/Tree/types.d.ts +76 -0
- package/dist/elements/Hierarchy/Tree/types.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Tree/types.js +2 -0
- package/dist/elements/Hierarchy/Tree/types.js.map +1 -0
- package/dist/elements/Hierarchy/Tree/useChildren.d.ts +32 -0
- package/dist/elements/Hierarchy/Tree/useChildren.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Tree/useChildren.js +233 -0
- package/dist/elements/Hierarchy/Tree/useChildren.js.map +1 -0
- package/dist/elements/Link/index.d.ts +4 -0
- package/dist/elements/Link/index.d.ts.map +1 -1
- package/dist/elements/Link/index.js +5 -0
- package/dist/elements/Link/index.js.map +1 -1
- package/dist/elements/ListHeader/TitleActions/index.d.ts +0 -1
- package/dist/elements/ListHeader/TitleActions/index.d.ts.map +1 -1
- package/dist/elements/ListHeader/TitleActions/index.js +0 -1
- package/dist/elements/ListHeader/TitleActions/index.js.map +1 -1
- package/dist/elements/ListHeader/index.js +2 -2
- package/dist/elements/ListHeader/index.js.map +1 -1
- package/dist/elements/ListSelection/index.scss +2 -1
- package/dist/elements/LoadMoreRow/index.d.ts +15 -0
- package/dist/elements/LoadMoreRow/index.d.ts.map +1 -0
- package/dist/elements/LoadMoreRow/index.js +75 -0
- package/dist/elements/LoadMoreRow/index.js.map +1 -0
- package/dist/elements/LoadMoreRow/index.scss +42 -0
- package/dist/elements/Locked/index.scss +1 -1
- package/dist/elements/RelationshipTable/index.js +3 -3
- package/dist/elements/RelationshipTable/index.js.map +1 -1
- package/dist/elements/Spinner/index.d.ts +16 -0
- package/dist/elements/Spinner/index.d.ts.map +1 -0
- package/dist/elements/Spinner/index.js +49 -0
- package/dist/elements/Spinner/index.js.map +1 -0
- package/dist/elements/Spinner/index.scss +39 -0
- package/dist/elements/StepNav/index.d.ts.map +1 -1
- package/dist/elements/StepNav/index.js +10 -1
- package/dist/elements/StepNav/index.js.map +1 -1
- package/dist/elements/StepNav/types.d.ts +1 -0
- 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.d.ts +6 -0
- package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.d.ts.map +1 -0
- package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js +187 -0
- package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js.map +1 -0
- package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.scss +29 -0
- package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/index.js +20 -0
- package/dist/elements/Table/DefaultCell/index.js.map +1 -1
- package/dist/elements/Tooltip/index.js +1 -1
- package/dist/elements/Tooltip/index.js.map +1 -1
- package/dist/elements/Tooltip/index.scss +1 -15
- package/dist/elements/withMergedProps/index.d.ts +1 -1
- package/dist/elements/withMergedProps/index.js +1 -1
- package/dist/elements/withMergedProps/index.js.map +1 -1
- package/dist/exports/client/index.d.ts +26 -9
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +14 -12
- package/dist/exports/client/index.js.map +4 -4
- package/dist/exports/rsc/index.d.ts +3 -3
- package/dist/exports/rsc/index.d.ts.map +1 -1
- package/dist/exports/rsc/index.js +3 -3
- package/dist/exports/rsc/index.js.map +1 -1
- package/dist/exports/shared/index.js.map +1 -1
- package/dist/fields/Join/index.d.ts.map +1 -1
- package/dist/fields/Join/index.js +1 -1
- package/dist/fields/Join/index.js.map +1 -1
- package/dist/fields/Null/index.d.ts +11 -0
- package/dist/fields/Null/index.d.ts.map +1 -0
- package/dist/fields/Null/index.js +13 -0
- package/dist/fields/Null/index.js.map +1 -0
- package/dist/icons/Chevron/index.d.ts.map +1 -1
- package/dist/icons/Chevron/index.js +5 -1
- package/dist/icons/Chevron/index.js.map +1 -1
- package/dist/icons/Document/index.d.ts +3 -1
- package/dist/icons/Document/index.d.ts.map +1 -1
- package/dist/icons/Document/index.js +4 -2
- package/dist/icons/Document/index.js.map +1 -1
- package/dist/icons/Document/index.scss +4 -0
- package/dist/icons/Filter/index.d.ts +4 -0
- package/dist/icons/Filter/index.d.ts.map +1 -0
- package/dist/icons/Filter/index.js +15 -0
- package/dist/icons/Filter/index.js.map +1 -0
- package/dist/icons/Filter/index.scss +13 -0
- package/dist/icons/Folder/index.d.ts +4 -2
- package/dist/icons/Folder/index.d.ts.map +1 -1
- package/dist/icons/Folder/index.js +4 -2
- package/dist/icons/Folder/index.js.map +1 -1
- package/dist/icons/Folder/index.scss +8 -0
- package/dist/icons/Lock/index.scss +1 -1
- package/dist/icons/Plus/index.d.ts.map +1 -1
- package/dist/icons/Plus/index.js +2 -1
- package/dist/icons/Plus/index.js.map +1 -1
- package/dist/icons/TableView/index.d.ts +3 -0
- package/dist/icons/TableView/index.d.ts.map +1 -0
- package/dist/icons/TableView/index.js +16 -0
- package/dist/icons/TableView/index.js.map +1 -0
- package/dist/icons/Tag/index.d.ts +8 -0
- package/dist/icons/Tag/index.d.ts.map +1 -0
- package/dist/icons/Tag/index.js +22 -0
- package/dist/icons/Tag/index.js.map +1 -0
- package/dist/icons/Tag/index.scss +14 -0
- package/dist/providers/DocumentSelection/index.d.ts +8 -0
- package/dist/providers/DocumentSelection/index.d.ts.map +1 -0
- package/dist/providers/DocumentSelection/index.js +239 -0
- package/dist/providers/DocumentSelection/index.js.map +1 -0
- package/dist/providers/DocumentSelection/types.d.ts +122 -0
- package/dist/providers/DocumentSelection/types.d.ts.map +1 -0
- package/dist/providers/DocumentSelection/types.js +5 -0
- package/dist/providers/DocumentSelection/types.js.map +1 -0
- package/dist/providers/Hierarchy/index.d.ts +5 -0
- package/dist/providers/Hierarchy/index.d.ts.map +1 -0
- package/dist/providers/Hierarchy/index.js +358 -0
- package/dist/providers/Hierarchy/index.js.map +1 -0
- package/dist/providers/Hierarchy/types.d.ts +106 -0
- package/dist/providers/Hierarchy/types.d.ts.map +1 -0
- package/dist/providers/Hierarchy/types.js +2 -0
- package/dist/providers/Hierarchy/types.js.map +1 -0
- package/dist/providers/Root/index.d.ts.map +1 -1
- package/dist/providers/Root/index.js +18 -15
- package/dist/providers/Root/index.js.map +1 -1
- package/dist/providers/ServerFunctions/index.d.ts +1 -6
- package/dist/providers/ServerFunctions/index.d.ts.map +1 -1
- package/dist/providers/ServerFunctions/index.js +0 -18
- package/dist/providers/ServerFunctions/index.js.map +1 -1
- package/dist/providers/SidebarTabs/index.d.ts +19 -0
- package/dist/providers/SidebarTabs/index.d.ts.map +1 -0
- package/dist/providers/SidebarTabs/index.js +24 -0
- package/dist/providers/SidebarTabs/index.js.map +1 -0
- package/dist/providers/TableColumns/buildColumnState/renderCell.d.ts +2 -1
- package/dist/providers/TableColumns/buildColumnState/renderCell.d.ts.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/renderCell.js +34 -1
- package/dist/providers/TableColumns/buildColumnState/renderCell.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/utilities/handleLivePreview.d.ts.map +1 -1
- package/dist/utilities/isSuperset.d.ts +6 -0
- package/dist/utilities/isSuperset.d.ts.map +1 -0
- package/dist/utilities/isSuperset.js +10 -0
- package/dist/utilities/isSuperset.js.map +1 -0
- package/dist/utilities/renderTable.d.ts +3 -1
- package/dist/utilities/renderTable.d.ts.map +1 -1
- package/dist/utilities/renderTable.js +9 -3
- package/dist/utilities/renderTable.js.map +1 -1
- package/dist/views/Edit/index.d.ts +1 -1
- package/dist/views/Edit/index.d.ts.map +1 -1
- package/dist/views/Edit/index.js +4 -2
- package/dist/views/Edit/index.js.map +1 -1
- package/dist/views/HierarchyList/DocumentListSelection/index.d.ts +10 -0
- package/dist/views/HierarchyList/DocumentListSelection/index.d.ts.map +1 -0
- package/dist/views/HierarchyList/DocumentListSelection/index.js +196 -0
- package/dist/views/HierarchyList/DocumentListSelection/index.js.map +1 -0
- package/dist/views/HierarchyList/HierarchyListHeader/index.d.ts +21 -0
- package/dist/views/HierarchyList/HierarchyListHeader/index.d.ts.map +1 -0
- package/dist/views/HierarchyList/HierarchyListHeader/index.js +68 -0
- package/dist/views/HierarchyList/HierarchyListHeader/index.js.map +1 -0
- package/dist/views/HierarchyList/HierarchyListHeader/index.scss +9 -0
- package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.d.ts +4 -0
- package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.d.ts.map +1 -0
- package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.js +104 -0
- package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.js.map +1 -0
- package/dist/views/HierarchyList/HierarchyTable/DateCell.d.ts +4 -0
- package/dist/views/HierarchyList/HierarchyTable/DateCell.d.ts.map +1 -0
- package/dist/views/HierarchyList/HierarchyTable/DateCell.js +53 -0
- package/dist/views/HierarchyList/HierarchyTable/DateCell.js.map +1 -0
- package/dist/views/HierarchyList/HierarchyTable/RelatedNameCell.d.ts +4 -0
- package/dist/views/HierarchyList/HierarchyTable/RelatedNameCell.d.ts.map +1 -0
- package/dist/views/HierarchyList/HierarchyTable/RelatedNameCell.js +128 -0
- package/dist/views/HierarchyList/HierarchyTable/RelatedNameCell.js.map +1 -0
- package/dist/views/HierarchyList/HierarchyTable/SlotTable.d.ts +99 -0
- package/dist/views/HierarchyList/HierarchyTable/SlotTable.d.ts.map +1 -0
- package/dist/views/HierarchyList/HierarchyTable/SlotTable.js +118 -0
- package/dist/views/HierarchyList/HierarchyTable/SlotTable.js.map +1 -0
- package/dist/views/HierarchyList/HierarchyTable/SlotTable.scss +214 -0
- package/dist/views/HierarchyList/HierarchyTable/index.d.ts +27 -0
- package/dist/views/HierarchyList/HierarchyTable/index.d.ts.map +1 -0
- package/dist/views/HierarchyList/HierarchyTable/index.js +388 -0
- package/dist/views/HierarchyList/HierarchyTable/index.js.map +1 -0
- package/dist/views/HierarchyList/HierarchyTable/index.scss +148 -0
- package/dist/views/HierarchyList/HierarchyTable/types.d.ts +20 -0
- package/dist/views/HierarchyList/HierarchyTable/types.d.ts.map +1 -0
- package/dist/views/HierarchyList/HierarchyTable/types.js +2 -0
- package/dist/views/HierarchyList/HierarchyTable/types.js.map +1 -0
- package/dist/views/HierarchyList/TypeFilter/index.d.ts +15 -0
- package/dist/views/HierarchyList/TypeFilter/index.d.ts.map +1 -0
- package/dist/views/HierarchyList/TypeFilter/index.js +37 -0
- package/dist/views/HierarchyList/TypeFilter/index.js.map +1 -0
- package/dist/views/HierarchyList/TypeFilter/index.scss +32 -0
- package/dist/views/HierarchyList/index.d.ts +5 -0
- package/dist/views/HierarchyList/index.d.ts.map +1 -0
- package/dist/views/HierarchyList/index.js +305 -0
- package/dist/views/HierarchyList/index.js.map +1 -0
- package/dist/views/HierarchyList/index.scss +72 -0
- package/dist/views/List/index.d.ts.map +1 -1
- package/dist/views/List/index.js +51 -7
- package/dist/views/List/index.js.map +1 -1
- package/package.json +4 -4
- package/dist/elements/FolderView/Breadcrumbs/index.d.ts +0 -19
- package/dist/elements/FolderView/Breadcrumbs/index.d.ts.map +0 -1
- package/dist/elements/FolderView/Breadcrumbs/index.js +0 -96
- package/dist/elements/FolderView/Breadcrumbs/index.js.map +0 -1
- package/dist/elements/FolderView/Breadcrumbs/index.scss +0 -56
- package/dist/elements/FolderView/BrowseByFolderButton/index.d.ts +0 -6
- package/dist/elements/FolderView/BrowseByFolderButton/index.d.ts.map +0 -1
- package/dist/elements/FolderView/BrowseByFolderButton/index.js +0 -40
- package/dist/elements/FolderView/BrowseByFolderButton/index.js.map +0 -1
- package/dist/elements/FolderView/BrowseByFolderButton/index.scss +0 -30
- package/dist/elements/FolderView/Cell/index.client.d.ts +0 -13
- package/dist/elements/FolderView/Cell/index.client.d.ts.map +0 -1
- package/dist/elements/FolderView/Cell/index.client.js +0 -95
- package/dist/elements/FolderView/Cell/index.client.js.map +0 -1
- package/dist/elements/FolderView/Cell/index.server.d.ts +0 -4
- package/dist/elements/FolderView/Cell/index.server.d.ts.map +0 -1
- package/dist/elements/FolderView/Cell/index.server.js +0 -18
- package/dist/elements/FolderView/Cell/index.server.js.map +0 -1
- package/dist/elements/FolderView/ColoredFolderIcon/index.d.ts +0 -3
- package/dist/elements/FolderView/ColoredFolderIcon/index.d.ts.map +0 -1
- package/dist/elements/FolderView/ColoredFolderIcon/index.js +0 -9
- package/dist/elements/FolderView/ColoredFolderIcon/index.js.map +0 -1
- package/dist/elements/FolderView/ColoredFolderIcon/index.scss +0 -5
- package/dist/elements/FolderView/CurrentFolderActions/index.d.ts +0 -7
- package/dist/elements/FolderView/CurrentFolderActions/index.d.ts.map +0 -1
- package/dist/elements/FolderView/CurrentFolderActions/index.js +0 -162
- package/dist/elements/FolderView/CurrentFolderActions/index.js.map +0 -1
- package/dist/elements/FolderView/DragOverlaySelection/index.d.ts +0 -11
- package/dist/elements/FolderView/DragOverlaySelection/index.d.ts.map +0 -1
- package/dist/elements/FolderView/DragOverlaySelection/index.js +0 -62
- package/dist/elements/FolderView/DragOverlaySelection/index.js.map +0 -1
- package/dist/elements/FolderView/DragOverlaySelection/index.scss +0 -35
- package/dist/elements/FolderView/DraggableTableRow/index.d.ts +0 -18
- package/dist/elements/FolderView/DraggableTableRow/index.d.ts.map +0 -1
- package/dist/elements/FolderView/DraggableTableRow/index.js +0 -63
- package/dist/elements/FolderView/DraggableTableRow/index.js.map +0 -1
- package/dist/elements/FolderView/DraggableTableRow/index.scss +0 -135
- package/dist/elements/FolderView/DraggableWithClick/index.d.ts +0 -15
- package/dist/elements/FolderView/DraggableWithClick/index.d.ts.map +0 -1
- package/dist/elements/FolderView/DraggableWithClick/index.js +0 -86
- package/dist/elements/FolderView/DraggableWithClick/index.js.map +0 -1
- package/dist/elements/FolderView/DraggableWithClick/index.scss +0 -5
- package/dist/elements/FolderView/Drawers/EditFolderAction/index.d.ts +0 -7
- package/dist/elements/FolderView/Drawers/EditFolderAction/index.d.ts.map +0 -1
- package/dist/elements/FolderView/Drawers/EditFolderAction/index.js +0 -39
- package/dist/elements/FolderView/Drawers/EditFolderAction/index.js.map +0 -1
- package/dist/elements/FolderView/Drawers/MoveToFolder/index.d.ts +0 -37
- package/dist/elements/FolderView/Drawers/MoveToFolder/index.d.ts.map +0 -1
- package/dist/elements/FolderView/Drawers/MoveToFolder/index.js +0 -609
- package/dist/elements/FolderView/Drawers/MoveToFolder/index.js.map +0 -1
- package/dist/elements/FolderView/Drawers/MoveToFolder/index.scss +0 -30
- package/dist/elements/FolderView/FilterFolderTypePill/index.d.ts +0 -4
- package/dist/elements/FolderView/FilterFolderTypePill/index.d.ts.map +0 -1
- package/dist/elements/FolderView/FilterFolderTypePill/index.js +0 -102
- package/dist/elements/FolderView/FilterFolderTypePill/index.js.map +0 -1
- package/dist/elements/FolderView/FilterFolderTypePill/index.scss +0 -16
- package/dist/elements/FolderView/FolderField/index.scss +0 -12
- package/dist/elements/FolderView/FolderField/index.server.d.ts +0 -4
- package/dist/elements/FolderView/FolderField/index.server.d.ts.map +0 -1
- package/dist/elements/FolderView/FolderField/index.server.js +0 -16
- package/dist/elements/FolderView/FolderField/index.server.js.map +0 -1
- package/dist/elements/FolderView/FolderFileCard/index.d.ts +0 -30
- package/dist/elements/FolderView/FolderFileCard/index.d.ts.map +0 -1
- package/dist/elements/FolderView/FolderFileCard/index.js +0 -209
- package/dist/elements/FolderView/FolderFileCard/index.js.map +0 -1
- package/dist/elements/FolderView/FolderFileCard/index.scss +0 -247
- package/dist/elements/FolderView/FolderFileTable/index.d.ts +0 -8
- package/dist/elements/FolderView/FolderFileTable/index.d.ts.map +0 -1
- package/dist/elements/FolderView/FolderFileTable/index.js +0 -284
- package/dist/elements/FolderView/FolderFileTable/index.js.map +0 -1
- package/dist/elements/FolderView/FolderFileTable/index.scss +0 -11
- package/dist/elements/FolderView/FolderTypeField/index.d.ts +0 -4
- package/dist/elements/FolderView/FolderTypeField/index.d.ts.map +0 -1
- package/dist/elements/FolderView/FolderTypeField/index.js +0 -123
- package/dist/elements/FolderView/FolderTypeField/index.js.map +0 -1
- package/dist/elements/FolderView/ItemCardGrid/index.d.ts +0 -16
- package/dist/elements/FolderView/ItemCardGrid/index.d.ts.map +0 -1
- package/dist/elements/FolderView/ItemCardGrid/index.js +0 -34
- package/dist/elements/FolderView/ItemCardGrid/index.js.map +0 -1
- package/dist/elements/FolderView/ItemCardGrid/index.scss +0 -16
- package/dist/elements/FolderView/MoveDocToFolder/index.d.ts +0 -37
- package/dist/elements/FolderView/MoveDocToFolder/index.d.ts.map +0 -1
- package/dist/elements/FolderView/MoveDocToFolder/index.js +0 -292
- package/dist/elements/FolderView/MoveDocToFolder/index.js.map +0 -1
- package/dist/elements/FolderView/SimpleTable/index.d.ts +0 -19
- package/dist/elements/FolderView/SimpleTable/index.d.ts.map +0 -1
- package/dist/elements/FolderView/SimpleTable/index.js +0 -95
- package/dist/elements/FolderView/SimpleTable/index.js.map +0 -1
- package/dist/elements/FolderView/SimpleTable/index.scss +0 -59
- package/dist/elements/FolderView/SortByPill/index.d.ts +0 -4
- package/dist/elements/FolderView/SortByPill/index.d.ts.map +0 -1
- package/dist/elements/FolderView/SortByPill/index.js +0 -112
- package/dist/elements/FolderView/SortByPill/index.js.map +0 -1
- package/dist/elements/FolderView/SortByPill/index.scss +0 -16
- package/dist/elements/FolderView/ToggleViewButtons/index.d.ts +0 -8
- package/dist/elements/FolderView/ToggleViewButtons/index.d.ts.map +0 -1
- package/dist/elements/FolderView/ToggleViewButtons/index.js +0 -31
- package/dist/elements/FolderView/ToggleViewButtons/index.js.map +0 -1
- package/dist/elements/FolderView/ToggleViewButtons/index.scss +0 -17
- package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.d.ts +0 -15
- package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.d.ts.map +0 -1
- package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.js +0 -182
- package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.js.map +0 -1
- package/dist/providers/Folders/groupItemIDsByRelation.d.ts +0 -3
- package/dist/providers/Folders/groupItemIDsByRelation.d.ts.map +0 -1
- package/dist/providers/Folders/groupItemIDsByRelation.js +0 -10
- package/dist/providers/Folders/groupItemIDsByRelation.js.map +0 -1
- package/dist/providers/Folders/index.d.ts +0 -143
- package/dist/providers/Folders/index.d.ts.map +0 -1
- package/dist/providers/Folders/index.js +0 -641
- package/dist/providers/Folders/index.js.map +0 -1
- package/dist/utilities/getFolderResultsComponentAndData.d.ts +0 -25
- package/dist/utilities/getFolderResultsComponentAndData.d.ts.map +0 -1
- package/dist/utilities/getFolderResultsComponentAndData.js +0 -135
- package/dist/utilities/getFolderResultsComponentAndData.js.map +0 -1
- package/dist/views/BrowseByFolder/index.d.ts +0 -5
- package/dist/views/BrowseByFolder/index.d.ts.map +0 -1
- package/dist/views/BrowseByFolder/index.js +0 -342
- package/dist/views/BrowseByFolder/index.js.map +0 -1
- package/dist/views/BrowseByFolder/index.scss +0 -174
- package/dist/views/CollectionFolder/ListSelection/index.d.ts +0 -9
- package/dist/views/CollectionFolder/ListSelection/index.d.ts.map +0 -1
- package/dist/views/CollectionFolder/ListSelection/index.js +0 -180
- package/dist/views/CollectionFolder/ListSelection/index.js.map +0 -1
- package/dist/views/CollectionFolder/index.d.ts +0 -5
- package/dist/views/CollectionFolder/index.d.ts.map +0 -1
- package/dist/views/CollectionFolder/index.js +0 -325
- package/dist/views/CollectionFolder/index.js.map +0 -1
- package/dist/views/CollectionFolder/index.scss +0 -162
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { getTranslation } from '@payloadcms/translations';
|
|
5
|
+
import { combineWhereConstraints, DEFAULT_HIERARCHY_TREE_LIMIT, formatAdminURL } from 'payload/shared';
|
|
6
|
+
import * as qs from 'qs-esm';
|
|
7
|
+
import React, { useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';
|
|
8
|
+
import { useEffectEvent } from '../../../hooks/useEffectEvent.js';
|
|
9
|
+
import { useAuth } from '../../../providers/Auth/index.js';
|
|
10
|
+
import { useConfig } from '../../../providers/Config/index.js';
|
|
11
|
+
import { useTranslation } from '../../../providers/Translation/index.js';
|
|
12
|
+
import { isSuperset } from '../../../utilities/isSuperset.js';
|
|
13
|
+
import { Spinner } from '../../Spinner/index.js';
|
|
14
|
+
import { Column } from './Column/index.js';
|
|
15
|
+
import './index.scss';
|
|
16
|
+
const baseClass = 'hierarchy-column-browser';
|
|
17
|
+
export const HierarchyColumnBrowser = function HierarchyColumnBrowser({
|
|
18
|
+
ancestorsWithSelections,
|
|
19
|
+
baseFilter,
|
|
20
|
+
disabledIds,
|
|
21
|
+
filterByCollection,
|
|
22
|
+
hierarchyCollectionSlug,
|
|
23
|
+
initialExpandedPath,
|
|
24
|
+
isLoadingPath,
|
|
25
|
+
onCreateNew,
|
|
26
|
+
onSelect,
|
|
27
|
+
parentFieldName,
|
|
28
|
+
ref,
|
|
29
|
+
selectedIds,
|
|
30
|
+
useAsTitle = 'id'
|
|
31
|
+
}) {
|
|
32
|
+
const {
|
|
33
|
+
i18n
|
|
34
|
+
} = useTranslation();
|
|
35
|
+
const {
|
|
36
|
+
permissions
|
|
37
|
+
} = useAuth();
|
|
38
|
+
const {
|
|
39
|
+
config: {
|
|
40
|
+
routes: {
|
|
41
|
+
api
|
|
42
|
+
},
|
|
43
|
+
serverURL
|
|
44
|
+
},
|
|
45
|
+
getEntityConfig
|
|
46
|
+
} = useConfig();
|
|
47
|
+
const collectionConfig = getEntityConfig({
|
|
48
|
+
collectionSlug: hierarchyCollectionSlug
|
|
49
|
+
});
|
|
50
|
+
const hierarchyConfig = collectionConfig?.hierarchy && typeof collectionConfig.hierarchy === 'object' ? collectionConfig.hierarchy : undefined;
|
|
51
|
+
const treeLimit = hierarchyConfig?.admin?.treeLimit ?? DEFAULT_HIERARCHY_TREE_LIMIT;
|
|
52
|
+
const collectionLabel = collectionConfig ? getTranslation(collectionConfig.labels?.singular || hierarchyCollectionSlug, i18n) : hierarchyCollectionSlug;
|
|
53
|
+
const canCreate = Boolean(permissions?.collections?.[hierarchyCollectionSlug]?.create);
|
|
54
|
+
const [columns, setColumns] = useState([]);
|
|
55
|
+
const [expandedPath, setExpandedPath] = useState([]);
|
|
56
|
+
const containerRef = useRef(null);
|
|
57
|
+
const lastColumnRef = useRef(null);
|
|
58
|
+
const hasLoadedRef = useRef(false);
|
|
59
|
+
const fetchItems = useCallback(async ({
|
|
60
|
+
page,
|
|
61
|
+
parentId
|
|
62
|
+
}) => {
|
|
63
|
+
const parentWhere = parentId === null ? {
|
|
64
|
+
[parentFieldName]: {
|
|
65
|
+
exists: false
|
|
66
|
+
}
|
|
67
|
+
} : {
|
|
68
|
+
[parentFieldName]: {
|
|
69
|
+
equals: parentId
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
// Build the final where clause, adding collectionSpecific filtering if configured
|
|
73
|
+
let where = parentWhere;
|
|
74
|
+
// Filter by collection type if collectionSpecific is configured and filterByCollection is defined
|
|
75
|
+
// - undefined: no filtering, show all folders
|
|
76
|
+
// - [] empty: show all folders (no constraints)
|
|
77
|
+
// - ['posts', ...]: show folders that allow ANY of these OR unrestricted
|
|
78
|
+
// Note: Ideally we'd enforce ALL (superset) but hasMany enum fields in PG
|
|
79
|
+
// do not support "contains all" queries easily
|
|
80
|
+
if (hierarchyConfig?.collectionSpecific && filterByCollection !== undefined) {
|
|
81
|
+
const typeFieldName = hierarchyConfig.collectionSpecific.fieldName;
|
|
82
|
+
if (filterByCollection.length > 0) {
|
|
83
|
+
// Get all possible type field values from relatedCollections
|
|
84
|
+
// This is used to detect "unrestricted" folders (empty allowedTypes array)
|
|
85
|
+
const allPossibleTypes = Object.keys(hierarchyConfig.relatedCollections || {});
|
|
86
|
+
where = {
|
|
87
|
+
and: [parentWhere, {
|
|
88
|
+
or: [
|
|
89
|
+
// items that allow ANY of the selected collections
|
|
90
|
+
{
|
|
91
|
+
[typeFieldName]: {
|
|
92
|
+
in: filterByCollection
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
// OR items that are unrestricted (no type field exists)
|
|
96
|
+
{
|
|
97
|
+
[typeFieldName]: {
|
|
98
|
+
exists: false
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
// OR items with empty allowedTypes array (unrestricted)
|
|
102
|
+
// Using not_in with all possible values matches empty arrays in both MongoDB and Postgres
|
|
103
|
+
...(allPossibleTypes.length > 0 ? [{
|
|
104
|
+
[typeFieldName]: {
|
|
105
|
+
not_in: allPossibleTypes
|
|
106
|
+
}
|
|
107
|
+
}] : [])]
|
|
108
|
+
}]
|
|
109
|
+
};
|
|
110
|
+
} else {
|
|
111
|
+
// Empty array: show all items of this parent
|
|
112
|
+
where = parentWhere;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Combine with baseFilter if provided
|
|
116
|
+
const whereWithBaseFilter = combineWhereConstraints([where, baseFilter]);
|
|
117
|
+
const queryString = qs.stringify({
|
|
118
|
+
limit: treeLimit,
|
|
119
|
+
page,
|
|
120
|
+
sort: useAsTitle,
|
|
121
|
+
where: whereWithBaseFilter
|
|
122
|
+
}, {
|
|
123
|
+
addQueryPrefix: true
|
|
124
|
+
});
|
|
125
|
+
const url = formatAdminURL({
|
|
126
|
+
apiRoute: api,
|
|
127
|
+
path: `/${hierarchyCollectionSlug}${queryString}`,
|
|
128
|
+
serverURL
|
|
129
|
+
});
|
|
130
|
+
const response = await fetch(url, {
|
|
131
|
+
credentials: 'include'
|
|
132
|
+
});
|
|
133
|
+
if (!response.ok) {
|
|
134
|
+
throw new Error('Failed to fetch items');
|
|
135
|
+
}
|
|
136
|
+
const data = await response.json();
|
|
137
|
+
const typeFieldName_0 = hierarchyConfig?.collectionSpecific ? hierarchyConfig.collectionSpecific.fieldName : undefined;
|
|
138
|
+
const allItems = (data.docs || []).map(doc => ({
|
|
139
|
+
id: doc.id,
|
|
140
|
+
allowedCollections: typeFieldName_0 ? doc[typeFieldName_0] : undefined,
|
|
141
|
+
hasChildren: true,
|
|
142
|
+
title: String(doc[useAsTitle] || doc.id)
|
|
143
|
+
}));
|
|
144
|
+
// Client-side filter: only show items that are a superset of required collections
|
|
145
|
+
// Server query uses ANY (due to PG limitations), but we want ALL (superset)
|
|
146
|
+
const items = filterByCollection && filterByCollection.length > 0 ? allItems.filter(item => isSuperset(item.allowedCollections, filterByCollection)) : allItems;
|
|
147
|
+
return {
|
|
148
|
+
hasNextPage: data.hasNextPage || false,
|
|
149
|
+
items,
|
|
150
|
+
totalDocs: data.totalDocs || 0
|
|
151
|
+
};
|
|
152
|
+
}, [api, baseFilter, filterByCollection, hierarchyConfig, parentFieldName, serverURL, hierarchyCollectionSlug, treeLimit, useAsTitle]);
|
|
153
|
+
const refreshColumn = useCallback(async parentId_0 => {
|
|
154
|
+
const columnIndex = columns.findIndex(col => col.parentId === parentId_0);
|
|
155
|
+
if (columnIndex === -1) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
setColumns(prev => {
|
|
159
|
+
const updated = [...prev];
|
|
160
|
+
updated[columnIndex] = {
|
|
161
|
+
...updated[columnIndex],
|
|
162
|
+
isLoading: true
|
|
163
|
+
};
|
|
164
|
+
return updated;
|
|
165
|
+
});
|
|
166
|
+
try {
|
|
167
|
+
const {
|
|
168
|
+
hasNextPage,
|
|
169
|
+
items: items_0,
|
|
170
|
+
totalDocs
|
|
171
|
+
} = await fetchItems({
|
|
172
|
+
page: 1,
|
|
173
|
+
parentId: parentId_0
|
|
174
|
+
});
|
|
175
|
+
setColumns(prev_1 => {
|
|
176
|
+
const updated_1 = [...prev_1];
|
|
177
|
+
if (updated_1[columnIndex]) {
|
|
178
|
+
updated_1[columnIndex] = {
|
|
179
|
+
...updated_1[columnIndex],
|
|
180
|
+
hasNextPage,
|
|
181
|
+
isLoading: false,
|
|
182
|
+
items: items_0,
|
|
183
|
+
page: 1,
|
|
184
|
+
totalDocs
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
return updated_1;
|
|
188
|
+
});
|
|
189
|
+
} catch {
|
|
190
|
+
setColumns(prev_0 => {
|
|
191
|
+
const updated_0 = [...prev_0];
|
|
192
|
+
if (updated_0[columnIndex]) {
|
|
193
|
+
updated_0[columnIndex] = {
|
|
194
|
+
...updated_0[columnIndex],
|
|
195
|
+
isLoading: false
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
return updated_0;
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
}, [columns, fetchItems]);
|
|
202
|
+
useImperativeHandle(ref, () => ({
|
|
203
|
+
refreshColumn
|
|
204
|
+
}), [refreshColumn]);
|
|
205
|
+
const loadColumns = useEffectEvent(async path => {
|
|
206
|
+
// Build list of parentIds to fetch: [null, ...path]
|
|
207
|
+
const parentIds = [null];
|
|
208
|
+
if (path?.length) {
|
|
209
|
+
parentIds.push(...path);
|
|
210
|
+
}
|
|
211
|
+
// Set initial loading state for all columns
|
|
212
|
+
setColumns(parentIds.map(parentId_1 => ({
|
|
213
|
+
hasNextPage: false,
|
|
214
|
+
isLoading: true,
|
|
215
|
+
items: [],
|
|
216
|
+
page: 1,
|
|
217
|
+
parentId: parentId_1,
|
|
218
|
+
totalDocs: 0
|
|
219
|
+
})));
|
|
220
|
+
// Set expanded path to match (excluding null/root)
|
|
221
|
+
if (path?.length) {
|
|
222
|
+
setExpandedPath(path);
|
|
223
|
+
}
|
|
224
|
+
// Fetch all columns in parallel
|
|
225
|
+
const results = await Promise.all(parentIds.map(async (parentId_2, index) => {
|
|
226
|
+
try {
|
|
227
|
+
const {
|
|
228
|
+
hasNextPage: hasNextPage_0,
|
|
229
|
+
items: items_1,
|
|
230
|
+
totalDocs: totalDocs_0
|
|
231
|
+
} = await fetchItems({
|
|
232
|
+
page: 1,
|
|
233
|
+
parentId: parentId_2
|
|
234
|
+
});
|
|
235
|
+
let parentTitle;
|
|
236
|
+
if (index > 0 && parentId_2 !== null) {
|
|
237
|
+
// Will be filled in after all fetches complete
|
|
238
|
+
}
|
|
239
|
+
return {
|
|
240
|
+
hasNextPage: hasNextPage_0,
|
|
241
|
+
isLoading: false,
|
|
242
|
+
items: items_1,
|
|
243
|
+
page: 1,
|
|
244
|
+
parentId: parentId_2,
|
|
245
|
+
parentTitle,
|
|
246
|
+
totalDocs: totalDocs_0
|
|
247
|
+
};
|
|
248
|
+
} catch {
|
|
249
|
+
return {
|
|
250
|
+
hasNextPage: false,
|
|
251
|
+
isLoading: false,
|
|
252
|
+
items: [],
|
|
253
|
+
page: 1,
|
|
254
|
+
parentId: parentId_2,
|
|
255
|
+
parentTitle: undefined,
|
|
256
|
+
totalDocs: 0
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
}));
|
|
260
|
+
// Fill in parent titles from previous columns
|
|
261
|
+
const columnsWithTitles = results.map((col_0, index_0) => {
|
|
262
|
+
if (index_0 === 0 || col_0.parentId === null) {
|
|
263
|
+
return col_0;
|
|
264
|
+
}
|
|
265
|
+
const prevColumn = results[index_0 - 1];
|
|
266
|
+
const parentItem = prevColumn?.items.find(item_0 => item_0.id === col_0.parentId);
|
|
267
|
+
return {
|
|
268
|
+
...col_0,
|
|
269
|
+
parentTitle: parentItem?.title || String(col_0.parentId)
|
|
270
|
+
};
|
|
271
|
+
});
|
|
272
|
+
setColumns(columnsWithTitles);
|
|
273
|
+
});
|
|
274
|
+
// Load columns on mount - wait for path loading to complete
|
|
275
|
+
useEffect(() => {
|
|
276
|
+
if (isLoadingPath || hasLoadedRef.current) {
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
hasLoadedRef.current = true;
|
|
280
|
+
void loadColumns(initialExpandedPath);
|
|
281
|
+
}, [initialExpandedPath, isLoadingPath]);
|
|
282
|
+
// Auto-scroll to the last column when columns change
|
|
283
|
+
useEffect(() => {
|
|
284
|
+
if (lastColumnRef.current && columns.length > 1) {
|
|
285
|
+
lastColumnRef.current.scrollIntoView({
|
|
286
|
+
behavior: 'instant',
|
|
287
|
+
inline: 'start'
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
}, [columns.length]);
|
|
291
|
+
const handleExpand = useCallback(async ({
|
|
292
|
+
columnIndex: columnIndex_0,
|
|
293
|
+
itemId
|
|
294
|
+
}) => {
|
|
295
|
+
const column = columns[columnIndex_0];
|
|
296
|
+
if (!column) {
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
const item_1 = column.items.find(i => i.id === itemId);
|
|
300
|
+
if (!item_1) {
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
// Update expanded path - keep path up to this column, add new item
|
|
304
|
+
const newExpandedPath = [...expandedPath.slice(0, columnIndex_0), itemId];
|
|
305
|
+
setExpandedPath(newExpandedPath);
|
|
306
|
+
// Remove columns to the right and add new loading column
|
|
307
|
+
const newColumns = columns.slice(0, columnIndex_0 + 1);
|
|
308
|
+
newColumns.push({
|
|
309
|
+
hasNextPage: false,
|
|
310
|
+
isLoading: true,
|
|
311
|
+
items: [],
|
|
312
|
+
page: 1,
|
|
313
|
+
parentId: itemId,
|
|
314
|
+
parentTitle: item_1.title,
|
|
315
|
+
totalDocs: 0
|
|
316
|
+
});
|
|
317
|
+
setColumns(newColumns);
|
|
318
|
+
// Fetch children
|
|
319
|
+
try {
|
|
320
|
+
const {
|
|
321
|
+
hasNextPage: hasNextPage_1,
|
|
322
|
+
items: items_2,
|
|
323
|
+
totalDocs: totalDocs_1
|
|
324
|
+
} = await fetchItems({
|
|
325
|
+
page: 1,
|
|
326
|
+
parentId: itemId
|
|
327
|
+
});
|
|
328
|
+
setColumns(prev_3 => {
|
|
329
|
+
const updated_3 = [...prev_3];
|
|
330
|
+
const targetIndex_0 = columnIndex_0 + 1;
|
|
331
|
+
if (updated_3[targetIndex_0]?.parentId === itemId) {
|
|
332
|
+
updated_3[targetIndex_0] = {
|
|
333
|
+
hasNextPage: hasNextPage_1,
|
|
334
|
+
isLoading: false,
|
|
335
|
+
items: items_2,
|
|
336
|
+
page: 1,
|
|
337
|
+
parentId: itemId,
|
|
338
|
+
parentTitle: item_1.title,
|
|
339
|
+
totalDocs: totalDocs_1
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
return updated_3;
|
|
343
|
+
});
|
|
344
|
+
} catch {
|
|
345
|
+
setColumns(prev_2 => {
|
|
346
|
+
const updated_2 = [...prev_2];
|
|
347
|
+
const targetIndex = columnIndex_0 + 1;
|
|
348
|
+
if (updated_2[targetIndex]?.parentId === itemId) {
|
|
349
|
+
updated_2[targetIndex] = {
|
|
350
|
+
hasNextPage: false,
|
|
351
|
+
isLoading: false,
|
|
352
|
+
items: [],
|
|
353
|
+
page: 1,
|
|
354
|
+
parentId: itemId,
|
|
355
|
+
parentTitle: item_1.title,
|
|
356
|
+
totalDocs: 0
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
return updated_2;
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
}, [columns, expandedPath, fetchItems]);
|
|
363
|
+
const handleLoadMore = useCallback(async ({
|
|
364
|
+
columnIndex: columnIndex_1
|
|
365
|
+
}) => {
|
|
366
|
+
const column_0 = columns[columnIndex_1];
|
|
367
|
+
if (!column_0 || column_0.isLoading || !column_0.hasNextPage) {
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
const nextPage = column_0.page + 1;
|
|
371
|
+
// Set loading state
|
|
372
|
+
setColumns(prev_4 => {
|
|
373
|
+
const updated_4 = [...prev_4];
|
|
374
|
+
updated_4[columnIndex_1] = {
|
|
375
|
+
...updated_4[columnIndex_1],
|
|
376
|
+
isLoading: true
|
|
377
|
+
};
|
|
378
|
+
return updated_4;
|
|
379
|
+
});
|
|
380
|
+
try {
|
|
381
|
+
const {
|
|
382
|
+
hasNextPage: hasNextPage_2,
|
|
383
|
+
items: newItems
|
|
384
|
+
} = await fetchItems({
|
|
385
|
+
page: nextPage,
|
|
386
|
+
parentId: column_0.parentId
|
|
387
|
+
});
|
|
388
|
+
setColumns(prev_6 => {
|
|
389
|
+
const updated_6 = [...prev_6];
|
|
390
|
+
if (updated_6[columnIndex_1]) {
|
|
391
|
+
updated_6[columnIndex_1] = {
|
|
392
|
+
...updated_6[columnIndex_1],
|
|
393
|
+
hasNextPage: hasNextPage_2,
|
|
394
|
+
isLoading: false,
|
|
395
|
+
items: [...updated_6[columnIndex_1].items, ...newItems],
|
|
396
|
+
page: nextPage
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
return updated_6;
|
|
400
|
+
});
|
|
401
|
+
} catch {
|
|
402
|
+
setColumns(prev_5 => {
|
|
403
|
+
const updated_5 = [...prev_5];
|
|
404
|
+
if (updated_5[columnIndex_1]) {
|
|
405
|
+
updated_5[columnIndex_1] = {
|
|
406
|
+
...updated_5[columnIndex_1],
|
|
407
|
+
isLoading: false
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
return updated_5;
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
}, [columns, fetchItems]);
|
|
414
|
+
// Build path for each column based on parent info
|
|
415
|
+
const getPathToColumn = columnIndex_2 => {
|
|
416
|
+
const path_0 = [];
|
|
417
|
+
for (let i_0 = 1; i_0 <= columnIndex_2; i_0++) {
|
|
418
|
+
const col_1 = columns[i_0];
|
|
419
|
+
if (col_1?.parentId !== null && col_1?.parentId !== undefined) {
|
|
420
|
+
path_0.push({
|
|
421
|
+
id: col_1.parentId,
|
|
422
|
+
title: col_1.parentTitle || String(col_1.parentId)
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
return path_0;
|
|
427
|
+
};
|
|
428
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
429
|
+
className: baseClass,
|
|
430
|
+
ref: containerRef,
|
|
431
|
+
children: [columns.map((column_1, index_1) => {
|
|
432
|
+
const isLastColumn = index_1 === columns.length - 1 && !isLoadingPath;
|
|
433
|
+
const expandedId = expandedPath[index_1] ?? null;
|
|
434
|
+
const pathToColumn = getPathToColumn(index_1);
|
|
435
|
+
return /*#__PURE__*/_jsx("div", {
|
|
436
|
+
className: `${baseClass}__column-wrapper`,
|
|
437
|
+
ref: isLastColumn ? lastColumnRef : undefined,
|
|
438
|
+
children: /*#__PURE__*/_jsx(Column, {
|
|
439
|
+
ancestorsWithSelections: ancestorsWithSelections,
|
|
440
|
+
canCreate: canCreate && Boolean(onCreateNew),
|
|
441
|
+
collectionLabel: collectionLabel,
|
|
442
|
+
disabled: isLoadingPath,
|
|
443
|
+
disabledIds: disabledIds,
|
|
444
|
+
expandedId: expandedId,
|
|
445
|
+
filterByCollection: filterByCollection,
|
|
446
|
+
hasNextPage: column_1.hasNextPage,
|
|
447
|
+
isLoading: column_1.isLoading,
|
|
448
|
+
items: column_1.items,
|
|
449
|
+
onCreateNew: onCreateNew || (() => {}),
|
|
450
|
+
onExpand: ({
|
|
451
|
+
id
|
|
452
|
+
}) => handleExpand({
|
|
453
|
+
columnIndex: index_1,
|
|
454
|
+
itemId: id
|
|
455
|
+
}),
|
|
456
|
+
onLoadMore: () => handleLoadMore({
|
|
457
|
+
columnIndex: index_1
|
|
458
|
+
}),
|
|
459
|
+
onSelect: onSelect,
|
|
460
|
+
parentId: column_1.parentId,
|
|
461
|
+
parentTitle: column_1.parentTitle,
|
|
462
|
+
pathToColumn: pathToColumn,
|
|
463
|
+
selectedIds: selectedIds,
|
|
464
|
+
totalDocs: column_1.totalDocs
|
|
465
|
+
})
|
|
466
|
+
}, `${column_1.parentId ?? 'root'}-${index_1}`);
|
|
467
|
+
}), isLoadingPath && /*#__PURE__*/_jsx("div", {
|
|
468
|
+
className: `${baseClass}__column-wrapper ${baseClass}__column-wrapper--loading`,
|
|
469
|
+
children: /*#__PURE__*/_jsx(Spinner, {})
|
|
470
|
+
})]
|
|
471
|
+
});
|
|
472
|
+
};
|
|
473
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["getTranslation","combineWhereConstraints","DEFAULT_HIERARCHY_TREE_LIMIT","formatAdminURL","qs","React","useCallback","useEffect","useImperativeHandle","useRef","useState","useEffectEvent","useAuth","useConfig","useTranslation","isSuperset","Spinner","Column","baseClass","HierarchyColumnBrowser","ancestorsWithSelections","baseFilter","disabledIds","filterByCollection","hierarchyCollectionSlug","initialExpandedPath","isLoadingPath","onCreateNew","onSelect","parentFieldName","ref","selectedIds","useAsTitle","i18n","permissions","config","routes","api","serverURL","getEntityConfig","collectionConfig","collectionSlug","hierarchyConfig","hierarchy","undefined","treeLimit","admin","collectionLabel","labels","singular","canCreate","Boolean","collections","create","columns","setColumns","expandedPath","setExpandedPath","containerRef","lastColumnRef","hasLoadedRef","fetchItems","page","parentId","parentWhere","exists","equals","where","collectionSpecific","typeFieldName","fieldName","length","allPossibleTypes","Object","keys","relatedCollections","and","or","in","not_in","whereWithBaseFilter","queryString","stringify","limit","sort","addQueryPrefix","url","apiRoute","path","response","fetch","credentials","ok","Error","data","json","allItems","docs","map","doc","id","allowedCollections","hasChildren","title","String","items","filter","item","hasNextPage","totalDocs","refreshColumn","columnIndex","findIndex","col","prev","updated","isLoading","loadColumns","parentIds","push","results","Promise","all","index","parentTitle","columnsWithTitles","prevColumn","parentItem","find","current","scrollIntoView","behavior","inline","handleExpand","itemId","column","i","newExpandedPath","slice","newColumns","targetIndex","handleLoadMore","nextPage","newItems","getPathToColumn","_jsxs","className","isLastColumn","expandedId","pathToColumn","_jsx","disabled","onExpand","onLoadMore"],"sources":["../../../../src/elements/Hierarchy/ColumnBrowser/index.tsx"],"sourcesContent":["'use client'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n combineWhereConstraints,\n DEFAULT_HIERARCHY_TREE_LIMIT,\n formatAdminURL,\n} from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react'\n\nimport type {\n ColumnItemData,\n ColumnState,\n HierarchyColumnBrowserProps,\n HierarchyColumnBrowserRef,\n} from './types.js'\n\nimport { useEffectEvent } from '../../../hooks/useEffectEvent.js'\nimport { useAuth } from '../../../providers/Auth/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { isSuperset } from '../../../utilities/isSuperset.js'\nimport { Spinner } from '../../Spinner/index.js'\nimport { Column } from './Column/index.js'\nimport './index.scss'\n\nconst baseClass = 'hierarchy-column-browser'\n\nexport const HierarchyColumnBrowser = function HierarchyColumnBrowser({\n ancestorsWithSelections,\n baseFilter,\n disabledIds,\n filterByCollection,\n hierarchyCollectionSlug,\n initialExpandedPath,\n isLoadingPath,\n onCreateNew,\n onSelect,\n parentFieldName,\n ref,\n selectedIds,\n useAsTitle = 'id',\n}: { ref?: React.RefObject<HierarchyColumnBrowserRef | null> } & HierarchyColumnBrowserProps) {\n const { i18n } = useTranslation()\n const { permissions } = useAuth()\n const {\n config: {\n routes: { api },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug: hierarchyCollectionSlug })\n const hierarchyConfig =\n collectionConfig?.hierarchy && typeof collectionConfig.hierarchy === 'object'\n ? collectionConfig.hierarchy\n : undefined\n const treeLimit = hierarchyConfig?.admin?.treeLimit ?? DEFAULT_HIERARCHY_TREE_LIMIT\n\n const collectionLabel = collectionConfig\n ? getTranslation(collectionConfig.labels?.singular || hierarchyCollectionSlug, i18n)\n : hierarchyCollectionSlug\n const canCreate = Boolean(permissions?.collections?.[hierarchyCollectionSlug]?.create)\n\n const [columns, setColumns] = useState<ColumnState[]>([])\n const [expandedPath, setExpandedPath] = useState<(number | string)[]>([])\n const containerRef = useRef<HTMLDivElement>(null)\n const lastColumnRef = useRef<HTMLDivElement>(null)\n const hasLoadedRef = useRef(false)\n\n const fetchItems = useCallback(\n async ({\n page,\n parentId,\n }: {\n page: number\n parentId: null | number | string\n }): Promise<{\n hasNextPage: boolean\n items: ColumnItemData[]\n totalDocs: number\n }> => {\n const parentWhere =\n parentId === null\n ? { [parentFieldName]: { exists: false } }\n : { [parentFieldName]: { equals: parentId } }\n\n // Build the final where clause, adding collectionSpecific filtering if configured\n let where: Record<string, unknown> = parentWhere\n\n // Filter by collection type if collectionSpecific is configured and filterByCollection is defined\n // - undefined: no filtering, show all folders\n // - [] empty: show all folders (no constraints)\n // - ['posts', ...]: show folders that allow ANY of these OR unrestricted\n // Note: Ideally we'd enforce ALL (superset) but hasMany enum fields in PG\n // do not support \"contains all\" queries easily\n if (hierarchyConfig?.collectionSpecific && filterByCollection !== undefined) {\n const typeFieldName = hierarchyConfig.collectionSpecific.fieldName\n\n if (filterByCollection.length > 0) {\n // Get all possible type field values from relatedCollections\n // This is used to detect \"unrestricted\" folders (empty allowedTypes array)\n const allPossibleTypes = Object.keys(hierarchyConfig.relatedCollections || {})\n\n where = {\n and: [\n parentWhere,\n {\n or: [\n // items that allow ANY of the selected collections\n { [typeFieldName]: { in: filterByCollection } },\n // OR items that are unrestricted (no type field exists)\n { [typeFieldName]: { exists: false } },\n // OR items with empty allowedTypes array (unrestricted)\n // Using not_in with all possible values matches empty arrays in both MongoDB and Postgres\n ...(allPossibleTypes.length > 0\n ? [{ [typeFieldName]: { not_in: allPossibleTypes } }]\n : []),\n ],\n },\n ],\n }\n } else {\n // Empty array: show all items of this parent\n where = parentWhere\n }\n }\n\n // Combine with baseFilter if provided\n const whereWithBaseFilter = combineWhereConstraints([where, baseFilter])\n\n const queryString = qs.stringify(\n { limit: treeLimit, page, sort: useAsTitle, where: whereWithBaseFilter },\n { addQueryPrefix: true },\n )\n\n const url = formatAdminURL({\n apiRoute: api,\n path: `/${hierarchyCollectionSlug}${queryString}`,\n serverURL,\n })\n\n const response = await fetch(url, {\n credentials: 'include',\n })\n\n if (!response.ok) {\n throw new Error('Failed to fetch items')\n }\n\n const data = await response.json()\n\n const typeFieldName = hierarchyConfig?.collectionSpecific\n ? hierarchyConfig.collectionSpecific.fieldName\n : undefined\n\n const allItems: ColumnItemData[] = (data.docs || []).map(\n (doc: { id: number | string } & Record<string, unknown>) => ({\n id: doc.id,\n allowedCollections: typeFieldName\n ? (doc[typeFieldName] as string[] | undefined)\n : undefined,\n hasChildren: true, // Always allow expansion - empty children handled gracefully\n title: String(doc[useAsTitle] || doc.id),\n }),\n )\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 items =\n filterByCollection && filterByCollection.length > 0\n ? allItems.filter((item) => isSuperset(item.allowedCollections, filterByCollection))\n : allItems\n\n return {\n hasNextPage: data.hasNextPage || false,\n items,\n totalDocs: data.totalDocs || 0,\n }\n },\n [\n api,\n baseFilter,\n filterByCollection,\n hierarchyConfig,\n parentFieldName,\n serverURL,\n hierarchyCollectionSlug,\n treeLimit,\n useAsTitle,\n ],\n )\n\n const refreshColumn = useCallback(\n async (parentId: null | number | string) => {\n const columnIndex = columns.findIndex((col) => col.parentId === parentId)\n if (columnIndex === -1) {\n return\n }\n\n setColumns((prev) => {\n const updated = [...prev]\n updated[columnIndex] = { ...updated[columnIndex], isLoading: true }\n return updated\n })\n\n try {\n const { hasNextPage, items, totalDocs } = await fetchItems({ page: 1, parentId })\n\n setColumns((prev) => {\n const updated = [...prev]\n if (updated[columnIndex]) {\n updated[columnIndex] = {\n ...updated[columnIndex],\n hasNextPage,\n isLoading: false,\n items,\n page: 1,\n totalDocs,\n }\n }\n return updated\n })\n } catch {\n setColumns((prev) => {\n const updated = [...prev]\n if (updated[columnIndex]) {\n updated[columnIndex] = { ...updated[columnIndex], isLoading: false }\n }\n return updated\n })\n }\n },\n [columns, fetchItems],\n )\n\n useImperativeHandle(ref, () => ({ refreshColumn }), [refreshColumn])\n\n const loadColumns = useEffectEvent(async (path?: (number | string)[]) => {\n // Build list of parentIds to fetch: [null, ...path]\n const parentIds: (null | number | string)[] = [null]\n if (path?.length) {\n parentIds.push(...path)\n }\n\n // Set initial loading state for all columns\n setColumns(\n parentIds.map((parentId) => ({\n hasNextPage: false,\n isLoading: true,\n items: [],\n page: 1,\n parentId,\n totalDocs: 0,\n })),\n )\n\n // Set expanded path to match (excluding null/root)\n if (path?.length) {\n setExpandedPath(path)\n }\n\n // Fetch all columns in parallel\n const results = await Promise.all(\n parentIds.map(async (parentId, index) => {\n try {\n const { hasNextPage, items, totalDocs } = await fetchItems({ page: 1, parentId })\n let parentTitle: string | undefined\n if (index > 0 && parentId !== null) {\n // Will be filled in after all fetches complete\n }\n return {\n hasNextPage,\n isLoading: false,\n items,\n page: 1,\n parentId,\n parentTitle,\n totalDocs,\n }\n } catch {\n return {\n hasNextPage: false,\n isLoading: false,\n items: [],\n page: 1,\n parentId,\n parentTitle: undefined,\n totalDocs: 0,\n }\n }\n }),\n )\n\n // Fill in parent titles from previous columns\n const columnsWithTitles = results.map((col, index) => {\n if (index === 0 || col.parentId === null) {\n return col\n }\n const prevColumn = results[index - 1]\n const parentItem = prevColumn?.items.find((item) => item.id === col.parentId)\n return {\n ...col,\n parentTitle: parentItem?.title || String(col.parentId),\n }\n })\n\n setColumns(columnsWithTitles)\n })\n\n // Load columns on mount - wait for path loading to complete\n useEffect(() => {\n if (isLoadingPath || hasLoadedRef.current) {\n return\n }\n hasLoadedRef.current = true\n void loadColumns(initialExpandedPath)\n }, [initialExpandedPath, isLoadingPath])\n\n // Auto-scroll to the last column when columns change\n useEffect(() => {\n if (lastColumnRef.current && columns.length > 1) {\n lastColumnRef.current.scrollIntoView({ behavior: 'instant', inline: 'start' })\n }\n }, [columns.length])\n\n const handleExpand = useCallback(\n async ({ columnIndex, itemId }: { columnIndex: number; itemId: number | string }) => {\n const column = columns[columnIndex]\n if (!column) {\n return\n }\n\n const item = column.items.find((i) => i.id === itemId)\n if (!item) {\n return\n }\n\n // Update expanded path - keep path up to this column, add new item\n const newExpandedPath = [...expandedPath.slice(0, columnIndex), itemId]\n setExpandedPath(newExpandedPath)\n\n // Remove columns to the right and add new loading column\n const newColumns = columns.slice(0, columnIndex + 1)\n newColumns.push({\n hasNextPage: false,\n isLoading: true,\n items: [],\n page: 1,\n parentId: itemId,\n parentTitle: item.title,\n totalDocs: 0,\n })\n\n setColumns(newColumns)\n\n // Fetch children\n try {\n const { hasNextPage, items, totalDocs } = await fetchItems({ page: 1, parentId: itemId })\n\n setColumns((prev) => {\n const updated = [...prev]\n const targetIndex = columnIndex + 1\n\n if (updated[targetIndex]?.parentId === itemId) {\n updated[targetIndex] = {\n hasNextPage,\n isLoading: false,\n items,\n page: 1,\n parentId: itemId,\n parentTitle: item.title,\n totalDocs,\n }\n }\n\n return updated\n })\n } catch {\n setColumns((prev) => {\n const updated = [...prev]\n const targetIndex = columnIndex + 1\n\n if (updated[targetIndex]?.parentId === itemId) {\n updated[targetIndex] = {\n hasNextPage: false,\n isLoading: false,\n items: [],\n page: 1,\n parentId: itemId,\n parentTitle: item.title,\n totalDocs: 0,\n }\n }\n\n return updated\n })\n }\n },\n [columns, expandedPath, fetchItems],\n )\n\n const handleLoadMore = useCallback(\n async ({ columnIndex }: { columnIndex: number }) => {\n const column = columns[columnIndex]\n if (!column || column.isLoading || !column.hasNextPage) {\n return\n }\n\n const nextPage = column.page + 1\n\n // Set loading state\n setColumns((prev) => {\n const updated = [...prev]\n updated[columnIndex] = { ...updated[columnIndex], isLoading: true }\n return updated\n })\n\n try {\n const { hasNextPage, items: newItems } = await fetchItems({\n page: nextPage,\n parentId: column.parentId,\n })\n\n setColumns((prev) => {\n const updated = [...prev]\n\n if (updated[columnIndex]) {\n updated[columnIndex] = {\n ...updated[columnIndex],\n hasNextPage,\n isLoading: false,\n items: [...updated[columnIndex].items, ...newItems],\n page: nextPage,\n }\n }\n\n return updated\n })\n } catch {\n setColumns((prev) => {\n const updated = [...prev]\n\n if (updated[columnIndex]) {\n updated[columnIndex] = { ...updated[columnIndex], isLoading: false }\n }\n\n return updated\n })\n }\n },\n [columns, fetchItems],\n )\n\n // Build path for each column based on parent info\n const getPathToColumn = (columnIndex: number) => {\n const path: Array<{ id: number | string; title: string }> = []\n\n for (let i = 1; i <= columnIndex; i++) {\n const col = columns[i]\n if (col?.parentId !== null && col?.parentId !== undefined) {\n path.push({\n id: col.parentId,\n title: col.parentTitle || String(col.parentId),\n })\n }\n }\n\n return path\n }\n\n return (\n <div className={baseClass} ref={containerRef}>\n {columns.map((column, index) => {\n const isLastColumn = index === columns.length - 1 && !isLoadingPath\n const expandedId = expandedPath[index] ?? null\n const pathToColumn = getPathToColumn(index)\n\n return (\n <div\n className={`${baseClass}__column-wrapper`}\n key={`${column.parentId ?? 'root'}-${index}`}\n ref={isLastColumn ? lastColumnRef : undefined}\n >\n <Column\n ancestorsWithSelections={ancestorsWithSelections}\n canCreate={canCreate && Boolean(onCreateNew)}\n collectionLabel={collectionLabel}\n disabled={isLoadingPath}\n disabledIds={disabledIds}\n expandedId={expandedId}\n filterByCollection={filterByCollection}\n hasNextPage={column.hasNextPage}\n isLoading={column.isLoading}\n items={column.items}\n onCreateNew={onCreateNew || (() => {})}\n onExpand={({ id }) => handleExpand({ columnIndex: index, itemId: id })}\n onLoadMore={() => handleLoadMore({ columnIndex: index })}\n onSelect={onSelect}\n parentId={column.parentId}\n parentTitle={column.parentTitle}\n pathToColumn={pathToColumn}\n selectedIds={selectedIds}\n totalDocs={column.totalDocs}\n />\n </div>\n )\n })}\n {isLoadingPath && (\n <div className={`${baseClass}__column-wrapper ${baseClass}__column-wrapper--loading`}>\n <Spinner />\n </div>\n )}\n </div>\n )\n}\n\nexport type {\n ColumnItemData,\n HierarchyColumnBrowserProps,\n HierarchyColumnBrowserRef,\n PathSegment,\n} from './types.js'\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
.hierarchy-column-browser {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex: 1;
|
|
4
|
+
overflow-x: auto;
|
|
5
|
+
// scroll-snap-type: x proximity;
|
|
6
|
+
|
|
7
|
+
&__column-wrapper {
|
|
8
|
+
// scroll-snap-align: start;
|
|
9
|
+
flex-shrink: 0;
|
|
10
|
+
|
|
11
|
+
&:first-child {
|
|
12
|
+
margin-left: var(--gutter-h);
|
|
13
|
+
border-left: 1px solid var(--theme-elevation-100);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
&__column-wrapper--loading {
|
|
18
|
+
padding: calc(var(--base) * 0.8) var(--base);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { Where } from 'payload';
|
|
2
|
+
export type ColumnItemData = {
|
|
3
|
+
/** For folders with collectionSpecific config, the allowed collection slugs */
|
|
4
|
+
allowedCollections?: string[];
|
|
5
|
+
hasChildren: boolean;
|
|
6
|
+
id: number | string;
|
|
7
|
+
title: string;
|
|
8
|
+
};
|
|
9
|
+
export type PathSegment = {
|
|
10
|
+
id: number | string;
|
|
11
|
+
title: string;
|
|
12
|
+
};
|
|
13
|
+
export type ColumnItemProps = {
|
|
14
|
+
disabled?: boolean;
|
|
15
|
+
/** Required collections that the folder must allow (for superset check) */
|
|
16
|
+
filterByCollection?: string[];
|
|
17
|
+
hasSelectedDescendants: boolean;
|
|
18
|
+
isExpanded: boolean;
|
|
19
|
+
isSelected: boolean;
|
|
20
|
+
item: ColumnItemData;
|
|
21
|
+
onExpand: (params: {
|
|
22
|
+
id: number | string;
|
|
23
|
+
}) => void;
|
|
24
|
+
onSelect: (params: {
|
|
25
|
+
id: number | string;
|
|
26
|
+
}) => void;
|
|
27
|
+
};
|
|
28
|
+
export type ColumnProps = {
|
|
29
|
+
ancestorsWithSelections: Set<number | string>;
|
|
30
|
+
/** Whether user can create new documents */
|
|
31
|
+
canCreate: boolean;
|
|
32
|
+
/** Label for the collection (e.g., "Folder") */
|
|
33
|
+
collectionLabel: string;
|
|
34
|
+
disabled?: boolean;
|
|
35
|
+
/** IDs that should be disabled (e.g., items being moved can't be selected as destination) */
|
|
36
|
+
disabledIds?: Set<number | string>;
|
|
37
|
+
expandedId: null | number | string;
|
|
38
|
+
/** Required collections for superset check (passed to ColumnItem) */
|
|
39
|
+
filterByCollection?: string[];
|
|
40
|
+
hasNextPage: boolean;
|
|
41
|
+
isLoading: boolean;
|
|
42
|
+
items: ColumnItemData[];
|
|
43
|
+
/** Called when user clicks "New" button - parent should open drawer with parentId */
|
|
44
|
+
onCreateNew: (params: {
|
|
45
|
+
parentId: null | number | string;
|
|
46
|
+
}) => void;
|
|
47
|
+
onExpand: (params: {
|
|
48
|
+
id: number | string;
|
|
49
|
+
}) => void;
|
|
50
|
+
onLoadMore: () => void;
|
|
51
|
+
onSelect: (params: {
|
|
52
|
+
id: number | string;
|
|
53
|
+
path: PathSegment[];
|
|
54
|
+
}) => void;
|
|
55
|
+
parentId: null | number | string;
|
|
56
|
+
parentTitle?: string;
|
|
57
|
+
pathToColumn: PathSegment[];
|
|
58
|
+
selectedIds: Set<number | string>;
|
|
59
|
+
totalDocs: number;
|
|
60
|
+
};
|
|
61
|
+
export type ColumnState = {
|
|
62
|
+
hasNextPage: boolean;
|
|
63
|
+
isLoading: boolean;
|
|
64
|
+
items: ColumnItemData[];
|
|
65
|
+
page: number;
|
|
66
|
+
parentId: null | number | string;
|
|
67
|
+
parentTitle?: string;
|
|
68
|
+
totalDocs: number;
|
|
69
|
+
};
|
|
70
|
+
export type HierarchyColumnBrowserRef = {
|
|
71
|
+
/** Refetch a specific column by parentId */
|
|
72
|
+
refreshColumn: (parentId: null | number | string) => Promise<void>;
|
|
73
|
+
};
|
|
74
|
+
export type HierarchyColumnBrowserProps = {
|
|
75
|
+
ancestorsWithSelections: Set<number | string>;
|
|
76
|
+
/** Base filter constraint (e.g., tenant filter) to apply to all queries */
|
|
77
|
+
baseFilter?: null | Where;
|
|
78
|
+
/** IDs that should be disabled (e.g., items being moved can't be selected as destination) */
|
|
79
|
+
disabledIds?: Set<number | string>;
|
|
80
|
+
/**
|
|
81
|
+
* Filters hierarchy items based on collection type restrictions:
|
|
82
|
+
* - `undefined`: No filtering, show all folders
|
|
83
|
+
* - `[]` (empty array): No filtering, show all folders (no constraints)
|
|
84
|
+
* - `['posts', ...]`: Show folders accepting ANY of these collections OR unrestricted folders
|
|
85
|
+
*
|
|
86
|
+
* Note: Query uses ANY semantics due to PG hasMany enum limitations.
|
|
87
|
+
* Client-side enforcement can disable selection of folders that don't allow ALL required collections.
|
|
88
|
+
*/
|
|
89
|
+
filterByCollection?: string[];
|
|
90
|
+
hierarchyCollectionSlug: string;
|
|
91
|
+
initialExpandedPath?: (number | string)[];
|
|
92
|
+
/** Whether the initial expanded path is still being loaded */
|
|
93
|
+
isLoadingPath?: boolean;
|
|
94
|
+
/** Called when user clicks "New" button to create a new item */
|
|
95
|
+
onCreateNew?: (params: {
|
|
96
|
+
parentId: null | number | string;
|
|
97
|
+
}) => void;
|
|
98
|
+
onSelect: (params: {
|
|
99
|
+
id: number | string;
|
|
100
|
+
path: PathSegment[];
|
|
101
|
+
}) => void;
|
|
102
|
+
parentFieldName: string;
|
|
103
|
+
selectedIds: Set<number | string>;
|
|
104
|
+
useAsTitle?: string;
|
|
105
|
+
};
|
|
106
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/elements/Hierarchy/ColumnBrowser/types.ts"],"names":[],"mappings":"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"}
|