@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 @@
|
|
|
1
|
+
{"version":3,"file":"ReleaseActionMenu.mjs","sources":["../../../admin/src/components/ReleaseActionMenu.tsx"],"sourcesContent":["import * as React from 'react';\r\n\r\nimport {\r\n useAPIErrorHandler,\r\n useNotification,\r\n useAuth,\r\n useRBAC,\r\n isFetchError,\r\n} from '@strapi/admin/strapi-admin';\r\nimport { Menu, AccessibleIcon, IconButton } from '@strapi/design-system';\r\nimport { Cross, More, Pencil } from '@strapi/icons';\r\nimport { useIntl } from 'react-intl';\r\nimport { NavLink } from 'react-router-dom';\r\nimport { styled } from 'styled-components';\r\n\r\nimport { DeleteReleaseAction, ReleaseAction } from '../../../shared/contracts/release-actions';\r\nimport { Release } from '../../../shared/contracts/releases';\r\nimport { PERMISSIONS } from '../constants';\r\nimport { useDeleteReleaseActionMutation } from '../services/release';\r\n\r\n// TODO: has to be fixed in the DS - https://github.com/strapi/design-system/issues/1934\r\nconst StyledMenuLink = styled(Menu.Item)`\r\n span,\r\n &:hover span {\r\n color: ${({ theme }) => theme.colors['neutral800']};\r\n }\r\n\r\n svg path,\r\n &:hover svg path {\r\n fill: ${({ theme }) => theme.colors['neutral500']};\r\n }\r\n`;\r\n\r\n/* -------------------------------------------------------------------------------------------------\r\n * DeleteReleaseActionItemProps\r\n * -----------------------------------------------------------------------------------------------*/\r\ninterface DeleteReleaseActionItemProps {\r\n releaseId: DeleteReleaseAction.Request['params']['releaseId'];\r\n actionId: DeleteReleaseAction.Request['params']['actionId'];\r\n}\r\n\r\nconst DeleteReleaseActionItem = ({ releaseId, actionId }: DeleteReleaseActionItemProps) => {\r\n const { formatMessage } = useIntl();\r\n const { toggleNotification } = useNotification();\r\n const { formatAPIError } = useAPIErrorHandler();\r\n const [deleteReleaseAction] = useDeleteReleaseActionMutation();\r\n const {\r\n allowedActions: { canDeleteAction },\r\n } = useRBAC(PERMISSIONS);\r\n\r\n const handleDeleteAction = async () => {\r\n const response = await deleteReleaseAction({\r\n params: { releaseId, actionId },\r\n });\r\n\r\n if ('data' in response) {\r\n // Handle success\r\n toggleNotification({\r\n type: 'success',\r\n message: formatMessage({\r\n id: 'content-releases.content-manager-edit-view.remove-from-release.notification.success',\r\n defaultMessage: 'Entry removed from release',\r\n }),\r\n });\r\n\r\n return;\r\n }\r\n\r\n if ('error' in response) {\r\n if (isFetchError(response.error)) {\r\n // Handle fetch error\r\n toggleNotification({\r\n type: 'danger',\r\n message: formatAPIError(response.error),\r\n });\r\n } else {\r\n // Handle generic error\r\n toggleNotification({\r\n type: 'danger',\r\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\r\n });\r\n }\r\n }\r\n };\r\n\r\n if (!canDeleteAction) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Menu.Item variant=\"danger\" startIcon={<Cross />} onSelect={handleDeleteAction}>\r\n {formatMessage({\r\n id: 'content-releases.content-manager-edit-view.remove-from-release',\r\n defaultMessage: 'Remove from release',\r\n })}\r\n </Menu.Item>\r\n );\r\n};\r\n\r\n/* -------------------------------------------------------------------------------------------------\r\n * ReleaseActionEntryLinkItem\r\n * -----------------------------------------------------------------------------------------------*/\r\ninterface ReleaseActionEntryLinkItemProps {\r\n contentTypeUid: ReleaseAction['contentType'];\r\n documentId: ReleaseAction['entry']['documentId'];\r\n locale: ReleaseAction['locale'];\r\n}\r\n\r\nconst ReleaseActionEntryLinkItem = ({\r\n contentTypeUid,\r\n documentId,\r\n locale,\r\n}: ReleaseActionEntryLinkItemProps) => {\r\n const { formatMessage } = useIntl();\r\n const userPermissions = useAuth('ReleaseActionEntryLinkItem', (state) => state.permissions);\r\n\r\n // Confirm user has permissions to access the entry for the given locale\r\n const canUpdateEntryForLocale = React.useMemo(() => {\r\n const updatePermissions = userPermissions.find(\r\n (permission) =>\r\n permission.subject === contentTypeUid &&\r\n permission.action === 'plugin::content-manager.explorer.update'\r\n );\r\n\r\n if (!updatePermissions) {\r\n return false;\r\n }\r\n\r\n return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));\r\n }, [contentTypeUid, locale, userPermissions]);\r\n\r\n const {\r\n allowedActions: { canUpdate: canUpdateContentType },\r\n } = useRBAC({\r\n updateContentType: [\r\n {\r\n action: 'plugin::content-manager.explorer.update',\r\n subject: contentTypeUid,\r\n },\r\n ],\r\n });\r\n\r\n if (!canUpdateContentType || !canUpdateEntryForLocale) {\r\n return null;\r\n }\r\n\r\n return (\r\n <StyledMenuLink\r\n /* @ts-expect-error inference isn't working in DS */\r\n tag={NavLink}\r\n isLink\r\n to={{\r\n pathname: `/content-manager/collection-types/${contentTypeUid}/${documentId}`,\r\n search: locale && `?plugins[i18n][locale]=${locale}`,\r\n }}\r\n startIcon={<Pencil />}\r\n >\r\n {formatMessage({\r\n id: 'content-releases.content-manager-edit-view.edit-entry',\r\n defaultMessage: 'Edit entry',\r\n })}\r\n </StyledMenuLink>\r\n );\r\n};\r\n\r\n/* -------------------------------------------------------------------------------------------------\r\n * EditReleaseItem\r\n * -----------------------------------------------------------------------------------------------*/\r\ninterface EditReleaseItemProps {\r\n releaseId: Release['id'];\r\n}\r\n\r\nconst EditReleaseItem = ({ releaseId }: EditReleaseItemProps) => {\r\n const { formatMessage } = useIntl();\r\n\r\n return (\r\n <StyledMenuLink\r\n /* @ts-expect-error inference isn't working in DS */\r\n tag={NavLink}\r\n isLink\r\n to={`/plugins/content-releases/${releaseId}`}\r\n startIcon={<Pencil />}\r\n >\r\n {formatMessage({\r\n id: 'content-releases.content-manager-edit-view.edit-release',\r\n defaultMessage: 'Edit release',\r\n })}\r\n </StyledMenuLink>\r\n );\r\n};\r\n\r\n/* -------------------------------------------------------------------------------------------------\r\n * Root\r\n * -----------------------------------------------------------------------------------------------*/\r\n\r\ninterface RootProps {\r\n children: React.ReactNode;\r\n hasTriggerBorder?: boolean;\r\n}\r\n\r\nconst Root = ({ children }: RootProps) => {\r\n const { formatMessage } = useIntl();\r\n\r\n const { allowedActions } = useRBAC(PERMISSIONS);\r\n\r\n return (\r\n // A user can access the dropdown if they have permissions to delete a release-action OR update a release\r\n allowedActions.canDeleteAction || allowedActions.canUpdate ? (\r\n <Menu.Root>\r\n <StyledMoreButton\r\n variant=\"tertiary\"\r\n endIcon={null}\r\n tag={IconButton}\r\n icon={\r\n <AccessibleIcon\r\n label={formatMessage({\r\n id: 'content-releases.content-manager-edit-view.release-action-menu',\r\n defaultMessage: 'Release action options',\r\n })}\r\n >\r\n <More />\r\n </AccessibleIcon>\r\n }\r\n />\r\n <Menu.Content top={1} popoverPlacement=\"bottom-end\">\r\n {children}\r\n </Menu.Content>\r\n </Menu.Root>\r\n ) : null\r\n );\r\n};\r\n\r\nconst StyledMoreButton = styled(Menu.Trigger)`\r\n & > span {\r\n display: flex;\r\n }\r\n`;\r\n\r\nexport const ReleaseActionMenu = {\r\n Root,\r\n EditReleaseItem,\r\n DeleteReleaseActionItem,\r\n ReleaseActionEntryLinkItem,\r\n};\r\n"],"names":["StyledMenuLink","styled","Menu","Item","theme","colors","DeleteReleaseActionItem","releaseId","actionId","formatMessage","useIntl","toggleNotification","useNotification","formatAPIError","useAPIErrorHandler","deleteReleaseAction","useDeleteReleaseActionMutation","allowedActions","canDeleteAction","useRBAC","PERMISSIONS","handleDeleteAction","response","params","type","message","id","defaultMessage","isFetchError","error","_jsx","variant","startIcon","Cross","onSelect","ReleaseActionEntryLinkItem","contentTypeUid","documentId","locale","userPermissions","useAuth","state","permissions","canUpdateEntryForLocale","React","useMemo","updatePermissions","find","permission","subject","action","Boolean","properties","locales","includes","canUpdate","canUpdateContentType","updateContentType","tag","NavLink","isLink","to","pathname","search","Pencil","EditReleaseItem","Root","children","_jsxs","StyledMoreButton","endIcon","IconButton","icon","AccessibleIcon","label","More","Content","top","popoverPlacement","Trigger","ReleaseActionMenu"],"mappings":"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"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
require('react');
|
|
5
|
+
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
6
|
+
var strapiAdmin$1 = require('@strapi/content-manager/strapi-admin');
|
|
7
|
+
var designSystem = require('@strapi/design-system');
|
|
8
|
+
var icons = require('@strapi/icons');
|
|
9
|
+
var symbols = require('@strapi/icons/symbols');
|
|
10
|
+
var formik = require('formik');
|
|
11
|
+
var reactIntl = require('react-intl');
|
|
12
|
+
var reactRouterDom = require('react-router-dom');
|
|
13
|
+
var yup = require('yup');
|
|
14
|
+
var constants = require('../constants.js');
|
|
15
|
+
var release = require('../services/release.js');
|
|
16
|
+
var ReleaseActionOptions = require('./ReleaseActionOptions.js');
|
|
17
|
+
|
|
18
|
+
function _interopNamespace(e) {
|
|
19
|
+
if (e && e.__esModule) return e;
|
|
20
|
+
var n = Object.create(null);
|
|
21
|
+
if (e) {
|
|
22
|
+
Object.keys(e).forEach(function (k) {
|
|
23
|
+
if (k !== 'default') {
|
|
24
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
25
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
get: function () { return e[k]; }
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
n.default = e;
|
|
33
|
+
return Object.freeze(n);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
|
|
37
|
+
|
|
38
|
+
/* -------------------------------------------------------------------------------------------------
|
|
39
|
+
* AddActionToReleaseModal
|
|
40
|
+
* -----------------------------------------------------------------------------------------------*/ const RELEASE_ACTION_FORM_SCHEMA = yup__namespace.object().shape({
|
|
41
|
+
type: yup__namespace.string().oneOf([
|
|
42
|
+
'publish',
|
|
43
|
+
'unpublish'
|
|
44
|
+
]).required(),
|
|
45
|
+
releaseId: yup__namespace.string().required()
|
|
46
|
+
});
|
|
47
|
+
const INITIAL_VALUES = {
|
|
48
|
+
type: 'publish',
|
|
49
|
+
releaseId: ''
|
|
50
|
+
};
|
|
51
|
+
const NoReleases = ()=>{
|
|
52
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
53
|
+
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.EmptyStateLayout, {
|
|
54
|
+
icon: /*#__PURE__*/ jsxRuntime.jsx(symbols.EmptyDocuments, {
|
|
55
|
+
width: "16rem"
|
|
56
|
+
}),
|
|
57
|
+
content: formatMessage({
|
|
58
|
+
id: 'content-releases.content-manager-edit-view.add-to-release.no-releases-message',
|
|
59
|
+
defaultMessage: 'No available releases. Open the list of releases and create a new one from there.'
|
|
60
|
+
}),
|
|
61
|
+
action: /*#__PURE__*/ jsxRuntime.jsx(designSystem.LinkButton, {
|
|
62
|
+
to: {
|
|
63
|
+
pathname: '/plugins/content-releases'
|
|
64
|
+
},
|
|
65
|
+
tag: reactRouterDom.Link,
|
|
66
|
+
variant: "secondary",
|
|
67
|
+
children: formatMessage({
|
|
68
|
+
id: 'content-releases.content-manager-edit-view.add-to-release.redirect-button',
|
|
69
|
+
defaultMessage: 'Open the list of releases'
|
|
70
|
+
})
|
|
71
|
+
}),
|
|
72
|
+
shadow: "none"
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
const AddActionToReleaseModal = ({ contentType, documentId, onInputChange, values })=>{
|
|
76
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
77
|
+
const [{ query }] = strapiAdmin.useQueryParams();
|
|
78
|
+
const locale = query.plugins?.i18n?.locale;
|
|
79
|
+
// Get all 'pending' releases that do not have the entry attached
|
|
80
|
+
const response = release.useGetReleasesForEntryQuery({
|
|
81
|
+
contentType,
|
|
82
|
+
entryDocumentId: documentId,
|
|
83
|
+
hasEntryAttached: false,
|
|
84
|
+
locale
|
|
85
|
+
});
|
|
86
|
+
const releases = response.data?.data;
|
|
87
|
+
if (releases?.length === 0) {
|
|
88
|
+
return /*#__PURE__*/ jsxRuntime.jsx(NoReleases, {});
|
|
89
|
+
}
|
|
90
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
91
|
+
direction: "column",
|
|
92
|
+
alignItems: "stretch",
|
|
93
|
+
gap: 2,
|
|
94
|
+
children: [
|
|
95
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
96
|
+
paddingBottom: 6,
|
|
97
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
|
|
98
|
+
required: true,
|
|
99
|
+
children: [
|
|
100
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
|
|
101
|
+
children: formatMessage({
|
|
102
|
+
id: 'content-releases.content-manager-edit-view.add-to-release.select-label',
|
|
103
|
+
defaultMessage: 'Select a release'
|
|
104
|
+
})
|
|
105
|
+
}),
|
|
106
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelect, {
|
|
107
|
+
required: true,
|
|
108
|
+
placeholder: formatMessage({
|
|
109
|
+
id: 'content-releases.content-manager-edit-view.add-to-release.select-placeholder',
|
|
110
|
+
defaultMessage: 'Select'
|
|
111
|
+
}),
|
|
112
|
+
name: "releaseId",
|
|
113
|
+
onChange: (value)=>onInputChange('releaseId', value),
|
|
114
|
+
value: values.releaseId,
|
|
115
|
+
children: releases?.map((release)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelectOption, {
|
|
116
|
+
value: release.id,
|
|
117
|
+
children: release.name
|
|
118
|
+
}, release.id))
|
|
119
|
+
})
|
|
120
|
+
]
|
|
121
|
+
})
|
|
122
|
+
}),
|
|
123
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
|
|
124
|
+
children: formatMessage({
|
|
125
|
+
id: 'content-releases.content-manager-edit-view.add-to-release.action-type-label',
|
|
126
|
+
defaultMessage: 'What do you want to do with this entry?'
|
|
127
|
+
})
|
|
128
|
+
}),
|
|
129
|
+
/*#__PURE__*/ jsxRuntime.jsx(ReleaseActionOptions.ReleaseActionOptions, {
|
|
130
|
+
selected: values.type,
|
|
131
|
+
handleChange: (e)=>onInputChange('type', e.target.value),
|
|
132
|
+
name: "type"
|
|
133
|
+
})
|
|
134
|
+
]
|
|
135
|
+
});
|
|
136
|
+
};
|
|
137
|
+
/* -------------------------------------------------------------------------------------------------
|
|
138
|
+
* ReleaseActionModalForm
|
|
139
|
+
* -----------------------------------------------------------------------------------------------*/ const ReleaseActionModalForm = ({ documentId, document, model, collectionType })=>{
|
|
140
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
141
|
+
const { allowedActions } = strapiAdmin.useRBAC(constants.PERMISSIONS);
|
|
142
|
+
const { canCreateAction } = allowedActions;
|
|
143
|
+
const [createReleaseAction, { isLoading }] = release.useCreateReleaseActionMutation();
|
|
144
|
+
const { toggleNotification } = strapiAdmin.useNotification();
|
|
145
|
+
const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
|
146
|
+
const [{ query }] = strapiAdmin.useQueryParams();
|
|
147
|
+
const locale = query.plugins?.i18n?.locale;
|
|
148
|
+
const handleSubmit = async (e, onClose)=>{
|
|
149
|
+
try {
|
|
150
|
+
await formik$1.handleSubmit(e);
|
|
151
|
+
onClose();
|
|
152
|
+
} catch (error) {
|
|
153
|
+
if (strapiAdmin.isFetchError(error)) {
|
|
154
|
+
// Handle axios error
|
|
155
|
+
toggleNotification({
|
|
156
|
+
type: 'danger',
|
|
157
|
+
message: formatAPIError(error)
|
|
158
|
+
});
|
|
159
|
+
} else {
|
|
160
|
+
// Handle generic error
|
|
161
|
+
toggleNotification({
|
|
162
|
+
type: 'danger',
|
|
163
|
+
message: formatMessage({
|
|
164
|
+
id: 'notification.error',
|
|
165
|
+
defaultMessage: 'An error occurred'
|
|
166
|
+
})
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
const formik$1 = formik.useFormik({
|
|
172
|
+
initialValues: INITIAL_VALUES,
|
|
173
|
+
validationSchema: RELEASE_ACTION_FORM_SCHEMA,
|
|
174
|
+
onSubmit: async (values)=>{
|
|
175
|
+
if (collectionType === 'collection-types' && !documentId) {
|
|
176
|
+
throw new Error('Document id is required');
|
|
177
|
+
}
|
|
178
|
+
const response = await createReleaseAction({
|
|
179
|
+
body: {
|
|
180
|
+
type: values.type,
|
|
181
|
+
contentType: model,
|
|
182
|
+
entryDocumentId: documentId,
|
|
183
|
+
locale
|
|
184
|
+
},
|
|
185
|
+
params: {
|
|
186
|
+
releaseId: values.releaseId
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
if ('data' in response) {
|
|
190
|
+
// Handle success
|
|
191
|
+
toggleNotification({
|
|
192
|
+
type: 'success',
|
|
193
|
+
message: formatMessage({
|
|
194
|
+
id: 'content-releases.content-manager-edit-view.add-to-release.notification.success',
|
|
195
|
+
defaultMessage: 'Entry added to release'
|
|
196
|
+
})
|
|
197
|
+
});
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
if ('error' in response) {
|
|
201
|
+
throw response.error;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
const { edit: { options } } = strapiAdmin$1.unstable_useDocumentLayout(model);
|
|
206
|
+
// Project is not EE or contentType does not have draftAndPublish enabled
|
|
207
|
+
if (!window.strapi.isEE || !options?.draftAndPublish || !canCreateAction) {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
if (collectionType === 'collection-types' && (!documentId || documentId === 'create')) {
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
return {
|
|
214
|
+
label: formatMessage({
|
|
215
|
+
id: 'content-releases.content-manager-edit-view.add-to-release',
|
|
216
|
+
defaultMessage: 'Add to release'
|
|
217
|
+
}),
|
|
218
|
+
icon: /*#__PURE__*/ jsxRuntime.jsx(icons.PaperPlane, {}),
|
|
219
|
+
// Entry is creating so we don't want to allow adding it to a release
|
|
220
|
+
disabled: !document,
|
|
221
|
+
position: [
|
|
222
|
+
'panel',
|
|
223
|
+
'table-row'
|
|
224
|
+
],
|
|
225
|
+
dialog: {
|
|
226
|
+
type: 'modal',
|
|
227
|
+
title: formatMessage({
|
|
228
|
+
id: 'content-releases.content-manager-edit-view.add-to-release',
|
|
229
|
+
defaultMessage: 'Add to release'
|
|
230
|
+
}),
|
|
231
|
+
content: /*#__PURE__*/ jsxRuntime.jsx(AddActionToReleaseModal, {
|
|
232
|
+
contentType: model,
|
|
233
|
+
documentId: documentId,
|
|
234
|
+
onInputChange: formik$1.setFieldValue,
|
|
235
|
+
values: formik$1.values
|
|
236
|
+
}),
|
|
237
|
+
footer: ({ onClose })=>/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Footer, {
|
|
238
|
+
children: [
|
|
239
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
240
|
+
onClick: onClose,
|
|
241
|
+
variant: "tertiary",
|
|
242
|
+
name: "cancel",
|
|
243
|
+
children: formatMessage({
|
|
244
|
+
id: 'content-releases.content-manager-edit-view.add-to-release.cancel-button',
|
|
245
|
+
defaultMessage: 'Cancel'
|
|
246
|
+
})
|
|
247
|
+
}),
|
|
248
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
249
|
+
type: "submit",
|
|
250
|
+
// @ts-expect-error - formik ReactEvent types don't match button onClick types as they expect a MouseEvent
|
|
251
|
+
onClick: (e)=>handleSubmit(e, onClose),
|
|
252
|
+
disabled: !formik$1.values.releaseId,
|
|
253
|
+
loading: isLoading,
|
|
254
|
+
children: formatMessage({
|
|
255
|
+
id: 'content-releases.content-manager-edit-view.add-to-release.continue-button',
|
|
256
|
+
defaultMessage: 'Continue'
|
|
257
|
+
})
|
|
258
|
+
})
|
|
259
|
+
]
|
|
260
|
+
})
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
exports.INITIAL_VALUES = INITIAL_VALUES;
|
|
266
|
+
exports.NoReleases = NoReleases;
|
|
267
|
+
exports.RELEASE_ACTION_FORM_SCHEMA = RELEASE_ACTION_FORM_SCHEMA;
|
|
268
|
+
exports.ReleaseActionModalForm = ReleaseActionModalForm;
|
|
269
|
+
//# sourceMappingURL=ReleaseActionModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReleaseActionModal.js","sources":["../../../admin/src/components/ReleaseActionModal.tsx"],"sourcesContent":["import * as React from 'react';\r\n\r\nimport {\r\n useAPIErrorHandler,\r\n useNotification,\r\n useQueryParams,\r\n useRBAC,\r\n isFetchError,\r\n} from '@strapi/admin/strapi-admin';\r\nimport { unstable_useDocumentLayout as useDocumentLayout } from '@strapi/content-manager/strapi-admin';\r\nimport {\r\n Box,\r\n Button,\r\n Flex,\r\n SingleSelect,\r\n SingleSelectOption,\r\n EmptyStateLayout,\r\n LinkButton,\r\n Field,\r\n Modal,\r\n} from '@strapi/design-system';\r\nimport { PaperPlane } from '@strapi/icons';\r\nimport { EmptyDocuments } from '@strapi/icons/symbols';\r\nimport { useFormik } from 'formik';\r\nimport { useIntl } from 'react-intl';\r\nimport { Link as ReactRouterLink } from 'react-router-dom';\r\nimport * as yup from 'yup';\r\n\r\nimport { CreateReleaseAction } from '../../../shared/contracts/release-actions';\r\nimport { PERMISSIONS } from '../constants';\r\nimport { useCreateReleaseActionMutation, useGetReleasesForEntryQuery } from '../services/release';\r\n\r\nimport { ReleaseActionOptions } from './ReleaseActionOptions';\r\n\r\nimport type {\r\n DocumentActionComponent,\r\n DocumentActionProps,\r\n} from '@strapi/content-manager/strapi-admin';\r\nimport type { UID } from '@strapi/types';\r\n\r\n/* -------------------------------------------------------------------------------------------------\r\n * AddActionToReleaseModal\r\n * -----------------------------------------------------------------------------------------------*/\r\nexport const RELEASE_ACTION_FORM_SCHEMA = yup.object().shape({\r\n type: yup.string().oneOf(['publish', 'unpublish']).required(),\r\n releaseId: yup.string().required(),\r\n});\r\n\r\nexport interface FormValues {\r\n type: CreateReleaseAction.Request['body']['type'];\r\n releaseId: CreateReleaseAction.Request['params']['releaseId'];\r\n}\r\n\r\nexport const INITIAL_VALUES = {\r\n type: 'publish',\r\n releaseId: '',\r\n} satisfies FormValues;\r\n\r\ninterface AddActionToReleaseModalProps {\r\n contentType: string;\r\n documentId?: string;\r\n onInputChange: (field: keyof FormValues, value: string | number) => void;\r\n values: FormValues;\r\n}\r\n\r\nexport const NoReleases = () => {\r\n const { formatMessage } = useIntl();\r\n return (\r\n <EmptyStateLayout\r\n icon={<EmptyDocuments width=\"16rem\" />}\r\n content={formatMessage({\r\n id: 'content-releases.content-manager-edit-view.add-to-release.no-releases-message',\r\n defaultMessage:\r\n 'No available releases. Open the list of releases and create a new one from there.',\r\n })}\r\n action={\r\n <LinkButton\r\n to={{\r\n pathname: '/plugins/content-releases',\r\n }}\r\n tag={ReactRouterLink}\r\n variant=\"secondary\"\r\n >\r\n {formatMessage({\r\n id: 'content-releases.content-manager-edit-view.add-to-release.redirect-button',\r\n defaultMessage: 'Open the list of releases',\r\n })}\r\n </LinkButton>\r\n }\r\n shadow=\"none\"\r\n />\r\n );\r\n};\r\n\r\nconst AddActionToReleaseModal = ({\r\n contentType,\r\n documentId,\r\n onInputChange,\r\n values,\r\n}: AddActionToReleaseModalProps) => {\r\n const { formatMessage } = useIntl();\r\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\r\n const locale = query.plugins?.i18n?.locale;\r\n\r\n // Get all 'pending' releases that do not have the entry attached\r\n const response = useGetReleasesForEntryQuery({\r\n contentType,\r\n entryDocumentId: documentId,\r\n hasEntryAttached: false,\r\n locale,\r\n });\r\n\r\n const releases = response.data?.data;\r\n\r\n if (releases?.length === 0) {\r\n return <NoReleases />;\r\n }\r\n\r\n return (\r\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\r\n <Box paddingBottom={6}>\r\n <Field.Root required>\r\n <Field.Label>\r\n {formatMessage({\r\n id: 'content-releases.content-manager-edit-view.add-to-release.select-label',\r\n defaultMessage: 'Select a release',\r\n })}\r\n </Field.Label>\r\n <SingleSelect\r\n required\r\n placeholder={formatMessage({\r\n id: 'content-releases.content-manager-edit-view.add-to-release.select-placeholder',\r\n defaultMessage: 'Select',\r\n })}\r\n name=\"releaseId\"\r\n onChange={(value) => onInputChange('releaseId', value)}\r\n value={values.releaseId}\r\n >\r\n {releases?.map((release) => (\r\n <SingleSelectOption key={release.id} value={release.id}>\r\n {release.name}\r\n </SingleSelectOption>\r\n ))}\r\n </SingleSelect>\r\n </Field.Root>\r\n </Box>\r\n <Field.Label>\r\n {formatMessage({\r\n id: 'content-releases.content-manager-edit-view.add-to-release.action-type-label',\r\n defaultMessage: 'What do you want to do with this entry?',\r\n })}\r\n </Field.Label>\r\n <ReleaseActionOptions\r\n selected={values.type}\r\n handleChange={(e) => onInputChange('type', e.target.value)}\r\n name=\"type\"\r\n />\r\n </Flex>\r\n );\r\n};\r\n\r\n/* -------------------------------------------------------------------------------------------------\r\n * ReleaseActionModalForm\r\n * -----------------------------------------------------------------------------------------------*/\r\n\r\nconst ReleaseActionModalForm: DocumentActionComponent = ({\r\n documentId,\r\n document,\r\n model,\r\n collectionType,\r\n}: DocumentActionProps) => {\r\n const { formatMessage } = useIntl();\r\n const { allowedActions } = useRBAC(PERMISSIONS);\r\n const { canCreateAction } = allowedActions;\r\n const [createReleaseAction, { isLoading }] = useCreateReleaseActionMutation();\r\n const { toggleNotification } = useNotification();\r\n const { formatAPIError } = useAPIErrorHandler();\r\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\r\n const locale = query.plugins?.i18n?.locale;\r\n\r\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>, onClose: () => void) => {\r\n try {\r\n await formik.handleSubmit(e);\r\n onClose();\r\n } catch (error) {\r\n if (isFetchError(error)) {\r\n // Handle axios error\r\n toggleNotification({\r\n type: 'danger',\r\n message: formatAPIError(error),\r\n });\r\n } else {\r\n // Handle generic error\r\n toggleNotification({\r\n type: 'danger',\r\n message: formatMessage({\r\n id: 'notification.error',\r\n defaultMessage: 'An error occurred',\r\n }),\r\n });\r\n }\r\n }\r\n };\r\n\r\n const formik = useFormik({\r\n initialValues: INITIAL_VALUES,\r\n validationSchema: RELEASE_ACTION_FORM_SCHEMA,\r\n onSubmit: async (values: FormValues) => {\r\n if (collectionType === 'collection-types' && !documentId) {\r\n throw new Error('Document id is required');\r\n }\r\n\r\n const response = await createReleaseAction({\r\n body: {\r\n type: values.type,\r\n contentType: model as UID.ContentType,\r\n entryDocumentId: documentId,\r\n locale,\r\n },\r\n params: { releaseId: values.releaseId },\r\n });\r\n\r\n if ('data' in response) {\r\n // Handle success\r\n toggleNotification({\r\n type: 'success',\r\n message: formatMessage({\r\n id: 'content-releases.content-manager-edit-view.add-to-release.notification.success',\r\n defaultMessage: 'Entry added to release',\r\n }),\r\n });\r\n\r\n return;\r\n }\r\n\r\n if ('error' in response) {\r\n throw response.error;\r\n }\r\n },\r\n });\r\n\r\n const {\r\n edit: { options },\r\n } = useDocumentLayout(model);\r\n\r\n // Project is not EE or contentType does not have draftAndPublish enabled\r\n if (!window.strapi.isEE || !options?.draftAndPublish || !canCreateAction) {\r\n return null;\r\n }\r\n\r\n if (collectionType === 'collection-types' && (!documentId || documentId === 'create')) {\r\n return null;\r\n }\r\n\r\n return {\r\n label: formatMessage({\r\n id: 'content-releases.content-manager-edit-view.add-to-release',\r\n defaultMessage: 'Add to release',\r\n }),\r\n icon: <PaperPlane />,\r\n // Entry is creating so we don't want to allow adding it to a release\r\n disabled: !document,\r\n position: ['panel', 'table-row'],\r\n dialog: {\r\n type: 'modal',\r\n title: formatMessage({\r\n id: 'content-releases.content-manager-edit-view.add-to-release',\r\n defaultMessage: 'Add to release',\r\n }),\r\n content: (\r\n <AddActionToReleaseModal\r\n contentType={model}\r\n documentId={documentId}\r\n onInputChange={formik.setFieldValue}\r\n values={formik.values}\r\n />\r\n ),\r\n footer: ({ onClose }) => (\r\n <Modal.Footer>\r\n <Button onClick={onClose} variant=\"tertiary\" name=\"cancel\">\r\n {formatMessage({\r\n id: 'content-releases.content-manager-edit-view.add-to-release.cancel-button',\r\n defaultMessage: 'Cancel',\r\n })}\r\n </Button>\r\n <Button\r\n type=\"submit\"\r\n // @ts-expect-error - formik ReactEvent types don't match button onClick types as they expect a MouseEvent\r\n onClick={(e) => handleSubmit(e, onClose)}\r\n disabled={!formik.values.releaseId}\r\n loading={isLoading}\r\n >\r\n {formatMessage({\r\n id: 'content-releases.content-manager-edit-view.add-to-release.continue-button',\r\n defaultMessage: 'Continue',\r\n })}\r\n </Button>\r\n </Modal.Footer>\r\n ),\r\n },\r\n };\r\n};\r\n\r\nexport { ReleaseActionModalForm };\r\n"],"names":["RELEASE_ACTION_FORM_SCHEMA","yup","object","shape","type","string","oneOf","required","releaseId","INITIAL_VALUES","NoReleases","formatMessage","useIntl","_jsx","EmptyStateLayout","icon","EmptyDocuments","width","content","id","defaultMessage","action","LinkButton","to","pathname","tag","ReactRouterLink","variant","shadow","AddActionToReleaseModal","contentType","documentId","onInputChange","values","query","useQueryParams","locale","plugins","i18n","response","useGetReleasesForEntryQuery","entryDocumentId","hasEntryAttached","releases","data","length","_jsxs","Flex","direction","alignItems","gap","Box","paddingBottom","Field","Root","Label","SingleSelect","placeholder","name","onChange","value","map","release","SingleSelectOption","ReleaseActionOptions","selected","handleChange","e","target","ReleaseActionModalForm","document","model","collectionType","allowedActions","useRBAC","PERMISSIONS","canCreateAction","createReleaseAction","isLoading","useCreateReleaseActionMutation","toggleNotification","useNotification","formatAPIError","useAPIErrorHandler","handleSubmit","onClose","formik","error","isFetchError","message","useFormik","initialValues","validationSchema","onSubmit","Error","body","params","edit","options","useDocumentLayout","window","strapi","isEE","draftAndPublish","label","PaperPlane","disabled","position","dialog","title","setFieldValue","footer","Modal","Footer","Button","onClick","loading"],"mappings":"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"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import 'react';
|
|
3
|
+
import { useRBAC, useNotification, useAPIErrorHandler, useQueryParams, isFetchError } from '@strapi/admin/strapi-admin';
|
|
4
|
+
import { unstable_useDocumentLayout } from '@strapi/content-manager/strapi-admin';
|
|
5
|
+
import { Modal, Button, Flex, Box, Field, SingleSelect, SingleSelectOption, EmptyStateLayout, LinkButton } from '@strapi/design-system';
|
|
6
|
+
import { PaperPlane } from '@strapi/icons';
|
|
7
|
+
import { EmptyDocuments } from '@strapi/icons/symbols';
|
|
8
|
+
import { useFormik } from 'formik';
|
|
9
|
+
import { useIntl } from 'react-intl';
|
|
10
|
+
import { Link } from 'react-router-dom';
|
|
11
|
+
import * as yup from 'yup';
|
|
12
|
+
import { PERMISSIONS } from '../constants.mjs';
|
|
13
|
+
import { useCreateReleaseActionMutation, useGetReleasesForEntryQuery } from '../services/release.mjs';
|
|
14
|
+
import { ReleaseActionOptions } from './ReleaseActionOptions.mjs';
|
|
15
|
+
|
|
16
|
+
/* -------------------------------------------------------------------------------------------------
|
|
17
|
+
* AddActionToReleaseModal
|
|
18
|
+
* -----------------------------------------------------------------------------------------------*/ const RELEASE_ACTION_FORM_SCHEMA = yup.object().shape({
|
|
19
|
+
type: yup.string().oneOf([
|
|
20
|
+
'publish',
|
|
21
|
+
'unpublish'
|
|
22
|
+
]).required(),
|
|
23
|
+
releaseId: yup.string().required()
|
|
24
|
+
});
|
|
25
|
+
const INITIAL_VALUES = {
|
|
26
|
+
type: 'publish',
|
|
27
|
+
releaseId: ''
|
|
28
|
+
};
|
|
29
|
+
const NoReleases = ()=>{
|
|
30
|
+
const { formatMessage } = useIntl();
|
|
31
|
+
return /*#__PURE__*/ jsx(EmptyStateLayout, {
|
|
32
|
+
icon: /*#__PURE__*/ jsx(EmptyDocuments, {
|
|
33
|
+
width: "16rem"
|
|
34
|
+
}),
|
|
35
|
+
content: formatMessage({
|
|
36
|
+
id: 'content-releases.content-manager-edit-view.add-to-release.no-releases-message',
|
|
37
|
+
defaultMessage: 'No available releases. Open the list of releases and create a new one from there.'
|
|
38
|
+
}),
|
|
39
|
+
action: /*#__PURE__*/ jsx(LinkButton, {
|
|
40
|
+
to: {
|
|
41
|
+
pathname: '/plugins/content-releases'
|
|
42
|
+
},
|
|
43
|
+
tag: Link,
|
|
44
|
+
variant: "secondary",
|
|
45
|
+
children: formatMessage({
|
|
46
|
+
id: 'content-releases.content-manager-edit-view.add-to-release.redirect-button',
|
|
47
|
+
defaultMessage: 'Open the list of releases'
|
|
48
|
+
})
|
|
49
|
+
}),
|
|
50
|
+
shadow: "none"
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
const AddActionToReleaseModal = ({ contentType, documentId, onInputChange, values })=>{
|
|
54
|
+
const { formatMessage } = useIntl();
|
|
55
|
+
const [{ query }] = useQueryParams();
|
|
56
|
+
const locale = query.plugins?.i18n?.locale;
|
|
57
|
+
// Get all 'pending' releases that do not have the entry attached
|
|
58
|
+
const response = useGetReleasesForEntryQuery({
|
|
59
|
+
contentType,
|
|
60
|
+
entryDocumentId: documentId,
|
|
61
|
+
hasEntryAttached: false,
|
|
62
|
+
locale
|
|
63
|
+
});
|
|
64
|
+
const releases = response.data?.data;
|
|
65
|
+
if (releases?.length === 0) {
|
|
66
|
+
return /*#__PURE__*/ jsx(NoReleases, {});
|
|
67
|
+
}
|
|
68
|
+
return /*#__PURE__*/ jsxs(Flex, {
|
|
69
|
+
direction: "column",
|
|
70
|
+
alignItems: "stretch",
|
|
71
|
+
gap: 2,
|
|
72
|
+
children: [
|
|
73
|
+
/*#__PURE__*/ jsx(Box, {
|
|
74
|
+
paddingBottom: 6,
|
|
75
|
+
children: /*#__PURE__*/ jsxs(Field.Root, {
|
|
76
|
+
required: true,
|
|
77
|
+
children: [
|
|
78
|
+
/*#__PURE__*/ jsx(Field.Label, {
|
|
79
|
+
children: formatMessage({
|
|
80
|
+
id: 'content-releases.content-manager-edit-view.add-to-release.select-label',
|
|
81
|
+
defaultMessage: 'Select a release'
|
|
82
|
+
})
|
|
83
|
+
}),
|
|
84
|
+
/*#__PURE__*/ jsx(SingleSelect, {
|
|
85
|
+
required: true,
|
|
86
|
+
placeholder: formatMessage({
|
|
87
|
+
id: 'content-releases.content-manager-edit-view.add-to-release.select-placeholder',
|
|
88
|
+
defaultMessage: 'Select'
|
|
89
|
+
}),
|
|
90
|
+
name: "releaseId",
|
|
91
|
+
onChange: (value)=>onInputChange('releaseId', value),
|
|
92
|
+
value: values.releaseId,
|
|
93
|
+
children: releases?.map((release)=>/*#__PURE__*/ jsx(SingleSelectOption, {
|
|
94
|
+
value: release.id,
|
|
95
|
+
children: release.name
|
|
96
|
+
}, release.id))
|
|
97
|
+
})
|
|
98
|
+
]
|
|
99
|
+
})
|
|
100
|
+
}),
|
|
101
|
+
/*#__PURE__*/ jsx(Field.Label, {
|
|
102
|
+
children: formatMessage({
|
|
103
|
+
id: 'content-releases.content-manager-edit-view.add-to-release.action-type-label',
|
|
104
|
+
defaultMessage: 'What do you want to do with this entry?'
|
|
105
|
+
})
|
|
106
|
+
}),
|
|
107
|
+
/*#__PURE__*/ jsx(ReleaseActionOptions, {
|
|
108
|
+
selected: values.type,
|
|
109
|
+
handleChange: (e)=>onInputChange('type', e.target.value),
|
|
110
|
+
name: "type"
|
|
111
|
+
})
|
|
112
|
+
]
|
|
113
|
+
});
|
|
114
|
+
};
|
|
115
|
+
/* -------------------------------------------------------------------------------------------------
|
|
116
|
+
* ReleaseActionModalForm
|
|
117
|
+
* -----------------------------------------------------------------------------------------------*/ const ReleaseActionModalForm = ({ documentId, document, model, collectionType })=>{
|
|
118
|
+
const { formatMessage } = useIntl();
|
|
119
|
+
const { allowedActions } = useRBAC(PERMISSIONS);
|
|
120
|
+
const { canCreateAction } = allowedActions;
|
|
121
|
+
const [createReleaseAction, { isLoading }] = useCreateReleaseActionMutation();
|
|
122
|
+
const { toggleNotification } = useNotification();
|
|
123
|
+
const { formatAPIError } = useAPIErrorHandler();
|
|
124
|
+
const [{ query }] = useQueryParams();
|
|
125
|
+
const locale = query.plugins?.i18n?.locale;
|
|
126
|
+
const handleSubmit = async (e, onClose)=>{
|
|
127
|
+
try {
|
|
128
|
+
await formik.handleSubmit(e);
|
|
129
|
+
onClose();
|
|
130
|
+
} catch (error) {
|
|
131
|
+
if (isFetchError(error)) {
|
|
132
|
+
// Handle axios error
|
|
133
|
+
toggleNotification({
|
|
134
|
+
type: 'danger',
|
|
135
|
+
message: formatAPIError(error)
|
|
136
|
+
});
|
|
137
|
+
} else {
|
|
138
|
+
// Handle generic error
|
|
139
|
+
toggleNotification({
|
|
140
|
+
type: 'danger',
|
|
141
|
+
message: formatMessage({
|
|
142
|
+
id: 'notification.error',
|
|
143
|
+
defaultMessage: 'An error occurred'
|
|
144
|
+
})
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
const formik = useFormik({
|
|
150
|
+
initialValues: INITIAL_VALUES,
|
|
151
|
+
validationSchema: RELEASE_ACTION_FORM_SCHEMA,
|
|
152
|
+
onSubmit: async (values)=>{
|
|
153
|
+
if (collectionType === 'collection-types' && !documentId) {
|
|
154
|
+
throw new Error('Document id is required');
|
|
155
|
+
}
|
|
156
|
+
const response = await createReleaseAction({
|
|
157
|
+
body: {
|
|
158
|
+
type: values.type,
|
|
159
|
+
contentType: model,
|
|
160
|
+
entryDocumentId: documentId,
|
|
161
|
+
locale
|
|
162
|
+
},
|
|
163
|
+
params: {
|
|
164
|
+
releaseId: values.releaseId
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
if ('data' in response) {
|
|
168
|
+
// Handle success
|
|
169
|
+
toggleNotification({
|
|
170
|
+
type: 'success',
|
|
171
|
+
message: formatMessage({
|
|
172
|
+
id: 'content-releases.content-manager-edit-view.add-to-release.notification.success',
|
|
173
|
+
defaultMessage: 'Entry added to release'
|
|
174
|
+
})
|
|
175
|
+
});
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
if ('error' in response) {
|
|
179
|
+
throw response.error;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
const { edit: { options } } = unstable_useDocumentLayout(model);
|
|
184
|
+
// Project is not EE or contentType does not have draftAndPublish enabled
|
|
185
|
+
if (!window.strapi.isEE || !options?.draftAndPublish || !canCreateAction) {
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
if (collectionType === 'collection-types' && (!documentId || documentId === 'create')) {
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
label: formatMessage({
|
|
193
|
+
id: 'content-releases.content-manager-edit-view.add-to-release',
|
|
194
|
+
defaultMessage: 'Add to release'
|
|
195
|
+
}),
|
|
196
|
+
icon: /*#__PURE__*/ jsx(PaperPlane, {}),
|
|
197
|
+
// Entry is creating so we don't want to allow adding it to a release
|
|
198
|
+
disabled: !document,
|
|
199
|
+
position: [
|
|
200
|
+
'panel',
|
|
201
|
+
'table-row'
|
|
202
|
+
],
|
|
203
|
+
dialog: {
|
|
204
|
+
type: 'modal',
|
|
205
|
+
title: formatMessage({
|
|
206
|
+
id: 'content-releases.content-manager-edit-view.add-to-release',
|
|
207
|
+
defaultMessage: 'Add to release'
|
|
208
|
+
}),
|
|
209
|
+
content: /*#__PURE__*/ jsx(AddActionToReleaseModal, {
|
|
210
|
+
contentType: model,
|
|
211
|
+
documentId: documentId,
|
|
212
|
+
onInputChange: formik.setFieldValue,
|
|
213
|
+
values: formik.values
|
|
214
|
+
}),
|
|
215
|
+
footer: ({ onClose })=>/*#__PURE__*/ jsxs(Modal.Footer, {
|
|
216
|
+
children: [
|
|
217
|
+
/*#__PURE__*/ jsx(Button, {
|
|
218
|
+
onClick: onClose,
|
|
219
|
+
variant: "tertiary",
|
|
220
|
+
name: "cancel",
|
|
221
|
+
children: formatMessage({
|
|
222
|
+
id: 'content-releases.content-manager-edit-view.add-to-release.cancel-button',
|
|
223
|
+
defaultMessage: 'Cancel'
|
|
224
|
+
})
|
|
225
|
+
}),
|
|
226
|
+
/*#__PURE__*/ jsx(Button, {
|
|
227
|
+
type: "submit",
|
|
228
|
+
// @ts-expect-error - formik ReactEvent types don't match button onClick types as they expect a MouseEvent
|
|
229
|
+
onClick: (e)=>handleSubmit(e, onClose),
|
|
230
|
+
disabled: !formik.values.releaseId,
|
|
231
|
+
loading: isLoading,
|
|
232
|
+
children: formatMessage({
|
|
233
|
+
id: 'content-releases.content-manager-edit-view.add-to-release.continue-button',
|
|
234
|
+
defaultMessage: 'Continue'
|
|
235
|
+
})
|
|
236
|
+
})
|
|
237
|
+
]
|
|
238
|
+
})
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
export { INITIAL_VALUES, NoReleases, RELEASE_ACTION_FORM_SCHEMA, ReleaseActionModalForm };
|
|
244
|
+
//# sourceMappingURL=ReleaseActionModal.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReleaseActionModal.mjs","sources":["../../../admin/src/components/ReleaseActionModal.tsx"],"sourcesContent":["import * as React from 'react';\r\n\r\nimport {\r\n useAPIErrorHandler,\r\n useNotification,\r\n useQueryParams,\r\n useRBAC,\r\n isFetchError,\r\n} from '@strapi/admin/strapi-admin';\r\nimport { unstable_useDocumentLayout as useDocumentLayout } from '@strapi/content-manager/strapi-admin';\r\nimport {\r\n Box,\r\n Button,\r\n Flex,\r\n SingleSelect,\r\n SingleSelectOption,\r\n EmptyStateLayout,\r\n LinkButton,\r\n Field,\r\n Modal,\r\n} from '@strapi/design-system';\r\nimport { PaperPlane } from '@strapi/icons';\r\nimport { EmptyDocuments } from '@strapi/icons/symbols';\r\nimport { useFormik } from 'formik';\r\nimport { useIntl } from 'react-intl';\r\nimport { Link as ReactRouterLink } from 'react-router-dom';\r\nimport * as yup from 'yup';\r\n\r\nimport { CreateReleaseAction } from '../../../shared/contracts/release-actions';\r\nimport { PERMISSIONS } from '../constants';\r\nimport { useCreateReleaseActionMutation, useGetReleasesForEntryQuery } from '../services/release';\r\n\r\nimport { ReleaseActionOptions } from './ReleaseActionOptions';\r\n\r\nimport type {\r\n DocumentActionComponent,\r\n DocumentActionProps,\r\n} from '@strapi/content-manager/strapi-admin';\r\nimport type { UID } from '@strapi/types';\r\n\r\n/* -------------------------------------------------------------------------------------------------\r\n * AddActionToReleaseModal\r\n * -----------------------------------------------------------------------------------------------*/\r\nexport const RELEASE_ACTION_FORM_SCHEMA = yup.object().shape({\r\n type: yup.string().oneOf(['publish', 'unpublish']).required(),\r\n releaseId: yup.string().required(),\r\n});\r\n\r\nexport interface FormValues {\r\n type: CreateReleaseAction.Request['body']['type'];\r\n releaseId: CreateReleaseAction.Request['params']['releaseId'];\r\n}\r\n\r\nexport const INITIAL_VALUES = {\r\n type: 'publish',\r\n releaseId: '',\r\n} satisfies FormValues;\r\n\r\ninterface AddActionToReleaseModalProps {\r\n contentType: string;\r\n documentId?: string;\r\n onInputChange: (field: keyof FormValues, value: string | number) => void;\r\n values: FormValues;\r\n}\r\n\r\nexport const NoReleases = () => {\r\n const { formatMessage } = useIntl();\r\n return (\r\n <EmptyStateLayout\r\n icon={<EmptyDocuments width=\"16rem\" />}\r\n content={formatMessage({\r\n id: 'content-releases.content-manager-edit-view.add-to-release.no-releases-message',\r\n defaultMessage:\r\n 'No available releases. Open the list of releases and create a new one from there.',\r\n })}\r\n action={\r\n <LinkButton\r\n to={{\r\n pathname: '/plugins/content-releases',\r\n }}\r\n tag={ReactRouterLink}\r\n variant=\"secondary\"\r\n >\r\n {formatMessage({\r\n id: 'content-releases.content-manager-edit-view.add-to-release.redirect-button',\r\n defaultMessage: 'Open the list of releases',\r\n })}\r\n </LinkButton>\r\n }\r\n shadow=\"none\"\r\n />\r\n );\r\n};\r\n\r\nconst AddActionToReleaseModal = ({\r\n contentType,\r\n documentId,\r\n onInputChange,\r\n values,\r\n}: AddActionToReleaseModalProps) => {\r\n const { formatMessage } = useIntl();\r\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\r\n const locale = query.plugins?.i18n?.locale;\r\n\r\n // Get all 'pending' releases that do not have the entry attached\r\n const response = useGetReleasesForEntryQuery({\r\n contentType,\r\n entryDocumentId: documentId,\r\n hasEntryAttached: false,\r\n locale,\r\n });\r\n\r\n const releases = response.data?.data;\r\n\r\n if (releases?.length === 0) {\r\n return <NoReleases />;\r\n }\r\n\r\n return (\r\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\r\n <Box paddingBottom={6}>\r\n <Field.Root required>\r\n <Field.Label>\r\n {formatMessage({\r\n id: 'content-releases.content-manager-edit-view.add-to-release.select-label',\r\n defaultMessage: 'Select a release',\r\n })}\r\n </Field.Label>\r\n <SingleSelect\r\n required\r\n placeholder={formatMessage({\r\n id: 'content-releases.content-manager-edit-view.add-to-release.select-placeholder',\r\n defaultMessage: 'Select',\r\n })}\r\n name=\"releaseId\"\r\n onChange={(value) => onInputChange('releaseId', value)}\r\n value={values.releaseId}\r\n >\r\n {releases?.map((release) => (\r\n <SingleSelectOption key={release.id} value={release.id}>\r\n {release.name}\r\n </SingleSelectOption>\r\n ))}\r\n </SingleSelect>\r\n </Field.Root>\r\n </Box>\r\n <Field.Label>\r\n {formatMessage({\r\n id: 'content-releases.content-manager-edit-view.add-to-release.action-type-label',\r\n defaultMessage: 'What do you want to do with this entry?',\r\n })}\r\n </Field.Label>\r\n <ReleaseActionOptions\r\n selected={values.type}\r\n handleChange={(e) => onInputChange('type', e.target.value)}\r\n name=\"type\"\r\n />\r\n </Flex>\r\n );\r\n};\r\n\r\n/* -------------------------------------------------------------------------------------------------\r\n * ReleaseActionModalForm\r\n * -----------------------------------------------------------------------------------------------*/\r\n\r\nconst ReleaseActionModalForm: DocumentActionComponent = ({\r\n documentId,\r\n document,\r\n model,\r\n collectionType,\r\n}: DocumentActionProps) => {\r\n const { formatMessage } = useIntl();\r\n const { allowedActions } = useRBAC(PERMISSIONS);\r\n const { canCreateAction } = allowedActions;\r\n const [createReleaseAction, { isLoading }] = useCreateReleaseActionMutation();\r\n const { toggleNotification } = useNotification();\r\n const { formatAPIError } = useAPIErrorHandler();\r\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\r\n const locale = query.plugins?.i18n?.locale;\r\n\r\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>, onClose: () => void) => {\r\n try {\r\n await formik.handleSubmit(e);\r\n onClose();\r\n } catch (error) {\r\n if (isFetchError(error)) {\r\n // Handle axios error\r\n toggleNotification({\r\n type: 'danger',\r\n message: formatAPIError(error),\r\n });\r\n } else {\r\n // Handle generic error\r\n toggleNotification({\r\n type: 'danger',\r\n message: formatMessage({\r\n id: 'notification.error',\r\n defaultMessage: 'An error occurred',\r\n }),\r\n });\r\n }\r\n }\r\n };\r\n\r\n const formik = useFormik({\r\n initialValues: INITIAL_VALUES,\r\n validationSchema: RELEASE_ACTION_FORM_SCHEMA,\r\n onSubmit: async (values: FormValues) => {\r\n if (collectionType === 'collection-types' && !documentId) {\r\n throw new Error('Document id is required');\r\n }\r\n\r\n const response = await createReleaseAction({\r\n body: {\r\n type: values.type,\r\n contentType: model as UID.ContentType,\r\n entryDocumentId: documentId,\r\n locale,\r\n },\r\n params: { releaseId: values.releaseId },\r\n });\r\n\r\n if ('data' in response) {\r\n // Handle success\r\n toggleNotification({\r\n type: 'success',\r\n message: formatMessage({\r\n id: 'content-releases.content-manager-edit-view.add-to-release.notification.success',\r\n defaultMessage: 'Entry added to release',\r\n }),\r\n });\r\n\r\n return;\r\n }\r\n\r\n if ('error' in response) {\r\n throw response.error;\r\n }\r\n },\r\n });\r\n\r\n const {\r\n edit: { options },\r\n } = useDocumentLayout(model);\r\n\r\n // Project is not EE or contentType does not have draftAndPublish enabled\r\n if (!window.strapi.isEE || !options?.draftAndPublish || !canCreateAction) {\r\n return null;\r\n }\r\n\r\n if (collectionType === 'collection-types' && (!documentId || documentId === 'create')) {\r\n return null;\r\n }\r\n\r\n return {\r\n label: formatMessage({\r\n id: 'content-releases.content-manager-edit-view.add-to-release',\r\n defaultMessage: 'Add to release',\r\n }),\r\n icon: <PaperPlane />,\r\n // Entry is creating so we don't want to allow adding it to a release\r\n disabled: !document,\r\n position: ['panel', 'table-row'],\r\n dialog: {\r\n type: 'modal',\r\n title: formatMessage({\r\n id: 'content-releases.content-manager-edit-view.add-to-release',\r\n defaultMessage: 'Add to release',\r\n }),\r\n content: (\r\n <AddActionToReleaseModal\r\n contentType={model}\r\n documentId={documentId}\r\n onInputChange={formik.setFieldValue}\r\n values={formik.values}\r\n />\r\n ),\r\n footer: ({ onClose }) => (\r\n <Modal.Footer>\r\n <Button onClick={onClose} variant=\"tertiary\" name=\"cancel\">\r\n {formatMessage({\r\n id: 'content-releases.content-manager-edit-view.add-to-release.cancel-button',\r\n defaultMessage: 'Cancel',\r\n })}\r\n </Button>\r\n <Button\r\n type=\"submit\"\r\n // @ts-expect-error - formik ReactEvent types don't match button onClick types as they expect a MouseEvent\r\n onClick={(e) => handleSubmit(e, onClose)}\r\n disabled={!formik.values.releaseId}\r\n loading={isLoading}\r\n >\r\n {formatMessage({\r\n id: 'content-releases.content-manager-edit-view.add-to-release.continue-button',\r\n defaultMessage: 'Continue',\r\n })}\r\n </Button>\r\n </Modal.Footer>\r\n ),\r\n },\r\n };\r\n};\r\n\r\nexport { ReleaseActionModalForm };\r\n"],"names":["RELEASE_ACTION_FORM_SCHEMA","yup","object","shape","type","string","oneOf","required","releaseId","INITIAL_VALUES","NoReleases","formatMessage","useIntl","_jsx","EmptyStateLayout","icon","EmptyDocuments","width","content","id","defaultMessage","action","LinkButton","to","pathname","tag","ReactRouterLink","variant","shadow","AddActionToReleaseModal","contentType","documentId","onInputChange","values","query","useQueryParams","locale","plugins","i18n","response","useGetReleasesForEntryQuery","entryDocumentId","hasEntryAttached","releases","data","length","_jsxs","Flex","direction","alignItems","gap","Box","paddingBottom","Field","Root","Label","SingleSelect","placeholder","name","onChange","value","map","release","SingleSelectOption","ReleaseActionOptions","selected","handleChange","e","target","ReleaseActionModalForm","document","model","collectionType","allowedActions","useRBAC","PERMISSIONS","canCreateAction","createReleaseAction","isLoading","useCreateReleaseActionMutation","toggleNotification","useNotification","formatAPIError","useAPIErrorHandler","handleSubmit","onClose","formik","error","isFetchError","message","useFormik","initialValues","validationSchema","onSubmit","Error","body","params","edit","options","useDocumentLayout","window","strapi","isEE","draftAndPublish","label","PaperPlane","disabled","position","dialog","title","setFieldValue","footer","Modal","Footer","Button","onClick","loading"],"mappings":"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"}
|