@ruya.sa/next 3.71.3
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/LICENSE.md +22 -0
- package/dist/auth/login.js +67 -0
- package/dist/auth/login.js.map +1 -0
- package/dist/auth/logout.js +52 -0
- package/dist/auth/logout.js.map +1 -0
- package/dist/auth/refresh.js +56 -0
- package/dist/auth/refresh.js.map +1 -0
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -0
- package/dist/dummy.css +0 -0
- package/dist/elements/DocumentHeader/Tabs/ShouldRenderTabs.js +19 -0
- package/dist/elements/DocumentHeader/Tabs/ShouldRenderTabs.js.map +1 -0
- package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js +81 -0
- package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js.map +1 -0
- package/dist/elements/DocumentHeader/Tabs/Tab/index.js +66 -0
- package/dist/elements/DocumentHeader/Tabs/Tab/index.js.map +1 -0
- package/dist/elements/DocumentHeader/Tabs/index.js +78 -0
- package/dist/elements/DocumentHeader/Tabs/index.js.map +1 -0
- package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.js +29 -0
- package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.js.map +1 -0
- package/dist/elements/DocumentHeader/Tabs/tabs/index.js +72 -0
- package/dist/elements/DocumentHeader/Tabs/tabs/index.js.map +1 -0
- package/dist/elements/DocumentHeader/index.js +36 -0
- package/dist/elements/DocumentHeader/index.js.map +1 -0
- package/dist/elements/FormHeader/index.js +20 -0
- package/dist/elements/FormHeader/index.js.map +1 -0
- package/dist/elements/Logo/index.js +39 -0
- package/dist/elements/Logo/index.js.map +1 -0
- package/dist/elements/Nav/NavHamburger/index.js +51 -0
- package/dist/elements/Nav/NavHamburger/index.js.map +1 -0
- package/dist/elements/Nav/NavWrapper/index.js +61 -0
- package/dist/elements/Nav/NavWrapper/index.js.map +1 -0
- package/dist/elements/Nav/SettingsMenuButton/index.js +45 -0
- package/dist/elements/Nav/SettingsMenuButton/index.js.map +1 -0
- package/dist/elements/Nav/getNavPrefs.js +26 -0
- package/dist/elements/Nav/getNavPrefs.js.map +1 -0
- package/dist/elements/Nav/index.client.js +133 -0
- package/dist/elements/Nav/index.client.js.map +1 -0
- package/dist/elements/Nav/index.js +145 -0
- package/dist/elements/Nav/index.js.map +1 -0
- package/dist/esbuildEntry.js +5 -0
- package/dist/esbuildEntry.js.map +1 -0
- package/dist/exports/auth.js +4 -0
- package/dist/exports/auth.js.map +1 -0
- package/dist/exports/client.js +6 -0
- package/dist/exports/client.js.map +1 -0
- package/dist/exports/layouts.js +3 -0
- package/dist/exports/layouts.js.map +1 -0
- package/dist/exports/routes.js +3 -0
- package/dist/exports/routes.js.map +1 -0
- package/dist/exports/rsc.js +4 -0
- package/dist/exports/rsc.js.map +1 -0
- package/dist/exports/templates.js +3 -0
- package/dist/exports/templates.js.map +1 -0
- package/dist/exports/utilities.js +53 -0
- package/dist/exports/utilities.js.map +1 -0
- package/dist/exports/views.js +10 -0
- package/dist/exports/views.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/layouts/Root/NestProviders.js +24 -0
- package/dist/layouts/Root/NestProviders.js.map +1 -0
- package/dist/layouts/Root/checkDependencies.js +49 -0
- package/dist/layouts/Root/checkDependencies.js.map +1 -0
- package/dist/layouts/Root/index.js +120 -0
- package/dist/layouts/Root/index.js.map +1 -0
- package/dist/routes/graphql/handler.js +137 -0
- package/dist/routes/graphql/handler.js.map +1 -0
- package/dist/routes/graphql/index.js +3 -0
- package/dist/routes/graphql/index.js.map +1 -0
- package/dist/routes/graphql/playground.js +31 -0
- package/dist/routes/graphql/playground.js.map +1 -0
- package/dist/routes/index.js +3 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/rest/index.js +33 -0
- package/dist/routes/rest/index.js.map +1 -0
- package/dist/routes/rest/og/image.js +86 -0
- package/dist/routes/rest/og/image.js.map +1 -0
- package/dist/routes/rest/og/index.js +70 -0
- package/dist/routes/rest/og/index.js.map +1 -0
- package/dist/routes/rest/og/roboto-regular.woff +0 -0
- package/dist/templates/Default/NavHamburger/index.js +25 -0
- package/dist/templates/Default/NavHamburger/index.js.map +1 -0
- package/dist/templates/Default/Wrapper/index.js +49 -0
- package/dist/templates/Default/Wrapper/index.js.map +1 -0
- package/dist/templates/Default/index.js +129 -0
- package/dist/templates/Default/index.js.map +1 -0
- package/dist/templates/Minimal/index.js +21 -0
- package/dist/templates/Minimal/index.js.map +1 -0
- package/dist/utilities/getExistingAuthToken.js +6 -0
- package/dist/utilities/getExistingAuthToken.js.map +1 -0
- package/dist/utilities/getNextRequestI18n.js +22 -0
- package/dist/utilities/getNextRequestI18n.js.map +1 -0
- package/dist/utilities/getPayloadHMR.js +15 -0
- package/dist/utilities/getPayloadHMR.js.map +1 -0
- package/dist/utilities/getPreferences.js +26 -0
- package/dist/utilities/getPreferences.js.map +1 -0
- package/dist/utilities/getRequestLocale.js +20 -0
- package/dist/utilities/getRequestLocale.js.map +1 -0
- package/dist/utilities/getRequestTheme.js +22 -0
- package/dist/utilities/getRequestTheme.js.map +1 -0
- package/dist/utilities/getRouteWithoutAdmin.js +7 -0
- package/dist/utilities/getRouteWithoutAdmin.js.map +1 -0
- package/dist/utilities/handleAuthRedirect.js +41 -0
- package/dist/utilities/handleAuthRedirect.js.map +1 -0
- package/dist/utilities/handleServerFunctions.js +57 -0
- package/dist/utilities/handleServerFunctions.js.map +1 -0
- package/dist/utilities/initReq.js +110 -0
- package/dist/utilities/initReq.js.map +1 -0
- package/dist/utilities/isCustomAdminView.js +31 -0
- package/dist/utilities/isCustomAdminView.js.map +1 -0
- package/dist/utilities/isPublicAdminRoute.js +25 -0
- package/dist/utilities/isPublicAdminRoute.js.map +1 -0
- package/dist/utilities/meta.js +69 -0
- package/dist/utilities/meta.js.map +1 -0
- package/dist/utilities/selectiveCache.js +38 -0
- package/dist/utilities/selectiveCache.js.map +1 -0
- package/dist/utilities/setPayloadAuthCookie.js +27 -0
- package/dist/utilities/setPayloadAuthCookie.js.map +1 -0
- package/dist/utilities/slugify.js +47 -0
- package/dist/utilities/slugify.js.map +1 -0
- package/dist/utilities/timestamp.js +8 -0
- package/dist/utilities/timestamp.js.map +1 -0
- package/dist/views/API/LocaleSelector/index.js +44 -0
- package/dist/views/API/LocaleSelector/index.js.map +1 -0
- package/dist/views/API/RenderJSON/index.js +135 -0
- package/dist/views/API/RenderJSON/index.js.map +1 -0
- package/dist/views/API/index.client.js +209 -0
- package/dist/views/API/index.client.js.map +1 -0
- package/dist/views/API/index.js +7 -0
- package/dist/views/API/index.js.map +1 -0
- package/dist/views/API/metadata.js +29 -0
- package/dist/views/API/metadata.js.map +1 -0
- package/dist/views/Account/ResetPreferences/index.js +112 -0
- package/dist/views/Account/ResetPreferences/index.js.map +1 -0
- package/dist/views/Account/Settings/LanguageSelector.js +52 -0
- package/dist/views/Account/Settings/LanguageSelector.js.map +1 -0
- package/dist/views/Account/Settings/index.js +33 -0
- package/dist/views/Account/Settings/index.js.map +1 -0
- package/dist/views/Account/ToggleTheme/index.js +60 -0
- package/dist/views/Account/ToggleTheme/index.js.map +1 -0
- package/dist/views/Account/index.client.js +37 -0
- package/dist/views/Account/index.client.js.map +1 -0
- package/dist/views/Account/index.js +178 -0
- package/dist/views/Account/index.js.map +1 -0
- package/dist/views/Account/metadata.js +14 -0
- package/dist/views/Account/metadata.js.map +1 -0
- package/dist/views/BrowseByFolder/buildView.js +169 -0
- package/dist/views/BrowseByFolder/buildView.js.map +1 -0
- package/dist/views/BrowseByFolder/index.js +20 -0
- package/dist/views/BrowseByFolder/index.js.map +1 -0
- package/dist/views/BrowseByFolder/metadata.js +18 -0
- package/dist/views/BrowseByFolder/metadata.js.map +1 -0
- package/dist/views/CollectionFolders/buildView.js +156 -0
- package/dist/views/CollectionFolders/buildView.js.map +1 -0
- package/dist/views/CollectionFolders/index.js +20 -0
- package/dist/views/CollectionFolders/index.js.map +1 -0
- package/dist/views/CollectionFolders/metadata.js +25 -0
- package/dist/views/CollectionFolders/metadata.js.map +1 -0
- package/dist/views/CollectionFolders/renderFolderViewSlots.js +64 -0
- package/dist/views/CollectionFolders/renderFolderViewSlots.js.map +1 -0
- package/dist/views/CollectionTrash/index.js +21 -0
- package/dist/views/CollectionTrash/index.js.map +1 -0
- package/dist/views/CollectionTrash/metadata.js +25 -0
- package/dist/views/CollectionTrash/metadata.js.map +1 -0
- package/dist/views/CreateFirstUser/index.client.js +112 -0
- package/dist/views/CreateFirstUser/index.client.js.map +1 -0
- package/dist/views/CreateFirstUser/index.js +88 -0
- package/dist/views/CreateFirstUser/index.js.map +1 -0
- package/dist/views/CreateFirstUser/metadata.js +14 -0
- package/dist/views/CreateFirstUser/metadata.js.map +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js +147 -0
- package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js.map +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/index.client.js +431 -0
- package/dist/views/Dashboard/Default/ModularDashboard/index.client.js.map +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/index.js +87 -0
- package/dist/views/Dashboard/Default/ModularDashboard/index.js.map +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js +99 -0
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js.map +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js +58 -0
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js.map +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js +72 -0
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js.map +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.js +158 -0
- package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.js.map +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/utils/collisionDetection.js +38 -0
- package/dist/views/Dashboard/Default/ModularDashboard/utils/collisionDetection.js.map +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/utils/sensors.js +264 -0
- package/dist/views/Dashboard/Default/ModularDashboard/utils/sensors.js.map +1 -0
- package/dist/views/Dashboard/Default/index.js +52 -0
- package/dist/views/Dashboard/Default/index.js.map +1 -0
- package/dist/views/Dashboard/index.js +50 -0
- package/dist/views/Dashboard/index.js.map +1 -0
- package/dist/views/Dashboard/metadata.js +16 -0
- package/dist/views/Dashboard/metadata.js.map +1 -0
- package/dist/views/Document/getCustomDocumentViewByKey.js +4 -0
- package/dist/views/Document/getCustomDocumentViewByKey.js.map +1 -0
- package/dist/views/Document/getCustomViewByRoute.js +35 -0
- package/dist/views/Document/getCustomViewByRoute.js.map +1 -0
- package/dist/views/Document/getDocPreferences.js +45 -0
- package/dist/views/Document/getDocPreferences.js.map +1 -0
- package/dist/views/Document/getDocumentData.js +60 -0
- package/dist/views/Document/getDocumentData.js.map +1 -0
- package/dist/views/Document/getDocumentPermissions.js +87 -0
- package/dist/views/Document/getDocumentPermissions.js.map +1 -0
- package/dist/views/Document/getDocumentView.js +310 -0
- package/dist/views/Document/getDocumentView.js.map +1 -0
- package/dist/views/Document/getIsLocked.js +79 -0
- package/dist/views/Document/getIsLocked.js.map +1 -0
- package/dist/views/Document/getMetaBySegment.js +150 -0
- package/dist/views/Document/getMetaBySegment.js.map +1 -0
- package/dist/views/Document/getVersions.js +210 -0
- package/dist/views/Document/getVersions.js.map +1 -0
- package/dist/views/Document/handleServerFunction.js +135 -0
- package/dist/views/Document/handleServerFunction.js.map +1 -0
- package/dist/views/Document/index.js +390 -0
- package/dist/views/Document/index.js.map +1 -0
- package/dist/views/Document/metadata.js +3 -0
- package/dist/views/Document/metadata.js.map +1 -0
- package/dist/views/Document/renderDocumentSlots.js +154 -0
- package/dist/views/Document/renderDocumentSlots.js.map +1 -0
- package/dist/views/Edit/index.js +11 -0
- package/dist/views/Edit/index.js.map +1 -0
- package/dist/views/Edit/metadata.js +52 -0
- package/dist/views/Edit/metadata.js.map +1 -0
- package/dist/views/ForgotPassword/ForgotPasswordForm/index.js +179 -0
- package/dist/views/ForgotPassword/ForgotPasswordForm/index.js.map +1 -0
- package/dist/views/ForgotPassword/index.js +72 -0
- package/dist/views/ForgotPassword/index.js.map +1 -0
- package/dist/views/ForgotPassword/metadata.js +14 -0
- package/dist/views/ForgotPassword/metadata.js.map +1 -0
- package/dist/views/List/createSerializableValue.js +14 -0
- package/dist/views/List/createSerializableValue.js.map +1 -0
- package/dist/views/List/enrichDocsWithVersionStatus.js +96 -0
- package/dist/views/List/enrichDocsWithVersionStatus.js.map +1 -0
- package/dist/views/List/extractRelationshipDisplayValue.js +17 -0
- package/dist/views/List/extractRelationshipDisplayValue.js.map +1 -0
- package/dist/views/List/extractValueOrRelationshipID.js +19 -0
- package/dist/views/List/extractValueOrRelationshipID.js.map +1 -0
- package/dist/views/List/handleGroupBy.js +160 -0
- package/dist/views/List/handleGroupBy.js.map +1 -0
- package/dist/views/List/handleServerFunction.js +130 -0
- package/dist/views/List/handleServerFunction.js.map +1 -0
- package/dist/views/List/index.js +356 -0
- package/dist/views/List/index.js.map +1 -0
- package/dist/views/List/metadata.js +24 -0
- package/dist/views/List/metadata.js.map +1 -0
- package/dist/views/List/renderListViewSlots.js +80 -0
- package/dist/views/List/renderListViewSlots.js.map +1 -0
- package/dist/views/List/resolveAllFilterOptions.js +49 -0
- package/dist/views/List/resolveAllFilterOptions.js.map +1 -0
- package/dist/views/List/transformColumnsToSelect.js +11 -0
- package/dist/views/List/transformColumnsToSelect.js.map +1 -0
- package/dist/views/Login/LoginField/index.js +98 -0
- package/dist/views/Login/LoginField/index.js.map +1 -0
- package/dist/views/Login/LoginForm/index.js +177 -0
- package/dist/views/Login/LoginForm/index.js.map +1 -0
- package/dist/views/Login/index.js +95 -0
- package/dist/views/Login/index.js.map +1 -0
- package/dist/views/Login/metadata.js +14 -0
- package/dist/views/Login/metadata.js.map +1 -0
- package/dist/views/Logout/LogoutClient.js +140 -0
- package/dist/views/Logout/LogoutClient.js.map +1 -0
- package/dist/views/Logout/index.js +36 -0
- package/dist/views/Logout/index.js.map +1 -0
- package/dist/views/Logout/metadata.js +13 -0
- package/dist/views/Logout/metadata.js.map +1 -0
- package/dist/views/NotFound/index.client.js +88 -0
- package/dist/views/NotFound/index.client.js.map +1 -0
- package/dist/views/NotFound/index.js +87 -0
- package/dist/views/NotFound/index.js.map +1 -0
- package/dist/views/NotFound/metadata.js +11 -0
- package/dist/views/NotFound/metadata.js.map +1 -0
- package/dist/views/ResetPassword/ResetPasswordForm/index.js +117 -0
- package/dist/views/ResetPassword/ResetPasswordForm/index.js.map +1 -0
- package/dist/views/ResetPassword/index.js +83 -0
- package/dist/views/ResetPassword/index.js.map +1 -0
- package/dist/views/ResetPassword/metadata.js +14 -0
- package/dist/views/ResetPassword/metadata.js.map +1 -0
- package/dist/views/Root/attachViewActions.js +27 -0
- package/dist/views/Root/attachViewActions.js.map +1 -0
- package/dist/views/Root/generateCustomViewMetadata.js +25 -0
- package/dist/views/Root/generateCustomViewMetadata.js.map +1 -0
- package/dist/views/Root/getCustomViewByKey.js +16 -0
- package/dist/views/Root/getCustomViewByKey.js.map +1 -0
- package/dist/views/Root/getCustomViewByRoute.js +48 -0
- package/dist/views/Root/getCustomViewByRoute.js.map +1 -0
- package/dist/views/Root/getDocumentViewInfo.js +28 -0
- package/dist/views/Root/getDocumentViewInfo.js.map +1 -0
- package/dist/views/Root/getRouteData.js +359 -0
- package/dist/views/Root/getRouteData.js.map +1 -0
- package/dist/views/Root/index.js +300 -0
- package/dist/views/Root/index.js.map +1 -0
- package/dist/views/Root/isPathMatchingRoute.js +29 -0
- package/dist/views/Root/isPathMatchingRoute.js.map +1 -0
- package/dist/views/Root/metadata.js +209 -0
- package/dist/views/Root/metadata.js.map +1 -0
- package/dist/views/Unauthorized/index.js +54 -0
- package/dist/views/Unauthorized/index.js.map +1 -0
- package/dist/views/Unauthorized/metadata.js +14 -0
- package/dist/views/Unauthorized/metadata.js.map +1 -0
- package/dist/views/Verify/index.client.js +50 -0
- package/dist/views/Verify/index.client.js.map +1 -0
- package/dist/views/Verify/index.js +71 -0
- package/dist/views/Verify/index.js.map +1 -0
- package/dist/views/Verify/metadata.js +14 -0
- package/dist/views/Verify/metadata.js.map +1 -0
- package/dist/views/Version/Default/SelectedLocalesContext.js +8 -0
- package/dist/views/Version/Default/SelectedLocalesContext.js.map +1 -0
- package/dist/views/Version/Default/SetStepNav.js +135 -0
- package/dist/views/Version/Default/SetStepNav.js.map +1 -0
- package/dist/views/Version/Default/index.js +253 -0
- package/dist/views/Version/Default/index.js.map +1 -0
- package/dist/views/Version/Default/types.js +2 -0
- package/dist/views/Version/Default/types.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js +130 -0
- package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/RenderVersionFieldsToDiff.js +80 -0
- package/dist/views/Version/RenderFieldsToDiff/RenderVersionFieldsToDiff.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js +439 -0
- package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Collapsible/index.js +61 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Collapsible/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.js +75 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.js +66 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js +129 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.js +45 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js +188 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Row/index.js +17 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Row/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js +87 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js +155 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js +100 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.js +222 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/index.js +35 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/index.js +13 -0
- package/dist/views/Version/RenderFieldsToDiff/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js +242 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js +861 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.js +4 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js +47 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.js +45 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js +135 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js.map +1 -0
- package/dist/views/Version/Restore/index.js +106 -0
- package/dist/views/Version/Restore/index.js.map +1 -0
- package/dist/views/Version/SelectComparison/VersionDrawer/CreatedAtCell.js +56 -0
- package/dist/views/Version/SelectComparison/VersionDrawer/CreatedAtCell.js.map +1 -0
- package/dist/views/Version/SelectComparison/VersionDrawer/index.js +240 -0
- package/dist/views/Version/SelectComparison/VersionDrawer/index.js.map +1 -0
- package/dist/views/Version/SelectComparison/index.js +57 -0
- package/dist/views/Version/SelectComparison/index.js.map +1 -0
- package/dist/views/Version/SelectComparison/types.js +2 -0
- package/dist/views/Version/SelectComparison/types.js.map +1 -0
- package/dist/views/Version/SelectLocales/index.js +39 -0
- package/dist/views/Version/SelectLocales/index.js.map +1 -0
- package/dist/views/Version/VersionPillLabel/VersionPillLabel.js +110 -0
- package/dist/views/Version/VersionPillLabel/VersionPillLabel.js.map +1 -0
- package/dist/views/Version/VersionPillLabel/getVersionLabel.js +34 -0
- package/dist/views/Version/VersionPillLabel/getVersionLabel.js.map +1 -0
- package/dist/views/Version/fetchVersions.js +151 -0
- package/dist/views/Version/fetchVersions.js.map +1 -0
- package/dist/views/Version/index.js +349 -0
- package/dist/views/Version/index.js.map +1 -0
- package/dist/views/Version/metadata.js +58 -0
- package/dist/views/Version/metadata.js.map +1 -0
- package/dist/views/Versions/buildColumns.js +88 -0
- package/dist/views/Versions/buildColumns.js.map +1 -0
- package/dist/views/Versions/cells/AutosaveCell/index.js +45 -0
- package/dist/views/Versions/cells/AutosaveCell/index.js.map +1 -0
- package/dist/views/Versions/cells/CreatedAt/index.js +60 -0
- package/dist/views/Versions/cells/CreatedAt/index.js.map +1 -0
- package/dist/views/Versions/cells/ID/index.js +12 -0
- package/dist/views/Versions/cells/ID/index.js.map +1 -0
- package/dist/views/Versions/index.client.js +89 -0
- package/dist/views/Versions/index.client.js.map +1 -0
- package/dist/views/Versions/index.js +157 -0
- package/dist/views/Versions/index.js.map +1 -0
- package/dist/views/Versions/metadata.js +51 -0
- package/dist/views/Versions/metadata.js.map +1 -0
- package/dist/views/Versions/types.js +2 -0
- package/dist/views/Versions/types.js.map +1 -0
- package/dist/withPayload/withPayload.js +162 -0
- package/dist/withPayload/withPayload.js.map +1 -0
- package/dist/withPayload/withPayload.spec.js +40 -0
- package/dist/withPayload/withPayload.spec.js.map +1 -0
- package/dist/withPayload/withPayload.utils.js +133 -0
- package/dist/withPayload/withPayload.utils.js.map +1 -0
- package/dist/withPayload/withPayloadLegacy.js +47 -0
- package/dist/withPayload/withPayloadLegacy.js.map +1 -0
- package/package.json +153 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { renderTable } from '@ruya.sa/ui/rsc';
|
|
2
|
+
import { formatDate } from '@ruya.sa/ui/shared';
|
|
3
|
+
import { flattenAllFields } from '@ruya.sa/payload';
|
|
4
|
+
import { createSerializableValue } from './createSerializableValue.js';
|
|
5
|
+
import { extractRelationshipDisplayValue } from './extractRelationshipDisplayValue.js';
|
|
6
|
+
import { extractValueOrRelationshipID } from './extractValueOrRelationshipID.js';
|
|
7
|
+
export const handleGroupBy = async ({
|
|
8
|
+
clientCollectionConfig,
|
|
9
|
+
clientConfig,
|
|
10
|
+
collectionConfig,
|
|
11
|
+
collectionSlug,
|
|
12
|
+
columns,
|
|
13
|
+
customCellProps,
|
|
14
|
+
drawerSlug,
|
|
15
|
+
enableRowSelections,
|
|
16
|
+
fieldPermissions,
|
|
17
|
+
query,
|
|
18
|
+
req,
|
|
19
|
+
select,
|
|
20
|
+
trash = false,
|
|
21
|
+
user,
|
|
22
|
+
viewType,
|
|
23
|
+
where: whereWithMergedSearch
|
|
24
|
+
}) => {
|
|
25
|
+
let Table = null;
|
|
26
|
+
let columnState;
|
|
27
|
+
const dataByGroup = {};
|
|
28
|
+
// NOTE: is there a faster/better way to do this?
|
|
29
|
+
const flattenedFields = flattenAllFields({
|
|
30
|
+
fields: collectionConfig.fields
|
|
31
|
+
});
|
|
32
|
+
const groupByFieldPath = query.groupBy.replace(/^-/, '');
|
|
33
|
+
const groupByField = flattenedFields.find(f => f.name === groupByFieldPath);
|
|
34
|
+
// Set up population for relationships
|
|
35
|
+
let populate;
|
|
36
|
+
if (groupByField?.type === 'relationship' && groupByField.relationTo) {
|
|
37
|
+
const relationTo = Array.isArray(groupByField.relationTo) ? groupByField.relationTo : [groupByField.relationTo];
|
|
38
|
+
populate = {};
|
|
39
|
+
relationTo.forEach(rel => {
|
|
40
|
+
const config = clientConfig.collections.find(c => c.slug === rel);
|
|
41
|
+
populate[rel] = {
|
|
42
|
+
[config?.admin?.useAsTitle || 'id']: true
|
|
43
|
+
};
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
const distinct = await req.payload.findDistinct({
|
|
47
|
+
collection: collectionSlug,
|
|
48
|
+
depth: 1,
|
|
49
|
+
field: groupByFieldPath,
|
|
50
|
+
limit: query?.limit ? Number(query.limit) : undefined,
|
|
51
|
+
locale: req.locale,
|
|
52
|
+
overrideAccess: false,
|
|
53
|
+
page: query?.page ? Number(query.page) : undefined,
|
|
54
|
+
populate,
|
|
55
|
+
req,
|
|
56
|
+
sort: query?.groupBy,
|
|
57
|
+
trash,
|
|
58
|
+
where: whereWithMergedSearch
|
|
59
|
+
});
|
|
60
|
+
const data = {
|
|
61
|
+
...distinct,
|
|
62
|
+
docs: distinct.values?.map(() => ({})) || [],
|
|
63
|
+
values: undefined
|
|
64
|
+
};
|
|
65
|
+
await Promise.all((distinct.values || []).map(async (distinctValue, i) => {
|
|
66
|
+
const potentiallyPopulatedRelationship = distinctValue[groupByFieldPath];
|
|
67
|
+
// Extract value or relationship ID for database query
|
|
68
|
+
const valueOrRelationshipID = extractValueOrRelationshipID(potentiallyPopulatedRelationship);
|
|
69
|
+
const groupData = await req.payload.find({
|
|
70
|
+
collection: collectionSlug,
|
|
71
|
+
depth: 0,
|
|
72
|
+
draft: true,
|
|
73
|
+
fallbackLocale: false,
|
|
74
|
+
includeLockStatus: true,
|
|
75
|
+
limit: query?.queryByGroup?.[valueOrRelationshipID]?.limit ? Number(query.queryByGroup[valueOrRelationshipID].limit) : undefined,
|
|
76
|
+
locale: req.locale,
|
|
77
|
+
overrideAccess: false,
|
|
78
|
+
page: query?.queryByGroup?.[valueOrRelationshipID]?.page ? Number(query.queryByGroup[valueOrRelationshipID].page) : undefined,
|
|
79
|
+
req,
|
|
80
|
+
// Note: if we wanted to enable table-by-table sorting, we could use this:
|
|
81
|
+
// sort: query?.queryByGroup?.[valueOrRelationshipID]?.sort,
|
|
82
|
+
select,
|
|
83
|
+
sort: query?.sort,
|
|
84
|
+
trash,
|
|
85
|
+
user,
|
|
86
|
+
where: {
|
|
87
|
+
...(whereWithMergedSearch || {}),
|
|
88
|
+
[groupByFieldPath]: {
|
|
89
|
+
equals: valueOrRelationshipID
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
// Extract heading
|
|
94
|
+
let heading;
|
|
95
|
+
if (potentiallyPopulatedRelationship === null) {
|
|
96
|
+
heading = req.i18n.t('general:noValue');
|
|
97
|
+
} else if (groupByField?.type === 'relationship') {
|
|
98
|
+
const relationshipConfig = Array.isArray(groupByField.relationTo) ? undefined : clientConfig.collections.find(c => c.slug === groupByField.relationTo);
|
|
99
|
+
heading = extractRelationshipDisplayValue(potentiallyPopulatedRelationship, clientConfig, relationshipConfig);
|
|
100
|
+
} else if (groupByField?.type === 'date') {
|
|
101
|
+
heading = formatDate({
|
|
102
|
+
date: String(valueOrRelationshipID),
|
|
103
|
+
i18n: req.i18n,
|
|
104
|
+
pattern: clientConfig.admin.dateFormat
|
|
105
|
+
});
|
|
106
|
+
} else if (groupByField?.type === 'checkbox') {
|
|
107
|
+
if (valueOrRelationshipID === true) {
|
|
108
|
+
heading = req.i18n.t('general:true');
|
|
109
|
+
}
|
|
110
|
+
if (valueOrRelationshipID === false) {
|
|
111
|
+
heading = req.i18n.t('general:false');
|
|
112
|
+
}
|
|
113
|
+
} else {
|
|
114
|
+
heading = String(valueOrRelationshipID);
|
|
115
|
+
}
|
|
116
|
+
// Create serializable value for client
|
|
117
|
+
const serializableValue = createSerializableValue(valueOrRelationshipID);
|
|
118
|
+
if (groupData.docs && groupData.docs.length > 0) {
|
|
119
|
+
const {
|
|
120
|
+
columnState: newColumnState,
|
|
121
|
+
Table: NewTable
|
|
122
|
+
} = renderTable({
|
|
123
|
+
clientCollectionConfig,
|
|
124
|
+
collectionConfig,
|
|
125
|
+
columns,
|
|
126
|
+
customCellProps,
|
|
127
|
+
data: groupData,
|
|
128
|
+
drawerSlug,
|
|
129
|
+
enableRowSelections,
|
|
130
|
+
fieldPermissions,
|
|
131
|
+
groupByFieldPath,
|
|
132
|
+
groupByValue: serializableValue,
|
|
133
|
+
heading: heading || req.i18n.t('general:noValue'),
|
|
134
|
+
i18n: req.i18n,
|
|
135
|
+
key: `table-${serializableValue}`,
|
|
136
|
+
orderableFieldName: collectionConfig.orderable === true ? '_order' : undefined,
|
|
137
|
+
payload: req.payload,
|
|
138
|
+
query,
|
|
139
|
+
useAsTitle: collectionConfig.admin.useAsTitle,
|
|
140
|
+
viewType
|
|
141
|
+
});
|
|
142
|
+
// Only need to set `columnState` once, using the first table's column state
|
|
143
|
+
// This will avoid needing to generate column state explicitly for root context that wraps all tables
|
|
144
|
+
if (!columnState) {
|
|
145
|
+
columnState = newColumnState;
|
|
146
|
+
}
|
|
147
|
+
if (!Table) {
|
|
148
|
+
Table = [];
|
|
149
|
+
}
|
|
150
|
+
dataByGroup[serializableValue] = groupData;
|
|
151
|
+
Table[i] = NewTable;
|
|
152
|
+
}
|
|
153
|
+
}));
|
|
154
|
+
return {
|
|
155
|
+
columnState,
|
|
156
|
+
data,
|
|
157
|
+
Table
|
|
158
|
+
};
|
|
159
|
+
};
|
|
160
|
+
//# sourceMappingURL=handleGroupBy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleGroupBy.js","names":["renderTable","formatDate","flattenAllFields","createSerializableValue","extractRelationshipDisplayValue","extractValueOrRelationshipID","handleGroupBy","clientCollectionConfig","clientConfig","collectionConfig","collectionSlug","columns","customCellProps","drawerSlug","enableRowSelections","fieldPermissions","query","req","select","trash","user","viewType","where","whereWithMergedSearch","Table","columnState","dataByGroup","flattenedFields","fields","groupByFieldPath","groupBy","replace","groupByField","find","f","name","populate","type","relationTo","Array","isArray","forEach","rel","config","collections","c","slug","admin","useAsTitle","distinct","payload","findDistinct","collection","depth","field","limit","Number","undefined","locale","overrideAccess","page","sort","data","docs","values","map","Promise","all","distinctValue","i","potentiallyPopulatedRelationship","valueOrRelationshipID","groupData","draft","fallbackLocale","includeLockStatus","queryByGroup","equals","heading","i18n","t","relationshipConfig","date","String","pattern","dateFormat","serializableValue","length","newColumnState","NewTable","groupByValue","key","orderableFieldName","orderable"],"sources":["../../../src/views/List/handleGroupBy.ts"],"sourcesContent":["import type {\n ClientCollectionConfig,\n ClientConfig,\n Column,\n ListQuery,\n PaginatedDocs,\n PayloadRequest,\n SanitizedCollectionConfig,\n SanitizedFieldsPermissions,\n SelectType,\n ViewTypes,\n Where,\n} from '@ruya.sa/payload'\n\nimport { renderTable } from '@ruya.sa/ui/rsc'\nimport { formatDate } from '@ruya.sa/ui/shared'\nimport { flattenAllFields } from '@ruya.sa/payload'\n\nimport { createSerializableValue } from './createSerializableValue.js'\nimport { extractRelationshipDisplayValue } from './extractRelationshipDisplayValue.js'\nimport { extractValueOrRelationshipID } from './extractValueOrRelationshipID.js'\n\nexport const handleGroupBy = async ({\n clientCollectionConfig,\n clientConfig,\n collectionConfig,\n collectionSlug,\n columns,\n customCellProps,\n drawerSlug,\n enableRowSelections,\n fieldPermissions,\n query,\n req,\n select,\n trash = false,\n user,\n viewType,\n where: whereWithMergedSearch,\n}: {\n clientCollectionConfig: ClientCollectionConfig\n clientConfig: ClientConfig\n collectionConfig: SanitizedCollectionConfig\n collectionSlug: string\n columns: any[]\n customCellProps?: Record<string, any>\n drawerSlug?: string\n enableRowSelections?: boolean\n fieldPermissions?: SanitizedFieldsPermissions\n query?: ListQuery\n req: PayloadRequest\n select?: SelectType\n trash?: boolean\n user: any\n viewType?: ViewTypes\n where: Where\n}): Promise<{\n columnState: Column[]\n data: PaginatedDocs\n Table: null | React.ReactNode | React.ReactNode[]\n}> => {\n let Table: React.ReactNode | React.ReactNode[] = null\n let columnState: Column[]\n\n const dataByGroup: Record<string, PaginatedDocs> = {}\n\n // NOTE: is there a faster/better way to do this?\n const flattenedFields = flattenAllFields({ fields: collectionConfig.fields })\n\n const groupByFieldPath = query.groupBy.replace(/^-/, '')\n\n const groupByField = flattenedFields.find((f) => f.name === groupByFieldPath)\n\n // Set up population for relationships\n let populate\n\n if (groupByField?.type === 'relationship' && groupByField.relationTo) {\n const relationTo = Array.isArray(groupByField.relationTo)\n ? groupByField.relationTo\n : [groupByField.relationTo]\n\n populate = {}\n relationTo.forEach((rel) => {\n const config = clientConfig.collections.find((c) => c.slug === rel)\n populate[rel] = { [config?.admin?.useAsTitle || 'id']: true }\n })\n }\n\n const distinct = await req.payload.findDistinct({\n collection: collectionSlug,\n depth: 1,\n field: groupByFieldPath,\n limit: query?.limit ? Number(query.limit) : undefined,\n locale: req.locale,\n overrideAccess: false,\n page: query?.page ? Number(query.page) : undefined,\n populate,\n req,\n sort: query?.groupBy,\n trash,\n where: whereWithMergedSearch,\n })\n\n const data = {\n ...distinct,\n docs: distinct.values?.map(() => ({})) || [],\n values: undefined,\n }\n\n await Promise.all(\n (distinct.values || []).map(async (distinctValue, i) => {\n const potentiallyPopulatedRelationship = distinctValue[groupByFieldPath]\n\n // Extract value or relationship ID for database query\n const valueOrRelationshipID = extractValueOrRelationshipID(potentiallyPopulatedRelationship)\n\n const groupData = await req.payload.find({\n collection: collectionSlug,\n depth: 0,\n draft: true,\n fallbackLocale: false,\n includeLockStatus: true,\n limit: query?.queryByGroup?.[valueOrRelationshipID]?.limit\n ? Number(query.queryByGroup[valueOrRelationshipID].limit)\n : undefined,\n locale: req.locale,\n overrideAccess: false,\n page: query?.queryByGroup?.[valueOrRelationshipID]?.page\n ? Number(query.queryByGroup[valueOrRelationshipID].page)\n : undefined,\n req,\n // Note: if we wanted to enable table-by-table sorting, we could use this:\n // sort: query?.queryByGroup?.[valueOrRelationshipID]?.sort,\n select,\n sort: query?.sort,\n trash,\n user,\n where: {\n ...(whereWithMergedSearch || {}),\n [groupByFieldPath]: {\n equals: valueOrRelationshipID,\n },\n },\n })\n\n // Extract heading\n let heading: string\n\n if (potentiallyPopulatedRelationship === null) {\n heading = req.i18n.t('general:noValue')\n } else if (groupByField?.type === 'relationship') {\n const relationshipConfig = Array.isArray(groupByField.relationTo)\n ? undefined\n : clientConfig.collections.find((c) => c.slug === groupByField.relationTo)\n heading = extractRelationshipDisplayValue(\n potentiallyPopulatedRelationship,\n clientConfig,\n relationshipConfig,\n )\n } else if (groupByField?.type === 'date') {\n heading = formatDate({\n date: String(valueOrRelationshipID),\n i18n: req.i18n,\n pattern: clientConfig.admin.dateFormat,\n })\n } else if (groupByField?.type === 'checkbox') {\n if (valueOrRelationshipID === true) {\n heading = req.i18n.t('general:true')\n }\n if (valueOrRelationshipID === false) {\n heading = req.i18n.t('general:false')\n }\n } else {\n heading = String(valueOrRelationshipID)\n }\n\n // Create serializable value for client\n const serializableValue = createSerializableValue(valueOrRelationshipID)\n\n if (groupData.docs && groupData.docs.length > 0) {\n const { columnState: newColumnState, Table: NewTable } = renderTable({\n clientCollectionConfig,\n collectionConfig,\n columns,\n customCellProps,\n data: groupData,\n drawerSlug,\n enableRowSelections,\n fieldPermissions,\n groupByFieldPath,\n groupByValue: serializableValue,\n heading: heading || req.i18n.t('general:noValue'),\n i18n: req.i18n,\n key: `table-${serializableValue}`,\n orderableFieldName: collectionConfig.orderable === true ? '_order' : undefined,\n payload: req.payload,\n query,\n useAsTitle: collectionConfig.admin.useAsTitle,\n viewType,\n })\n\n // Only need to set `columnState` once, using the first table's column state\n // This will avoid needing to generate column state explicitly for root context that wraps all tables\n if (!columnState) {\n columnState = newColumnState\n }\n\n if (!Table) {\n Table = []\n }\n\n dataByGroup[serializableValue] = groupData\n ;(Table as Array<React.ReactNode>)[i] = NewTable\n }\n }),\n )\n\n return {\n columnState,\n data,\n Table,\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { getClientConfig } from '@ruya.sa/ui/utilities/getClientConfig';
|
|
2
|
+
import { headers as getHeaders } from 'next/headers.js';
|
|
3
|
+
import { canAccessAdmin, getAccessResults, isEntityHidden, parseCookies, UnauthorizedError } from '@ruya.sa/payload';
|
|
4
|
+
import { applyLocaleFiltering } from '@ruya.sa/payload/shared';
|
|
5
|
+
import { renderListView } from './index.js';
|
|
6
|
+
export const renderListHandler = async args => {
|
|
7
|
+
const {
|
|
8
|
+
collectionSlug,
|
|
9
|
+
disableActions,
|
|
10
|
+
disableBulkDelete,
|
|
11
|
+
disableBulkEdit,
|
|
12
|
+
disableQueryPresets,
|
|
13
|
+
drawerSlug,
|
|
14
|
+
enableRowSelections,
|
|
15
|
+
overrideEntityVisibility,
|
|
16
|
+
query,
|
|
17
|
+
redirectAfterDelete,
|
|
18
|
+
redirectAfterDuplicate,
|
|
19
|
+
req,
|
|
20
|
+
req: {
|
|
21
|
+
i18n,
|
|
22
|
+
payload,
|
|
23
|
+
payload: {
|
|
24
|
+
config
|
|
25
|
+
},
|
|
26
|
+
user
|
|
27
|
+
}
|
|
28
|
+
} = args;
|
|
29
|
+
if (!req.user) {
|
|
30
|
+
throw new UnauthorizedError();
|
|
31
|
+
}
|
|
32
|
+
const headers = await getHeaders();
|
|
33
|
+
const cookies = parseCookies(headers);
|
|
34
|
+
await canAccessAdmin({
|
|
35
|
+
req
|
|
36
|
+
});
|
|
37
|
+
const clientConfig = getClientConfig({
|
|
38
|
+
config,
|
|
39
|
+
i18n,
|
|
40
|
+
importMap: payload.importMap,
|
|
41
|
+
user
|
|
42
|
+
});
|
|
43
|
+
await applyLocaleFiltering({
|
|
44
|
+
clientConfig,
|
|
45
|
+
config,
|
|
46
|
+
req
|
|
47
|
+
});
|
|
48
|
+
const preferencesKey = `collection-${collectionSlug}`;
|
|
49
|
+
const preferences = await payload.find({
|
|
50
|
+
collection: 'payload-preferences',
|
|
51
|
+
depth: 0,
|
|
52
|
+
limit: 1,
|
|
53
|
+
where: {
|
|
54
|
+
and: [{
|
|
55
|
+
key: {
|
|
56
|
+
equals: preferencesKey
|
|
57
|
+
}
|
|
58
|
+
}, {
|
|
59
|
+
'user.relationTo': {
|
|
60
|
+
equals: user.collection
|
|
61
|
+
}
|
|
62
|
+
}, {
|
|
63
|
+
'user.value': {
|
|
64
|
+
equals: user.id
|
|
65
|
+
}
|
|
66
|
+
}]
|
|
67
|
+
}
|
|
68
|
+
}).then(res => res.docs[0]?.value);
|
|
69
|
+
const visibleEntities = {
|
|
70
|
+
collections: payload.config.collections.map(({
|
|
71
|
+
slug,
|
|
72
|
+
admin: {
|
|
73
|
+
hidden
|
|
74
|
+
}
|
|
75
|
+
}) => !isEntityHidden({
|
|
76
|
+
hidden,
|
|
77
|
+
user
|
|
78
|
+
}) ? slug : null).filter(Boolean),
|
|
79
|
+
globals: payload.config.globals.map(({
|
|
80
|
+
slug,
|
|
81
|
+
admin: {
|
|
82
|
+
hidden
|
|
83
|
+
}
|
|
84
|
+
}) => !isEntityHidden({
|
|
85
|
+
hidden,
|
|
86
|
+
user
|
|
87
|
+
}) ? slug : null).filter(Boolean)
|
|
88
|
+
};
|
|
89
|
+
const permissions = await getAccessResults({
|
|
90
|
+
req
|
|
91
|
+
});
|
|
92
|
+
const {
|
|
93
|
+
List
|
|
94
|
+
} = await renderListView({
|
|
95
|
+
clientConfig,
|
|
96
|
+
disableActions,
|
|
97
|
+
disableBulkDelete,
|
|
98
|
+
disableBulkEdit,
|
|
99
|
+
disableQueryPresets,
|
|
100
|
+
drawerSlug,
|
|
101
|
+
enableRowSelections,
|
|
102
|
+
i18n,
|
|
103
|
+
importMap: payload.importMap,
|
|
104
|
+
initPageResult: {
|
|
105
|
+
collectionConfig: payload?.collections?.[collectionSlug]?.config,
|
|
106
|
+
cookies,
|
|
107
|
+
globalConfig: payload.config.globals.find(global => global.slug === collectionSlug),
|
|
108
|
+
languageOptions: undefined,
|
|
109
|
+
permissions,
|
|
110
|
+
req,
|
|
111
|
+
translations: undefined,
|
|
112
|
+
visibleEntities
|
|
113
|
+
},
|
|
114
|
+
overrideEntityVisibility,
|
|
115
|
+
params: {
|
|
116
|
+
segments: ['collections', collectionSlug]
|
|
117
|
+
},
|
|
118
|
+
payload,
|
|
119
|
+
query,
|
|
120
|
+
redirectAfterDelete,
|
|
121
|
+
redirectAfterDuplicate,
|
|
122
|
+
searchParams: {},
|
|
123
|
+
viewType: 'list'
|
|
124
|
+
});
|
|
125
|
+
return {
|
|
126
|
+
List,
|
|
127
|
+
preferences
|
|
128
|
+
};
|
|
129
|
+
};
|
|
130
|
+
//# sourceMappingURL=handleServerFunction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleServerFunction.js","names":["getClientConfig","headers","getHeaders","canAccessAdmin","getAccessResults","isEntityHidden","parseCookies","UnauthorizedError","applyLocaleFiltering","renderListView","renderListHandler","args","collectionSlug","disableActions","disableBulkDelete","disableBulkEdit","disableQueryPresets","drawerSlug","enableRowSelections","overrideEntityVisibility","query","redirectAfterDelete","redirectAfterDuplicate","req","i18n","payload","config","user","cookies","clientConfig","importMap","preferencesKey","preferences","find","collection","depth","limit","where","and","key","equals","id","then","res","docs","value","visibleEntities","collections","map","slug","admin","hidden","filter","Boolean","globals","permissions","List","initPageResult","collectionConfig","globalConfig","global","languageOptions","undefined","translations","params","segments","searchParams","viewType"],"sources":["../../../src/views/List/handleServerFunction.tsx"],"sourcesContent":["import type { RenderListServerFnArgs, RenderListServerFnReturnType } from '@ruya.sa/ui'\nimport type { CollectionPreferences, ServerFunction, VisibleEntities } from '@ruya.sa/payload'\n\nimport { getClientConfig } from '@ruya.sa/ui/utilities/getClientConfig'\nimport { headers as getHeaders } from 'next/headers.js'\nimport {\n canAccessAdmin,\n getAccessResults,\n isEntityHidden,\n parseCookies,\n UnauthorizedError,\n} from '@ruya.sa/payload'\nimport { applyLocaleFiltering } from '@ruya.sa/payload/shared'\n\nimport { renderListView } from './index.js'\n\nexport const renderListHandler: ServerFunction<\n RenderListServerFnArgs,\n Promise<RenderListServerFnReturnType>\n> = async (args) => {\n const {\n collectionSlug,\n disableActions,\n disableBulkDelete,\n disableBulkEdit,\n disableQueryPresets,\n drawerSlug,\n enableRowSelections,\n overrideEntityVisibility,\n query,\n redirectAfterDelete,\n redirectAfterDuplicate,\n req,\n req: {\n i18n,\n payload,\n payload: { config },\n user,\n },\n } = args\n\n if (!req.user) {\n throw new UnauthorizedError()\n }\n\n const headers = await getHeaders()\n\n const cookies = parseCookies(headers)\n\n await canAccessAdmin({ req })\n\n const clientConfig = getClientConfig({\n config,\n i18n,\n importMap: payload.importMap,\n user,\n })\n await applyLocaleFiltering({ clientConfig, config, req })\n\n const preferencesKey = `collection-${collectionSlug}`\n\n const preferences = await payload\n .find({\n collection: 'payload-preferences',\n depth: 0,\n limit: 1,\n where: {\n and: [\n {\n key: {\n equals: preferencesKey,\n },\n },\n {\n 'user.relationTo': {\n equals: user.collection,\n },\n },\n {\n 'user.value': {\n equals: user.id,\n },\n },\n ],\n },\n })\n .then((res) => res.docs[0]?.value as CollectionPreferences)\n\n const visibleEntities: VisibleEntities = {\n collections: payload.config.collections\n .map(({ slug, admin: { hidden } }) => (!isEntityHidden({ hidden, user }) ? slug : null))\n .filter(Boolean),\n globals: payload.config.globals\n .map(({ slug, admin: { hidden } }) => (!isEntityHidden({ hidden, user }) ? slug : null))\n .filter(Boolean),\n }\n\n const permissions = await getAccessResults({\n req,\n })\n\n const { List } = await renderListView({\n clientConfig,\n disableActions,\n disableBulkDelete,\n disableBulkEdit,\n disableQueryPresets,\n drawerSlug,\n enableRowSelections,\n i18n,\n importMap: payload.importMap,\n initPageResult: {\n collectionConfig: payload?.collections?.[collectionSlug]?.config,\n cookies,\n globalConfig: payload.config.globals.find((global) => global.slug === collectionSlug),\n languageOptions: undefined, // TODO\n permissions,\n req,\n translations: undefined, // TODO\n visibleEntities,\n },\n overrideEntityVisibility,\n params: {\n segments: ['collections', collectionSlug],\n },\n payload,\n query,\n redirectAfterDelete,\n redirectAfterDuplicate,\n searchParams: {},\n viewType: 'list',\n })\n\n return {\n List,\n preferences,\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { DefaultListView, HydrateAuthProvider, ListQueryProvider } from '@ruya.sa/ui';
|
|
3
|
+
import { RenderServerComponent } from '@ruya.sa/ui/elements/RenderServerComponent';
|
|
4
|
+
import { getColumns, renderFilters, renderTable, upsertPreferences } from '@ruya.sa/ui/rsc';
|
|
5
|
+
import { notFound } from 'next/navigation.js';
|
|
6
|
+
import { appendUploadSelectFields, combineWhereConstraints, formatAdminURL, isNumber, mergeListSearchAndWhere, transformColumnsToPreferences, transformColumnsToSearchParams } from '@ruya.sa/payload/shared';
|
|
7
|
+
import React, { Fragment } from 'react';
|
|
8
|
+
import { getDocumentPermissions } from '../Document/getDocumentPermissions.js';
|
|
9
|
+
import { enrichDocsWithVersionStatus } from './enrichDocsWithVersionStatus.js';
|
|
10
|
+
import { handleGroupBy } from './handleGroupBy.js';
|
|
11
|
+
import { renderListViewSlots } from './renderListViewSlots.js';
|
|
12
|
+
import { resolveAllFilterOptions } from './resolveAllFilterOptions.js';
|
|
13
|
+
import { transformColumnsToSelect } from './transformColumnsToSelect.js';
|
|
14
|
+
/**
|
|
15
|
+
* This function is responsible for rendering
|
|
16
|
+
* the list view on the server for both:
|
|
17
|
+
* - default list view
|
|
18
|
+
* - list view within drawers
|
|
19
|
+
*
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
22
|
+
export const renderListView = async args => {
|
|
23
|
+
const {
|
|
24
|
+
clientConfig,
|
|
25
|
+
ComponentOverride,
|
|
26
|
+
customCellProps,
|
|
27
|
+
disableBulkDelete,
|
|
28
|
+
disableBulkEdit,
|
|
29
|
+
disableQueryPresets,
|
|
30
|
+
drawerSlug,
|
|
31
|
+
enableRowSelections,
|
|
32
|
+
initPageResult,
|
|
33
|
+
overrideEntityVisibility,
|
|
34
|
+
params,
|
|
35
|
+
query: queryFromArgs,
|
|
36
|
+
searchParams,
|
|
37
|
+
trash,
|
|
38
|
+
viewType
|
|
39
|
+
} = args;
|
|
40
|
+
const {
|
|
41
|
+
collectionConfig,
|
|
42
|
+
collectionConfig: {
|
|
43
|
+
slug: collectionSlug
|
|
44
|
+
},
|
|
45
|
+
locale: fullLocale,
|
|
46
|
+
permissions,
|
|
47
|
+
req,
|
|
48
|
+
req: {
|
|
49
|
+
i18n,
|
|
50
|
+
payload,
|
|
51
|
+
payload: {
|
|
52
|
+
config
|
|
53
|
+
},
|
|
54
|
+
query: queryFromReq,
|
|
55
|
+
user
|
|
56
|
+
},
|
|
57
|
+
visibleEntities
|
|
58
|
+
} = initPageResult;
|
|
59
|
+
if (!permissions?.collections?.[collectionSlug]?.read) {
|
|
60
|
+
throw new Error('not-found');
|
|
61
|
+
}
|
|
62
|
+
const query = queryFromArgs || queryFromReq;
|
|
63
|
+
const columnsFromQuery = transformColumnsToPreferences(query?.columns);
|
|
64
|
+
query.queryByGroup = query?.queryByGroup && typeof query.queryByGroup === 'string' ? JSON.parse(query.queryByGroup) : query?.queryByGroup;
|
|
65
|
+
const collectionPreferences = await upsertPreferences({
|
|
66
|
+
key: `collection-${collectionSlug}`,
|
|
67
|
+
req,
|
|
68
|
+
value: {
|
|
69
|
+
columns: columnsFromQuery,
|
|
70
|
+
groupBy: query?.groupBy,
|
|
71
|
+
limit: isNumber(query?.limit) ? Number(query.limit) : undefined,
|
|
72
|
+
preset: query?.preset,
|
|
73
|
+
sort: query?.sort
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
query.preset = collectionPreferences?.preset;
|
|
77
|
+
query.page = isNumber(query?.page) ? Number(query.page) : 0;
|
|
78
|
+
query.limit = collectionPreferences?.limit || collectionConfig.admin.pagination.defaultLimit;
|
|
79
|
+
query.sort = collectionPreferences?.sort || (typeof collectionConfig.defaultSort === 'string' ? collectionConfig.defaultSort : undefined);
|
|
80
|
+
query.groupBy = collectionPreferences?.groupBy;
|
|
81
|
+
query.columns = transformColumnsToSearchParams(collectionPreferences?.columns || []);
|
|
82
|
+
const {
|
|
83
|
+
routes: {
|
|
84
|
+
admin: adminRoute
|
|
85
|
+
}
|
|
86
|
+
} = config;
|
|
87
|
+
if (collectionConfig) {
|
|
88
|
+
if (!visibleEntities.collections.includes(collectionSlug) && !overrideEntityVisibility) {
|
|
89
|
+
throw new Error('not-found');
|
|
90
|
+
}
|
|
91
|
+
const baseFilterConstraint = await (collectionConfig.admin?.baseFilter ?? collectionConfig.admin?.baseListFilter)?.({
|
|
92
|
+
limit: query.limit,
|
|
93
|
+
page: query.page,
|
|
94
|
+
req,
|
|
95
|
+
sort: query.sort
|
|
96
|
+
});
|
|
97
|
+
let queryPreset;
|
|
98
|
+
let queryPresetPermissions;
|
|
99
|
+
let whereWithMergedSearch = mergeListSearchAndWhere({
|
|
100
|
+
collectionConfig,
|
|
101
|
+
search: typeof query?.search === 'string' ? query.search : undefined,
|
|
102
|
+
where: combineWhereConstraints([query?.where, baseFilterConstraint])
|
|
103
|
+
});
|
|
104
|
+
if (trash === true) {
|
|
105
|
+
whereWithMergedSearch = {
|
|
106
|
+
and: [whereWithMergedSearch, {
|
|
107
|
+
deletedAt: {
|
|
108
|
+
exists: true
|
|
109
|
+
}
|
|
110
|
+
}]
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
if (collectionPreferences?.preset) {
|
|
114
|
+
try {
|
|
115
|
+
queryPreset = await payload.findByID({
|
|
116
|
+
id: collectionPreferences?.preset,
|
|
117
|
+
collection: 'payload-query-presets',
|
|
118
|
+
depth: 0,
|
|
119
|
+
overrideAccess: false,
|
|
120
|
+
user
|
|
121
|
+
});
|
|
122
|
+
if (queryPreset) {
|
|
123
|
+
queryPresetPermissions = await getDocumentPermissions({
|
|
124
|
+
id: queryPreset.id,
|
|
125
|
+
collectionConfig: config.collections.find(c => c.slug === 'payload-query-presets'),
|
|
126
|
+
data: queryPreset,
|
|
127
|
+
req
|
|
128
|
+
})?.then(({
|
|
129
|
+
docPermissions
|
|
130
|
+
}) => docPermissions);
|
|
131
|
+
}
|
|
132
|
+
} catch (err) {
|
|
133
|
+
req.payload.logger.error(`Error fetching query preset or preset permissions: ${err}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
let Table = null;
|
|
137
|
+
let columnState = [];
|
|
138
|
+
let data = {
|
|
139
|
+
// no results default
|
|
140
|
+
docs: [],
|
|
141
|
+
hasNextPage: false,
|
|
142
|
+
hasPrevPage: false,
|
|
143
|
+
limit: query.limit,
|
|
144
|
+
nextPage: null,
|
|
145
|
+
page: 1,
|
|
146
|
+
pagingCounter: 0,
|
|
147
|
+
prevPage: null,
|
|
148
|
+
totalDocs: 0,
|
|
149
|
+
totalPages: 0
|
|
150
|
+
};
|
|
151
|
+
const clientCollectionConfig = clientConfig.collections.find(c => c.slug === collectionSlug);
|
|
152
|
+
const columns = getColumns({
|
|
153
|
+
clientConfig,
|
|
154
|
+
collectionConfig: clientCollectionConfig,
|
|
155
|
+
collectionSlug,
|
|
156
|
+
columns: collectionPreferences?.columns,
|
|
157
|
+
i18n,
|
|
158
|
+
permissions
|
|
159
|
+
});
|
|
160
|
+
const select = collectionConfig.admin.enableListViewSelectAPI ? transformColumnsToSelect(columns) : undefined;
|
|
161
|
+
/** Force select image fields for list view thumbnails */
|
|
162
|
+
appendUploadSelectFields({
|
|
163
|
+
collectionConfig,
|
|
164
|
+
select
|
|
165
|
+
});
|
|
166
|
+
try {
|
|
167
|
+
if (collectionConfig.admin.groupBy && query.groupBy) {
|
|
168
|
+
({
|
|
169
|
+
columnState,
|
|
170
|
+
data,
|
|
171
|
+
Table
|
|
172
|
+
} = await handleGroupBy({
|
|
173
|
+
clientCollectionConfig,
|
|
174
|
+
clientConfig,
|
|
175
|
+
collectionConfig,
|
|
176
|
+
collectionSlug,
|
|
177
|
+
columns,
|
|
178
|
+
customCellProps,
|
|
179
|
+
drawerSlug,
|
|
180
|
+
enableRowSelections,
|
|
181
|
+
fieldPermissions: permissions?.collections?.[collectionSlug]?.fields,
|
|
182
|
+
query,
|
|
183
|
+
req,
|
|
184
|
+
select,
|
|
185
|
+
trash,
|
|
186
|
+
user,
|
|
187
|
+
viewType,
|
|
188
|
+
where: whereWithMergedSearch
|
|
189
|
+
}));
|
|
190
|
+
// Enrich documents with correct display status for drafts
|
|
191
|
+
data = await enrichDocsWithVersionStatus({
|
|
192
|
+
collectionConfig,
|
|
193
|
+
data,
|
|
194
|
+
req
|
|
195
|
+
});
|
|
196
|
+
} else {
|
|
197
|
+
data = await req.payload.find({
|
|
198
|
+
collection: collectionSlug,
|
|
199
|
+
depth: 0,
|
|
200
|
+
draft: true,
|
|
201
|
+
fallbackLocale: false,
|
|
202
|
+
includeLockStatus: true,
|
|
203
|
+
limit: query?.limit ? Number(query.limit) : undefined,
|
|
204
|
+
locale: req.locale,
|
|
205
|
+
overrideAccess: false,
|
|
206
|
+
page: query?.page ? Number(query.page) : undefined,
|
|
207
|
+
req,
|
|
208
|
+
select,
|
|
209
|
+
sort: query?.sort,
|
|
210
|
+
trash,
|
|
211
|
+
user,
|
|
212
|
+
where: whereWithMergedSearch
|
|
213
|
+
});
|
|
214
|
+
// Enrich documents with correct display status for drafts
|
|
215
|
+
data = await enrichDocsWithVersionStatus({
|
|
216
|
+
collectionConfig,
|
|
217
|
+
data,
|
|
218
|
+
req
|
|
219
|
+
});
|
|
220
|
+
({
|
|
221
|
+
columnState,
|
|
222
|
+
Table
|
|
223
|
+
} = renderTable({
|
|
224
|
+
clientCollectionConfig,
|
|
225
|
+
collectionConfig,
|
|
226
|
+
columns,
|
|
227
|
+
customCellProps,
|
|
228
|
+
data,
|
|
229
|
+
drawerSlug,
|
|
230
|
+
enableRowSelections,
|
|
231
|
+
fieldPermissions: permissions?.collections?.[collectionSlug]?.fields,
|
|
232
|
+
i18n: req.i18n,
|
|
233
|
+
orderableFieldName: collectionConfig.orderable === true ? '_order' : undefined,
|
|
234
|
+
payload: req.payload,
|
|
235
|
+
query,
|
|
236
|
+
req,
|
|
237
|
+
useAsTitle: collectionConfig.admin.useAsTitle,
|
|
238
|
+
viewType
|
|
239
|
+
}));
|
|
240
|
+
}
|
|
241
|
+
} catch (err) {
|
|
242
|
+
if (err.name !== 'QueryError') {
|
|
243
|
+
// QueryErrors are expected when a user filters by a field they do not have access to
|
|
244
|
+
req.payload.logger.error({
|
|
245
|
+
err,
|
|
246
|
+
msg: `There was an error fetching the list view data for collection ${collectionSlug}`
|
|
247
|
+
});
|
|
248
|
+
throw err;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
const renderedFilters = renderFilters(collectionConfig.fields, req.payload.importMap);
|
|
252
|
+
const resolvedFilterOptions = await resolveAllFilterOptions({
|
|
253
|
+
fields: collectionConfig.fields,
|
|
254
|
+
req
|
|
255
|
+
});
|
|
256
|
+
const staticDescription = typeof collectionConfig.admin.description === 'function' ? collectionConfig.admin.description({
|
|
257
|
+
t: i18n.t
|
|
258
|
+
}) : collectionConfig.admin.description;
|
|
259
|
+
const newDocumentURL = formatAdminURL({
|
|
260
|
+
adminRoute,
|
|
261
|
+
path: `/collections/${collectionSlug}/create`
|
|
262
|
+
});
|
|
263
|
+
const hasCreatePermission = permissions?.collections?.[collectionSlug]?.create;
|
|
264
|
+
const hasDeletePermission = permissions?.collections?.[collectionSlug]?.delete;
|
|
265
|
+
// Check if there's a notFound query parameter (document ID that wasn't found)
|
|
266
|
+
const notFoundDocId = typeof searchParams?.notFound === 'string' ? searchParams.notFound : null;
|
|
267
|
+
const serverProps = {
|
|
268
|
+
collectionConfig,
|
|
269
|
+
data,
|
|
270
|
+
i18n,
|
|
271
|
+
limit: query.limit,
|
|
272
|
+
listPreferences: collectionPreferences,
|
|
273
|
+
listSearchableFields: collectionConfig.admin.listSearchableFields,
|
|
274
|
+
locale: fullLocale,
|
|
275
|
+
params,
|
|
276
|
+
payload,
|
|
277
|
+
permissions,
|
|
278
|
+
searchParams,
|
|
279
|
+
user
|
|
280
|
+
};
|
|
281
|
+
const listViewSlots = renderListViewSlots({
|
|
282
|
+
clientProps: {
|
|
283
|
+
collectionSlug,
|
|
284
|
+
hasCreatePermission,
|
|
285
|
+
hasDeletePermission,
|
|
286
|
+
newDocumentURL
|
|
287
|
+
},
|
|
288
|
+
collectionConfig,
|
|
289
|
+
description: staticDescription,
|
|
290
|
+
notFoundDocId,
|
|
291
|
+
payload,
|
|
292
|
+
serverProps
|
|
293
|
+
});
|
|
294
|
+
const isInDrawer = Boolean(drawerSlug);
|
|
295
|
+
// Needed to prevent: Only plain objects can be passed to Client Components from Server Components. Objects with toJSON methods are not supported. Convert it manually to a simple value before passing it to props.
|
|
296
|
+
// Is there a way to avoid this? The `where` object is already seemingly plain, but is not bc it originates from the params.
|
|
297
|
+
query.where = query?.where ? JSON.parse(JSON.stringify(query?.where || {})) : undefined;
|
|
298
|
+
return {
|
|
299
|
+
List: /*#__PURE__*/_jsxs(Fragment, {
|
|
300
|
+
children: [/*#__PURE__*/_jsx(HydrateAuthProvider, {
|
|
301
|
+
permissions: permissions
|
|
302
|
+
}), /*#__PURE__*/_jsx(ListQueryProvider, {
|
|
303
|
+
collectionSlug: collectionSlug,
|
|
304
|
+
data: data,
|
|
305
|
+
modifySearchParams: !isInDrawer,
|
|
306
|
+
orderableFieldName: collectionConfig.orderable === true ? '_order' : undefined,
|
|
307
|
+
query: query,
|
|
308
|
+
children: RenderServerComponent({
|
|
309
|
+
clientProps: {
|
|
310
|
+
...listViewSlots,
|
|
311
|
+
collectionSlug,
|
|
312
|
+
columnState,
|
|
313
|
+
disableBulkDelete,
|
|
314
|
+
disableBulkEdit: collectionConfig.disableBulkEdit ?? disableBulkEdit,
|
|
315
|
+
disableQueryPresets,
|
|
316
|
+
enableRowSelections,
|
|
317
|
+
hasCreatePermission,
|
|
318
|
+
hasDeletePermission,
|
|
319
|
+
listPreferences: collectionPreferences,
|
|
320
|
+
newDocumentURL,
|
|
321
|
+
queryPreset,
|
|
322
|
+
queryPresetPermissions,
|
|
323
|
+
renderedFilters,
|
|
324
|
+
resolvedFilterOptions,
|
|
325
|
+
Table,
|
|
326
|
+
viewType
|
|
327
|
+
},
|
|
328
|
+
Component: ComponentOverride ?? collectionConfig?.admin?.components?.views?.list?.Component,
|
|
329
|
+
Fallback: DefaultListView,
|
|
330
|
+
importMap: payload.importMap,
|
|
331
|
+
serverProps
|
|
332
|
+
})
|
|
333
|
+
})]
|
|
334
|
+
})
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
throw new Error('not-found');
|
|
338
|
+
};
|
|
339
|
+
export const ListView = async args => {
|
|
340
|
+
try {
|
|
341
|
+
const {
|
|
342
|
+
List: RenderedList
|
|
343
|
+
} = await renderListView({
|
|
344
|
+
...args,
|
|
345
|
+
enableRowSelections: true
|
|
346
|
+
});
|
|
347
|
+
return RenderedList;
|
|
348
|
+
} catch (error) {
|
|
349
|
+
if (error.message === 'not-found') {
|
|
350
|
+
notFound();
|
|
351
|
+
} else {
|
|
352
|
+
console.error(error); // eslint-disable-line no-console
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
};
|
|
356
|
+
//# sourceMappingURL=index.js.map
|