@payloadcms/ui 4.0.0-internal.f15737c → 4.0.0-internal.f2a04f7
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/css/preflight.css +21 -2
- package/dist/elements/AppHeader/index.css +1 -1
- package/dist/elements/AppHeader/index.d.ts.map +1 -1
- package/dist/elements/AppHeader/index.js +5 -1
- 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 +10 -3
- package/dist/elements/Autosave/index.js.map +1 -1
- package/dist/elements/Button/index.css +24 -0
- 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/CloseModalOnRouteChange/index.d.ts.map +1 -1
- package/dist/elements/CloseModalOnRouteChange/index.js +27 -19
- package/dist/elements/CloseModalOnRouteChange/index.js.map +1 -1
- package/dist/elements/CodeEditor/CodeEditor.d.ts.map +1 -1
- package/dist/elements/CodeEditor/CodeEditor.js +5 -0
- package/dist/elements/CodeEditor/CodeEditor.js.map +1 -1
- package/dist/elements/DatePicker/DatePicker.js +6 -2
- package/dist/elements/DatePicker/DatePicker.js.map +1 -1
- package/dist/elements/DatePicker/index.css +35 -25
- package/dist/elements/DocumentControls/index.css +13 -10
- package/dist/elements/DocumentControls/index.d.ts +4 -2
- package/dist/elements/DocumentControls/index.d.ts.map +1 -1
- package/dist/elements/DocumentControls/index.js.map +1 -1
- package/dist/elements/DocumentDrawer/types.d.ts +1 -5
- package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
- package/dist/elements/DocumentDrawer/types.js.map +1 -1
- package/dist/elements/DocumentFields/index.css +7 -7
- package/dist/elements/DocumentFields/index.d.ts.map +1 -1
- package/dist/elements/DocumentFields/index.js +1 -2
- package/dist/elements/DocumentFields/index.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/tabs/index.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/EditUpload/library.css +6 -13
- package/dist/elements/FieldSelect/reduceFieldOptions.js.map +1 -1
- package/dist/elements/FileManager/index.d.ts.map +1 -1
- package/dist/elements/FileManager/index.js +6 -1
- package/dist/elements/FileManager/index.js.map +1 -1
- package/dist/elements/Hierarchy/ActionsMenu/index.css +18 -0
- package/dist/elements/Hierarchy/ActionsMenu/index.d.ts +35 -0
- package/dist/elements/Hierarchy/ActionsMenu/index.d.ts.map +1 -0
- package/dist/elements/Hierarchy/ActionsMenu/index.js +99 -0
- package/dist/elements/Hierarchy/ActionsMenu/index.js.map +1 -0
- package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js +18 -16
- package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js.map +1 -1
- package/dist/elements/Hierarchy/ColumnBrowser/types.d.ts +2 -0
- 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.css +12 -0
- package/dist/elements/Hierarchy/DocHeaderButton/index.d.ts.map +1 -1
- package/dist/elements/Hierarchy/DocHeaderButton/index.js +61 -14
- package/dist/elements/Hierarchy/DocHeaderButton/index.js.map +1 -1
- package/dist/elements/Hierarchy/Modal/Footer/index.css +33 -0
- package/dist/elements/Hierarchy/Modal/Footer/index.d.ts +21 -0
- package/dist/elements/Hierarchy/Modal/Footer/index.d.ts.map +1 -0
- package/dist/elements/Hierarchy/Modal/Footer/index.js +122 -0
- package/dist/elements/Hierarchy/Modal/Footer/index.js.map +1 -0
- package/dist/elements/Hierarchy/Modal/fetchAncestorPath.d.ts +8 -3
- package/dist/elements/Hierarchy/Modal/fetchAncestorPath.d.ts.map +1 -1
- package/dist/elements/Hierarchy/Modal/fetchAncestorPath.js +38 -12
- package/dist/elements/Hierarchy/Modal/fetchAncestorPath.js.map +1 -1
- package/dist/elements/Hierarchy/Modal/index.css +0 -56
- package/dist/elements/Hierarchy/Modal/index.d.ts +5 -3
- package/dist/elements/Hierarchy/Modal/index.d.ts.map +1 -1
- package/dist/elements/Hierarchy/Modal/index.js +64 -65
- package/dist/elements/Hierarchy/Modal/index.js.map +1 -1
- package/dist/elements/Hierarchy/Modal/types.d.ts +2 -0
- 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 +1 -3
- package/dist/elements/Hierarchy/MoveMany/index.d.ts.map +1 -1
- package/dist/elements/Hierarchy/MoveMany/index.js +62 -84
- package/dist/elements/Hierarchy/MoveMany/index.js.map +1 -1
- package/dist/elements/ListControls/types.d.ts +0 -10
- package/dist/elements/ListControls/types.d.ts.map +1 -1
- package/dist/elements/ListControls/types.js.map +1 -1
- package/dist/elements/ListDrawer/DrawerContent.d.ts.map +1 -1
- package/dist/elements/ListDrawer/DrawerContent.js +1 -2
- package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
- package/dist/elements/ListDrawer/Provider.d.ts +0 -6
- package/dist/elements/ListDrawer/Provider.d.ts.map +1 -1
- package/dist/elements/ListDrawer/Provider.js.map +1 -1
- package/dist/elements/ListDrawer/index.d.ts.map +1 -1
- package/dist/elements/ListDrawer/index.js +1 -1
- package/dist/elements/ListDrawer/index.js.map +1 -1
- package/dist/elements/ListDrawer/types.d.ts +1 -0
- package/dist/elements/ListDrawer/types.d.ts.map +1 -1
- package/dist/elements/ListDrawer/types.js.map +1 -1
- package/dist/elements/ListHeader/DrawerRelationshipSelect/index.d.ts.map +1 -1
- package/dist/elements/ListHeader/DrawerRelationshipSelect/index.js +24 -20
- package/dist/elements/ListHeader/DrawerRelationshipSelect/index.js.map +1 -1
- package/dist/elements/LivePreview/Window/index.css +7 -1
- package/dist/elements/Nav/NavWrapper/index.d.ts.map +1 -1
- package/dist/elements/Nav/NavWrapper/index.js +19 -14
- package/dist/elements/Nav/NavWrapper/index.js.map +1 -1
- package/dist/elements/PublishButton/index.d.ts.map +1 -1
- package/dist/elements/PublishButton/index.js +71 -8
- package/dist/elements/PublishButton/index.js.map +1 -1
- package/dist/elements/PublishButton/validateAllLocales.d.ts +11 -0
- package/dist/elements/PublishButton/validateAllLocales.d.ts.map +1 -0
- package/dist/elements/PublishButton/validateAllLocales.js +263 -0
- package/dist/elements/PublishButton/validateAllLocales.js.map +1 -0
- package/dist/elements/RelationshipTable/AddNewButton.d.ts.map +1 -1
- package/dist/elements/RelationshipTable/AddNewButton.js +3 -0
- package/dist/elements/RelationshipTable/AddNewButton.js.map +1 -1
- package/dist/elements/SaveDraftButton/index.d.ts.map +1 -1
- package/dist/elements/SaveDraftButton/index.js +15 -2
- package/dist/elements/SaveDraftButton/index.js.map +1 -1
- package/dist/elements/SchedulePublishButton/index.js.map +1 -1
- package/dist/elements/SegmentedControl/index.css +50 -7
- package/dist/elements/Table/DefaultCell/fields/File/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/File/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.css +0 -9
- package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js +63 -40
- package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/index.js +6 -1
- package/dist/elements/Table/DefaultCell/index.js.map +1 -1
- package/dist/elements/Table/index.js.map +1 -1
- package/dist/elements/Tabs/index.css +4 -3
- package/dist/elements/Upload/getEditorFileSrc.d.ts +11 -0
- package/dist/elements/Upload/getEditorFileSrc.d.ts.map +1 -0
- package/dist/elements/Upload/getEditorFileSrc.js +6 -0
- package/dist/elements/Upload/getEditorFileSrc.js.map +1 -0
- package/dist/elements/Upload/index.d.ts.map +1 -1
- package/dist/elements/Upload/index.js +6 -1
- package/dist/elements/Upload/index.js.map +1 -1
- package/dist/exports/client/{CodeEditor-UKD3EPUY.js → CodeEditor-I6PL55BF.js} +2 -2
- package/dist/exports/client/{DatePicker-POZJVQP4.js → DatePicker-XAKGIULG.js} +2 -2
- package/dist/exports/client/{chunk-2AY67NFV.js → chunk-36JJSMEB.js} +2 -2
- package/dist/exports/client/chunk-36JJSMEB.js.map +7 -0
- package/dist/exports/client/chunk-R7M6BG75.js +27 -0
- package/dist/exports/client/chunk-R7M6BG75.js.map +7 -0
- package/dist/exports/client/index.d.ts +3 -0
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +27 -27
- package/dist/exports/client/index.js.map +4 -4
- package/dist/exports/shared/index.js +2 -2
- package/dist/exports/shared/index.js.map +3 -3
- package/dist/fields/Group/index.css +3 -5
- package/dist/fields/Tabs/index.css +14 -14
- package/dist/fields/Upload/Input.d.ts.map +1 -1
- package/dist/fields/Upload/Input.js +3 -1
- package/dist/fields/Upload/Input.js.map +1 -1
- package/dist/forms/Form/fieldReducer.d.ts.map +1 -1
- package/dist/forms/Form/fieldReducer.js +6 -9
- package/dist/forms/Form/fieldReducer.js.map +1 -1
- package/dist/forms/Form/index.d.ts.map +1 -1
- package/dist/forms/Form/index.js +0 -1
- package/dist/forms/Form/index.js.map +1 -1
- package/dist/forms/Form/types.d.ts +0 -5
- package/dist/forms/Form/types.d.ts.map +1 -1
- package/dist/forms/Form/types.js.map +1 -1
- package/dist/forms/RenderFields/index.css +2 -2
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts +2 -2
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/index.d.ts +2 -2
- package/dist/forms/fieldSchemasToFormState/index.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/index.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/iterateFields.d.ts +2 -2
- package/dist/forms/fieldSchemasToFormState/iterateFields.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/iterateFields.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/types.d.ts +2 -2
- package/dist/forms/fieldSchemasToFormState/types.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/types.js.map +1 -1
- package/dist/forms/useField/types.d.ts +0 -4
- package/dist/forms/useField/types.d.ts.map +1 -1
- package/dist/forms/useField/types.js.map +1 -1
- package/dist/icons/Arrow/index.d.ts +1 -1
- package/dist/icons/Arrow/index.d.ts.map +1 -1
- package/dist/icons/Arrow/index.js +7 -1
- package/dist/icons/Arrow/index.js.map +1 -1
- package/dist/icons/Clock/index.d.ts +6 -0
- package/dist/icons/Clock/index.d.ts.map +1 -0
- package/dist/icons/Clock/index.js +18 -0
- package/dist/icons/Clock/index.js.map +1 -0
- package/dist/icons/Pin/index.d.ts +7 -0
- package/dist/icons/Pin/index.d.ts.map +1 -0
- package/dist/icons/Pin/index.js +23 -0
- package/dist/icons/Pin/index.js.map +1 -0
- package/dist/icons/Sidebar/index.d.ts.map +1 -1
- package/dist/icons/Sidebar/index.js +2 -0
- package/dist/icons/Sidebar/index.js.map +1 -1
- package/dist/icons/Table/index.css +5 -1
- package/dist/layouts/Root/getRootLayoutData.d.ts +2 -2
- package/dist/layouts/Root/getRootLayoutData.d.ts.map +1 -1
- package/dist/layouts/Root/getRootLayoutData.js +8 -4
- package/dist/layouts/Root/getRootLayoutData.js.map +1 -1
- package/dist/layouts/Root/index.d.ts +1 -1
- package/dist/layouts/Root/index.d.ts.map +1 -1
- package/dist/layouts/Root/index.js +5 -20
- package/dist/layouts/Root/index.js.map +1 -1
- package/dist/providers/ListQuery/types.d.ts +0 -4
- package/dist/providers/ListQuery/types.d.ts.map +1 -1
- package/dist/providers/ListQuery/types.js.map +1 -1
- package/dist/providers/RouteCache/index.d.ts.map +1 -1
- package/dist/providers/RouteCache/index.js +37 -25
- package/dist/providers/RouteCache/index.js.map +1 -1
- package/dist/providers/TableColumns/RenderDefaultCell/index.d.ts.map +1 -1
- package/dist/providers/TableColumns/RenderDefaultCell/index.js +1 -2
- package/dist/providers/TableColumns/RenderDefaultCell/index.js.map +1 -1
- package/dist/providers/TableColumns/types.d.ts +1 -34
- package/dist/providers/TableColumns/types.d.ts.map +1 -1
- package/dist/providers/TableColumns/types.js.map +1 -1
- package/dist/styles.css +22 -3
- package/dist/templates/Default/index.css +0 -1
- package/dist/utilities/appendCacheTag.d.ts +1 -0
- package/dist/utilities/appendCacheTag.d.ts.map +1 -1
- package/dist/utilities/appendCacheTag.js +2 -1
- package/dist/utilities/appendCacheTag.js.map +1 -1
- package/dist/utilities/buildClientFieldSchemaMap/traverseFields.d.ts.map +1 -1
- package/dist/utilities/buildClientFieldSchemaMap/traverseFields.js +32 -6
- package/dist/utilities/buildClientFieldSchemaMap/traverseFields.js.map +1 -1
- package/dist/utilities/getDisplayedFieldValue.d.ts +8 -2
- package/dist/utilities/getDisplayedFieldValue.d.ts.map +1 -1
- package/dist/utilities/getDisplayedFieldValue.js +11 -1
- package/dist/utilities/getDisplayedFieldValue.js.map +1 -1
- package/dist/utilities/getDocumentThumbnail.d.ts +6 -0
- package/dist/utilities/getDocumentThumbnail.d.ts.map +1 -0
- package/dist/utilities/getDocumentThumbnail.js +27 -0
- package/dist/utilities/getDocumentThumbnail.js.map +1 -0
- package/dist/utilities/getDocumentThumbnailPopulate.d.ts +7 -0
- package/dist/utilities/getDocumentThumbnailPopulate.d.ts.map +1 -0
- package/dist/utilities/getDocumentThumbnailPopulate.js +23 -0
- package/dist/utilities/getDocumentThumbnailPopulate.js.map +1 -0
- package/dist/utilities/getDocumentThumbnailSelect.d.ts +7 -0
- package/dist/utilities/getDocumentThumbnailSelect.d.ts.map +1 -0
- package/dist/utilities/getDocumentThumbnailSelect.js +24 -0
- package/dist/utilities/getDocumentThumbnailSelect.js.map +1 -0
- package/dist/utilities/getHasScheduledPublish.js.map +1 -1
- package/dist/utilities/handleLivePreview.js.map +1 -1
- package/dist/utilities/hasSavePermission.js.map +1 -1
- package/dist/utilities/schedulePublishHandler.js.map +1 -1
- package/dist/utilities/serverFunctionRegistry.d.ts.map +1 -1
- package/dist/utilities/serverFunctionRegistry.js +2 -0
- package/dist/utilities/serverFunctionRegistry.js.map +1 -1
- package/dist/utilities/traverseForLocalizedFields.d.ts +7 -2
- package/dist/utilities/traverseForLocalizedFields.d.ts.map +1 -1
- package/dist/utilities/traverseForLocalizedFields.js +22 -8
- package/dist/utilities/traverseForLocalizedFields.js.map +1 -1
- package/dist/views/CreateFirstUser/index.d.ts.map +1 -1
- package/dist/views/CreateFirstUser/index.js +4 -2
- package/dist/views/CreateFirstUser/index.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.d.ts.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js +30 -21
- package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.d.ts +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.d.ts.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.js +16 -4
- package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.js.map +1 -1
- package/dist/views/Edit/index.css +26 -0
- package/dist/views/Edit/index.d.ts.map +1 -1
- package/dist/views/Edit/index.js +1 -1
- package/dist/views/Edit/index.js.map +1 -1
- package/dist/views/HierarchyList/DocumentListSelection/index.d.ts.map +1 -1
- package/dist/views/HierarchyList/DocumentListSelection/index.js +0 -1
- package/dist/views/HierarchyList/DocumentListSelection/index.js.map +1 -1
- package/dist/views/List/DocumentGrid/index.d.ts.map +1 -1
- package/dist/views/List/DocumentGrid/index.js +2 -37
- package/dist/views/List/DocumentGrid/index.js.map +1 -1
- package/dist/views/List/enrichDocsWithVersionStatus.d.ts.map +1 -1
- package/dist/views/List/enrichDocsWithVersionStatus.js +3 -1
- package/dist/views/List/enrichDocsWithVersionStatus.js.map +1 -1
- package/dist/views/List/index.d.ts.map +1 -1
- package/dist/views/List/index.js +11 -24
- package/dist/views/List/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js +2 -12
- package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Checkbox/index.js +2 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Checkbox/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Collapsible/index.js +2 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Collapsible/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.js +2 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.js +2 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js +2 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js +2 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js +2 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js +8 -8
- package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js +2 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.js +2 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.js.map +1 -1
- package/dist/widgets/RecentlyViewed/CollectionsField/index.d.ts.map +1 -1
- package/dist/widgets/RecentlyViewed/CollectionsField/index.js +31 -5
- package/dist/widgets/RecentlyViewed/CollectionsField/index.js.map +1 -1
- package/dist/widgets/RecentlyViewed/PinDocumentPicker/index.css +41 -0
- package/dist/widgets/RecentlyViewed/PinDocumentPicker/index.d.ts +19 -0
- package/dist/widgets/RecentlyViewed/PinDocumentPicker/index.d.ts.map +1 -0
- package/dist/widgets/RecentlyViewed/PinDocumentPicker/index.js +121 -0
- package/dist/widgets/RecentlyViewed/PinDocumentPicker/index.js.map +1 -0
- package/dist/widgets/RecentlyViewed/getDocuments.d.ts +20 -0
- package/dist/widgets/RecentlyViewed/getDocuments.d.ts.map +1 -0
- package/dist/widgets/RecentlyViewed/getDocuments.js +254 -0
- package/dist/widgets/RecentlyViewed/getDocuments.js.map +1 -0
- package/dist/widgets/RecentlyViewed/index.client.d.ts +41 -0
- package/dist/widgets/RecentlyViewed/index.client.d.ts.map +1 -0
- package/dist/widgets/RecentlyViewed/index.client.js +409 -0
- package/dist/widgets/RecentlyViewed/index.client.js.map +1 -0
- package/dist/widgets/RecentlyViewed/index.css +352 -0
- package/dist/widgets/RecentlyViewed/index.d.ts +1 -1
- package/dist/widgets/RecentlyViewed/index.d.ts.map +1 -1
- package/dist/widgets/RecentlyViewed/index.js +33 -134
- package/dist/widgets/RecentlyViewed/index.js.map +1 -1
- package/dist/widgets/RecentlyViewed/pinnedPreferences.d.ts +18 -0
- package/dist/widgets/RecentlyViewed/pinnedPreferences.d.ts.map +1 -0
- package/dist/widgets/RecentlyViewed/pinnedPreferences.js +81 -0
- package/dist/widgets/RecentlyViewed/pinnedPreferences.js.map +1 -0
- package/dist/widgets/RecentlyViewed/recents.d.ts +8 -0
- package/dist/widgets/RecentlyViewed/recents.d.ts.map +1 -0
- package/dist/widgets/RecentlyViewed/recents.js +19 -0
- package/dist/widgets/RecentlyViewed/recents.js.map +1 -0
- package/package.json +16 -16
- package/dist/exports/client/chunk-2AY67NFV.js.map +0 -7
- package/dist/exports/client/chunk-6XCSN54Q.js +0 -27
- package/dist/exports/client/chunk-6XCSN54Q.js.map +0 -7
- /package/dist/exports/client/{CodeEditor-UKD3EPUY.js.map → CodeEditor-I6PL55BF.js.map} +0 -0
- /package/dist/exports/client/{DatePicker-POZJVQP4.js.map → DatePicker-XAKGIULG.js.map} +0 -0
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
4
|
+
import React, { useEffect, useId, useMemo, useRef, useState } from 'react';
|
|
5
|
+
import { Button } from '../../elements/Button/index.js';
|
|
6
|
+
import { CardGrid } from '../../elements/CardGrid/index.js';
|
|
7
|
+
import { DocumentCard } from '../../elements/DocumentCard/index.js';
|
|
8
|
+
import { ChevronIcon } from '../../icons/Chevron/index.js';
|
|
9
|
+
import { ClockIcon } from '../../icons/Clock/index.js';
|
|
10
|
+
import { DocumentIcon } from '../../icons/Document/index.js';
|
|
11
|
+
import { PinIcon } from '../../icons/Pin/index.js';
|
|
12
|
+
import { useAuth } from '../../providers/Auth/index.js';
|
|
13
|
+
import { useConfig } from '../../providers/Config/index.js';
|
|
14
|
+
import { useEntityVisibility } from '../../providers/EntityVisibility/index.js';
|
|
15
|
+
import { useServerFunctions } from '../../providers/ServerFunctions/index.js';
|
|
16
|
+
import { useTranslation } from '../../providers/Translation/index.js';
|
|
17
|
+
import { isNavEntityVisible } from '../../utilities/isNavEntityVisible.js';
|
|
18
|
+
import { WidgetCard } from '../WidgetCard/index.js';
|
|
19
|
+
import { PinDocumentPicker } from './PinDocumentPicker/index.js';
|
|
20
|
+
import { updatePinnedPreferences } from './pinnedPreferences.js';
|
|
21
|
+
import { documentKey } from './recents.js';
|
|
22
|
+
import './index.css';
|
|
23
|
+
export function RecentsAndPinnedClient({
|
|
24
|
+
excludedCollections,
|
|
25
|
+
labels,
|
|
26
|
+
pinsURL
|
|
27
|
+
}) {
|
|
28
|
+
const {
|
|
29
|
+
permissions,
|
|
30
|
+
user
|
|
31
|
+
} = useAuth();
|
|
32
|
+
const {
|
|
33
|
+
t
|
|
34
|
+
} = useTranslation();
|
|
35
|
+
const {
|
|
36
|
+
config
|
|
37
|
+
} = useConfig();
|
|
38
|
+
const {
|
|
39
|
+
isEntityVisible
|
|
40
|
+
} = useEntityVisibility();
|
|
41
|
+
const {
|
|
42
|
+
serverFunction
|
|
43
|
+
} = useServerFunctions();
|
|
44
|
+
const pinnableCollections = useMemo(() => config.collections.filter(({
|
|
45
|
+
slug,
|
|
46
|
+
admin
|
|
47
|
+
}) => isEntityVisible({
|
|
48
|
+
collectionSlug: slug
|
|
49
|
+
}) && isNavEntityVisible({
|
|
50
|
+
adminGroup: admin.group,
|
|
51
|
+
entityPermissions: permissions?.collections?.[slug]
|
|
52
|
+
})).map(({
|
|
53
|
+
slug: slug_0
|
|
54
|
+
}) => slug_0), [config.collections, isEntityVisible, permissions]);
|
|
55
|
+
const canAddPin = Boolean(user) && pinnableCollections.length > 0;
|
|
56
|
+
const contentRef = useRef(null);
|
|
57
|
+
const listID = useId();
|
|
58
|
+
const [page, setPage] = useState(1);
|
|
59
|
+
const [pageSize, setPageSize] = useState(0);
|
|
60
|
+
const pinnedTabRef = useRef(null);
|
|
61
|
+
const recentsTabRef = useRef(null);
|
|
62
|
+
const previousPageRef = useRef(null);
|
|
63
|
+
const nextPageRef = useRef(null);
|
|
64
|
+
const paginationFocusRef = useRef(false);
|
|
65
|
+
const [activeTab, setActiveTab] = useState('pinned');
|
|
66
|
+
const [pageResult, setPageResult] = useState({
|
|
67
|
+
items: [],
|
|
68
|
+
page: 1,
|
|
69
|
+
totalDocs: 0
|
|
70
|
+
});
|
|
71
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
72
|
+
const [shouldShowLoading, setShouldShowLoading] = useState(false);
|
|
73
|
+
const [isSaving, setIsSaving] = useState(false);
|
|
74
|
+
const [saveError, setSaveError] = useState('');
|
|
75
|
+
const [loadError, setLoadError] = useState('');
|
|
76
|
+
const [refresh, setRefresh] = useState(0);
|
|
77
|
+
const shouldIncludePinPlaceholder = activeTab === 'pinned' && canAddPin;
|
|
78
|
+
const totalPages = Math.max(1, Math.ceil((pageResult.totalDocs + Number(shouldIncludePinPlaceholder)) / (pageSize || 1)));
|
|
79
|
+
const currentPage = pageResult.page;
|
|
80
|
+
const items = pageResult.items;
|
|
81
|
+
const hasAddPinCard = shouldIncludePinPlaceholder && pageResult.page === totalPages && items.length < pageSize;
|
|
82
|
+
useEffect(() => {
|
|
83
|
+
if (!pageSize) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
let isCurrent = true;
|
|
87
|
+
setIsLoading(true);
|
|
88
|
+
setShouldShowLoading(false);
|
|
89
|
+
setLoadError('');
|
|
90
|
+
const loadingTimeout = setTimeout(() => setShouldShowLoading(true), 180);
|
|
91
|
+
void serverFunction({
|
|
92
|
+
name: 'get-dashboard-documents',
|
|
93
|
+
args: {
|
|
94
|
+
excludedCollections,
|
|
95
|
+
limit: pageSize,
|
|
96
|
+
page,
|
|
97
|
+
shouldIncludePinPlaceholder,
|
|
98
|
+
tab: activeTab
|
|
99
|
+
}
|
|
100
|
+
}).then(result => {
|
|
101
|
+
if (!isCurrent) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
setPageResult(result);
|
|
105
|
+
setPage(result.page);
|
|
106
|
+
setIsLoading(false);
|
|
107
|
+
if (paginationFocusRef.current) {
|
|
108
|
+
paginationFocusRef.current = false;
|
|
109
|
+
const lastPage = Math.max(1, Math.ceil((result.totalDocs + Number(shouldIncludePinPlaceholder)) / pageSize));
|
|
110
|
+
requestAnimationFrame(() => {
|
|
111
|
+
if (lastPage === 1) {
|
|
112
|
+
const activeTabRef = activeTab === 'pinned' ? pinnedTabRef : recentsTabRef;
|
|
113
|
+
activeTabRef.current?.focus();
|
|
114
|
+
} else if (result.page === 1) {
|
|
115
|
+
nextPageRef.current?.focus();
|
|
116
|
+
} else if (result.page === lastPage) {
|
|
117
|
+
previousPageRef.current?.focus();
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}).catch(() => {
|
|
122
|
+
if (isCurrent) {
|
|
123
|
+
setIsLoading(false);
|
|
124
|
+
paginationFocusRef.current = false;
|
|
125
|
+
setLoadError(labels.loadError);
|
|
126
|
+
}
|
|
127
|
+
}).finally(() => clearTimeout(loadingTimeout));
|
|
128
|
+
return () => {
|
|
129
|
+
isCurrent = false;
|
|
130
|
+
clearTimeout(loadingTimeout);
|
|
131
|
+
};
|
|
132
|
+
}, [activeTab, excludedCollections, shouldIncludePinPlaceholder, labels.loadError, page, pageSize, refresh, serverFunction]);
|
|
133
|
+
useEffect(() => {
|
|
134
|
+
const element = contentRef.current;
|
|
135
|
+
if (!element) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
let observedPageSize = 0;
|
|
139
|
+
const observer = new ResizeObserver(() => {
|
|
140
|
+
const styles = getComputedStyle(element);
|
|
141
|
+
const columns = styles.gridTemplateColumns.split(' ').length;
|
|
142
|
+
const rows = Number(styles.getPropertyValue('--recents-rows'));
|
|
143
|
+
const nextPageSize = columns * rows;
|
|
144
|
+
element.style.setProperty('--recents-columns', String(columns));
|
|
145
|
+
if (nextPageSize !== observedPageSize) {
|
|
146
|
+
observedPageSize = nextPageSize;
|
|
147
|
+
setPageSize(nextPageSize);
|
|
148
|
+
setPage(1);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
observer.observe(element);
|
|
152
|
+
return () => observer.disconnect();
|
|
153
|
+
}, []);
|
|
154
|
+
const emptyMessage = activeTab === 'recents' ? labels.recentsEmpty : labels.pinnedEmpty;
|
|
155
|
+
const emptyDescription = activeTab === 'recents' ? labels.recentsEmptyDescription : labels.pinnedEmptyDescription;
|
|
156
|
+
const removePinnedDocument = async ({
|
|
157
|
+
item
|
|
158
|
+
}) => {
|
|
159
|
+
if (isSaving || activeTab !== 'pinned') {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
const previous = pageResult;
|
|
163
|
+
setPageResult(current => ({
|
|
164
|
+
...current,
|
|
165
|
+
items: current.items.filter(entry => documentKey(entry) !== documentKey(item))
|
|
166
|
+
}));
|
|
167
|
+
requestAnimationFrame(() => pinnedTabRef.current?.focus());
|
|
168
|
+
setIsSaving(true);
|
|
169
|
+
setSaveError('');
|
|
170
|
+
try {
|
|
171
|
+
await updatePinnedPreferences({
|
|
172
|
+
document: item,
|
|
173
|
+
shouldPin: false,
|
|
174
|
+
url: pinsURL
|
|
175
|
+
});
|
|
176
|
+
setRefresh(value => value + 1);
|
|
177
|
+
} catch {
|
|
178
|
+
setPageResult(previous);
|
|
179
|
+
setSaveError(labels.pinnedSaveError);
|
|
180
|
+
} finally {
|
|
181
|
+
setIsSaving(false);
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
const addSelectedPin = async ({
|
|
185
|
+
document
|
|
186
|
+
}) => {
|
|
187
|
+
if (isSaving) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
setIsSaving(true);
|
|
191
|
+
setSaveError('');
|
|
192
|
+
try {
|
|
193
|
+
await updatePinnedPreferences({
|
|
194
|
+
document,
|
|
195
|
+
shouldPin: true,
|
|
196
|
+
url: pinsURL
|
|
197
|
+
});
|
|
198
|
+
setPage(1);
|
|
199
|
+
setRefresh(value_0 => value_0 + 1);
|
|
200
|
+
} catch {
|
|
201
|
+
setSaveError(labels.pinnedSaveError);
|
|
202
|
+
} finally {
|
|
203
|
+
setIsSaving(false);
|
|
204
|
+
requestAnimationFrame(() => pinnedTabRef.current?.focus());
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
const pinDocumentPicker = canAddPin ? /*#__PURE__*/_jsx(PinDocumentPicker, {
|
|
208
|
+
collectionSlugs: pinnableCollections,
|
|
209
|
+
isDisabled: isLoading || isSaving,
|
|
210
|
+
isEmpty: pageResult.totalDocs === 0,
|
|
211
|
+
labels: labels,
|
|
212
|
+
onError: () => setSaveError(labels.pinnedSaveError),
|
|
213
|
+
onSelect: args => void addSelectedPin(args),
|
|
214
|
+
pinsURL: pinsURL
|
|
215
|
+
}) : null;
|
|
216
|
+
return /*#__PURE__*/_jsxs(WidgetCard, {
|
|
217
|
+
className: "recently-viewed-widget recents-widget",
|
|
218
|
+
title: labels.title,
|
|
219
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
220
|
+
className: "recents-widget__toolbar",
|
|
221
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
222
|
+
"aria-label": labels.title,
|
|
223
|
+
className: "recents-widget__tabs",
|
|
224
|
+
role: "group",
|
|
225
|
+
children: ['pinned', 'recents'].map(tab => /*#__PURE__*/_jsx("button", {
|
|
226
|
+
"aria-pressed": activeTab === tab,
|
|
227
|
+
className: "recents-widget__tab",
|
|
228
|
+
onClick: () => {
|
|
229
|
+
if (isSaving) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
if (activeTab === tab && page === 1) {
|
|
233
|
+
if (loadError) {
|
|
234
|
+
setRefresh(value_1 => value_1 + 1);
|
|
235
|
+
}
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
setPageResult({
|
|
239
|
+
items: [],
|
|
240
|
+
page: 1,
|
|
241
|
+
totalDocs: 0
|
|
242
|
+
});
|
|
243
|
+
setIsLoading(true);
|
|
244
|
+
setActiveTab(tab);
|
|
245
|
+
setPage(1);
|
|
246
|
+
},
|
|
247
|
+
ref: tab === 'pinned' ? pinnedTabRef : recentsTabRef,
|
|
248
|
+
type: "button",
|
|
249
|
+
children: tab === 'recents' ? labels.recents : labels.pinned
|
|
250
|
+
}, tab))
|
|
251
|
+
}), totalPages > 1 ? /*#__PURE__*/_jsxs("div", {
|
|
252
|
+
"aria-label": labels.pagination,
|
|
253
|
+
className: "recents-widget__pagination",
|
|
254
|
+
role: "group",
|
|
255
|
+
children: [/*#__PURE__*/_jsx("button", {
|
|
256
|
+
"aria-controls": listID,
|
|
257
|
+
"aria-disabled": isLoading || isSaving,
|
|
258
|
+
"aria-label": labels.previous,
|
|
259
|
+
className: "recents-widget__previous",
|
|
260
|
+
disabled: currentPage === 1,
|
|
261
|
+
onClick: () => {
|
|
262
|
+
if (isLoading || isSaving) {
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
paginationFocusRef.current = true;
|
|
266
|
+
setPage(currentPage - 1);
|
|
267
|
+
},
|
|
268
|
+
ref: previousPageRef,
|
|
269
|
+
type: "button",
|
|
270
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
271
|
+
"aria-hidden": "true",
|
|
272
|
+
children: /*#__PURE__*/_jsx(ChevronIcon, {
|
|
273
|
+
direction: "left"
|
|
274
|
+
})
|
|
275
|
+
})
|
|
276
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
277
|
+
"aria-atomic": "true",
|
|
278
|
+
"aria-live": "polite",
|
|
279
|
+
className: "recents-widget__page-status",
|
|
280
|
+
children: t('dashboard:widgetPageCount', {
|
|
281
|
+
currentPage,
|
|
282
|
+
totalPages
|
|
283
|
+
})
|
|
284
|
+
}), /*#__PURE__*/_jsx("button", {
|
|
285
|
+
"aria-controls": listID,
|
|
286
|
+
"aria-disabled": isLoading || isSaving,
|
|
287
|
+
"aria-label": labels.next,
|
|
288
|
+
className: "recents-widget__next",
|
|
289
|
+
disabled: currentPage === totalPages,
|
|
290
|
+
onClick: () => {
|
|
291
|
+
if (isLoading || isSaving) {
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
paginationFocusRef.current = true;
|
|
295
|
+
setPage(currentPage + 1);
|
|
296
|
+
},
|
|
297
|
+
ref: nextPageRef,
|
|
298
|
+
type: "button",
|
|
299
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
300
|
+
"aria-hidden": "true",
|
|
301
|
+
children: /*#__PURE__*/_jsx(ChevronIcon, {
|
|
302
|
+
direction: "right"
|
|
303
|
+
})
|
|
304
|
+
})
|
|
305
|
+
})]
|
|
306
|
+
}) : null]
|
|
307
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
308
|
+
"aria-busy": isLoading,
|
|
309
|
+
className: "recents-widget__viewport",
|
|
310
|
+
ref: contentRef,
|
|
311
|
+
children: [loadError ? /*#__PURE__*/_jsxs("div", {
|
|
312
|
+
className: "recents-widget__error",
|
|
313
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
314
|
+
children: loadError
|
|
315
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
316
|
+
buttonStyle: "secondary",
|
|
317
|
+
margin: false,
|
|
318
|
+
onClick: () => {
|
|
319
|
+
const activeTabRef_0 = activeTab === 'pinned' ? pinnedTabRef : recentsTabRef;
|
|
320
|
+
activeTabRef_0.current?.focus();
|
|
321
|
+
setRefresh(value_2 => value_2 + 1);
|
|
322
|
+
},
|
|
323
|
+
size: "medium",
|
|
324
|
+
type: "button",
|
|
325
|
+
children: labels.retry
|
|
326
|
+
})]
|
|
327
|
+
}) : items.length || hasAddPinCard && !isLoading ? /*#__PURE__*/_jsx("div", {
|
|
328
|
+
className: "recents-widget__content",
|
|
329
|
+
id: listID,
|
|
330
|
+
children: /*#__PURE__*/_jsx(CardGrid, {
|
|
331
|
+
ariaLabel: activeTab === 'pinned' ? labels.pinned : labels.recents,
|
|
332
|
+
className: "recents-widget__items recents-widget__items--grid",
|
|
333
|
+
getItemClassName: item_0 => item_0 ? 'recents-widget__item' : `recents-widget__item recents-widget__item--add-pin${pageResult.totalDocs === 0 ? ' recents-widget__item--empty' : ''}`,
|
|
334
|
+
getKey: item_1 => item_1 ? documentKey(item_1) : 'add-pin',
|
|
335
|
+
items: hasAddPinCard ? [...items, null] : items,
|
|
336
|
+
renderItem: item_2 => item_2 ? /*#__PURE__*/_jsxs(DocumentCard, {
|
|
337
|
+
href: item_2.href,
|
|
338
|
+
placeholder: /*#__PURE__*/_jsx(DocumentIcon, {}),
|
|
339
|
+
thumbnail: item_2.thumbnailURL ? {
|
|
340
|
+
alt: '',
|
|
341
|
+
src: item_2.thumbnailURL
|
|
342
|
+
} : undefined,
|
|
343
|
+
title: item_2.title,
|
|
344
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
345
|
+
className: "recents-widget__meta",
|
|
346
|
+
children: [item_2.typeLabel, item_2.dateTime && item_2.dateLabel ? /*#__PURE__*/_jsxs(_Fragment, {
|
|
347
|
+
children: [' · ', /*#__PURE__*/_jsx("time", {
|
|
348
|
+
dateTime: item_2.dateTime,
|
|
349
|
+
children: item_2.dateLabel
|
|
350
|
+
})]
|
|
351
|
+
}) : null]
|
|
352
|
+
}), item_2.statusLabel ? /*#__PURE__*/_jsx("span", {
|
|
353
|
+
className: `recents-widget__status-pill${item_2.isDraft ? ' recents-widget__status-pill--draft' : item_2.isChanged ? ' recents-widget__status-pill--changed' : ''}`,
|
|
354
|
+
children: item_2.statusLabel
|
|
355
|
+
}) : null, activeTab === 'pinned' ? /*#__PURE__*/_jsx("button", {
|
|
356
|
+
"aria-label": `${labels.removePin}: ${item_2.title}`,
|
|
357
|
+
"aria-pressed": true,
|
|
358
|
+
className: "recents-widget__pin",
|
|
359
|
+
disabled: isSaving || isLoading,
|
|
360
|
+
onClick: () => void removePinnedDocument({
|
|
361
|
+
item: item_2
|
|
362
|
+
}),
|
|
363
|
+
type: "button",
|
|
364
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
365
|
+
"aria-hidden": "true",
|
|
366
|
+
className: "recents-widget__pin-icon",
|
|
367
|
+
children: /*#__PURE__*/_jsx(PinIcon, {
|
|
368
|
+
isFilled: true
|
|
369
|
+
})
|
|
370
|
+
})
|
|
371
|
+
}) : null]
|
|
372
|
+
}) : pinDocumentPicker
|
|
373
|
+
})
|
|
374
|
+
}) : isLoading ? null : /*#__PURE__*/_jsxs("div", {
|
|
375
|
+
"aria-live": "polite",
|
|
376
|
+
className: "recents-widget__empty",
|
|
377
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
378
|
+
"aria-hidden": "true",
|
|
379
|
+
className: `recents-widget__empty-icon recents-widget__empty-icon--${activeTab}`,
|
|
380
|
+
children: activeTab === 'pinned' ? /*#__PURE__*/_jsx(PinIcon, {}) : /*#__PURE__*/_jsx(ClockIcon, {})
|
|
381
|
+
}), /*#__PURE__*/_jsxs("span", {
|
|
382
|
+
className: "recents-widget__empty-text",
|
|
383
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
384
|
+
className: "recents-widget__empty-title",
|
|
385
|
+
children: emptyMessage
|
|
386
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
387
|
+
className: "recents-widget__empty-description",
|
|
388
|
+
children: emptyDescription
|
|
389
|
+
})]
|
|
390
|
+
})]
|
|
391
|
+
}), saveError && !loadError ? /*#__PURE__*/_jsx("span", {
|
|
392
|
+
"aria-hidden": "true",
|
|
393
|
+
className: "recents-widget__save-error",
|
|
394
|
+
children: saveError
|
|
395
|
+
}) : null, /*#__PURE__*/_jsx("span", {
|
|
396
|
+
"aria-hidden": "true",
|
|
397
|
+
className: "recents-widget__loading",
|
|
398
|
+
children: isLoading && shouldShowLoading ? /*#__PURE__*/_jsx("span", {
|
|
399
|
+
children: labels.loading
|
|
400
|
+
}) : null
|
|
401
|
+
})]
|
|
402
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
403
|
+
"aria-live": "polite",
|
|
404
|
+
className: "recents-widget__status sr-only",
|
|
405
|
+
children: saveError || loadError || (isLoading && shouldShowLoading ? labels.loading : '')
|
|
406
|
+
})]
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
//# sourceMappingURL=index.client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.client.js","names":["React","useEffect","useId","useMemo","useRef","useState","Button","CardGrid","DocumentCard","ChevronIcon","ClockIcon","DocumentIcon","PinIcon","useAuth","useConfig","useEntityVisibility","useServerFunctions","useTranslation","isNavEntityVisible","WidgetCard","PinDocumentPicker","updatePinnedPreferences","documentKey","RecentsAndPinnedClient","excludedCollections","labels","pinsURL","permissions","user","t","config","isEntityVisible","serverFunction","pinnableCollections","collections","filter","slug","admin","collectionSlug","adminGroup","group","entityPermissions","map","canAddPin","Boolean","length","contentRef","listID","page","setPage","pageSize","setPageSize","pinnedTabRef","recentsTabRef","previousPageRef","nextPageRef","paginationFocusRef","activeTab","setActiveTab","pageResult","setPageResult","items","totalDocs","isLoading","setIsLoading","shouldShowLoading","setShouldShowLoading","isSaving","setIsSaving","saveError","setSaveError","loadError","setLoadError","refresh","setRefresh","shouldIncludePinPlaceholder","totalPages","Math","max","ceil","Number","currentPage","hasAddPinCard","isCurrent","loadingTimeout","setTimeout","name","args","limit","tab","then","result","current","lastPage","requestAnimationFrame","activeTabRef","focus","catch","finally","clearTimeout","element","observedPageSize","observer","ResizeObserver","styles","getComputedStyle","columns","gridTemplateColumns","split","rows","getPropertyValue","nextPageSize","style","setProperty","String","observe","disconnect","emptyMessage","recentsEmpty","pinnedEmpty","emptyDescription","recentsEmptyDescription","pinnedEmptyDescription","removePinnedDocument","item","previous","entry","document","shouldPin","url","value","pinnedSaveError","addSelectedPin","pinDocumentPicker","_jsx","collectionSlugs","isDisabled","isEmpty","onError","onSelect","_jsxs","className","title","role","onClick","ref","type","recents","pinned","pagination","disabled","direction","next","buttonStyle","margin","size","retry","id","ariaLabel","getItemClassName","getKey","renderItem","href","placeholder","thumbnail","thumbnailURL","alt","src","undefined","typeLabel","dateTime","dateLabel","_Fragment","statusLabel","isDraft","isChanged","removePin","isFilled","loading"],"sources":["../../../src/widgets/RecentlyViewed/index.client.tsx"],"sourcesContent":["'use client'\n\nimport React, { useEffect, useId, useMemo, useRef, useState } from 'react'\n\nimport type { DocumentsPage, DocumentsTab } from './getDocuments.js'\nimport type { PinnedItem } from './recents.js'\n\nimport { Button } from '../../elements/Button/index.js'\nimport { CardGrid } from '../../elements/CardGrid/index.js'\nimport { DocumentCard } from '../../elements/DocumentCard/index.js'\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { ClockIcon } from '../../icons/Clock/index.js'\nimport { DocumentIcon } from '../../icons/Document/index.js'\nimport { PinIcon } from '../../icons/Pin/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useEntityVisibility } from '../../providers/EntityVisibility/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { isNavEntityVisible } from '../../utilities/isNavEntityVisible.js'\nimport { WidgetCard } from '../WidgetCard/index.js'\nimport { PinDocumentPicker } from './PinDocumentPicker/index.js'\nimport { updatePinnedPreferences } from './pinnedPreferences.js'\nimport { documentKey } from './recents.js'\nimport './index.css'\n\nexport type RecentDocument = {\n dateLabel?: string\n dateTime?: string\n href: string\n isChanged?: boolean\n isDraft?: boolean\n statusLabel?: string\n thumbnailURL?: string\n title: string\n typeLabel: string\n updatedAt?: string\n viewedAt?: string\n} & PinnedItem\n\ntype Labels = {\n addPin: string\n loadError: string\n loading: string\n next: string\n pagination: string\n pinned: string\n pinnedEmpty: string\n pinnedEmptyDescription: string\n pinnedSaveError: string\n previous: string\n recents: string\n recentsEmpty: string\n recentsEmptyDescription: string\n removePin: string\n retry: string\n title: string\n}\n\nexport function RecentsAndPinnedClient({\n excludedCollections,\n labels,\n pinsURL,\n}: {\n excludedCollections?: string[]\n labels: Labels\n pinsURL: string\n}) {\n const { permissions, user } = useAuth()\n const { t } = useTranslation()\n const { config } = useConfig()\n const { isEntityVisible } = useEntityVisibility()\n const { serverFunction } = useServerFunctions()\n const pinnableCollections = useMemo(\n () =>\n config.collections\n .filter(\n ({ slug, admin }) =>\n isEntityVisible({ collectionSlug: slug }) &&\n isNavEntityVisible({\n adminGroup: admin.group,\n entityPermissions: permissions?.collections?.[slug],\n }),\n )\n .map(({ slug }) => slug),\n [config.collections, isEntityVisible, permissions],\n )\n const canAddPin = Boolean(user) && pinnableCollections.length > 0\n const contentRef = useRef<HTMLDivElement>(null)\n const listID = useId()\n const [page, setPage] = useState(1)\n const [pageSize, setPageSize] = useState(0)\n const pinnedTabRef = useRef<HTMLButtonElement>(null)\n const recentsTabRef = useRef<HTMLButtonElement>(null)\n const previousPageRef = useRef<HTMLButtonElement>(null)\n const nextPageRef = useRef<HTMLButtonElement>(null)\n const paginationFocusRef = useRef(false)\n const [activeTab, setActiveTab] = useState<DocumentsTab>('pinned')\n const [pageResult, setPageResult] = useState<DocumentsPage>({ items: [], page: 1, totalDocs: 0 })\n const [isLoading, setIsLoading] = useState(true)\n const [shouldShowLoading, setShouldShowLoading] = useState(false)\n const [isSaving, setIsSaving] = useState(false)\n const [saveError, setSaveError] = useState('')\n const [loadError, setLoadError] = useState('')\n const [refresh, setRefresh] = useState(0)\n const shouldIncludePinPlaceholder = activeTab === 'pinned' && canAddPin\n const totalPages = Math.max(\n 1,\n Math.ceil((pageResult.totalDocs + Number(shouldIncludePinPlaceholder)) / (pageSize || 1)),\n )\n const currentPage = pageResult.page\n const items = pageResult.items\n const hasAddPinCard =\n shouldIncludePinPlaceholder && pageResult.page === totalPages && items.length < pageSize\n\n useEffect(() => {\n if (!pageSize) {\n return\n }\n let isCurrent = true\n setIsLoading(true)\n setShouldShowLoading(false)\n setLoadError('')\n const loadingTimeout = setTimeout(() => setShouldShowLoading(true), 180)\n void (\n serverFunction({\n name: 'get-dashboard-documents',\n args: {\n excludedCollections,\n limit: pageSize,\n page,\n shouldIncludePinPlaceholder,\n tab: activeTab,\n },\n }) as Promise<DocumentsPage>\n )\n .then((result: DocumentsPage) => {\n if (!isCurrent) {\n return\n }\n setPageResult(result)\n setPage(result.page)\n setIsLoading(false)\n if (paginationFocusRef.current) {\n paginationFocusRef.current = false\n const lastPage = Math.max(\n 1,\n Math.ceil((result.totalDocs + Number(shouldIncludePinPlaceholder)) / pageSize),\n )\n requestAnimationFrame(() => {\n if (lastPage === 1) {\n const activeTabRef = activeTab === 'pinned' ? pinnedTabRef : recentsTabRef\n\n activeTabRef.current?.focus()\n } else if (result.page === 1) {\n nextPageRef.current?.focus()\n } else if (result.page === lastPage) {\n previousPageRef.current?.focus()\n }\n })\n }\n })\n .catch(() => {\n if (isCurrent) {\n setIsLoading(false)\n paginationFocusRef.current = false\n setLoadError(labels.loadError)\n }\n })\n .finally(() => clearTimeout(loadingTimeout))\n return () => {\n isCurrent = false\n clearTimeout(loadingTimeout)\n }\n }, [\n activeTab,\n excludedCollections,\n shouldIncludePinPlaceholder,\n labels.loadError,\n page,\n pageSize,\n refresh,\n serverFunction,\n ])\n\n useEffect(() => {\n const element = contentRef.current\n\n if (!element) {\n return\n }\n\n let observedPageSize = 0\n const observer = new ResizeObserver(() => {\n const styles = getComputedStyle(element)\n const columns = styles.gridTemplateColumns.split(' ').length\n const rows = Number(styles.getPropertyValue('--recents-rows'))\n const nextPageSize = columns * rows\n\n element.style.setProperty('--recents-columns', String(columns))\n\n if (nextPageSize !== observedPageSize) {\n observedPageSize = nextPageSize\n setPageSize(nextPageSize)\n setPage(1)\n }\n })\n observer.observe(element)\n\n return () => observer.disconnect()\n }, [])\n\n const emptyMessage = activeTab === 'recents' ? labels.recentsEmpty : labels.pinnedEmpty\n const emptyDescription =\n activeTab === 'recents' ? labels.recentsEmptyDescription : labels.pinnedEmptyDescription\n\n const removePinnedDocument = async ({ item }: { item: RecentDocument }) => {\n if (isSaving || activeTab !== 'pinned') {\n return\n }\n\n const previous = pageResult\n\n setPageResult((current) => ({\n ...current,\n items: current.items.filter((entry) => documentKey(entry) !== documentKey(item)),\n }))\n requestAnimationFrame(() => pinnedTabRef.current?.focus())\n setIsSaving(true)\n setSaveError('')\n\n try {\n await updatePinnedPreferences({ document: item, shouldPin: false, url: pinsURL })\n setRefresh((value) => value + 1)\n } catch {\n setPageResult(previous)\n setSaveError(labels.pinnedSaveError)\n } finally {\n setIsSaving(false)\n }\n }\n\n const addSelectedPin = async ({ document }: { document: PinnedItem }) => {\n if (isSaving) {\n return\n }\n setIsSaving(true)\n setSaveError('')\n\n try {\n await updatePinnedPreferences({ document, shouldPin: true, url: pinsURL })\n setPage(1)\n setRefresh((value) => value + 1)\n } catch {\n setSaveError(labels.pinnedSaveError)\n } finally {\n setIsSaving(false)\n requestAnimationFrame(() => pinnedTabRef.current?.focus())\n }\n }\n\n const pinDocumentPicker = canAddPin ? (\n <PinDocumentPicker\n collectionSlugs={pinnableCollections}\n isDisabled={isLoading || isSaving}\n isEmpty={pageResult.totalDocs === 0}\n labels={labels}\n onError={() => setSaveError(labels.pinnedSaveError)}\n onSelect={(args) => void addSelectedPin(args)}\n pinsURL={pinsURL}\n />\n ) : null\n\n return (\n <WidgetCard className=\"recently-viewed-widget recents-widget\" title={labels.title}>\n <div className=\"recents-widget__toolbar\">\n <div aria-label={labels.title} className=\"recents-widget__tabs\" role=\"group\">\n {(['pinned', 'recents'] as const).map((tab) => (\n <button\n aria-pressed={activeTab === tab}\n className=\"recents-widget__tab\"\n key={tab}\n onClick={() => {\n if (isSaving) {\n return\n }\n if (activeTab === tab && page === 1) {\n if (loadError) {\n setRefresh((value) => value + 1)\n }\n return\n }\n setPageResult({ items: [], page: 1, totalDocs: 0 })\n setIsLoading(true)\n setActiveTab(tab)\n setPage(1)\n }}\n ref={tab === 'pinned' ? pinnedTabRef : recentsTabRef}\n type=\"button\"\n >\n {tab === 'recents' ? labels.recents : labels.pinned}\n </button>\n ))}\n </div>\n {totalPages > 1 ? (\n <div aria-label={labels.pagination} className=\"recents-widget__pagination\" role=\"group\">\n <button\n aria-controls={listID}\n aria-disabled={isLoading || isSaving}\n aria-label={labels.previous}\n className=\"recents-widget__previous\"\n disabled={currentPage === 1}\n onClick={() => {\n if (isLoading || isSaving) {\n return\n }\n paginationFocusRef.current = true\n setPage(currentPage - 1)\n }}\n ref={previousPageRef}\n type=\"button\"\n >\n <span aria-hidden=\"true\">\n <ChevronIcon direction=\"left\" />\n </span>\n </button>\n <span aria-atomic=\"true\" aria-live=\"polite\" className=\"recents-widget__page-status\">\n {t('dashboard:widgetPageCount', { currentPage, totalPages })}\n </span>\n <button\n aria-controls={listID}\n aria-disabled={isLoading || isSaving}\n aria-label={labels.next}\n className=\"recents-widget__next\"\n disabled={currentPage === totalPages}\n onClick={() => {\n if (isLoading || isSaving) {\n return\n }\n paginationFocusRef.current = true\n setPage(currentPage + 1)\n }}\n ref={nextPageRef}\n type=\"button\"\n >\n <span aria-hidden=\"true\">\n <ChevronIcon direction=\"right\" />\n </span>\n </button>\n </div>\n ) : null}\n </div>\n <div aria-busy={isLoading} className=\"recents-widget__viewport\" ref={contentRef}>\n {loadError ? (\n <div className=\"recents-widget__error\">\n <span>{loadError}</span>\n <Button\n buttonStyle=\"secondary\"\n margin={false}\n onClick={() => {\n const activeTabRef = activeTab === 'pinned' ? pinnedTabRef : recentsTabRef\n\n activeTabRef.current?.focus()\n setRefresh((value) => value + 1)\n }}\n size=\"medium\"\n type=\"button\"\n >\n {labels.retry}\n </Button>\n </div>\n ) : items.length || (hasAddPinCard && !isLoading) ? (\n <div className=\"recents-widget__content\" id={listID}>\n <CardGrid<null | RecentDocument>\n ariaLabel={activeTab === 'pinned' ? labels.pinned : labels.recents}\n className=\"recents-widget__items recents-widget__items--grid\"\n getItemClassName={(item) =>\n item\n ? 'recents-widget__item'\n : `recents-widget__item recents-widget__item--add-pin${pageResult.totalDocs === 0 ? ' recents-widget__item--empty' : ''}`\n }\n getKey={(item) => (item ? documentKey(item) : 'add-pin')}\n items={hasAddPinCard ? [...items, null] : items}\n renderItem={(item) =>\n item ? (\n <DocumentCard\n href={item.href}\n placeholder={<DocumentIcon />}\n thumbnail={item.thumbnailURL ? { alt: '', src: item.thumbnailURL } : undefined}\n title={item.title}\n >\n <div className=\"recents-widget__meta\">\n {item.typeLabel}\n {item.dateTime && item.dateLabel ? (\n <>\n {' · '}\n <time dateTime={item.dateTime}>{item.dateLabel}</time>\n </>\n ) : null}\n </div>\n {item.statusLabel ? (\n <span\n className={`recents-widget__status-pill${item.isDraft ? ' recents-widget__status-pill--draft' : item.isChanged ? ' recents-widget__status-pill--changed' : ''}`}\n >\n {item.statusLabel}\n </span>\n ) : null}\n {activeTab === 'pinned' ? (\n <button\n aria-label={`${labels.removePin}: ${item.title}`}\n aria-pressed={true}\n className=\"recents-widget__pin\"\n disabled={isSaving || isLoading}\n onClick={() => void removePinnedDocument({ item })}\n type=\"button\"\n >\n <span aria-hidden=\"true\" className=\"recents-widget__pin-icon\">\n <PinIcon isFilled />\n </span>\n </button>\n ) : null}\n </DocumentCard>\n ) : (\n pinDocumentPicker\n )\n }\n />\n </div>\n ) : isLoading ? null : (\n <div aria-live=\"polite\" className=\"recents-widget__empty\">\n <span\n aria-hidden=\"true\"\n className={`recents-widget__empty-icon recents-widget__empty-icon--${activeTab}`}\n >\n {activeTab === 'pinned' ? <PinIcon /> : <ClockIcon />}\n </span>\n <span className=\"recents-widget__empty-text\">\n <span className=\"recents-widget__empty-title\">{emptyMessage}</span>\n <span className=\"recents-widget__empty-description\">{emptyDescription}</span>\n </span>\n </div>\n )}\n {saveError && !loadError ? (\n <span aria-hidden=\"true\" className=\"recents-widget__save-error\">\n {saveError}\n </span>\n ) : null}\n <span aria-hidden=\"true\" className=\"recents-widget__loading\">\n {isLoading && shouldShowLoading ? <span>{labels.loading}</span> : null}\n </span>\n </div>\n <span aria-live=\"polite\" className=\"recents-widget__status sr-only\">\n {saveError || loadError || (isLoading && shouldShowLoading ? labels.loading : '')}\n </span>\n </WidgetCard>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|