@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
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { Modal, Flex, Field, TextInput, Box, Checkbox, Typography, DatePicker, TimePicker, Button, Combobox, ComboboxOption } from '@strapi/design-system';
|
|
4
|
+
import { formatISO } from 'date-fns';
|
|
5
|
+
import { utcToZonedTime, zonedTimeToUtc } from 'date-fns-tz';
|
|
6
|
+
import { Formik, Form, useFormikContext } from 'formik';
|
|
7
|
+
import { useIntl } from 'react-intl';
|
|
8
|
+
import { useLocation } from 'react-router-dom';
|
|
9
|
+
import { pluginId } from '../pluginId.mjs';
|
|
10
|
+
import { getTimezones } from '../utils/time.mjs';
|
|
11
|
+
import { RELEASE_SCHEMA } from '../validation/schemas.mjs';
|
|
12
|
+
|
|
13
|
+
const ReleaseModal = ({ handleClose, open, handleSubmit, initialValues, isLoading = false })=>{
|
|
14
|
+
const { formatMessage } = useIntl();
|
|
15
|
+
const { pathname } = useLocation();
|
|
16
|
+
const isCreatingRelease = pathname === `/plugins/${pluginId}`;
|
|
17
|
+
// Set default first timezone from the list if no system timezone detected
|
|
18
|
+
const { timezoneList, systemTimezone = {
|
|
19
|
+
value: 'UTC+00:00-Africa/Abidjan '
|
|
20
|
+
} } = getTimezones(initialValues.scheduledAt ? new Date(initialValues.scheduledAt) : new Date());
|
|
21
|
+
/**
|
|
22
|
+
* Generate scheduled time using selected date, time and timezone
|
|
23
|
+
*/ const getScheduledTimestamp = (values)=>{
|
|
24
|
+
const { date, time, timezone } = values;
|
|
25
|
+
if (!date || !time || !timezone) return null;
|
|
26
|
+
const timezoneWithoutOffset = timezone.split('&')[1];
|
|
27
|
+
return zonedTimeToUtc(`${date} ${time}`, timezoneWithoutOffset);
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Get timezone with offset to show the selected value in the dropdown
|
|
31
|
+
*/ const getTimezoneWithOffset = ()=>{
|
|
32
|
+
const currentTimezone = timezoneList.find((timezone)=>timezone.value.split('&')[1] === initialValues.timezone);
|
|
33
|
+
return currentTimezone?.value || systemTimezone.value;
|
|
34
|
+
};
|
|
35
|
+
return /*#__PURE__*/ jsx(Modal.Root, {
|
|
36
|
+
open: open,
|
|
37
|
+
onOpenChange: handleClose,
|
|
38
|
+
children: /*#__PURE__*/ jsxs(Modal.Content, {
|
|
39
|
+
children: [
|
|
40
|
+
/*#__PURE__*/ jsx(Modal.Header, {
|
|
41
|
+
children: /*#__PURE__*/ jsx(Modal.Title, {
|
|
42
|
+
children: formatMessage({
|
|
43
|
+
id: 'content-releases.modal.title',
|
|
44
|
+
defaultMessage: '{isCreatingRelease, select, true {New release} other {Edit release}}'
|
|
45
|
+
}, {
|
|
46
|
+
isCreatingRelease: isCreatingRelease
|
|
47
|
+
})
|
|
48
|
+
})
|
|
49
|
+
}),
|
|
50
|
+
/*#__PURE__*/ jsx(Formik, {
|
|
51
|
+
onSubmit: (values)=>{
|
|
52
|
+
handleSubmit({
|
|
53
|
+
...values,
|
|
54
|
+
timezone: values.timezone ? values.timezone.split('&')[1] : null,
|
|
55
|
+
scheduledAt: values.isScheduled ? getScheduledTimestamp(values) : null
|
|
56
|
+
});
|
|
57
|
+
},
|
|
58
|
+
initialValues: {
|
|
59
|
+
...initialValues,
|
|
60
|
+
timezone: initialValues.timezone ? getTimezoneWithOffset() : systemTimezone.value
|
|
61
|
+
},
|
|
62
|
+
validationSchema: RELEASE_SCHEMA,
|
|
63
|
+
validateOnChange: false,
|
|
64
|
+
children: ({ values, errors, handleChange, setFieldValue })=>{
|
|
65
|
+
return /*#__PURE__*/ jsxs(Form, {
|
|
66
|
+
children: [
|
|
67
|
+
/*#__PURE__*/ jsx(Modal.Body, {
|
|
68
|
+
children: /*#__PURE__*/ jsxs(Flex, {
|
|
69
|
+
direction: "column",
|
|
70
|
+
alignItems: "stretch",
|
|
71
|
+
gap: 6,
|
|
72
|
+
children: [
|
|
73
|
+
/*#__PURE__*/ jsxs(Field.Root, {
|
|
74
|
+
name: "name",
|
|
75
|
+
error: errors.name && formatMessage({
|
|
76
|
+
id: errors.name,
|
|
77
|
+
defaultMessage: errors.name
|
|
78
|
+
}),
|
|
79
|
+
required: true,
|
|
80
|
+
children: [
|
|
81
|
+
/*#__PURE__*/ jsx(Field.Label, {
|
|
82
|
+
children: formatMessage({
|
|
83
|
+
id: 'content-releases.modal.form.input.label.release-name',
|
|
84
|
+
defaultMessage: 'Name'
|
|
85
|
+
})
|
|
86
|
+
}),
|
|
87
|
+
/*#__PURE__*/ jsx(TextInput, {
|
|
88
|
+
type: "text",
|
|
89
|
+
value: values.name,
|
|
90
|
+
onChange: handleChange
|
|
91
|
+
}),
|
|
92
|
+
/*#__PURE__*/ jsx(Field.Error, {})
|
|
93
|
+
]
|
|
94
|
+
}),
|
|
95
|
+
/*#__PURE__*/ jsx(Box, {
|
|
96
|
+
width: "max-content",
|
|
97
|
+
children: /*#__PURE__*/ jsx(Checkbox, {
|
|
98
|
+
name: "isScheduled",
|
|
99
|
+
checked: values.isScheduled,
|
|
100
|
+
onCheckedChange: (checked)=>{
|
|
101
|
+
setFieldValue('isScheduled', checked);
|
|
102
|
+
if (!checked) {
|
|
103
|
+
// Clear scheduling info from a release on unchecking schedule release, which reset scheduling info in DB
|
|
104
|
+
setFieldValue('date', null);
|
|
105
|
+
setFieldValue('time', '');
|
|
106
|
+
setFieldValue('timezone', null);
|
|
107
|
+
} else {
|
|
108
|
+
// On ticking back schedule release date, time and timezone should be restored to the initial state
|
|
109
|
+
setFieldValue('date', initialValues.date);
|
|
110
|
+
setFieldValue('time', initialValues.time);
|
|
111
|
+
setFieldValue('timezone', initialValues.timezone ?? systemTimezone?.value);
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
children: /*#__PURE__*/ jsx(Typography, {
|
|
115
|
+
textColor: values.isScheduled ? 'primary600' : 'neutral800',
|
|
116
|
+
fontWeight: values.isScheduled ? 'semiBold' : 'regular',
|
|
117
|
+
children: formatMessage({
|
|
118
|
+
id: 'modal.form.input.label.schedule-release',
|
|
119
|
+
defaultMessage: 'Schedule release'
|
|
120
|
+
})
|
|
121
|
+
})
|
|
122
|
+
})
|
|
123
|
+
}),
|
|
124
|
+
values.isScheduled && /*#__PURE__*/ jsxs(Fragment, {
|
|
125
|
+
children: [
|
|
126
|
+
/*#__PURE__*/ jsxs(Flex, {
|
|
127
|
+
gap: 4,
|
|
128
|
+
alignItems: "start",
|
|
129
|
+
direction: {
|
|
130
|
+
initial: 'column',
|
|
131
|
+
medium: 'row'
|
|
132
|
+
},
|
|
133
|
+
wrap: "wrap",
|
|
134
|
+
children: [
|
|
135
|
+
/*#__PURE__*/ jsx(Box, {
|
|
136
|
+
width: "100%",
|
|
137
|
+
flex: 1,
|
|
138
|
+
children: /*#__PURE__*/ jsxs(Field.Root, {
|
|
139
|
+
name: "date",
|
|
140
|
+
error: errors.date && formatMessage({
|
|
141
|
+
id: errors.date,
|
|
142
|
+
defaultMessage: errors.date
|
|
143
|
+
}),
|
|
144
|
+
required: true,
|
|
145
|
+
children: [
|
|
146
|
+
/*#__PURE__*/ jsx(Field.Label, {
|
|
147
|
+
children: formatMessage({
|
|
148
|
+
id: 'content-releases.modal.form.input.label.date',
|
|
149
|
+
defaultMessage: 'Date'
|
|
150
|
+
})
|
|
151
|
+
}),
|
|
152
|
+
/*#__PURE__*/ jsx(DatePicker, {
|
|
153
|
+
onChange: (date)=>{
|
|
154
|
+
const isoFormatDate = date ? formatISO(date, {
|
|
155
|
+
representation: 'date'
|
|
156
|
+
}) : null;
|
|
157
|
+
setFieldValue('date', isoFormatDate);
|
|
158
|
+
},
|
|
159
|
+
clearLabel: formatMessage({
|
|
160
|
+
id: 'content-releases.modal.form.input.clearLabel',
|
|
161
|
+
defaultMessage: 'Clear'
|
|
162
|
+
}),
|
|
163
|
+
onClear: ()=>{
|
|
164
|
+
setFieldValue('date', null);
|
|
165
|
+
},
|
|
166
|
+
value: values.date ? new Date(values.date) : new Date(),
|
|
167
|
+
minDate: utcToZonedTime(new Date(), values.timezone.split('&')[1])
|
|
168
|
+
}),
|
|
169
|
+
/*#__PURE__*/ jsx(Field.Error, {})
|
|
170
|
+
]
|
|
171
|
+
})
|
|
172
|
+
}),
|
|
173
|
+
/*#__PURE__*/ jsx(Box, {
|
|
174
|
+
width: "100%",
|
|
175
|
+
flex: 1,
|
|
176
|
+
children: /*#__PURE__*/ jsxs(Field.Root, {
|
|
177
|
+
name: "time",
|
|
178
|
+
error: errors.time && formatMessage({
|
|
179
|
+
id: errors.time,
|
|
180
|
+
defaultMessage: errors.time
|
|
181
|
+
}),
|
|
182
|
+
required: true,
|
|
183
|
+
children: [
|
|
184
|
+
/*#__PURE__*/ jsx(Field.Label, {
|
|
185
|
+
children: formatMessage({
|
|
186
|
+
id: 'content-releases.modal.form.input.label.time',
|
|
187
|
+
defaultMessage: 'Time'
|
|
188
|
+
})
|
|
189
|
+
}),
|
|
190
|
+
/*#__PURE__*/ jsx(TimePicker, {
|
|
191
|
+
onChange: (time)=>{
|
|
192
|
+
setFieldValue('time', time);
|
|
193
|
+
},
|
|
194
|
+
clearLabel: formatMessage({
|
|
195
|
+
id: 'content-releases.modal.form.input.clearLabel',
|
|
196
|
+
defaultMessage: 'Clear'
|
|
197
|
+
}),
|
|
198
|
+
onClear: ()=>{
|
|
199
|
+
setFieldValue('time', '');
|
|
200
|
+
},
|
|
201
|
+
value: values.time || undefined
|
|
202
|
+
}),
|
|
203
|
+
/*#__PURE__*/ jsx(Field.Error, {})
|
|
204
|
+
]
|
|
205
|
+
})
|
|
206
|
+
})
|
|
207
|
+
]
|
|
208
|
+
}),
|
|
209
|
+
/*#__PURE__*/ jsx(TimezoneComponent, {
|
|
210
|
+
timezoneOptions: timezoneList
|
|
211
|
+
})
|
|
212
|
+
]
|
|
213
|
+
})
|
|
214
|
+
]
|
|
215
|
+
})
|
|
216
|
+
}),
|
|
217
|
+
/*#__PURE__*/ jsxs(Modal.Footer, {
|
|
218
|
+
children: [
|
|
219
|
+
/*#__PURE__*/ jsx(Modal.Close, {
|
|
220
|
+
children: /*#__PURE__*/ jsx(Button, {
|
|
221
|
+
variant: "tertiary",
|
|
222
|
+
name: "cancel",
|
|
223
|
+
children: formatMessage({
|
|
224
|
+
id: 'cancel',
|
|
225
|
+
defaultMessage: 'Cancel'
|
|
226
|
+
})
|
|
227
|
+
})
|
|
228
|
+
}),
|
|
229
|
+
/*#__PURE__*/ jsx(Button, {
|
|
230
|
+
name: "submit",
|
|
231
|
+
loading: isLoading,
|
|
232
|
+
type: "submit",
|
|
233
|
+
children: formatMessage({
|
|
234
|
+
id: 'content-releases.modal.form.button.submit',
|
|
235
|
+
defaultMessage: '{isCreatingRelease, select, true {Continue} other {Save}}'
|
|
236
|
+
}, {
|
|
237
|
+
isCreatingRelease: isCreatingRelease
|
|
238
|
+
})
|
|
239
|
+
})
|
|
240
|
+
]
|
|
241
|
+
})
|
|
242
|
+
]
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
})
|
|
246
|
+
]
|
|
247
|
+
})
|
|
248
|
+
});
|
|
249
|
+
};
|
|
250
|
+
const TimezoneComponent = ({ timezoneOptions })=>{
|
|
251
|
+
const { values, errors, setFieldValue } = useFormikContext();
|
|
252
|
+
const { formatMessage } = useIntl();
|
|
253
|
+
const [timezoneList, setTimezoneList] = React.useState(timezoneOptions);
|
|
254
|
+
React.useEffect(()=>{
|
|
255
|
+
if (values.date) {
|
|
256
|
+
// Update the timezone offset which varies with DST based on the date selected
|
|
257
|
+
const { timezoneList } = getTimezones(new Date(values.date));
|
|
258
|
+
setTimezoneList(timezoneList);
|
|
259
|
+
const updatedTimezone = values.timezone && timezoneList.find((tz)=>tz.value.split('&')[1] === values.timezone.split('&')[1]);
|
|
260
|
+
if (updatedTimezone) {
|
|
261
|
+
setFieldValue('timezone', updatedTimezone.value);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}, [
|
|
265
|
+
setFieldValue,
|
|
266
|
+
values.date,
|
|
267
|
+
values.timezone
|
|
268
|
+
]);
|
|
269
|
+
return /*#__PURE__*/ jsxs(Field.Root, {
|
|
270
|
+
name: "timezone",
|
|
271
|
+
error: errors.timezone && formatMessage({
|
|
272
|
+
id: errors.timezone,
|
|
273
|
+
defaultMessage: errors.timezone
|
|
274
|
+
}),
|
|
275
|
+
required: true,
|
|
276
|
+
children: [
|
|
277
|
+
/*#__PURE__*/ jsx(Field.Label, {
|
|
278
|
+
children: formatMessage({
|
|
279
|
+
id: 'content-releases.modal.form.input.label.timezone',
|
|
280
|
+
defaultMessage: 'Timezone'
|
|
281
|
+
})
|
|
282
|
+
}),
|
|
283
|
+
/*#__PURE__*/ jsx(Combobox, {
|
|
284
|
+
autocomplete: {
|
|
285
|
+
type: 'list',
|
|
286
|
+
filter: 'contains'
|
|
287
|
+
},
|
|
288
|
+
value: values.timezone || undefined,
|
|
289
|
+
textValue: values.timezone ? values.timezone.replace(/&/, ' ') : undefined,
|
|
290
|
+
onChange: (timezone)=>{
|
|
291
|
+
setFieldValue('timezone', timezone);
|
|
292
|
+
},
|
|
293
|
+
onTextValueChange: (timezone)=>{
|
|
294
|
+
setFieldValue('timezone', timezone);
|
|
295
|
+
},
|
|
296
|
+
onClear: ()=>{
|
|
297
|
+
setFieldValue('timezone', '');
|
|
298
|
+
},
|
|
299
|
+
children: timezoneList.map((timezone)=>/*#__PURE__*/ jsx(ComboboxOption, {
|
|
300
|
+
value: timezone.value,
|
|
301
|
+
children: timezone.value.replace(/&/, ' ')
|
|
302
|
+
}, timezone.value))
|
|
303
|
+
}),
|
|
304
|
+
/*#__PURE__*/ jsx(Field.Error, {})
|
|
305
|
+
]
|
|
306
|
+
});
|
|
307
|
+
};
|
|
308
|
+
|
|
309
|
+
export { ReleaseModal };
|
|
310
|
+
//# sourceMappingURL=ReleaseModal.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReleaseModal.mjs","sources":["../../../admin/src/components/ReleaseModal.tsx"],"sourcesContent":["import * as React from 'react';\r\n\r\nimport {\r\n Button,\r\n Modal,\r\n TextInput,\r\n Typography,\r\n Checkbox,\r\n Flex,\r\n Box,\r\n DatePicker,\r\n TimePicker,\r\n Combobox,\r\n ComboboxOption,\r\n Field,\r\n} from '@strapi/design-system';\r\nimport { formatISO } from 'date-fns';\r\nimport { utcToZonedTime, zonedTimeToUtc } from 'date-fns-tz';\r\nimport { Formik, Form, useFormikContext } from 'formik';\r\nimport { useIntl } from 'react-intl';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\nimport { pluginId } from '../pluginId';\r\nimport { getTimezones } from '../utils/time';\r\nimport { RELEASE_SCHEMA } from '../validation/schemas';\r\n\r\nexport interface FormValues {\r\n name: string;\r\n date?: string;\r\n time: string;\r\n timezone: string | null;\r\n isScheduled?: boolean;\r\n scheduledAt: Date | null;\r\n}\r\n\r\ninterface ReleaseModalProps {\r\n handleClose: () => void;\r\n handleSubmit: (values: FormValues) => void;\r\n isLoading?: boolean;\r\n initialValues: FormValues;\r\n open?: boolean;\r\n}\r\n\r\nexport const ReleaseModal = ({\r\n handleClose,\r\n open,\r\n handleSubmit,\r\n initialValues,\r\n isLoading = false,\r\n}: ReleaseModalProps) => {\r\n const { formatMessage } = useIntl();\r\n const { pathname } = useLocation();\r\n const isCreatingRelease = pathname === `/plugins/${pluginId}`;\r\n // Set default first timezone from the list if no system timezone detected\r\n const { timezoneList, systemTimezone = { value: 'UTC+00:00-Africa/Abidjan ' } } = getTimezones(\r\n initialValues.scheduledAt ? new Date(initialValues.scheduledAt) : new Date()\r\n );\r\n\r\n /**\r\n * Generate scheduled time using selected date, time and timezone\r\n */\r\n const getScheduledTimestamp = (values: FormValues) => {\r\n const { date, time, timezone } = values;\r\n if (!date || !time || !timezone) return null;\r\n const timezoneWithoutOffset = timezone.split('&')[1];\r\n return zonedTimeToUtc(`${date} ${time}`, timezoneWithoutOffset);\r\n };\r\n\r\n /**\r\n * Get timezone with offset to show the selected value in the dropdown\r\n */\r\n const getTimezoneWithOffset = () => {\r\n const currentTimezone = timezoneList.find(\r\n (timezone) => timezone.value.split('&')[1] === initialValues.timezone\r\n );\r\n return currentTimezone?.value || systemTimezone.value;\r\n };\r\n\r\n return (\r\n <Modal.Root open={open} onOpenChange={handleClose}>\r\n <Modal.Content>\r\n <Modal.Header>\r\n <Modal.Title>\r\n {formatMessage(\r\n {\r\n id: 'content-releases.modal.title',\r\n defaultMessage:\r\n '{isCreatingRelease, select, true {New release} other {Edit release}}',\r\n },\r\n { isCreatingRelease: isCreatingRelease }\r\n )}\r\n </Modal.Title>\r\n </Modal.Header>\r\n <Formik\r\n onSubmit={(values) => {\r\n handleSubmit({\r\n ...values,\r\n timezone: values.timezone ? values.timezone.split('&')[1] : null,\r\n scheduledAt: values.isScheduled ? getScheduledTimestamp(values) : null,\r\n });\r\n }}\r\n initialValues={{\r\n ...initialValues,\r\n timezone: initialValues.timezone ? getTimezoneWithOffset() : systemTimezone.value,\r\n }}\r\n validationSchema={RELEASE_SCHEMA}\r\n validateOnChange={false}\r\n >\r\n {({ values, errors, handleChange, setFieldValue }) => {\r\n return (\r\n <Form>\r\n <Modal.Body>\r\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\r\n <Field.Root\r\n name=\"name\"\r\n error={\r\n errors.name &&\r\n formatMessage({ id: errors.name, defaultMessage: errors.name })\r\n }\r\n required\r\n >\r\n <Field.Label>\r\n {formatMessage({\r\n id: 'content-releases.modal.form.input.label.release-name',\r\n defaultMessage: 'Name',\r\n })}\r\n </Field.Label>\r\n <TextInput type=\"text\" value={values.name} onChange={handleChange} />\r\n <Field.Error />\r\n </Field.Root>\r\n <Box width=\"max-content\">\r\n <Checkbox\r\n name=\"isScheduled\"\r\n checked={values.isScheduled}\r\n onCheckedChange={(checked) => {\r\n setFieldValue('isScheduled', checked);\r\n if (!checked) {\r\n // Clear scheduling info from a release on unchecking schedule release, which reset scheduling info in DB\r\n setFieldValue('date', null);\r\n setFieldValue('time', '');\r\n setFieldValue('timezone', null);\r\n } else {\r\n // On ticking back schedule release date, time and timezone should be restored to the initial state\r\n setFieldValue('date', initialValues.date);\r\n setFieldValue('time', initialValues.time);\r\n setFieldValue(\r\n 'timezone',\r\n initialValues.timezone ?? systemTimezone?.value\r\n );\r\n }\r\n }}\r\n >\r\n <Typography\r\n textColor={values.isScheduled ? 'primary600' : 'neutral800'}\r\n fontWeight={values.isScheduled ? 'semiBold' : 'regular'}\r\n >\r\n {formatMessage({\r\n id: 'modal.form.input.label.schedule-release',\r\n defaultMessage: 'Schedule release',\r\n })}\r\n </Typography>\r\n </Checkbox>\r\n </Box>\r\n {values.isScheduled && (\r\n <>\r\n <Flex\r\n gap={4}\r\n alignItems=\"start\"\r\n direction={{ initial: 'column', medium: 'row' }}\r\n wrap=\"wrap\"\r\n >\r\n <Box width=\"100%\" flex={1}>\r\n <Field.Root\r\n name=\"date\"\r\n error={\r\n errors.date &&\r\n formatMessage({ id: errors.date, defaultMessage: errors.date })\r\n }\r\n required\r\n >\r\n <Field.Label>\r\n {formatMessage({\r\n id: 'content-releases.modal.form.input.label.date',\r\n defaultMessage: 'Date',\r\n })}\r\n </Field.Label>\r\n <DatePicker\r\n onChange={(date) => {\r\n const isoFormatDate = date\r\n ? formatISO(date, { representation: 'date' })\r\n : null;\r\n setFieldValue('date', isoFormatDate);\r\n }}\r\n clearLabel={formatMessage({\r\n id: 'content-releases.modal.form.input.clearLabel',\r\n defaultMessage: 'Clear',\r\n })}\r\n onClear={() => {\r\n setFieldValue('date', null);\r\n }}\r\n value={values.date ? new Date(values.date) : new Date()}\r\n minDate={utcToZonedTime(new Date(), values.timezone.split('&')[1])}\r\n />\r\n <Field.Error />\r\n </Field.Root>\r\n </Box>\r\n <Box width=\"100%\" flex={1}>\r\n <Field.Root\r\n name=\"time\"\r\n error={\r\n errors.time &&\r\n formatMessage({ id: errors.time, defaultMessage: errors.time })\r\n }\r\n required\r\n >\r\n <Field.Label>\r\n {formatMessage({\r\n id: 'content-releases.modal.form.input.label.time',\r\n defaultMessage: 'Time',\r\n })}\r\n </Field.Label>\r\n <TimePicker\r\n onChange={(time) => {\r\n setFieldValue('time', time);\r\n }}\r\n clearLabel={formatMessage({\r\n id: 'content-releases.modal.form.input.clearLabel',\r\n defaultMessage: 'Clear',\r\n })}\r\n onClear={() => {\r\n setFieldValue('time', '');\r\n }}\r\n value={values.time || undefined}\r\n />\r\n <Field.Error />\r\n </Field.Root>\r\n </Box>\r\n </Flex>\r\n <TimezoneComponent timezoneOptions={timezoneList} />\r\n </>\r\n )}\r\n </Flex>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Modal.Close>\r\n <Button variant=\"tertiary\" name=\"cancel\">\r\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\r\n </Button>\r\n </Modal.Close>\r\n <Button name=\"submit\" loading={isLoading} type=\"submit\">\r\n {formatMessage(\r\n {\r\n id: 'content-releases.modal.form.button.submit',\r\n defaultMessage: '{isCreatingRelease, select, true {Continue} other {Save}}',\r\n },\r\n { isCreatingRelease: isCreatingRelease }\r\n )}\r\n </Button>\r\n </Modal.Footer>\r\n </Form>\r\n );\r\n }}\r\n </Formik>\r\n </Modal.Content>\r\n </Modal.Root>\r\n );\r\n};\r\n\r\n/**\r\n * Generates the list of timezones and user's current timezone(system timezone)\r\n */\r\ninterface ITimezoneOption {\r\n offset: string;\r\n value: string;\r\n}\r\n\r\nconst TimezoneComponent = ({ timezoneOptions }: { timezoneOptions: ITimezoneOption[] }) => {\r\n const { values, errors, setFieldValue } = useFormikContext<FormValues>();\r\n const { formatMessage } = useIntl();\r\n const [timezoneList, setTimezoneList] = React.useState<ITimezoneOption[]>(timezoneOptions);\r\n\r\n React.useEffect(() => {\r\n if (values.date) {\r\n // Update the timezone offset which varies with DST based on the date selected\r\n const { timezoneList } = getTimezones(new Date(values.date));\r\n setTimezoneList(timezoneList);\r\n\r\n const updatedTimezone =\r\n values.timezone &&\r\n timezoneList.find((tz) => tz.value.split('&')[1] === values.timezone!.split('&')[1]);\r\n if (updatedTimezone) {\r\n setFieldValue('timezone', updatedTimezone!.value);\r\n }\r\n }\r\n }, [setFieldValue, values.date, values.timezone]);\r\n\r\n return (\r\n <Field.Root\r\n name=\"timezone\"\r\n error={\r\n errors.timezone && formatMessage({ id: errors.timezone, defaultMessage: errors.timezone })\r\n }\r\n required\r\n >\r\n <Field.Label>\r\n {formatMessage({\r\n id: 'content-releases.modal.form.input.label.timezone',\r\n defaultMessage: 'Timezone',\r\n })}\r\n </Field.Label>\r\n <Combobox\r\n autocomplete={{ type: 'list', filter: 'contains' }}\r\n value={values.timezone || undefined}\r\n textValue={values.timezone ? values.timezone.replace(/&/, ' ') : undefined} // textValue is required to show the updated DST timezone\r\n onChange={(timezone) => {\r\n setFieldValue('timezone', timezone);\r\n }}\r\n onTextValueChange={(timezone) => {\r\n setFieldValue('timezone', timezone);\r\n }}\r\n onClear={() => {\r\n setFieldValue('timezone', '');\r\n }}\r\n >\r\n {timezoneList.map((timezone) => (\r\n <ComboboxOption key={timezone.value} value={timezone.value}>\r\n {timezone.value.replace(/&/, ' ')}\r\n </ComboboxOption>\r\n ))}\r\n </Combobox>\r\n <Field.Error />\r\n </Field.Root>\r\n );\r\n};\r\n"],"names":["ReleaseModal","handleClose","open","handleSubmit","initialValues","isLoading","formatMessage","useIntl","pathname","useLocation","isCreatingRelease","pluginId","timezoneList","systemTimezone","value","getTimezones","scheduledAt","Date","getScheduledTimestamp","values","date","time","timezone","timezoneWithoutOffset","split","zonedTimeToUtc","getTimezoneWithOffset","currentTimezone","find","_jsx","Modal","Root","onOpenChange","_jsxs","Content","Header","Title","id","defaultMessage","Formik","onSubmit","isScheduled","validationSchema","RELEASE_SCHEMA","validateOnChange","errors","handleChange","setFieldValue","Form","Body","Flex","direction","alignItems","gap","Field","name","error","required","Label","TextInput","type","onChange","Error","Box","width","Checkbox","checked","onCheckedChange","Typography","textColor","fontWeight","_Fragment","initial","medium","wrap","flex","DatePicker","isoFormatDate","formatISO","representation","clearLabel","onClear","minDate","utcToZonedTime","TimePicker","undefined","TimezoneComponent","timezoneOptions","Footer","Close","Button","variant","loading","useFormikContext","setTimezoneList","React","useState","useEffect","updatedTimezone","tz","Combobox","autocomplete","filter","textValue","replace","onTextValueChange","map","ComboboxOption"],"mappings":";;;;;;;;;;;;AA2CO,MAAMA,YAAAA,GAAe,CAAC,EAC3BC,WAAW,EACXC,IAAI,EACJC,YAAY,EACZC,aAAa,EACbC,SAAAA,GAAY,KAAK,EACC,GAAA;IAClB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,QAAQ,EAAE,GAAGC,WAAAA,EAAAA;AACrB,IAAA,MAAMC,iBAAAA,GAAoBF,QAAAA,KAAa,CAAC,SAAS,EAAEG,QAAAA,CAAAA,CAAU;;IAE7D,MAAM,EAAEC,YAAY,EAAEC,cAAAA,GAAiB;QAAEC,KAAAA,EAAO;KAA6B,EAAE,GAAGC,YAAAA,CAChFX,aAAAA,CAAcY,WAAW,GAAG,IAAIC,IAAAA,CAAKb,aAAAA,CAAcY,WAAW,CAAA,GAAI,IAAIC,IAAAA,EAAAA,CAAAA;AAGxE;;MAGA,MAAMC,wBAAwB,CAACC,MAAAA,GAAAA;AAC7B,QAAA,MAAM,EAAEC,IAAI,EAAEC,IAAI,EAAEC,QAAQ,EAAE,GAAGH,MAAAA;AACjC,QAAA,IAAI,CAACC,IAAAA,IAAQ,CAACC,IAAAA,IAAQ,CAACC,UAAU,OAAO,IAAA;AACxC,QAAA,MAAMC,wBAAwBD,QAAAA,CAASE,KAAK,CAAC,GAAA,CAAI,CAAC,CAAA,CAAE;AACpD,QAAA,OAAOC,eAAe,CAAA,EAAGL,IAAAA,CAAK,CAAC,EAAEC,MAAM,EAAEE,qBAAAA,CAAAA;AAC3C,IAAA,CAAA;AAEA;;AAEC,MACD,MAAMG,qBAAAA,GAAwB,IAAA;AAC5B,QAAA,MAAMC,kBAAkBf,YAAAA,CAAagB,IAAI,CACvC,CAACN,WAAaA,QAAAA,CAASR,KAAK,CAACU,KAAK,CAAC,GAAA,CAAI,CAAC,CAAA,CAAE,KAAKpB,cAAckB,QAAQ,CAAA;QAEvE,OAAOK,eAAAA,EAAiBb,KAAAA,IAASD,cAAAA,CAAeC,KAAK;AACvD,IAAA,CAAA;IAEA,qBACEe,GAAA,CAACC,MAAMC,IAAI,EAAA;QAAC7B,IAAAA,EAAMA,IAAAA;QAAM8B,YAAAA,EAAc/B,WAAAA;gCACpCgC,IAAA,CAACH,MAAMI,OAAO,EAAA;;AACZ,8BAAAL,GAAA,CAACC,MAAMK,MAAM,EAAA;4CACXN,GAAA,CAACC,MAAMM,KAAK,EAAA;kCACT9B,aAAAA,CACC;4BACE+B,EAAAA,EAAI,8BAAA;4BACJC,cAAAA,EACE;yBACJ,EACA;4BAAE5B,iBAAAA,EAAmBA;AAAkB,yBAAA;;;8BAI7CmB,GAAA,CAACU,MAAAA,EAAAA;AACCC,oBAAAA,QAAAA,EAAU,CAACrB,MAAAA,GAAAA;wBACThB,YAAAA,CAAa;AACX,4BAAA,GAAGgB,MAAM;4BACTG,QAAAA,EAAUH,MAAAA,CAAOG,QAAQ,GAAGH,MAAAA,CAAOG,QAAQ,CAACE,KAAK,CAAC,GAAA,CAAI,CAAC,CAAA,CAAE,GAAG,IAAA;AAC5DR,4BAAAA,WAAAA,EAAaG,MAAAA,CAAOsB,WAAW,GAAGvB,qBAAAA,CAAsBC,MAAAA,CAAAA,GAAU;AACpE,yBAAA,CAAA;AACF,oBAAA,CAAA;oBACAf,aAAAA,EAAe;AACb,wBAAA,GAAGA,aAAa;AAChBkB,wBAAAA,QAAAA,EAAUlB,aAAAA,CAAckB,QAAQ,GAAGI,qBAAAA,EAAAA,GAA0Bb,eAAeC;AAC9E,qBAAA;oBACA4B,gBAAAA,EAAkBC,cAAAA;oBAClBC,gBAAAA,EAAkB,KAAA;8BAEjB,CAAC,EAAEzB,MAAM,EAAE0B,MAAM,EAAEC,YAAY,EAAEC,aAAa,EAAE,GAAA;AAC/C,wBAAA,qBACEd,IAAA,CAACe,IAAAA,EAAAA;;AACC,8CAAAnB,GAAA,CAACC,MAAMmB,IAAI,EAAA;AACT,oCAAA,QAAA,gBAAAhB,IAAA,CAACiB,IAAAA,EAAAA;wCAAKC,SAAAA,EAAU,QAAA;wCAASC,UAAAA,EAAW,SAAA;wCAAUC,GAAAA,EAAK,CAAA;;AACjD,0DAAApB,IAAA,CAACqB,MAAMvB,IAAI,EAAA;gDACTwB,IAAAA,EAAK,MAAA;gDACLC,KAAAA,EACEX,MAAAA,CAAOU,IAAI,IACXjD,aAAAA,CAAc;AAAE+B,oDAAAA,EAAAA,EAAIQ,OAAOU,IAAI;AAAEjB,oDAAAA,cAAAA,EAAgBO,OAAOU;AAAK,iDAAA,CAAA;gDAE/DE,QAAQ,EAAA,IAAA;;AAER,kEAAA5B,GAAA,CAACyB,MAAMI,KAAK,EAAA;kEACTpD,aAAAA,CAAc;4DACb+B,EAAAA,EAAI,sDAAA;4DACJC,cAAAA,EAAgB;AAClB,yDAAA;;kEAEFT,GAAA,CAAC8B,SAAAA,EAAAA;wDAAUC,IAAAA,EAAK,MAAA;AAAO9C,wDAAAA,KAAAA,EAAOK,OAAOoC,IAAI;wDAAEM,QAAAA,EAAUf;;AACrD,kEAAAjB,GAAA,CAACyB,MAAMQ,KAAK,EAAA,EAAA;;;0DAEdjC,GAAA,CAACkC,GAAAA,EAAAA;gDAAIC,KAAAA,EAAM,aAAA;AACT,gDAAA,QAAA,gBAAAnC,GAAA,CAACoC,QAAAA,EAAAA;oDACCV,IAAAA,EAAK,aAAA;AACLW,oDAAAA,OAAAA,EAAS/C,OAAOsB,WAAW;AAC3B0B,oDAAAA,eAAAA,EAAiB,CAACD,OAAAA,GAAAA;AAChBnB,wDAAAA,aAAAA,CAAc,aAAA,EAAemB,OAAAA,CAAAA;AAC7B,wDAAA,IAAI,CAACA,OAAAA,EAAS;;AAEZnB,4DAAAA,aAAAA,CAAc,MAAA,EAAQ,IAAA,CAAA;AACtBA,4DAAAA,aAAAA,CAAc,MAAA,EAAQ,EAAA,CAAA;AACtBA,4DAAAA,aAAAA,CAAc,UAAA,EAAY,IAAA,CAAA;wDAC5B,CAAA,MAAO;;4DAELA,aAAAA,CAAc,MAAA,EAAQ3C,cAAcgB,IAAI,CAAA;4DACxC2B,aAAAA,CAAc,MAAA,EAAQ3C,cAAciB,IAAI,CAAA;AACxC0B,4DAAAA,aAAAA,CACE,UAAA,EACA3C,aAAAA,CAAckB,QAAQ,IAAIT,cAAAA,EAAgBC,KAAAA,CAAAA;AAE9C,wDAAA;AACF,oDAAA,CAAA;AAEA,oDAAA,QAAA,gBAAAe,GAAA,CAACuC,UAAAA,EAAAA;wDACCC,SAAAA,EAAWlD,MAAAA,CAAOsB,WAAW,GAAG,YAAA,GAAe,YAAA;wDAC/C6B,UAAAA,EAAYnD,MAAAA,CAAOsB,WAAW,GAAG,UAAA,GAAa,SAAA;kEAE7CnC,aAAAA,CAAc;4DACb+B,EAAAA,EAAI,yCAAA;4DACJC,cAAAA,EAAgB;AAClB,yDAAA;;;;AAILnB,4CAAAA,MAAAA,CAAOsB,WAAW,kBACjBR,IAAA,CAAAsC,QAAA,EAAA;;kEACEtC,IAAA,CAACiB,IAAAA,EAAAA;wDACCG,GAAAA,EAAK,CAAA;wDACLD,UAAAA,EAAW,OAAA;wDACXD,SAAAA,EAAW;4DAAEqB,OAAAA,EAAS,QAAA;4DAAUC,MAAAA,EAAQ;AAAM,yDAAA;wDAC9CC,IAAAA,EAAK,MAAA;;0EAEL7C,GAAA,CAACkC,GAAAA,EAAAA;gEAAIC,KAAAA,EAAM,MAAA;gEAAOW,IAAAA,EAAM,CAAA;wFACtB1C,IAAA,CAACqB,MAAMvB,IAAI,EAAA;oEACTwB,IAAAA,EAAK,MAAA;oEACLC,KAAAA,EACEX,MAAAA,CAAOzB,IAAI,IACXd,aAAAA,CAAc;AAAE+B,wEAAAA,EAAAA,EAAIQ,OAAOzB,IAAI;AAAEkB,wEAAAA,cAAAA,EAAgBO,OAAOzB;AAAK,qEAAA,CAAA;oEAE/DqC,QAAQ,EAAA,IAAA;;AAER,sFAAA5B,GAAA,CAACyB,MAAMI,KAAK,EAAA;sFACTpD,aAAAA,CAAc;gFACb+B,EAAAA,EAAI,8CAAA;gFACJC,cAAAA,EAAgB;AAClB,6EAAA;;sFAEFT,GAAA,CAAC+C,UAAAA,EAAAA;AACCf,4EAAAA,QAAAA,EAAU,CAACzC,IAAAA,GAAAA;gFACT,MAAMyD,aAAAA,GAAgBzD,IAAAA,GAClB0D,SAAAA,CAAU1D,IAAAA,EAAM;oFAAE2D,cAAAA,EAAgB;iFAAO,CAAA,GACzC,IAAA;AACJhC,gFAAAA,aAAAA,CAAc,MAAA,EAAQ8B,aAAAA,CAAAA;AACxB,4EAAA,CAAA;AACAG,4EAAAA,UAAAA,EAAY1E,aAAAA,CAAc;gFACxB+B,EAAAA,EAAI,8CAAA;gFACJC,cAAAA,EAAgB;AAClB,6EAAA,CAAA;4EACA2C,OAAAA,EAAS,IAAA;AACPlC,gFAAAA,aAAAA,CAAc,MAAA,EAAQ,IAAA,CAAA;AACxB,4EAAA,CAAA;4EACAjC,KAAAA,EAAOK,MAAAA,CAAOC,IAAI,GAAG,IAAIH,KAAKE,MAAAA,CAAOC,IAAI,IAAI,IAAIH,IAAAA,EAAAA;4EACjDiE,OAAAA,EAASC,cAAAA,CAAe,IAAIlE,IAAAA,EAAAA,EAAQE,MAAAA,CAAOG,QAAQ,CAACE,KAAK,CAAC,GAAA,CAAI,CAAC,CAAA,CAAE;;AAEnE,sFAAAK,GAAA,CAACyB,MAAMQ,KAAK,EAAA,EAAA;;;;0EAGhBjC,GAAA,CAACkC,GAAAA,EAAAA;gEAAIC,KAAAA,EAAM,MAAA;gEAAOW,IAAAA,EAAM,CAAA;wFACtB1C,IAAA,CAACqB,MAAMvB,IAAI,EAAA;oEACTwB,IAAAA,EAAK,MAAA;oEACLC,KAAAA,EACEX,MAAAA,CAAOxB,IAAI,IACXf,aAAAA,CAAc;AAAE+B,wEAAAA,EAAAA,EAAIQ,OAAOxB,IAAI;AAAEiB,wEAAAA,cAAAA,EAAgBO,OAAOxB;AAAK,qEAAA,CAAA;oEAE/DoC,QAAQ,EAAA,IAAA;;AAER,sFAAA5B,GAAA,CAACyB,MAAMI,KAAK,EAAA;sFACTpD,aAAAA,CAAc;gFACb+B,EAAAA,EAAI,8CAAA;gFACJC,cAAAA,EAAgB;AAClB,6EAAA;;sFAEFT,GAAA,CAACuD,UAAAA,EAAAA;AACCvB,4EAAAA,QAAAA,EAAU,CAACxC,IAAAA,GAAAA;AACT0B,gFAAAA,aAAAA,CAAc,MAAA,EAAQ1B,IAAAA,CAAAA;AACxB,4EAAA,CAAA;AACA2D,4EAAAA,UAAAA,EAAY1E,aAAAA,CAAc;gFACxB+B,EAAAA,EAAI,8CAAA;gFACJC,cAAAA,EAAgB;AAClB,6EAAA,CAAA;4EACA2C,OAAAA,EAAS,IAAA;AACPlC,gFAAAA,aAAAA,CAAc,MAAA,EAAQ,EAAA,CAAA;AACxB,4EAAA,CAAA;4EACAjC,KAAAA,EAAOK,MAAAA,CAAOE,IAAI,IAAIgE;;AAExB,sFAAAxD,GAAA,CAACyB,MAAMQ,KAAK,EAAA,EAAA;;;;;;kEAIlBjC,GAAA,CAACyD,iBAAAA,EAAAA;wDAAkBC,eAAAA,EAAiB3E;;;;;;;AAK5C,8CAAAqB,IAAA,CAACH,MAAM0D,MAAM,EAAA;;AACX,sDAAA3D,GAAA,CAACC,MAAM2D,KAAK,EAAA;AACV,4CAAA,QAAA,gBAAA5D,GAAA,CAAC6D,MAAAA,EAAAA;gDAAOC,OAAAA,EAAQ,UAAA;gDAAWpC,IAAAA,EAAK,QAAA;0DAC7BjD,aAAAA,CAAc;oDAAE+B,EAAAA,EAAI,QAAA;oDAAUC,cAAAA,EAAgB;AAAS,iDAAA;;;sDAG5DT,GAAA,CAAC6D,MAAAA,EAAAA;4CAAOnC,IAAAA,EAAK,QAAA;4CAASqC,OAAAA,EAASvF,SAAAA;4CAAWuD,IAAAA,EAAK,QAAA;sDAC5CtD,aAAAA,CACC;gDACE+B,EAAAA,EAAI,2CAAA;gDACJC,cAAAA,EAAgB;6CAClB,EACA;gDAAE5B,iBAAAA,EAAmBA;AAAkB,6CAAA;;;;;;AAMnD,oBAAA;;;;;AAKV;AAUA,MAAM4E,iBAAAA,GAAoB,CAAC,EAAEC,eAAe,EAA0C,GAAA;AACpF,IAAA,MAAM,EAAEpE,MAAM,EAAE0B,MAAM,EAAEE,aAAa,EAAE,GAAG8C,gBAAAA,EAAAA;IAC1C,MAAM,EAAEvF,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,CAACK,YAAAA,EAAckF,eAAAA,CAAgB,GAAGC,KAAAA,CAAMC,QAAQ,CAAoBT,eAAAA,CAAAA;AAE1EQ,IAAAA,KAAAA,CAAME,SAAS,CAAC,IAAA;QACd,IAAI9E,MAAAA,CAAOC,IAAI,EAAE;;YAEf,MAAM,EAAER,YAAY,EAAE,GAAGG,aAAa,IAAIE,IAAAA,CAAKE,OAAOC,IAAI,CAAA,CAAA;YAC1D0E,eAAAA,CAAgBlF,YAAAA,CAAAA;YAEhB,MAAMsF,eAAAA,GACJ/E,MAAAA,CAAOG,QAAQ,IACfV,YAAAA,CAAagB,IAAI,CAAC,CAACuE,EAAAA,GAAOA,EAAAA,CAAGrF,KAAK,CAACU,KAAK,CAAC,GAAA,CAAI,CAAC,CAAA,CAAE,KAAKL,MAAAA,CAAOG,QAAQ,CAAEE,KAAK,CAAC,GAAA,CAAI,CAAC,CAAA,CAAE,CAAA;AACrF,YAAA,IAAI0E,eAAAA,EAAiB;gBACnBnD,aAAAA,CAAc,UAAA,EAAYmD,gBAAiBpF,KAAK,CAAA;AAClD,YAAA;AACF,QAAA;IACF,CAAA,EAAG;AAACiC,QAAAA,aAAAA;AAAe5B,QAAAA,MAAAA,CAAOC,IAAI;AAAED,QAAAA,MAAAA,CAAOG;AAAS,KAAA,CAAA;IAEhD,qBACEW,IAAA,CAACqB,MAAMvB,IAAI,EAAA;QACTwB,IAAAA,EAAK,UAAA;QACLC,KAAAA,EACEX,MAAAA,CAAOvB,QAAQ,IAAIhB,aAAAA,CAAc;AAAE+B,YAAAA,EAAAA,EAAIQ,OAAOvB,QAAQ;AAAEgB,YAAAA,cAAAA,EAAgBO,OAAOvB;AAAS,SAAA,CAAA;QAE1FmC,QAAQ,EAAA,IAAA;;AAER,0BAAA5B,GAAA,CAACyB,MAAMI,KAAK,EAAA;0BACTpD,aAAAA,CAAc;oBACb+B,EAAAA,EAAI,kDAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;;0BAEFT,GAAA,CAACuE,QAAAA,EAAAA;gBACCC,YAAAA,EAAc;oBAAEzC,IAAAA,EAAM,MAAA;oBAAQ0C,MAAAA,EAAQ;AAAW,iBAAA;gBACjDxF,KAAAA,EAAOK,MAAAA,CAAOG,QAAQ,IAAI+D,SAAAA;gBAC1BkB,SAAAA,EAAWpF,MAAAA,CAAOG,QAAQ,GAAGH,MAAAA,CAAOG,QAAQ,CAACkF,OAAO,CAAC,GAAA,EAAK,GAAA,CAAA,GAAOnB,SAAAA;AACjExB,gBAAAA,QAAAA,EAAU,CAACvC,QAAAA,GAAAA;AACTyB,oBAAAA,aAAAA,CAAc,UAAA,EAAYzB,QAAAA,CAAAA;AAC5B,gBAAA,CAAA;AACAmF,gBAAAA,iBAAAA,EAAmB,CAACnF,QAAAA,GAAAA;AAClByB,oBAAAA,aAAAA,CAAc,UAAA,EAAYzB,QAAAA,CAAAA;AAC5B,gBAAA,CAAA;gBACA2D,OAAAA,EAAS,IAAA;AACPlC,oBAAAA,aAAAA,CAAc,UAAA,EAAY,EAAA,CAAA;AAC5B,gBAAA,CAAA;AAECnC,gBAAAA,QAAAA,EAAAA,YAAAA,CAAa8F,GAAG,CAAC,CAACpF,QAAAA,iBACjBO,GAAA,CAAC8E,cAAAA,EAAAA;AAAoC7F,wBAAAA,KAAAA,EAAOQ,SAASR,KAAK;AACvDQ,wBAAAA,QAAAA,EAAAA,QAAAA,CAASR,KAAK,CAAC0F,OAAO,CAAC,GAAA,EAAK,GAAA;AADVlF,qBAAAA,EAAAA,QAAAA,CAASR,KAAK,CAAA;;AAKvC,0BAAAe,GAAA,CAACyB,MAAMQ,KAAK,EAAA,EAAA;;;AAGlB,CAAA;;;;"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
5
|
+
var strapiAdmin$1 = require('@strapi/content-manager/strapi-admin');
|
|
6
|
+
var designSystem = require('@strapi/design-system');
|
|
7
|
+
var reactIntl = require('react-intl');
|
|
8
|
+
var constants = require('../constants.js');
|
|
9
|
+
var release = require('../services/release.js');
|
|
10
|
+
var time = require('../utils/time.js');
|
|
11
|
+
var ReleaseActionMenu = require('./ReleaseActionMenu.js');
|
|
12
|
+
|
|
13
|
+
const Panel = ({ model, document, documentId, collectionType })=>{
|
|
14
|
+
const [{ query }] = strapiAdmin.useQueryParams();
|
|
15
|
+
const locale = query.plugins?.i18n?.locale;
|
|
16
|
+
const { edit: { options } } = strapiAdmin$1.unstable_useDocumentLayout(model);
|
|
17
|
+
const { formatMessage, formatDate, formatTime } = reactIntl.useIntl();
|
|
18
|
+
const { allowedActions } = strapiAdmin.useRBAC(constants.PERMISSIONS);
|
|
19
|
+
const { canRead, canDeleteAction } = allowedActions;
|
|
20
|
+
const response = release.useGetReleasesForEntryQuery({
|
|
21
|
+
contentType: model,
|
|
22
|
+
entryDocumentId: documentId,
|
|
23
|
+
locale,
|
|
24
|
+
hasEntryAttached: true
|
|
25
|
+
}, {
|
|
26
|
+
skip: !document
|
|
27
|
+
});
|
|
28
|
+
const releases = response.data?.data;
|
|
29
|
+
const getReleaseColorVariant = (actionType, shade)=>{
|
|
30
|
+
if (actionType === 'unpublish') {
|
|
31
|
+
return `secondary${shade}`;
|
|
32
|
+
}
|
|
33
|
+
return `success${shade}`;
|
|
34
|
+
};
|
|
35
|
+
// Project is not EE or contentType does not have draftAndPublish enabled
|
|
36
|
+
if (!window.strapi.isEE || !options?.draftAndPublish || !canRead) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
if (collectionType === 'collection-types' && (!documentId || documentId === 'create')) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
if (!releases || releases.length === 0) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
title: formatMessage({
|
|
47
|
+
id: 'content-releases.plugin.name',
|
|
48
|
+
defaultMessage: 'Releases'
|
|
49
|
+
}),
|
|
50
|
+
content: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
51
|
+
direction: "column",
|
|
52
|
+
alignItems: "stretch",
|
|
53
|
+
gap: 3,
|
|
54
|
+
width: "100%",
|
|
55
|
+
children: releases?.map((release)=>/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
56
|
+
direction: "column",
|
|
57
|
+
alignItems: "start",
|
|
58
|
+
borderWidth: "1px",
|
|
59
|
+
borderStyle: "solid",
|
|
60
|
+
borderColor: getReleaseColorVariant(release.actions[0].type, '200'),
|
|
61
|
+
overflow: "hidden",
|
|
62
|
+
hasRadius: true,
|
|
63
|
+
children: [
|
|
64
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
65
|
+
paddingTop: 3,
|
|
66
|
+
paddingBottom: 3,
|
|
67
|
+
paddingLeft: 4,
|
|
68
|
+
paddingRight: 4,
|
|
69
|
+
background: getReleaseColorVariant(release.actions[0].type, '100'),
|
|
70
|
+
width: "100%",
|
|
71
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
72
|
+
fontSize: 1,
|
|
73
|
+
variant: "pi",
|
|
74
|
+
textColor: getReleaseColorVariant(release.actions[0].type, '600'),
|
|
75
|
+
children: formatMessage({
|
|
76
|
+
id: 'content-releases.content-manager-edit-view.list-releases.title',
|
|
77
|
+
defaultMessage: '{isPublish, select, true {Will be published in} other {Will be unpublished in}}'
|
|
78
|
+
}, {
|
|
79
|
+
isPublish: release.actions[0].type === 'publish'
|
|
80
|
+
})
|
|
81
|
+
})
|
|
82
|
+
}),
|
|
83
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
84
|
+
padding: 4,
|
|
85
|
+
direction: "column",
|
|
86
|
+
gap: 2,
|
|
87
|
+
width: "100%",
|
|
88
|
+
alignItems: "flex-start",
|
|
89
|
+
children: [
|
|
90
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
91
|
+
fontSize: 2,
|
|
92
|
+
fontWeight: "bold",
|
|
93
|
+
variant: "omega",
|
|
94
|
+
textColor: "neutral700",
|
|
95
|
+
children: release.name
|
|
96
|
+
}),
|
|
97
|
+
release.scheduledAt && release.timezone && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
98
|
+
variant: "pi",
|
|
99
|
+
textColor: "neutral600",
|
|
100
|
+
children: formatMessage({
|
|
101
|
+
id: 'content-releases.content-manager-edit-view.scheduled.date',
|
|
102
|
+
defaultMessage: '{date} at {time} ({offset})'
|
|
103
|
+
}, {
|
|
104
|
+
date: formatDate(new Date(release.scheduledAt), {
|
|
105
|
+
day: '2-digit',
|
|
106
|
+
month: '2-digit',
|
|
107
|
+
year: 'numeric',
|
|
108
|
+
timeZone: release.timezone
|
|
109
|
+
}),
|
|
110
|
+
time: formatTime(new Date(release.scheduledAt), {
|
|
111
|
+
hourCycle: 'h23',
|
|
112
|
+
timeZone: release.timezone
|
|
113
|
+
}),
|
|
114
|
+
offset: time.getTimezoneOffset(release.timezone, new Date(release.scheduledAt))
|
|
115
|
+
})
|
|
116
|
+
}),
|
|
117
|
+
canDeleteAction ? /*#__PURE__*/ jsxRuntime.jsxs(ReleaseActionMenu.ReleaseActionMenu.Root, {
|
|
118
|
+
hasTriggerBorder: true,
|
|
119
|
+
children: [
|
|
120
|
+
/*#__PURE__*/ jsxRuntime.jsx(ReleaseActionMenu.ReleaseActionMenu.EditReleaseItem, {
|
|
121
|
+
releaseId: release.id
|
|
122
|
+
}),
|
|
123
|
+
/*#__PURE__*/ jsxRuntime.jsx(ReleaseActionMenu.ReleaseActionMenu.DeleteReleaseActionItem, {
|
|
124
|
+
releaseId: release.id,
|
|
125
|
+
actionId: release.actions[0].id
|
|
126
|
+
})
|
|
127
|
+
]
|
|
128
|
+
}) : null
|
|
129
|
+
]
|
|
130
|
+
})
|
|
131
|
+
]
|
|
132
|
+
}, release.id))
|
|
133
|
+
})
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
exports.Panel = Panel;
|
|
138
|
+
//# sourceMappingURL=ReleasesPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReleasesPanel.js","sources":["../../../admin/src/components/ReleasesPanel.tsx"],"sourcesContent":["import { useRBAC, useQueryParams } from '@strapi/admin/strapi-admin';\r\nimport { unstable_useDocumentLayout as useDocumentLayout } from '@strapi/content-manager/strapi-admin';\r\nimport { Box, Flex, Typography } from '@strapi/design-system';\r\nimport { useIntl } from 'react-intl';\r\n\r\nimport { PERMISSIONS } from '../constants';\r\nimport { useGetReleasesForEntryQuery } from '../services/release';\r\nimport { getTimezoneOffset } from '../utils/time';\r\n\r\nimport { ReleaseActionMenu } from './ReleaseActionMenu';\r\n\r\nimport type { PanelComponent, PanelComponentProps } from '@strapi/content-manager/strapi-admin';\r\n\r\nconst Panel: PanelComponent = ({\r\n model,\r\n document,\r\n documentId,\r\n collectionType,\r\n}: PanelComponentProps) => {\r\n const [{ query }] = useQueryParams<{ plugins: { i18n: { locale: string } } }>();\r\n const locale = query.plugins?.i18n?.locale;\r\n\r\n const {\r\n edit: { options },\r\n } = useDocumentLayout(model);\r\n const { formatMessage, formatDate, formatTime } = useIntl();\r\n\r\n const { allowedActions } = useRBAC(PERMISSIONS);\r\n const { canRead, canDeleteAction } = allowedActions;\r\n\r\n const response = useGetReleasesForEntryQuery(\r\n {\r\n contentType: model,\r\n entryDocumentId: documentId,\r\n locale,\r\n hasEntryAttached: true,\r\n },\r\n {\r\n skip: !document,\r\n }\r\n );\r\n const releases = response.data?.data;\r\n\r\n const getReleaseColorVariant = (\r\n actionType: 'publish' | 'unpublish',\r\n shade: '100' | '200' | '600'\r\n ) => {\r\n if (actionType === 'unpublish') {\r\n return `secondary${shade}`;\r\n }\r\n\r\n return `success${shade}`;\r\n };\r\n\r\n // Project is not EE or contentType does not have draftAndPublish enabled\r\n if (!window.strapi.isEE || !options?.draftAndPublish || !canRead) {\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 if (!releases || releases.length === 0) {\r\n return null;\r\n }\r\n\r\n return {\r\n title: formatMessage({\r\n id: 'content-releases.plugin.name',\r\n defaultMessage: 'Releases',\r\n }),\r\n content: (\r\n <Flex direction=\"column\" alignItems=\"stretch\" gap={3} width=\"100%\">\r\n {releases?.map((release) => (\r\n <Flex\r\n key={release.id}\r\n direction=\"column\"\r\n alignItems=\"start\"\r\n borderWidth=\"1px\"\r\n borderStyle=\"solid\"\r\n borderColor={getReleaseColorVariant(release.actions[0].type, '200')}\r\n overflow=\"hidden\"\r\n hasRadius\r\n >\r\n <Box\r\n paddingTop={3}\r\n paddingBottom={3}\r\n paddingLeft={4}\r\n paddingRight={4}\r\n background={getReleaseColorVariant(release.actions[0].type, '100')}\r\n width=\"100%\"\r\n >\r\n <Typography\r\n fontSize={1}\r\n variant=\"pi\"\r\n textColor={getReleaseColorVariant(release.actions[0].type, '600')}\r\n >\r\n {formatMessage(\r\n {\r\n id: 'content-releases.content-manager-edit-view.list-releases.title',\r\n defaultMessage:\r\n '{isPublish, select, true {Will be published in} other {Will be unpublished in}}',\r\n },\r\n { isPublish: release.actions[0].type === 'publish' }\r\n )}\r\n </Typography>\r\n </Box>\r\n <Flex padding={4} direction=\"column\" gap={2} width=\"100%\" alignItems=\"flex-start\">\r\n <Typography fontSize={2} fontWeight=\"bold\" variant=\"omega\" textColor=\"neutral700\">\r\n {release.name}\r\n </Typography>\r\n {release.scheduledAt && release.timezone && (\r\n <Typography variant=\"pi\" textColor=\"neutral600\">\r\n {formatMessage(\r\n {\r\n id: 'content-releases.content-manager-edit-view.scheduled.date',\r\n defaultMessage: '{date} at {time} ({offset})',\r\n },\r\n {\r\n date: formatDate(new Date(release.scheduledAt), {\r\n day: '2-digit',\r\n month: '2-digit',\r\n year: 'numeric',\r\n timeZone: release.timezone,\r\n }),\r\n time: formatTime(new Date(release.scheduledAt), {\r\n hourCycle: 'h23',\r\n timeZone: release.timezone,\r\n }),\r\n offset: getTimezoneOffset(release.timezone, new Date(release.scheduledAt)),\r\n }\r\n )}\r\n </Typography>\r\n )}\r\n {canDeleteAction ? (\r\n <ReleaseActionMenu.Root hasTriggerBorder>\r\n <ReleaseActionMenu.EditReleaseItem releaseId={release.id} />\r\n <ReleaseActionMenu.DeleteReleaseActionItem\r\n releaseId={release.id}\r\n actionId={release.actions[0].id}\r\n />\r\n </ReleaseActionMenu.Root>\r\n ) : null}\r\n </Flex>\r\n </Flex>\r\n ))}\r\n </Flex>\r\n ),\r\n };\r\n};\r\n\r\nexport { Panel };\r\n"],"names":["Panel","model","document","documentId","collectionType","query","useQueryParams","locale","plugins","i18n","edit","options","useDocumentLayout","formatMessage","formatDate","formatTime","useIntl","allowedActions","useRBAC","PERMISSIONS","canRead","canDeleteAction","response","useGetReleasesForEntryQuery","contentType","entryDocumentId","hasEntryAttached","skip","releases","data","getReleaseColorVariant","actionType","shade","window","strapi","isEE","draftAndPublish","length","title","id","defaultMessage","content","_jsx","Flex","direction","alignItems","gap","width","map","release","_jsxs","borderWidth","borderStyle","borderColor","actions","type","overflow","hasRadius","Box","paddingTop","paddingBottom","paddingLeft","paddingRight","background","Typography","fontSize","variant","textColor","isPublish","padding","fontWeight","name","scheduledAt","timezone","date","Date","day","month","year","timeZone","time","hourCycle","offset","getTimezoneOffset","ReleaseActionMenu","Root","hasTriggerBorder","EditReleaseItem","releaseId","DeleteReleaseActionItem","actionId"],"mappings":"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"}
|