@akbarsafari00/bonyan-content-releases 5.52.1-fa.2
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 +17 -0
- package/README.md +9 -0
- package/dist/admin/assets/purchase-page-illustration-dark.jpg.js +6 -0
- package/dist/admin/assets/purchase-page-illustration-dark.jpg.js.map +1 -0
- package/dist/admin/assets/purchase-page-illustration-dark.jpg.mjs +4 -0
- package/dist/admin/assets/purchase-page-illustration-dark.jpg.mjs.map +1 -0
- package/dist/admin/assets/purchase-page-illustration-light.jpg.js +6 -0
- package/dist/admin/assets/purchase-page-illustration-light.jpg.js.map +1 -0
- package/dist/admin/assets/purchase-page-illustration-light.jpg.mjs +4 -0
- package/dist/admin/assets/purchase-page-illustration-light.jpg.mjs.map +1 -0
- package/dist/admin/components/EntryValidationPopover.js +310 -0
- package/dist/admin/components/EntryValidationPopover.js.map +1 -0
- package/dist/admin/components/EntryValidationPopover.mjs +308 -0
- package/dist/admin/components/EntryValidationPopover.mjs.map +1 -0
- package/dist/admin/components/RelativeTime.js +77 -0
- package/dist/admin/components/RelativeTime.js.map +1 -0
- package/dist/admin/components/RelativeTime.mjs +55 -0
- package/dist/admin/components/RelativeTime.mjs.map +1 -0
- package/dist/admin/components/ReleaseAction.js +203 -0
- package/dist/admin/components/ReleaseAction.js.map +1 -0
- package/dist/admin/components/ReleaseAction.mjs +201 -0
- package/dist/admin/components/ReleaseAction.mjs.map +1 -0
- package/dist/admin/components/ReleaseActionMenu.js +194 -0
- package/dist/admin/components/ReleaseActionMenu.js.map +1 -0
- package/dist/admin/components/ReleaseActionMenu.mjs +172 -0
- package/dist/admin/components/ReleaseActionMenu.mjs.map +1 -0
- package/dist/admin/components/ReleaseActionModal.js +269 -0
- package/dist/admin/components/ReleaseActionModal.js.map +1 -0
- package/dist/admin/components/ReleaseActionModal.mjs +244 -0
- package/dist/admin/components/ReleaseActionModal.mjs.map +1 -0
- package/dist/admin/components/ReleaseActionOptions.js +104 -0
- package/dist/admin/components/ReleaseActionOptions.js.map +1 -0
- package/dist/admin/components/ReleaseActionOptions.mjs +102 -0
- package/dist/admin/components/ReleaseActionOptions.mjs.map +1 -0
- package/dist/admin/components/ReleaseListCell.js +109 -0
- package/dist/admin/components/ReleaseListCell.js.map +1 -0
- package/dist/admin/components/ReleaseListCell.mjs +106 -0
- package/dist/admin/components/ReleaseListCell.mjs.map +1 -0
- package/dist/admin/components/ReleaseModal.js +332 -0
- package/dist/admin/components/ReleaseModal.js.map +1 -0
- package/dist/admin/components/ReleaseModal.mjs +310 -0
- package/dist/admin/components/ReleaseModal.mjs.map +1 -0
- package/dist/admin/components/ReleasesPanel.js +138 -0
- package/dist/admin/components/ReleasesPanel.js.map +1 -0
- package/dist/admin/components/ReleasesPanel.mjs +136 -0
- package/dist/admin/components/ReleasesPanel.mjs.map +1 -0
- package/dist/admin/components/Widgets.js +122 -0
- package/dist/admin/components/Widgets.js.map +1 -0
- package/dist/admin/components/Widgets.mjs +120 -0
- package/dist/admin/components/Widgets.mjs.map +1 -0
- package/dist/admin/constants.js +79 -0
- package/dist/admin/constants.js.map +1 -0
- package/dist/admin/constants.mjs +76 -0
- package/dist/admin/constants.mjs.map +1 -0
- package/dist/admin/index.js +155 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/index.mjs +151 -0
- package/dist/admin/index.mjs.map +1 -0
- package/dist/admin/modules/hooks.js +8 -0
- package/dist/admin/modules/hooks.js.map +1 -0
- package/dist/admin/modules/hooks.mjs +6 -0
- package/dist/admin/modules/hooks.mjs.map +1 -0
- package/dist/admin/pages/App.js +29 -0
- package/dist/admin/pages/App.js.map +1 -0
- package/dist/admin/pages/App.mjs +27 -0
- package/dist/admin/pages/App.mjs.map +1 -0
- package/dist/admin/pages/PurchaseContentReleases.js +192 -0
- package/dist/admin/pages/PurchaseContentReleases.js.map +1 -0
- package/dist/admin/pages/PurchaseContentReleases.mjs +190 -0
- package/dist/admin/pages/PurchaseContentReleases.mjs.map +1 -0
- package/dist/admin/pages/ReleaseDetailsPage.js +780 -0
- package/dist/admin/pages/ReleaseDetailsPage.js.map +1 -0
- package/dist/admin/pages/ReleaseDetailsPage.mjs +755 -0
- package/dist/admin/pages/ReleaseDetailsPage.mjs.map +1 -0
- package/dist/admin/pages/ReleasesPage.js +407 -0
- package/dist/admin/pages/ReleasesPage.js.map +1 -0
- package/dist/admin/pages/ReleasesPage.mjs +384 -0
- package/dist/admin/pages/ReleasesPage.mjs.map +1 -0
- package/dist/admin/pages/ReleasesSettingsPage.js +226 -0
- package/dist/admin/pages/ReleasesSettingsPage.js.map +1 -0
- package/dist/admin/pages/ReleasesSettingsPage.mjs +224 -0
- package/dist/admin/pages/ReleasesSettingsPage.mjs.map +1 -0
- package/dist/admin/pluginId.js +6 -0
- package/dist/admin/pluginId.js.map +1 -0
- package/dist/admin/pluginId.mjs +4 -0
- package/dist/admin/pluginId.mjs.map +1 -0
- package/dist/admin/services/homepage.js +24 -0
- package/dist/admin/services/homepage.js.map +1 -0
- package/dist/admin/services/homepage.mjs +22 -0
- package/dist/admin/services/homepage.mjs.map +1 -0
- package/dist/admin/services/release.js +473 -0
- package/dist/admin/services/release.js.map +1 -0
- package/dist/admin/services/release.mjs +456 -0
- package/dist/admin/services/release.mjs.map +1 -0
- package/dist/admin/src/components/EntryValidationPopover.d.ts +13 -0
- package/dist/admin/src/components/RelativeTime.d.ts +28 -0
- package/dist/admin/src/components/ReleaseAction.d.ts +3 -0
- package/dist/admin/src/components/ReleaseActionMenu.d.ts +26 -0
- package/dist/admin/src/components/ReleaseActionModal.d.ts +24 -0
- package/dist/admin/src/components/ReleaseActionOptions.d.ts +9 -0
- package/dist/admin/src/components/ReleaseListCell.d.ts +28 -0
- package/dist/admin/src/components/ReleaseModal.d.ts +17 -0
- package/dist/admin/src/components/ReleasesPanel.d.ts +3 -0
- package/dist/admin/src/components/Widgets.d.ts +2 -0
- package/dist/admin/src/constants.d.ts +77 -0
- package/dist/admin/src/index.d.ts +3 -0
- package/dist/admin/src/modules/hooks.d.ts +7 -0
- package/dist/admin/src/pages/App.d.ts +1 -0
- package/dist/admin/src/pages/PurchaseContentReleases.d.ts +2 -0
- package/dist/admin/src/pages/ReleaseDetailsPage.d.ts +2 -0
- package/dist/admin/src/pages/ReleasesPage.d.ts +8 -0
- package/dist/admin/src/pages/ReleasesSettingsPage.d.ts +1 -0
- package/dist/admin/src/pages/tests/mockReleaseDetailsPageData.d.ts +181 -0
- package/dist/admin/src/pages/tests/mockReleasesPageData.d.ts +39 -0
- package/dist/admin/src/pluginId.d.ts +1 -0
- package/dist/admin/src/services/homepage.d.ts +9 -0
- package/dist/admin/src/services/release.d.ts +112 -0
- package/dist/admin/src/store/hooks.d.ts +7 -0
- package/dist/admin/src/utils/api.d.ts +6 -0
- package/dist/admin/src/utils/prefixPluginTranslations.d.ts +3 -0
- package/dist/admin/src/utils/time.d.ts +10 -0
- package/dist/admin/src/validation/schemas.d.ts +6 -0
- package/dist/admin/store/hooks.js +8 -0
- package/dist/admin/store/hooks.js.map +1 -0
- package/dist/admin/store/hooks.mjs +6 -0
- package/dist/admin/store/hooks.mjs.map +1 -0
- package/dist/admin/translations/cs.json.js +111 -0
- package/dist/admin/translations/cs.json.js.map +1 -0
- package/dist/admin/translations/cs.json.mjs +109 -0
- package/dist/admin/translations/cs.json.mjs.map +1 -0
- package/dist/admin/translations/en.json.js +111 -0
- package/dist/admin/translations/en.json.js.map +1 -0
- package/dist/admin/translations/en.json.mjs +109 -0
- package/dist/admin/translations/en.json.mjs.map +1 -0
- package/dist/admin/translations/es.json.js +103 -0
- package/dist/admin/translations/es.json.js.map +1 -0
- package/dist/admin/translations/es.json.mjs +101 -0
- package/dist/admin/translations/es.json.mjs.map +1 -0
- package/dist/admin/translations/fa.json.js +111 -0
- package/dist/admin/translations/fa.json.js.map +1 -0
- package/dist/admin/translations/fa.json.mjs +109 -0
- package/dist/admin/translations/fa.json.mjs.map +1 -0
- package/dist/admin/translations/ja.json.js +111 -0
- package/dist/admin/translations/ja.json.js.map +1 -0
- package/dist/admin/translations/ja.json.mjs +109 -0
- package/dist/admin/translations/ja.json.mjs.map +1 -0
- package/dist/admin/translations/ko.json.js +111 -0
- package/dist/admin/translations/ko.json.js.map +1 -0
- package/dist/admin/translations/ko.json.mjs +109 -0
- package/dist/admin/translations/ko.json.mjs.map +1 -0
- package/dist/admin/translations/nl.json.js +111 -0
- package/dist/admin/translations/nl.json.js.map +1 -0
- package/dist/admin/translations/nl.json.mjs +109 -0
- package/dist/admin/translations/nl.json.mjs.map +1 -0
- package/dist/admin/translations/pl.json.js +111 -0
- package/dist/admin/translations/pl.json.js.map +1 -0
- package/dist/admin/translations/pl.json.mjs +109 -0
- package/dist/admin/translations/pl.json.mjs.map +1 -0
- package/dist/admin/translations/sk.json.js +111 -0
- package/dist/admin/translations/sk.json.js.map +1 -0
- package/dist/admin/translations/sk.json.mjs +109 -0
- package/dist/admin/translations/sk.json.mjs.map +1 -0
- package/dist/admin/translations/uk.json.js +103 -0
- package/dist/admin/translations/uk.json.js.map +1 -0
- package/dist/admin/translations/uk.json.mjs +101 -0
- package/dist/admin/translations/uk.json.mjs.map +1 -0
- package/dist/admin/utils/api.js +8 -0
- package/dist/admin/utils/api.js.map +1 -0
- package/dist/admin/utils/api.mjs +6 -0
- package/dist/admin/utils/api.mjs.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.js +11 -0
- package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
- package/dist/admin/utils/time.js +42 -0
- package/dist/admin/utils/time.js.map +1 -0
- package/dist/admin/utils/time.mjs +39 -0
- package/dist/admin/utils/time.mjs.map +1 -0
- package/dist/admin/validation/schemas.js +66 -0
- package/dist/admin/validation/schemas.js.map +1 -0
- package/dist/admin/validation/schemas.mjs +43 -0
- package/dist/admin/validation/schemas.mjs.map +1 -0
- package/dist/server/bootstrap.js +68 -0
- package/dist/server/bootstrap.js.map +1 -0
- package/dist/server/bootstrap.mjs +66 -0
- package/dist/server/bootstrap.mjs.map +1 -0
- package/dist/server/constants.js +74 -0
- package/dist/server/constants.js.map +1 -0
- package/dist/server/constants.mjs +69 -0
- package/dist/server/constants.mjs.map +1 -0
- package/dist/server/content-types/index.js +12 -0
- package/dist/server/content-types/index.js.map +1 -0
- package/dist/server/content-types/index.mjs +10 -0
- package/dist/server/content-types/index.mjs.map +1 -0
- package/dist/server/content-types/release/index.js +10 -0
- package/dist/server/content-types/release/index.js.map +1 -0
- package/dist/server/content-types/release/index.mjs +8 -0
- package/dist/server/content-types/release/index.mjs.map +1 -0
- package/dist/server/content-types/release/schema.js +58 -0
- package/dist/server/content-types/release/schema.js.map +1 -0
- package/dist/server/content-types/release/schema.mjs +56 -0
- package/dist/server/content-types/release/schema.mjs.map +1 -0
- package/dist/server/content-types/release-action/index.js +10 -0
- package/dist/server/content-types/release-action/index.js.map +1 -0
- package/dist/server/content-types/release-action/index.mjs +8 -0
- package/dist/server/content-types/release-action/index.mjs.map +1 -0
- package/dist/server/content-types/release-action/schema.js +55 -0
- package/dist/server/content-types/release-action/schema.js.map +1 -0
- package/dist/server/content-types/release-action/schema.mjs +53 -0
- package/dist/server/content-types/release-action/schema.mjs.map +1 -0
- package/dist/server/controllers/homepage.js +15 -0
- package/dist/server/controllers/homepage.js.map +1 -0
- package/dist/server/controllers/homepage.mjs +13 -0
- package/dist/server/controllers/homepage.mjs.map +1 -0
- package/dist/server/controllers/index.js +16 -0
- package/dist/server/controllers/index.js.map +1 -0
- package/dist/server/controllers/index.mjs +14 -0
- package/dist/server/controllers/index.mjs.map +1 -0
- package/dist/server/controllers/release-action.js +150 -0
- package/dist/server/controllers/release-action.js.map +1 -0
- package/dist/server/controllers/release-action.mjs +148 -0
- package/dist/server/controllers/release-action.mjs.map +1 -0
- package/dist/server/controllers/release.js +302 -0
- package/dist/server/controllers/release.js.map +1 -0
- package/dist/server/controllers/release.mjs +300 -0
- package/dist/server/controllers/release.mjs.map +1 -0
- package/dist/server/controllers/settings.js +37 -0
- package/dist/server/controllers/settings.js.map +1 -0
- package/dist/server/controllers/settings.mjs +35 -0
- package/dist/server/controllers/settings.mjs.map +1 -0
- package/dist/server/controllers/validation/release-action.js +34 -0
- package/dist/server/controllers/validation/release-action.js.map +1 -0
- package/dist/server/controllers/validation/release-action.mjs +30 -0
- package/dist/server/controllers/validation/release-action.mjs.map +1 -0
- package/dist/server/controllers/validation/release.js +26 -0
- package/dist/server/controllers/validation/release.js.map +1 -0
- package/dist/server/controllers/validation/release.mjs +22 -0
- package/dist/server/controllers/validation/release.mjs.map +1 -0
- package/dist/server/controllers/validation/settings.js +33 -0
- package/dist/server/controllers/validation/settings.js.map +1 -0
- package/dist/server/controllers/validation/settings.mjs +10 -0
- package/dist/server/controllers/validation/settings.mjs.map +1 -0
- package/dist/server/destroy.js +15 -0
- package/dist/server/destroy.js.map +1 -0
- package/dist/server/destroy.mjs +13 -0
- package/dist/server/destroy.mjs.map +1 -0
- package/dist/server/index.js +33 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/index.mjs +31 -0
- package/dist/server/index.mjs.map +1 -0
- package/dist/server/middlewares/documents.js +104 -0
- package/dist/server/middlewares/documents.js.map +1 -0
- package/dist/server/middlewares/documents.mjs +101 -0
- package/dist/server/middlewares/documents.mjs.map +1 -0
- package/dist/server/migrations/database/5.0.0-document-id-in-actions.js +51 -0
- package/dist/server/migrations/database/5.0.0-document-id-in-actions.js.map +1 -0
- package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs +49 -0
- package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs.map +1 -0
- package/dist/server/migrations/index.js +209 -0
- package/dist/server/migrations/index.js.map +1 -0
- package/dist/server/migrations/index.mjs +198 -0
- package/dist/server/migrations/index.mjs.map +1 -0
- package/dist/server/register.js +23 -0
- package/dist/server/register.js.map +1 -0
- package/dist/server/register.mjs +21 -0
- package/dist/server/register.mjs.map +1 -0
- package/dist/server/routes/homepage.js +25 -0
- package/dist/server/routes/homepage.js.map +1 -0
- package/dist/server/routes/homepage.mjs +23 -0
- package/dist/server/routes/homepage.mjs.map +1 -0
- package/dist/server/routes/index.js +16 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/index.mjs +14 -0
- package/dist/server/routes/index.mjs.map +1 -0
- package/dist/server/routes/release-action.js +100 -0
- package/dist/server/routes/release-action.js.map +1 -0
- package/dist/server/routes/release-action.mjs +98 -0
- package/dist/server/routes/release-action.mjs.map +1 -0
- package/dist/server/routes/release.js +154 -0
- package/dist/server/routes/release.js.map +1 -0
- package/dist/server/routes/release.mjs +152 -0
- package/dist/server/routes/release.mjs.map +1 -0
- package/dist/server/routes/settings.js +46 -0
- package/dist/server/routes/settings.js.map +1 -0
- package/dist/server/routes/settings.mjs +44 -0
- package/dist/server/routes/settings.mjs.map +1 -0
- package/dist/server/services/homepage.js +31 -0
- package/dist/server/services/homepage.js.map +1 -0
- package/dist/server/services/homepage.mjs +29 -0
- package/dist/server/services/homepage.mjs.map +1 -0
- package/dist/server/services/index.js +20 -0
- package/dist/server/services/index.js.map +1 -0
- package/dist/server/services/index.mjs +18 -0
- package/dist/server/services/index.mjs.map +1 -0
- package/dist/server/services/release-action.js +328 -0
- package/dist/server/services/release-action.js.map +1 -0
- package/dist/server/services/release-action.mjs +322 -0
- package/dist/server/services/release-action.mjs.map +1 -0
- package/dist/server/services/release.js +337 -0
- package/dist/server/services/release.js.map +1 -0
- package/dist/server/services/release.mjs +335 -0
- package/dist/server/services/release.mjs.map +1 -0
- package/dist/server/services/scheduling.js +71 -0
- package/dist/server/services/scheduling.js.map +1 -0
- package/dist/server/services/scheduling.mjs +69 -0
- package/dist/server/services/scheduling.mjs.map +1 -0
- package/dist/server/services/settings.js +34 -0
- package/dist/server/services/settings.js.map +1 -0
- package/dist/server/services/settings.mjs +32 -0
- package/dist/server/services/settings.mjs.map +1 -0
- package/dist/server/services/validation.js +91 -0
- package/dist/server/services/validation.js.map +1 -0
- package/dist/server/services/validation.mjs +86 -0
- package/dist/server/services/validation.mjs.map +1 -0
- package/dist/server/src/bootstrap.d.ts +5 -0
- package/dist/server/src/bootstrap.d.ts.map +1 -0
- package/dist/server/src/constants.d.ts +21 -0
- package/dist/server/src/constants.d.ts.map +1 -0
- package/dist/server/src/content-types/index.d.ts +97 -0
- package/dist/server/src/content-types/index.d.ts.map +1 -0
- package/dist/server/src/content-types/release/index.d.ts +48 -0
- package/dist/server/src/content-types/release/index.d.ts.map +1 -0
- package/dist/server/src/content-types/release/schema.d.ts +47 -0
- package/dist/server/src/content-types/release/schema.d.ts.map +1 -0
- package/dist/server/src/content-types/release-action/index.d.ts +48 -0
- package/dist/server/src/content-types/release-action/index.d.ts.map +1 -0
- package/dist/server/src/content-types/release-action/schema.d.ts +47 -0
- package/dist/server/src/content-types/release-action/schema.d.ts.map +1 -0
- package/dist/server/src/controllers/homepage.d.ts +6 -0
- package/dist/server/src/controllers/homepage.d.ts.map +1 -0
- package/dist/server/src/controllers/index.d.ts +27 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -0
- package/dist/server/src/controllers/release-action.d.ts +10 -0
- package/dist/server/src/controllers/release-action.d.ts.map +1 -0
- package/dist/server/src/controllers/release.d.ts +18 -0
- package/dist/server/src/controllers/release.d.ts.map +1 -0
- package/dist/server/src/controllers/settings.d.ts +11 -0
- package/dist/server/src/controllers/settings.d.ts.map +1 -0
- package/dist/server/src/controllers/validation/release-action.d.ts +14 -0
- package/dist/server/src/controllers/validation/release-action.d.ts.map +1 -0
- package/dist/server/src/controllers/validation/release.d.ts +4 -0
- package/dist/server/src/controllers/validation/release.d.ts.map +1 -0
- package/dist/server/src/controllers/validation/settings.d.ts +3 -0
- package/dist/server/src/controllers/validation/settings.d.ts.map +1 -0
- package/dist/server/src/destroy.d.ts +5 -0
- package/dist/server/src/destroy.d.ts.map +1 -0
- package/dist/server/src/index.d.ts +372 -0
- package/dist/server/src/index.d.ts.map +1 -0
- package/dist/server/src/middlewares/documents.d.ts +6 -0
- package/dist/server/src/middlewares/documents.d.ts.map +1 -0
- package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts +9 -0
- package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts.map +1 -0
- package/dist/server/src/migrations/index.d.ts +13 -0
- package/dist/server/src/migrations/index.d.ts.map +1 -0
- package/dist/server/src/register.d.ts +5 -0
- package/dist/server/src/register.d.ts.map +1 -0
- package/dist/server/src/routes/homepage.d.ts +4 -0
- package/dist/server/src/routes/homepage.d.ts.map +1 -0
- package/dist/server/src/routes/index.d.ts +54 -0
- package/dist/server/src/routes/index.d.ts.map +1 -0
- package/dist/server/src/routes/release-action.d.ts +18 -0
- package/dist/server/src/routes/release-action.d.ts.map +1 -0
- package/dist/server/src/routes/release.d.ts +18 -0
- package/dist/server/src/routes/release.d.ts.map +1 -0
- package/dist/server/src/routes/settings.d.ts +18 -0
- package/dist/server/src/routes/settings.d.ts.map +1 -0
- package/dist/server/src/services/homepage.d.ts +9 -0
- package/dist/server/src/services/homepage.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +80 -0
- package/dist/server/src/services/index.d.ts.map +1 -0
- package/dist/server/src/services/release-action.d.ts +33 -0
- package/dist/server/src/services/release-action.d.ts.map +1 -0
- package/dist/server/src/services/release.d.ts +31 -0
- package/dist/server/src/services/release.d.ts.map +1 -0
- package/dist/server/src/services/scheduling.d.ts +17 -0
- package/dist/server/src/services/scheduling.d.ts.map +1 -0
- package/dist/server/src/services/settings.d.ts +13 -0
- package/dist/server/src/services/settings.d.ts.map +1 -0
- package/dist/server/src/services/validation.d.ts +18 -0
- package/dist/server/src/services/validation.d.ts.map +1 -0
- package/dist/server/src/utils/index.d.ts +51 -0
- package/dist/server/src/utils/index.d.ts.map +1 -0
- package/dist/server/utils/index.js +195 -0
- package/dist/server/utils/index.js.map +1 -0
- package/dist/server/utils/index.mjs +188 -0
- package/dist/server/utils/index.mjs.map +1 -0
- package/dist/shared/contracts/homepage.d.ts +11 -0
- package/dist/shared/contracts/homepage.d.ts.map +1 -0
- package/dist/shared/contracts/release-actions.d.ts +137 -0
- package/dist/shared/contracts/release-actions.d.ts.map +1 -0
- package/dist/shared/contracts/releases.d.ts +182 -0
- package/dist/shared/contracts/releases.d.ts.map +1 -0
- package/dist/shared/contracts/settings.d.ts +38 -0
- package/dist/shared/contracts/settings.d.ts.map +1 -0
- package/dist/shared/types.d.ts +24 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
require('react');
|
|
5
|
+
var strapiAdmin = require('@strapi/content-manager/strapi-admin');
|
|
6
|
+
var designSystem = require('@strapi/design-system');
|
|
7
|
+
var icons = require('@strapi/icons');
|
|
8
|
+
var qs = require('qs');
|
|
9
|
+
var reactIntl = require('react-intl');
|
|
10
|
+
var reactRouterDom = require('react-router-dom');
|
|
11
|
+
var styledComponents = require('styled-components');
|
|
12
|
+
|
|
13
|
+
const StyledPopoverFlex = styledComponents.styled(designSystem.Flex)`
|
|
14
|
+
width: 100%;
|
|
15
|
+
max-width: 256px;
|
|
16
|
+
|
|
17
|
+
& > * {
|
|
18
|
+
border-bottom: 1px solid ${({ theme })=>theme.colors.neutral150};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
& > *:last-child {
|
|
22
|
+
border-bottom: none;
|
|
23
|
+
}
|
|
24
|
+
`;
|
|
25
|
+
const ButtonContent = styledComponents.styled(designSystem.Flex)`
|
|
26
|
+
svg {
|
|
27
|
+
fill: currentColor;
|
|
28
|
+
}
|
|
29
|
+
`;
|
|
30
|
+
const CustomStatusButton = ({ children, icon, color })=>{
|
|
31
|
+
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Popover.Trigger, {
|
|
32
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
33
|
+
variant: "ghost",
|
|
34
|
+
endIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.CaretDown, {}),
|
|
35
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(ButtonContent, {
|
|
36
|
+
color: color,
|
|
37
|
+
gap: 2,
|
|
38
|
+
children: [
|
|
39
|
+
icon,
|
|
40
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
41
|
+
textColor: color,
|
|
42
|
+
variant: "omega",
|
|
43
|
+
fontWeight: "bold",
|
|
44
|
+
children: children
|
|
45
|
+
})
|
|
46
|
+
]
|
|
47
|
+
})
|
|
48
|
+
})
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
const EntryStatusTrigger = ({ action, status, hasErrors, requiredStage, entryStage })=>{
|
|
52
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
53
|
+
if (action === 'publish') {
|
|
54
|
+
if (hasErrors || requiredStage && requiredStage.id !== entryStage?.id) {
|
|
55
|
+
return /*#__PURE__*/ jsxRuntime.jsx(CustomStatusButton, {
|
|
56
|
+
icon: /*#__PURE__*/ jsxRuntime.jsx(icons.CrossCircle, {}),
|
|
57
|
+
color: "danger600",
|
|
58
|
+
children: formatMessage({
|
|
59
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.not-ready',
|
|
60
|
+
defaultMessage: 'Not ready to publish'
|
|
61
|
+
})
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
if (status === 'draft') {
|
|
65
|
+
return /*#__PURE__*/ jsxRuntime.jsx(CustomStatusButton, {
|
|
66
|
+
icon: /*#__PURE__*/ jsxRuntime.jsx(icons.CheckCircle, {}),
|
|
67
|
+
color: "success600",
|
|
68
|
+
children: formatMessage({
|
|
69
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.ready-to-publish',
|
|
70
|
+
defaultMessage: 'Ready to publish'
|
|
71
|
+
})
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
if (status === 'modified') {
|
|
75
|
+
return /*#__PURE__*/ jsxRuntime.jsx(CustomStatusButton, {
|
|
76
|
+
icon: /*#__PURE__*/ jsxRuntime.jsx(icons.ArrowsCounterClockwise, {}),
|
|
77
|
+
color: "alternative600",
|
|
78
|
+
children: formatMessage({
|
|
79
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.modified',
|
|
80
|
+
defaultMessage: 'Ready to publish changes'
|
|
81
|
+
})
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return /*#__PURE__*/ jsxRuntime.jsx(CustomStatusButton, {
|
|
85
|
+
icon: /*#__PURE__*/ jsxRuntime.jsx(icons.CheckCircle, {}),
|
|
86
|
+
color: "success600",
|
|
87
|
+
children: formatMessage({
|
|
88
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.already-published',
|
|
89
|
+
defaultMessage: 'Already published'
|
|
90
|
+
})
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
if (status === 'published') {
|
|
94
|
+
return /*#__PURE__*/ jsxRuntime.jsx(CustomStatusButton, {
|
|
95
|
+
icon: /*#__PURE__*/ jsxRuntime.jsx(icons.CheckCircle, {}),
|
|
96
|
+
color: "success600",
|
|
97
|
+
children: formatMessage({
|
|
98
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.ready-to-unpublish',
|
|
99
|
+
defaultMessage: 'Ready to unpublish'
|
|
100
|
+
})
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
return /*#__PURE__*/ jsxRuntime.jsx(CustomStatusButton, {
|
|
104
|
+
icon: /*#__PURE__*/ jsxRuntime.jsx(icons.CheckCircle, {}),
|
|
105
|
+
color: "success600",
|
|
106
|
+
children: formatMessage({
|
|
107
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.already-unpublished',
|
|
108
|
+
defaultMessage: 'Already unpublished'
|
|
109
|
+
})
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
const FieldsValidation = ({ hasErrors, errors, kind, contentTypeUid, documentId, locale })=>{
|
|
113
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
114
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
115
|
+
direction: "column",
|
|
116
|
+
gap: 1,
|
|
117
|
+
width: "100%",
|
|
118
|
+
padding: 5,
|
|
119
|
+
children: [
|
|
120
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
121
|
+
gap: 2,
|
|
122
|
+
width: "100%",
|
|
123
|
+
children: [
|
|
124
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
125
|
+
fontWeight: "bold",
|
|
126
|
+
children: formatMessage({
|
|
127
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.fields',
|
|
128
|
+
defaultMessage: 'Fields'
|
|
129
|
+
})
|
|
130
|
+
}),
|
|
131
|
+
hasErrors ? /*#__PURE__*/ jsxRuntime.jsx(icons.CrossCircle, {
|
|
132
|
+
fill: "danger600"
|
|
133
|
+
}) : /*#__PURE__*/ jsxRuntime.jsx(icons.CheckCircle, {
|
|
134
|
+
fill: "success600"
|
|
135
|
+
})
|
|
136
|
+
]
|
|
137
|
+
}),
|
|
138
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
139
|
+
width: "100%",
|
|
140
|
+
textColor: "neutral600",
|
|
141
|
+
children: hasErrors ? formatMessage({
|
|
142
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.error',
|
|
143
|
+
defaultMessage: '{errors} errors on fields.'
|
|
144
|
+
}, {
|
|
145
|
+
errors: errors ? Object.keys(errors).length : 0
|
|
146
|
+
}) : formatMessage({
|
|
147
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.success',
|
|
148
|
+
defaultMessage: 'All fields are filled correctly.'
|
|
149
|
+
})
|
|
150
|
+
}),
|
|
151
|
+
hasErrors && /*#__PURE__*/ jsxRuntime.jsx(designSystem.LinkButton, {
|
|
152
|
+
tag: reactRouterDom.Link,
|
|
153
|
+
to: {
|
|
154
|
+
pathname: `/content-manager/${kind === 'collectionType' ? 'collection-types' : 'single-types'}/${contentTypeUid}/${documentId}`,
|
|
155
|
+
search: locale ? qs.stringify({
|
|
156
|
+
plugins: {
|
|
157
|
+
i18n: {
|
|
158
|
+
locale
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}) : ''
|
|
162
|
+
},
|
|
163
|
+
variant: "secondary",
|
|
164
|
+
fullWidth: true,
|
|
165
|
+
state: {
|
|
166
|
+
forceValidation: true
|
|
167
|
+
},
|
|
168
|
+
children: formatMessage({
|
|
169
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.see-errors',
|
|
170
|
+
defaultMessage: 'See errors'
|
|
171
|
+
})
|
|
172
|
+
})
|
|
173
|
+
]
|
|
174
|
+
});
|
|
175
|
+
};
|
|
176
|
+
const getReviewStageIcon = ({ contentTypeHasReviewWorkflow, requiredStage, entryStage })=>{
|
|
177
|
+
if (!contentTypeHasReviewWorkflow) {
|
|
178
|
+
return /*#__PURE__*/ jsxRuntime.jsx(icons.CheckCircle, {
|
|
179
|
+
fill: "neutral200"
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
if (requiredStage && requiredStage.id !== entryStage?.id) {
|
|
183
|
+
return /*#__PURE__*/ jsxRuntime.jsx(icons.CrossCircle, {
|
|
184
|
+
fill: "danger600"
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
return /*#__PURE__*/ jsxRuntime.jsx(icons.CheckCircle, {
|
|
188
|
+
fill: "success600"
|
|
189
|
+
});
|
|
190
|
+
};
|
|
191
|
+
const getReviewStageMessage = ({ contentTypeHasReviewWorkflow, requiredStage, entryStage, formatMessage })=>{
|
|
192
|
+
if (!contentTypeHasReviewWorkflow) {
|
|
193
|
+
return formatMessage({
|
|
194
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.not-enabled',
|
|
195
|
+
defaultMessage: 'This entry is not associated to any workflow.'
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
if (requiredStage && requiredStage.id !== entryStage?.id) {
|
|
199
|
+
return formatMessage({
|
|
200
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.not-ready',
|
|
201
|
+
defaultMessage: 'This entry is not at the required stage for publishing. ({stageName})'
|
|
202
|
+
}, {
|
|
203
|
+
stageName: requiredStage?.name ?? ''
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
if (requiredStage && requiredStage.id === entryStage?.id) {
|
|
207
|
+
return formatMessage({
|
|
208
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.ready',
|
|
209
|
+
defaultMessage: 'This entry is at the required stage for publishing. ({stageName})'
|
|
210
|
+
}, {
|
|
211
|
+
stageName: requiredStage?.name ?? ''
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
return formatMessage({
|
|
215
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.stage-not-required',
|
|
216
|
+
defaultMessage: 'No required stage for publication'
|
|
217
|
+
});
|
|
218
|
+
};
|
|
219
|
+
const ReviewStageValidation = ({ contentTypeHasReviewWorkflow, requiredStage, entryStage })=>{
|
|
220
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
221
|
+
const Icon = getReviewStageIcon({
|
|
222
|
+
contentTypeHasReviewWorkflow,
|
|
223
|
+
requiredStage,
|
|
224
|
+
entryStage
|
|
225
|
+
});
|
|
226
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
227
|
+
direction: "column",
|
|
228
|
+
gap: 1,
|
|
229
|
+
width: "100%",
|
|
230
|
+
padding: 5,
|
|
231
|
+
children: [
|
|
232
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
233
|
+
gap: 2,
|
|
234
|
+
width: "100%",
|
|
235
|
+
children: [
|
|
236
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
237
|
+
fontWeight: "bold",
|
|
238
|
+
children: formatMessage({
|
|
239
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage',
|
|
240
|
+
defaultMessage: 'Review stage'
|
|
241
|
+
})
|
|
242
|
+
}),
|
|
243
|
+
Icon
|
|
244
|
+
]
|
|
245
|
+
}),
|
|
246
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
247
|
+
textColor: "neutral600",
|
|
248
|
+
children: getReviewStageMessage({
|
|
249
|
+
contentTypeHasReviewWorkflow,
|
|
250
|
+
requiredStage,
|
|
251
|
+
entryStage,
|
|
252
|
+
formatMessage
|
|
253
|
+
})
|
|
254
|
+
})
|
|
255
|
+
]
|
|
256
|
+
});
|
|
257
|
+
};
|
|
258
|
+
const EntryValidationPopover = ({ schema, entry, status, action })=>{
|
|
259
|
+
const { validate, isLoading } = strapiAdmin.unstable_useDocument({
|
|
260
|
+
collectionType: schema?.kind ?? '',
|
|
261
|
+
model: schema?.uid ?? ''
|
|
262
|
+
}, {
|
|
263
|
+
// useDocument makes a request to get more data about the entry, but we only want to have the validation function so we skip the request
|
|
264
|
+
skip: true
|
|
265
|
+
});
|
|
266
|
+
// Validation errors
|
|
267
|
+
const errors = isLoading ? null : validate(entry);
|
|
268
|
+
const hasErrors = errors ? Object.keys(errors).length > 0 : false;
|
|
269
|
+
// Entry stage
|
|
270
|
+
const contentTypeHasReviewWorkflow = schema?.hasReviewWorkflow ?? false;
|
|
271
|
+
const requiredStage = schema?.stageRequiredToPublish;
|
|
272
|
+
const entryStage = entry.strapi_stage;
|
|
273
|
+
if (isLoading) {
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
276
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Popover.Root, {
|
|
277
|
+
children: [
|
|
278
|
+
/*#__PURE__*/ jsxRuntime.jsx(EntryStatusTrigger, {
|
|
279
|
+
action: action,
|
|
280
|
+
status: status,
|
|
281
|
+
hasErrors: hasErrors,
|
|
282
|
+
requiredStage: requiredStage,
|
|
283
|
+
entryStage: entryStage
|
|
284
|
+
}),
|
|
285
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Popover.Content, {
|
|
286
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(StyledPopoverFlex, {
|
|
287
|
+
direction: "column",
|
|
288
|
+
children: [
|
|
289
|
+
/*#__PURE__*/ jsxRuntime.jsx(FieldsValidation, {
|
|
290
|
+
hasErrors: hasErrors,
|
|
291
|
+
errors: errors,
|
|
292
|
+
contentTypeUid: schema?.uid,
|
|
293
|
+
kind: schema?.kind,
|
|
294
|
+
documentId: entry.documentId,
|
|
295
|
+
locale: entry.locale
|
|
296
|
+
}),
|
|
297
|
+
/*#__PURE__*/ jsxRuntime.jsx(ReviewStageValidation, {
|
|
298
|
+
contentTypeHasReviewWorkflow: contentTypeHasReviewWorkflow,
|
|
299
|
+
requiredStage: requiredStage,
|
|
300
|
+
entryStage: entryStage
|
|
301
|
+
})
|
|
302
|
+
]
|
|
303
|
+
})
|
|
304
|
+
})
|
|
305
|
+
]
|
|
306
|
+
});
|
|
307
|
+
};
|
|
308
|
+
|
|
309
|
+
exports.EntryValidationPopover = EntryValidationPopover;
|
|
310
|
+
//# sourceMappingURL=EntryValidationPopover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntryValidationPopover.js","sources":["../../../admin/src/components/EntryValidationPopover.tsx"],"sourcesContent":["import * as React from 'react';\r\n\r\nimport { FormErrors, FormValues } from '@strapi/admin/strapi-admin';\r\nimport { unstable_useDocument } from '@strapi/content-manager/strapi-admin';\r\nimport { Button, LinkButton, Flex, Typography, Popover } from '@strapi/design-system';\r\nimport { CheckCircle, CrossCircle, ArrowsCounterClockwise, CaretDown } from '@strapi/icons';\r\nimport { stringify } from 'qs';\r\nimport { useIntl, MessageDescriptor } from 'react-intl';\r\nimport { Link } from 'react-router-dom';\r\nimport { styled } from 'styled-components';\r\n\r\nimport type {\r\n ReleaseAction,\r\n ReleaseActionEntry,\r\n Stage,\r\n} from '../../../shared/contracts/release-actions';\r\nimport type { Struct } from '@strapi/types';\r\n\r\nconst StyledPopoverFlex = styled(Flex)`\r\n width: 100%;\r\n max-width: 256px;\r\n\r\n & > * {\r\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150};\r\n }\r\n\r\n & > *:last-child {\r\n border-bottom: none;\r\n }\r\n`;\r\n\r\nconst ButtonContent = styled(Flex)`\r\n svg {\r\n fill: currentColor;\r\n }\r\n`;\r\n\r\nconst CustomStatusButton = ({\r\n children,\r\n icon,\r\n color,\r\n}: {\r\n icon: React.ReactElement;\r\n color: string;\r\n} & React.PropsWithChildren) => {\r\n return (\r\n <Popover.Trigger>\r\n <Button variant=\"ghost\" endIcon={<CaretDown />}>\r\n <ButtonContent color={color} gap={2}>\r\n {icon}\r\n <Typography textColor={color} variant=\"omega\" fontWeight=\"bold\">\r\n {children}\r\n </Typography>\r\n </ButtonContent>\r\n </Button>\r\n </Popover.Trigger>\r\n );\r\n};\r\n\r\ninterface EntryValidationPopoverProps {\r\n action: ReleaseAction['type'];\r\n schema?: Struct.ContentTypeSchema & {\r\n hasReviewWorkflow: boolean;\r\n stageRequiredToPublish?: Stage;\r\n };\r\n entry: ReleaseActionEntry;\r\n status: ReleaseAction['status'];\r\n}\r\n\r\ninterface ValidationStatusProps {\r\n action: ReleaseAction['type'];\r\n status: ReleaseAction['status'];\r\n hasErrors: boolean | null;\r\n requiredStage?: Stage;\r\n entryStage?: Stage;\r\n}\r\n\r\nconst EntryStatusTrigger = ({\r\n action,\r\n status,\r\n hasErrors,\r\n requiredStage,\r\n entryStage,\r\n}: ValidationStatusProps) => {\r\n const { formatMessage } = useIntl();\r\n\r\n if (action === 'publish') {\r\n if (hasErrors || (requiredStage && requiredStage.id !== entryStage?.id)) {\r\n return (\r\n <CustomStatusButton icon={<CrossCircle />} color=\"danger600\">\r\n {formatMessage({\r\n id: 'content-releases.pages.ReleaseDetails.entry-validation.not-ready',\r\n defaultMessage: 'Not ready to publish',\r\n })}\r\n </CustomStatusButton>\r\n );\r\n }\r\n\r\n if (status === 'draft') {\r\n return (\r\n <CustomStatusButton icon={<CheckCircle />} color=\"success600\">\r\n {formatMessage({\r\n id: 'content-releases.pages.ReleaseDetails.entry-validation.ready-to-publish',\r\n defaultMessage: 'Ready to publish',\r\n })}\r\n </CustomStatusButton>\r\n );\r\n }\r\n\r\n if (status === 'modified') {\r\n return (\r\n <CustomStatusButton icon={<ArrowsCounterClockwise />} color=\"alternative600\">\r\n {formatMessage({\r\n id: 'content-releases.pages.ReleaseDetails.entry-validation.modified',\r\n defaultMessage: 'Ready to publish changes',\r\n })}\r\n </CustomStatusButton>\r\n );\r\n }\r\n\r\n return (\r\n <CustomStatusButton icon={<CheckCircle />} color=\"success600\">\r\n {formatMessage({\r\n id: 'content-releases.pages.ReleaseDetails.entry-validation.already-published',\r\n defaultMessage: 'Already published',\r\n })}\r\n </CustomStatusButton>\r\n );\r\n }\r\n\r\n if (status === 'published') {\r\n return (\r\n <CustomStatusButton icon={<CheckCircle />} color=\"success600\">\r\n {formatMessage({\r\n id: 'content-releases.pages.ReleaseDetails.entry-validation.ready-to-unpublish',\r\n defaultMessage: 'Ready to unpublish',\r\n })}\r\n </CustomStatusButton>\r\n );\r\n }\r\n\r\n return (\r\n <CustomStatusButton icon={<CheckCircle />} color=\"success600\">\r\n {formatMessage({\r\n id: 'content-releases.pages.ReleaseDetails.entry-validation.already-unpublished',\r\n defaultMessage: 'Already unpublished',\r\n })}\r\n </CustomStatusButton>\r\n );\r\n};\r\n\r\ninterface FieldsValidationProps {\r\n hasErrors: boolean;\r\n errors: FormErrors<FormValues> | null;\r\n kind?: string;\r\n contentTypeUid?: string;\r\n documentId?: string;\r\n locale?: string;\r\n}\r\n\r\nconst FieldsValidation = ({\r\n hasErrors,\r\n errors,\r\n kind,\r\n contentTypeUid,\r\n documentId,\r\n locale,\r\n}: FieldsValidationProps) => {\r\n const { formatMessage } = useIntl();\r\n\r\n return (\r\n <Flex direction=\"column\" gap={1} width=\"100%\" padding={5}>\r\n <Flex gap={2} width=\"100%\">\r\n <Typography fontWeight=\"bold\">\r\n {formatMessage({\r\n id: 'content-releases.pages.ReleaseDetails.entry-validation.fields',\r\n defaultMessage: 'Fields',\r\n })}\r\n </Typography>\r\n {hasErrors ? <CrossCircle fill=\"danger600\" /> : <CheckCircle fill=\"success600\" />}\r\n </Flex>\r\n <Typography width=\"100%\" textColor=\"neutral600\">\r\n {hasErrors\r\n ? formatMessage(\r\n {\r\n id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.error',\r\n defaultMessage: '{errors} errors on fields.',\r\n },\r\n { errors: errors ? Object.keys(errors).length : 0 }\r\n )\r\n : formatMessage({\r\n id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.success',\r\n defaultMessage: 'All fields are filled correctly.',\r\n })}\r\n </Typography>\r\n {hasErrors && (\r\n <LinkButton\r\n tag={Link}\r\n to={{\r\n pathname: `/content-manager/${kind === 'collectionType' ? 'collection-types' : 'single-types'}/${contentTypeUid}/${documentId}`,\r\n search: locale\r\n ? stringify({\r\n plugins: {\r\n i18n: {\r\n locale,\r\n },\r\n },\r\n })\r\n : '',\r\n }}\r\n variant=\"secondary\"\r\n fullWidth\r\n state={{ forceValidation: true }}\r\n >\r\n {formatMessage({\r\n id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.see-errors',\r\n defaultMessage: 'See errors',\r\n })}\r\n </LinkButton>\r\n )}\r\n </Flex>\r\n );\r\n};\r\n\r\nconst getReviewStageIcon = ({\r\n contentTypeHasReviewWorkflow,\r\n requiredStage,\r\n entryStage,\r\n}: {\r\n contentTypeHasReviewWorkflow: boolean;\r\n requiredStage?: Stage;\r\n entryStage?: Stage;\r\n}) => {\r\n if (!contentTypeHasReviewWorkflow) {\r\n return <CheckCircle fill=\"neutral200\" />;\r\n }\r\n if (requiredStage && requiredStage.id !== entryStage?.id) {\r\n return <CrossCircle fill=\"danger600\" />;\r\n }\r\n return <CheckCircle fill=\"success600\" />;\r\n};\r\n\r\nconst getReviewStageMessage = ({\r\n contentTypeHasReviewWorkflow,\r\n requiredStage,\r\n entryStage,\r\n formatMessage,\r\n}: {\r\n contentTypeHasReviewWorkflow: boolean;\r\n requiredStage?: Stage;\r\n entryStage?: Stage;\r\n formatMessage: (messageDescriptor: MessageDescriptor, values?: Record<string, string>) => string;\r\n}) => {\r\n if (!contentTypeHasReviewWorkflow) {\r\n return formatMessage({\r\n id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.not-enabled',\r\n defaultMessage: 'This entry is not associated to any workflow.',\r\n });\r\n }\r\n\r\n if (requiredStage && requiredStage.id !== entryStage?.id) {\r\n return formatMessage(\r\n {\r\n id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.not-ready',\r\n defaultMessage: 'This entry is not at the required stage for publishing. ({stageName})',\r\n },\r\n {\r\n stageName: requiredStage?.name ?? '',\r\n }\r\n );\r\n }\r\n\r\n if (requiredStage && requiredStage.id === entryStage?.id) {\r\n return formatMessage(\r\n {\r\n id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.ready',\r\n defaultMessage: 'This entry is at the required stage for publishing. ({stageName})',\r\n },\r\n {\r\n stageName: requiredStage?.name ?? '',\r\n }\r\n );\r\n }\r\n\r\n return formatMessage({\r\n id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.stage-not-required',\r\n defaultMessage: 'No required stage for publication',\r\n });\r\n};\r\n\r\nconst ReviewStageValidation = ({\r\n contentTypeHasReviewWorkflow,\r\n requiredStage,\r\n entryStage,\r\n}: {\r\n contentTypeHasReviewWorkflow: boolean;\r\n requiredStage?: Stage;\r\n entryStage?: Stage;\r\n}) => {\r\n const { formatMessage } = useIntl();\r\n\r\n const Icon = getReviewStageIcon({\r\n contentTypeHasReviewWorkflow,\r\n requiredStage,\r\n entryStage,\r\n });\r\n\r\n return (\r\n <Flex direction=\"column\" gap={1} width=\"100%\" padding={5}>\r\n <Flex gap={2} width=\"100%\">\r\n <Typography fontWeight=\"bold\">\r\n {formatMessage({\r\n id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage',\r\n defaultMessage: 'Review stage',\r\n })}\r\n </Typography>\r\n {Icon}\r\n </Flex>\r\n <Typography textColor=\"neutral600\">\r\n {getReviewStageMessage({\r\n contentTypeHasReviewWorkflow,\r\n requiredStage,\r\n entryStage,\r\n formatMessage,\r\n })}\r\n </Typography>\r\n </Flex>\r\n );\r\n};\r\n\r\nexport const EntryValidationPopover = ({\r\n schema,\r\n entry,\r\n status,\r\n action,\r\n}: EntryValidationPopoverProps) => {\r\n const { validate, isLoading } = unstable_useDocument(\r\n {\r\n collectionType: schema?.kind ?? '',\r\n model: schema?.uid ?? '',\r\n },\r\n {\r\n // useDocument makes a request to get more data about the entry, but we only want to have the validation function so we skip the request\r\n skip: true,\r\n }\r\n );\r\n\r\n // Validation errors\r\n const errors = isLoading ? null : validate(entry);\r\n const hasErrors = errors ? Object.keys(errors).length > 0 : false;\r\n\r\n // Entry stage\r\n const contentTypeHasReviewWorkflow = schema?.hasReviewWorkflow ?? false;\r\n const requiredStage = schema?.stageRequiredToPublish;\r\n const entryStage = entry.strapi_stage;\r\n\r\n if (isLoading) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Popover.Root>\r\n <EntryStatusTrigger\r\n action={action}\r\n status={status}\r\n hasErrors={hasErrors}\r\n requiredStage={requiredStage}\r\n entryStage={entryStage}\r\n />\r\n <Popover.Content>\r\n <StyledPopoverFlex direction=\"column\">\r\n <FieldsValidation\r\n hasErrors={hasErrors}\r\n errors={errors}\r\n contentTypeUid={schema?.uid}\r\n kind={schema?.kind}\r\n documentId={entry.documentId}\r\n locale={entry.locale}\r\n />\r\n <ReviewStageValidation\r\n contentTypeHasReviewWorkflow={contentTypeHasReviewWorkflow}\r\n requiredStage={requiredStage}\r\n entryStage={entryStage}\r\n />\r\n </StyledPopoverFlex>\r\n </Popover.Content>\r\n </Popover.Root>\r\n );\r\n};\r\n"],"names":["StyledPopoverFlex","styled","Flex","theme","colors","neutral150","ButtonContent","CustomStatusButton","children","icon","color","_jsx","Popover","Trigger","Button","variant","endIcon","CaretDown","_jsxs","gap","Typography","textColor","fontWeight","EntryStatusTrigger","action","status","hasErrors","requiredStage","entryStage","formatMessage","useIntl","id","CrossCircle","defaultMessage","CheckCircle","ArrowsCounterClockwise","FieldsValidation","errors","kind","contentTypeUid","documentId","locale","direction","width","padding","fill","Object","keys","length","LinkButton","tag","Link","to","pathname","search","stringify","plugins","i18n","fullWidth","state","forceValidation","getReviewStageIcon","contentTypeHasReviewWorkflow","getReviewStageMessage","stageName","name","ReviewStageValidation","Icon","EntryValidationPopover","schema","entry","validate","isLoading","unstable_useDocument","collectionType","model","uid","skip","hasReviewWorkflow","stageRequiredToPublish","strapi_stage","Root","Content"],"mappings":"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"}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import 'react';
|
|
3
|
+
import { unstable_useDocument } from '@strapi/content-manager/strapi-admin';
|
|
4
|
+
import { Popover, Flex, Typography, LinkButton, Button } from '@strapi/design-system';
|
|
5
|
+
import { CrossCircle, CheckCircle, ArrowsCounterClockwise, CaretDown } from '@strapi/icons';
|
|
6
|
+
import { stringify } from 'qs';
|
|
7
|
+
import { useIntl } from 'react-intl';
|
|
8
|
+
import { Link } from 'react-router-dom';
|
|
9
|
+
import { styled } from 'styled-components';
|
|
10
|
+
|
|
11
|
+
const StyledPopoverFlex = styled(Flex)`
|
|
12
|
+
width: 100%;
|
|
13
|
+
max-width: 256px;
|
|
14
|
+
|
|
15
|
+
& > * {
|
|
16
|
+
border-bottom: 1px solid ${({ theme })=>theme.colors.neutral150};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
& > *:last-child {
|
|
20
|
+
border-bottom: none;
|
|
21
|
+
}
|
|
22
|
+
`;
|
|
23
|
+
const ButtonContent = styled(Flex)`
|
|
24
|
+
svg {
|
|
25
|
+
fill: currentColor;
|
|
26
|
+
}
|
|
27
|
+
`;
|
|
28
|
+
const CustomStatusButton = ({ children, icon, color })=>{
|
|
29
|
+
return /*#__PURE__*/ jsx(Popover.Trigger, {
|
|
30
|
+
children: /*#__PURE__*/ jsx(Button, {
|
|
31
|
+
variant: "ghost",
|
|
32
|
+
endIcon: /*#__PURE__*/ jsx(CaretDown, {}),
|
|
33
|
+
children: /*#__PURE__*/ jsxs(ButtonContent, {
|
|
34
|
+
color: color,
|
|
35
|
+
gap: 2,
|
|
36
|
+
children: [
|
|
37
|
+
icon,
|
|
38
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
39
|
+
textColor: color,
|
|
40
|
+
variant: "omega",
|
|
41
|
+
fontWeight: "bold",
|
|
42
|
+
children: children
|
|
43
|
+
})
|
|
44
|
+
]
|
|
45
|
+
})
|
|
46
|
+
})
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
const EntryStatusTrigger = ({ action, status, hasErrors, requiredStage, entryStage })=>{
|
|
50
|
+
const { formatMessage } = useIntl();
|
|
51
|
+
if (action === 'publish') {
|
|
52
|
+
if (hasErrors || requiredStage && requiredStage.id !== entryStage?.id) {
|
|
53
|
+
return /*#__PURE__*/ jsx(CustomStatusButton, {
|
|
54
|
+
icon: /*#__PURE__*/ jsx(CrossCircle, {}),
|
|
55
|
+
color: "danger600",
|
|
56
|
+
children: formatMessage({
|
|
57
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.not-ready',
|
|
58
|
+
defaultMessage: 'Not ready to publish'
|
|
59
|
+
})
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
if (status === 'draft') {
|
|
63
|
+
return /*#__PURE__*/ jsx(CustomStatusButton, {
|
|
64
|
+
icon: /*#__PURE__*/ jsx(CheckCircle, {}),
|
|
65
|
+
color: "success600",
|
|
66
|
+
children: formatMessage({
|
|
67
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.ready-to-publish',
|
|
68
|
+
defaultMessage: 'Ready to publish'
|
|
69
|
+
})
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
if (status === 'modified') {
|
|
73
|
+
return /*#__PURE__*/ jsx(CustomStatusButton, {
|
|
74
|
+
icon: /*#__PURE__*/ jsx(ArrowsCounterClockwise, {}),
|
|
75
|
+
color: "alternative600",
|
|
76
|
+
children: formatMessage({
|
|
77
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.modified',
|
|
78
|
+
defaultMessage: 'Ready to publish changes'
|
|
79
|
+
})
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
return /*#__PURE__*/ jsx(CustomStatusButton, {
|
|
83
|
+
icon: /*#__PURE__*/ jsx(CheckCircle, {}),
|
|
84
|
+
color: "success600",
|
|
85
|
+
children: formatMessage({
|
|
86
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.already-published',
|
|
87
|
+
defaultMessage: 'Already published'
|
|
88
|
+
})
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
if (status === 'published') {
|
|
92
|
+
return /*#__PURE__*/ jsx(CustomStatusButton, {
|
|
93
|
+
icon: /*#__PURE__*/ jsx(CheckCircle, {}),
|
|
94
|
+
color: "success600",
|
|
95
|
+
children: formatMessage({
|
|
96
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.ready-to-unpublish',
|
|
97
|
+
defaultMessage: 'Ready to unpublish'
|
|
98
|
+
})
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return /*#__PURE__*/ jsx(CustomStatusButton, {
|
|
102
|
+
icon: /*#__PURE__*/ jsx(CheckCircle, {}),
|
|
103
|
+
color: "success600",
|
|
104
|
+
children: formatMessage({
|
|
105
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.already-unpublished',
|
|
106
|
+
defaultMessage: 'Already unpublished'
|
|
107
|
+
})
|
|
108
|
+
});
|
|
109
|
+
};
|
|
110
|
+
const FieldsValidation = ({ hasErrors, errors, kind, contentTypeUid, documentId, locale })=>{
|
|
111
|
+
const { formatMessage } = useIntl();
|
|
112
|
+
return /*#__PURE__*/ jsxs(Flex, {
|
|
113
|
+
direction: "column",
|
|
114
|
+
gap: 1,
|
|
115
|
+
width: "100%",
|
|
116
|
+
padding: 5,
|
|
117
|
+
children: [
|
|
118
|
+
/*#__PURE__*/ jsxs(Flex, {
|
|
119
|
+
gap: 2,
|
|
120
|
+
width: "100%",
|
|
121
|
+
children: [
|
|
122
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
123
|
+
fontWeight: "bold",
|
|
124
|
+
children: formatMessage({
|
|
125
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.fields',
|
|
126
|
+
defaultMessage: 'Fields'
|
|
127
|
+
})
|
|
128
|
+
}),
|
|
129
|
+
hasErrors ? /*#__PURE__*/ jsx(CrossCircle, {
|
|
130
|
+
fill: "danger600"
|
|
131
|
+
}) : /*#__PURE__*/ jsx(CheckCircle, {
|
|
132
|
+
fill: "success600"
|
|
133
|
+
})
|
|
134
|
+
]
|
|
135
|
+
}),
|
|
136
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
137
|
+
width: "100%",
|
|
138
|
+
textColor: "neutral600",
|
|
139
|
+
children: hasErrors ? formatMessage({
|
|
140
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.error',
|
|
141
|
+
defaultMessage: '{errors} errors on fields.'
|
|
142
|
+
}, {
|
|
143
|
+
errors: errors ? Object.keys(errors).length : 0
|
|
144
|
+
}) : formatMessage({
|
|
145
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.success',
|
|
146
|
+
defaultMessage: 'All fields are filled correctly.'
|
|
147
|
+
})
|
|
148
|
+
}),
|
|
149
|
+
hasErrors && /*#__PURE__*/ jsx(LinkButton, {
|
|
150
|
+
tag: Link,
|
|
151
|
+
to: {
|
|
152
|
+
pathname: `/content-manager/${kind === 'collectionType' ? 'collection-types' : 'single-types'}/${contentTypeUid}/${documentId}`,
|
|
153
|
+
search: locale ? stringify({
|
|
154
|
+
plugins: {
|
|
155
|
+
i18n: {
|
|
156
|
+
locale
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}) : ''
|
|
160
|
+
},
|
|
161
|
+
variant: "secondary",
|
|
162
|
+
fullWidth: true,
|
|
163
|
+
state: {
|
|
164
|
+
forceValidation: true
|
|
165
|
+
},
|
|
166
|
+
children: formatMessage({
|
|
167
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.see-errors',
|
|
168
|
+
defaultMessage: 'See errors'
|
|
169
|
+
})
|
|
170
|
+
})
|
|
171
|
+
]
|
|
172
|
+
});
|
|
173
|
+
};
|
|
174
|
+
const getReviewStageIcon = ({ contentTypeHasReviewWorkflow, requiredStage, entryStage })=>{
|
|
175
|
+
if (!contentTypeHasReviewWorkflow) {
|
|
176
|
+
return /*#__PURE__*/ jsx(CheckCircle, {
|
|
177
|
+
fill: "neutral200"
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
if (requiredStage && requiredStage.id !== entryStage?.id) {
|
|
181
|
+
return /*#__PURE__*/ jsx(CrossCircle, {
|
|
182
|
+
fill: "danger600"
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
return /*#__PURE__*/ jsx(CheckCircle, {
|
|
186
|
+
fill: "success600"
|
|
187
|
+
});
|
|
188
|
+
};
|
|
189
|
+
const getReviewStageMessage = ({ contentTypeHasReviewWorkflow, requiredStage, entryStage, formatMessage })=>{
|
|
190
|
+
if (!contentTypeHasReviewWorkflow) {
|
|
191
|
+
return formatMessage({
|
|
192
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.not-enabled',
|
|
193
|
+
defaultMessage: 'This entry is not associated to any workflow.'
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
if (requiredStage && requiredStage.id !== entryStage?.id) {
|
|
197
|
+
return formatMessage({
|
|
198
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.not-ready',
|
|
199
|
+
defaultMessage: 'This entry is not at the required stage for publishing. ({stageName})'
|
|
200
|
+
}, {
|
|
201
|
+
stageName: requiredStage?.name ?? ''
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
if (requiredStage && requiredStage.id === entryStage?.id) {
|
|
205
|
+
return formatMessage({
|
|
206
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.ready',
|
|
207
|
+
defaultMessage: 'This entry is at the required stage for publishing. ({stageName})'
|
|
208
|
+
}, {
|
|
209
|
+
stageName: requiredStage?.name ?? ''
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
return formatMessage({
|
|
213
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.stage-not-required',
|
|
214
|
+
defaultMessage: 'No required stage for publication'
|
|
215
|
+
});
|
|
216
|
+
};
|
|
217
|
+
const ReviewStageValidation = ({ contentTypeHasReviewWorkflow, requiredStage, entryStage })=>{
|
|
218
|
+
const { formatMessage } = useIntl();
|
|
219
|
+
const Icon = getReviewStageIcon({
|
|
220
|
+
contentTypeHasReviewWorkflow,
|
|
221
|
+
requiredStage,
|
|
222
|
+
entryStage
|
|
223
|
+
});
|
|
224
|
+
return /*#__PURE__*/ jsxs(Flex, {
|
|
225
|
+
direction: "column",
|
|
226
|
+
gap: 1,
|
|
227
|
+
width: "100%",
|
|
228
|
+
padding: 5,
|
|
229
|
+
children: [
|
|
230
|
+
/*#__PURE__*/ jsxs(Flex, {
|
|
231
|
+
gap: 2,
|
|
232
|
+
width: "100%",
|
|
233
|
+
children: [
|
|
234
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
235
|
+
fontWeight: "bold",
|
|
236
|
+
children: formatMessage({
|
|
237
|
+
id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage',
|
|
238
|
+
defaultMessage: 'Review stage'
|
|
239
|
+
})
|
|
240
|
+
}),
|
|
241
|
+
Icon
|
|
242
|
+
]
|
|
243
|
+
}),
|
|
244
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
245
|
+
textColor: "neutral600",
|
|
246
|
+
children: getReviewStageMessage({
|
|
247
|
+
contentTypeHasReviewWorkflow,
|
|
248
|
+
requiredStage,
|
|
249
|
+
entryStage,
|
|
250
|
+
formatMessage
|
|
251
|
+
})
|
|
252
|
+
})
|
|
253
|
+
]
|
|
254
|
+
});
|
|
255
|
+
};
|
|
256
|
+
const EntryValidationPopover = ({ schema, entry, status, action })=>{
|
|
257
|
+
const { validate, isLoading } = unstable_useDocument({
|
|
258
|
+
collectionType: schema?.kind ?? '',
|
|
259
|
+
model: schema?.uid ?? ''
|
|
260
|
+
}, {
|
|
261
|
+
// useDocument makes a request to get more data about the entry, but we only want to have the validation function so we skip the request
|
|
262
|
+
skip: true
|
|
263
|
+
});
|
|
264
|
+
// Validation errors
|
|
265
|
+
const errors = isLoading ? null : validate(entry);
|
|
266
|
+
const hasErrors = errors ? Object.keys(errors).length > 0 : false;
|
|
267
|
+
// Entry stage
|
|
268
|
+
const contentTypeHasReviewWorkflow = schema?.hasReviewWorkflow ?? false;
|
|
269
|
+
const requiredStage = schema?.stageRequiredToPublish;
|
|
270
|
+
const entryStage = entry.strapi_stage;
|
|
271
|
+
if (isLoading) {
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
274
|
+
return /*#__PURE__*/ jsxs(Popover.Root, {
|
|
275
|
+
children: [
|
|
276
|
+
/*#__PURE__*/ jsx(EntryStatusTrigger, {
|
|
277
|
+
action: action,
|
|
278
|
+
status: status,
|
|
279
|
+
hasErrors: hasErrors,
|
|
280
|
+
requiredStage: requiredStage,
|
|
281
|
+
entryStage: entryStage
|
|
282
|
+
}),
|
|
283
|
+
/*#__PURE__*/ jsx(Popover.Content, {
|
|
284
|
+
children: /*#__PURE__*/ jsxs(StyledPopoverFlex, {
|
|
285
|
+
direction: "column",
|
|
286
|
+
children: [
|
|
287
|
+
/*#__PURE__*/ jsx(FieldsValidation, {
|
|
288
|
+
hasErrors: hasErrors,
|
|
289
|
+
errors: errors,
|
|
290
|
+
contentTypeUid: schema?.uid,
|
|
291
|
+
kind: schema?.kind,
|
|
292
|
+
documentId: entry.documentId,
|
|
293
|
+
locale: entry.locale
|
|
294
|
+
}),
|
|
295
|
+
/*#__PURE__*/ jsx(ReviewStageValidation, {
|
|
296
|
+
contentTypeHasReviewWorkflow: contentTypeHasReviewWorkflow,
|
|
297
|
+
requiredStage: requiredStage,
|
|
298
|
+
entryStage: entryStage
|
|
299
|
+
})
|
|
300
|
+
]
|
|
301
|
+
})
|
|
302
|
+
})
|
|
303
|
+
]
|
|
304
|
+
});
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
export { EntryValidationPopover };
|
|
308
|
+
//# sourceMappingURL=EntryValidationPopover.mjs.map
|