@strapi/content-releases 0.0.0-next.df5dd4b92e1b046c04ff00d00d76c88ea51b57d4 → 0.0.0-next.e1a19b9e52cdcb526515883c8289522a64c9871a

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.
Files changed (110) hide show
  1. package/dist/admin/components/EntryValidationPopover.js +62 -96
  2. package/dist/admin/components/EntryValidationPopover.js.map +1 -1
  3. package/dist/admin/components/EntryValidationPopover.mjs +64 -98
  4. package/dist/admin/components/EntryValidationPopover.mjs.map +1 -1
  5. package/dist/admin/components/ReleaseActionMenu.js +25 -74
  6. package/dist/admin/components/ReleaseActionMenu.js.map +1 -1
  7. package/dist/admin/components/ReleaseActionMenu.mjs +26 -75
  8. package/dist/admin/components/ReleaseActionMenu.mjs.map +1 -1
  9. package/dist/admin/components/ReleaseModal.js +7 -0
  10. package/dist/admin/components/ReleaseModal.js.map +1 -1
  11. package/dist/admin/components/ReleaseModal.mjs +7 -0
  12. package/dist/admin/components/ReleaseModal.mjs.map +1 -1
  13. package/dist/admin/components/Widgets.js +122 -0
  14. package/dist/admin/components/Widgets.js.map +1 -0
  15. package/dist/admin/components/Widgets.mjs +120 -0
  16. package/dist/admin/components/Widgets.mjs.map +1 -0
  17. package/dist/admin/constants.js +2 -0
  18. package/dist/admin/constants.js.map +1 -1
  19. package/dist/admin/constants.mjs +2 -1
  20. package/dist/admin/constants.mjs.map +1 -1
  21. package/dist/admin/index.js +25 -2
  22. package/dist/admin/index.js.map +1 -1
  23. package/dist/admin/index.mjs +26 -3
  24. package/dist/admin/index.mjs.map +1 -1
  25. package/dist/admin/pages/PurchaseContentReleases.js +2 -2
  26. package/dist/admin/pages/PurchaseContentReleases.js.map +1 -1
  27. package/dist/admin/pages/PurchaseContentReleases.mjs +3 -3
  28. package/dist/admin/pages/PurchaseContentReleases.mjs.map +1 -1
  29. package/dist/admin/pages/ReleaseDetailsPage.js +111 -158
  30. package/dist/admin/pages/ReleaseDetailsPage.js.map +1 -1
  31. package/dist/admin/pages/ReleaseDetailsPage.mjs +113 -160
  32. package/dist/admin/pages/ReleaseDetailsPage.mjs.map +1 -1
  33. package/dist/admin/pages/ReleasesPage.js +130 -128
  34. package/dist/admin/pages/ReleasesPage.js.map +1 -1
  35. package/dist/admin/pages/ReleasesPage.mjs +130 -128
  36. package/dist/admin/pages/ReleasesPage.mjs.map +1 -1
  37. package/dist/admin/pages/ReleasesSettingsPage.js +1 -1
  38. package/dist/admin/pages/ReleasesSettingsPage.js.map +1 -1
  39. package/dist/admin/pages/ReleasesSettingsPage.mjs +2 -2
  40. package/dist/admin/pages/ReleasesSettingsPage.mjs.map +1 -1
  41. package/dist/admin/services/homepage.js +24 -0
  42. package/dist/admin/services/homepage.js.map +1 -0
  43. package/dist/admin/services/homepage.mjs +22 -0
  44. package/dist/admin/services/homepage.mjs.map +1 -0
  45. package/dist/admin/services/release.js +20 -10
  46. package/dist/admin/services/release.js.map +1 -1
  47. package/dist/admin/services/release.mjs +20 -10
  48. package/dist/admin/services/release.mjs.map +1 -1
  49. package/dist/admin/src/components/Widgets.d.ts +2 -0
  50. package/dist/admin/src/constants.d.ts +1 -0
  51. package/dist/admin/src/services/homepage.d.ts +9 -0
  52. package/dist/admin/src/services/release.d.ts +28 -28
  53. package/dist/admin/translations/en.json.js +4 -1
  54. package/dist/admin/translations/en.json.js.map +1 -1
  55. package/dist/admin/translations/en.json.mjs +4 -1
  56. package/dist/admin/translations/en.json.mjs.map +1 -1
  57. package/dist/server/controllers/homepage.js +15 -0
  58. package/dist/server/controllers/homepage.js.map +1 -0
  59. package/dist/server/controllers/homepage.mjs +13 -0
  60. package/dist/server/controllers/homepage.mjs.map +1 -0
  61. package/dist/server/controllers/index.js +2 -0
  62. package/dist/server/controllers/index.js.map +1 -1
  63. package/dist/server/controllers/index.mjs +2 -0
  64. package/dist/server/controllers/index.mjs.map +1 -1
  65. package/dist/server/destroy.js +2 -2
  66. package/dist/server/destroy.js.map +1 -1
  67. package/dist/server/destroy.mjs +2 -2
  68. package/dist/server/destroy.mjs.map +1 -1
  69. package/dist/server/routes/homepage.js +25 -0
  70. package/dist/server/routes/homepage.js.map +1 -0
  71. package/dist/server/routes/homepage.mjs +23 -0
  72. package/dist/server/routes/homepage.mjs.map +1 -0
  73. package/dist/server/routes/index.js +2 -0
  74. package/dist/server/routes/index.js.map +1 -1
  75. package/dist/server/routes/index.mjs +2 -0
  76. package/dist/server/routes/index.mjs.map +1 -1
  77. package/dist/server/services/homepage.js +26 -0
  78. package/dist/server/services/homepage.js.map +1 -0
  79. package/dist/server/services/homepage.mjs +24 -0
  80. package/dist/server/services/homepage.mjs.map +1 -0
  81. package/dist/server/services/index.js +2 -0
  82. package/dist/server/services/index.js.map +1 -1
  83. package/dist/server/services/index.mjs +2 -0
  84. package/dist/server/services/index.mjs.map +1 -1
  85. package/dist/server/services/scheduling.js +16 -12
  86. package/dist/server/services/scheduling.js.map +1 -1
  87. package/dist/server/services/scheduling.mjs +16 -12
  88. package/dist/server/services/scheduling.mjs.map +1 -1
  89. package/dist/server/src/controllers/homepage.d.ts +6 -0
  90. package/dist/server/src/controllers/homepage.d.ts.map +1 -0
  91. package/dist/server/src/controllers/index.d.ts +3 -0
  92. package/dist/server/src/controllers/index.d.ts.map +1 -1
  93. package/dist/server/src/destroy.d.ts.map +1 -1
  94. package/dist/server/src/index.d.ts +13 -4
  95. package/dist/server/src/index.d.ts.map +1 -1
  96. package/dist/server/src/routes/homepage.d.ts +4 -0
  97. package/dist/server/src/routes/homepage.d.ts.map +1 -0
  98. package/dist/server/src/routes/index.d.ts +1 -0
  99. package/dist/server/src/routes/index.d.ts.map +1 -1
  100. package/dist/server/src/services/homepage.d.ts +9 -0
  101. package/dist/server/src/services/homepage.d.ts.map +1 -0
  102. package/dist/server/src/services/index.d.ts +9 -4
  103. package/dist/server/src/services/index.d.ts.map +1 -1
  104. package/dist/server/src/services/scheduling.d.ts +4 -5
  105. package/dist/server/src/services/scheduling.d.ts.map +1 -1
  106. package/dist/shared/contracts/homepage.d.ts +11 -0
  107. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  108. package/dist/shared/types.d.ts +1 -0
  109. package/dist/shared/types.d.ts.map +1 -1
  110. package/package.json +9 -10
@@ -30,30 +30,16 @@ function _interopNamespaceDefault(e) {
30
30
 
31
31
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
32
32
 
33
- const StyledMenuItem = styledComponents.styled(designSystem.Menu.Item)`
34
- &:hover {
35
- background: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}100`]};
36
-
37
- svg {
38
- fill: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}600`]};
39
- }
40
-
41
- a {
42
- color: ${({ theme })=>theme.colors.neutral800};
43
- }
44
- }
45
-
46
- svg {
47
- color: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}500`]};
33
+ // TODO: has to be fixed in the DS - https://github.com/strapi/design-system/issues/1934
34
+ const StyledMenuLink = styledComponents.styled(designSystem.Menu.Item)`
35
+ span,
36
+ &:hover span {
37
+ color: ${({ theme })=>theme.colors['neutral800']};
48
38
  }
49
39
 
50
- span {
51
- color: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}800`]};
52
- }
53
-
54
- span,
55
- a {
56
- width: 100%;
40
+ svg path,
41
+ &:hover svg path {
42
+ fill: ${({ theme })=>theme.colors['neutral500']};
57
43
  }
58
44
  `;
59
45
  const DeleteReleaseActionItem = ({ releaseId, actionId })=>{
@@ -102,25 +88,13 @@ const DeleteReleaseActionItem = ({ releaseId, actionId })=>{
102
88
  if (!canDeleteAction) {
103
89
  return null;
104
90
  }
105
- return /*#__PURE__*/ jsxRuntime.jsx(StyledMenuItem, {
106
- $variant: "danger",
91
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Item, {
92
+ variant: "danger",
93
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Cross, {}),
107
94
  onSelect: handleDeleteAction,
108
- children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
109
- gap: 2,
110
- children: [
111
- /*#__PURE__*/ jsxRuntime.jsx(icons.Cross, {
112
- width: "1.6rem",
113
- height: "1.6rem"
114
- }),
115
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
116
- textColor: "danger600",
117
- variant: "omega",
118
- children: formatMessage({
119
- id: 'content-releases.content-manager-edit-view.remove-from-release',
120
- defaultMessage: 'Remove from release'
121
- })
122
- })
123
- ]
95
+ children: formatMessage({
96
+ id: 'content-releases.content-manager-edit-view.remove-from-release',
97
+ defaultMessage: 'Remove from release'
124
98
  })
125
99
  });
126
100
  };
@@ -150,53 +124,30 @@ const ReleaseActionEntryLinkItem = ({ contentTypeUid, documentId, locale })=>{
150
124
  if (!canUpdateContentType || !canUpdateEntryForLocale) {
151
125
  return null;
152
126
  }
153
- return /*#__PURE__*/ jsxRuntime.jsx(StyledMenuItem, {
127
+ return /*#__PURE__*/ jsxRuntime.jsx(StyledMenuLink, {
154
128
  /* @ts-expect-error inference isn't working in DS */ tag: reactRouterDom.NavLink,
155
129
  isLink: true,
156
130
  to: {
157
131
  pathname: `/content-manager/collection-types/${contentTypeUid}/${documentId}`,
158
132
  search: locale && `?plugins[i18n][locale]=${locale}`
159
133
  },
160
- children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
161
- gap: 2,
162
- children: [
163
- /*#__PURE__*/ jsxRuntime.jsx(icons.Pencil, {
164
- width: "1.6rem",
165
- height: "1.6rem"
166
- }),
167
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
168
- variant: "omega",
169
- children: formatMessage({
170
- id: 'content-releases.content-manager-edit-view.edit-entry',
171
- defaultMessage: 'Edit entry'
172
- })
173
- })
174
- ]
134
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Pencil, {}),
135
+ children: formatMessage({
136
+ id: 'content-releases.content-manager-edit-view.edit-entry',
137
+ defaultMessage: 'Edit entry'
175
138
  })
176
139
  });
177
140
  };
178
141
  const EditReleaseItem = ({ releaseId })=>{
179
142
  const { formatMessage } = reactIntl.useIntl();
180
- return /* @ts-expect-error inference isn't working in DS */ /*#__PURE__*/ jsxRuntime.jsx(StyledMenuItem, {
181
- tag: reactRouterDom.NavLink,
143
+ return /*#__PURE__*/ jsxRuntime.jsx(StyledMenuLink, {
144
+ /* @ts-expect-error inference isn't working in DS */ tag: reactRouterDom.NavLink,
182
145
  isLink: true,
183
146
  to: `/plugins/content-releases/${releaseId}`,
184
- children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
185
- gap: 2,
186
- children: [
187
- /*#__PURE__*/ jsxRuntime.jsx(icons.Pencil, {
188
- width: "1.6rem",
189
- height: "1.6rem"
190
- }),
191
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
192
- textColor: "neutral800",
193
- variant: "omega",
194
- children: formatMessage({
195
- id: 'content-releases.content-manager-edit-view.edit-release',
196
- defaultMessage: 'Edit release'
197
- })
198
- })
199
- ]
147
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Pencil, {}),
148
+ children: formatMessage({
149
+ id: 'content-releases.content-manager-edit-view.edit-release',
150
+ defaultMessage: 'Edit release'
200
151
  })
201
152
  });
202
153
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ReleaseActionMenu.js","sources":["../../../admin/src/components/ReleaseActionMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useAPIErrorHandler,\n useNotification,\n useAuth,\n useRBAC,\n isFetchError,\n} from '@strapi/admin/strapi-admin';\nimport { Flex, Typography, Menu, AccessibleIcon } from '@strapi/design-system';\nimport { Cross, More, Pencil } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { DeleteReleaseAction, ReleaseAction } from '../../../shared/contracts/release-actions';\nimport { Release } from '../../../shared/contracts/releases';\nimport { PERMISSIONS } from '../constants';\nimport { useDeleteReleaseActionMutation } from '../services/release';\n\nconst StyledMenuItem = styled(Menu.Item)<{ $variant?: 'neutral' | 'danger' }>`\n &:hover {\n background: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}100`]};\n\n svg {\n fill: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}600`]};\n }\n\n a {\n color: ${({ theme }) => theme.colors.neutral800};\n }\n }\n\n svg {\n color: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}500`]};\n }\n\n span {\n color: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}800`]};\n }\n\n span,\n a {\n width: 100%;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteReleaseActionItemProps\n * -----------------------------------------------------------------------------------------------*/\ninterface DeleteReleaseActionItemProps {\n releaseId: DeleteReleaseAction.Request['params']['releaseId'];\n actionId: DeleteReleaseAction.Request['params']['actionId'];\n}\n\nconst DeleteReleaseActionItem = ({ releaseId, actionId }: DeleteReleaseActionItemProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const [deleteReleaseAction] = useDeleteReleaseActionMutation();\n const {\n allowedActions: { canDeleteAction },\n } = useRBAC(PERMISSIONS);\n\n const handleDeleteAction = async () => {\n const response = await deleteReleaseAction({\n params: { releaseId, actionId },\n });\n\n if ('data' in response) {\n // Handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release.notification.success',\n defaultMessage: 'Entry removed from release',\n }),\n });\n\n return;\n }\n\n if ('error' in response) {\n if (isFetchError(response.error)) {\n // Handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Handle generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (!canDeleteAction) {\n return null;\n }\n\n return (\n <StyledMenuItem $variant=\"danger\" onSelect={handleDeleteAction}>\n <Flex gap={2}>\n <Cross width=\"1.6rem\" height=\"1.6rem\" />\n <Typography textColor=\"danger600\" variant=\"omega\">\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release',\n defaultMessage: 'Remove from release',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseActionEntryLinkItem\n * -----------------------------------------------------------------------------------------------*/\ninterface ReleaseActionEntryLinkItemProps {\n contentTypeUid: ReleaseAction['contentType'];\n documentId: ReleaseAction['entry']['documentId'];\n locale: ReleaseAction['locale'];\n}\n\nconst ReleaseActionEntryLinkItem = ({\n contentTypeUid,\n documentId,\n locale,\n}: ReleaseActionEntryLinkItemProps) => {\n const { formatMessage } = useIntl();\n const userPermissions = useAuth('ReleaseActionEntryLinkItem', (state) => state.permissions);\n\n // Confirm user has permissions to access the entry for the given locale\n const canUpdateEntryForLocale = React.useMemo(() => {\n const updatePermissions = userPermissions.find(\n (permission) =>\n permission.subject === contentTypeUid &&\n permission.action === 'plugin::content-manager.explorer.update'\n );\n\n if (!updatePermissions) {\n return false;\n }\n\n return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));\n }, [contentTypeUid, locale, userPermissions]);\n\n const {\n allowedActions: { canUpdate: canUpdateContentType },\n } = useRBAC({\n updateContentType: [\n {\n action: 'plugin::content-manager.explorer.update',\n subject: contentTypeUid,\n },\n ],\n });\n\n if (!canUpdateContentType || !canUpdateEntryForLocale) {\n return null;\n }\n\n return (\n <StyledMenuItem\n /* @ts-expect-error inference isn't working in DS */\n tag={NavLink}\n isLink\n to={{\n pathname: `/content-manager/collection-types/${contentTypeUid}/${documentId}`,\n search: locale && `?plugins[i18n][locale]=${locale}`,\n }}\n >\n <Flex gap={2}>\n <Pencil width=\"1.6rem\" height=\"1.6rem\" />\n <Typography variant=\"omega\">\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-entry',\n defaultMessage: 'Edit entry',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EditReleaseItem\n * -----------------------------------------------------------------------------------------------*/\ninterface EditReleaseItemProps {\n releaseId: Release['id'];\n}\n\nconst EditReleaseItem = ({ releaseId }: EditReleaseItemProps) => {\n const { formatMessage } = useIntl();\n\n return (\n /* @ts-expect-error inference isn't working in DS */\n <StyledMenuItem tag={NavLink} isLink to={`/plugins/content-releases/${releaseId}`}>\n <Flex gap={2}>\n <Pencil width=\"1.6rem\" height=\"1.6rem\" />\n <Typography textColor=\"neutral800\" variant=\"omega\">\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-release',\n defaultMessage: 'Edit release',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RootProps {\n children: React.ReactNode;\n hasTriggerBorder?: boolean;\n}\n\nconst Root = ({ children }: RootProps) => {\n const { formatMessage } = useIntl();\n\n const { allowedActions } = useRBAC(PERMISSIONS);\n\n return (\n // A user can access the dropdown if they have permissions to delete a release-action OR update a release\n allowedActions.canDeleteAction || allowedActions.canUpdate ? (\n <Menu.Root>\n <StyledMoreButton variant=\"tertiary\" endIcon={null} paddingLeft=\"7px\" paddingRight=\"7px\">\n <AccessibleIcon\n label={formatMessage({\n id: 'content-releases.content-manager-edit-view.release-action-menu',\n defaultMessage: 'Release action options',\n })}\n >\n <More />\n </AccessibleIcon>\n </StyledMoreButton>\n <Menu.Content top={1} popoverPlacement=\"bottom-end\">\n {children}\n </Menu.Content>\n </Menu.Root>\n ) : null\n );\n};\n\nconst StyledMoreButton = styled(Menu.Trigger)`\n & > span {\n display: flex;\n }\n`;\n\nexport const ReleaseActionMenu = {\n Root,\n EditReleaseItem,\n DeleteReleaseActionItem,\n ReleaseActionEntryLinkItem,\n};\n"],"names":["StyledMenuItem","styled","Menu","Item","theme","$variant","colors","neutral800","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","onSelect","_jsxs","Flex","gap","Cross","width","height","Typography","textColor","variant","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","StyledMoreButton","endIcon","paddingLeft","paddingRight","AccessibleIcon","label","More","Content","top","popoverPlacement","Trigger","ReleaseActionMenu"],"mappings":"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"}
1
+ {"version":3,"file":"ReleaseActionMenu.js","sources":["../../../admin/src/components/ReleaseActionMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useAPIErrorHandler,\n useNotification,\n useAuth,\n useRBAC,\n isFetchError,\n} from '@strapi/admin/strapi-admin';\nimport { Menu, AccessibleIcon } from '@strapi/design-system';\nimport { Cross, More, Pencil } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { DeleteReleaseAction, ReleaseAction } from '../../../shared/contracts/release-actions';\nimport { Release } from '../../../shared/contracts/releases';\nimport { PERMISSIONS } from '../constants';\nimport { useDeleteReleaseActionMutation } from '../services/release';\n\n// TODO: has to be fixed in the DS - https://github.com/strapi/design-system/issues/1934\nconst StyledMenuLink = styled(Menu.Item)`\n span,\n &:hover span {\n color: ${({ theme }) => theme.colors['neutral800']};\n }\n\n svg path,\n &:hover svg path {\n fill: ${({ theme }) => theme.colors['neutral500']};\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteReleaseActionItemProps\n * -----------------------------------------------------------------------------------------------*/\ninterface DeleteReleaseActionItemProps {\n releaseId: DeleteReleaseAction.Request['params']['releaseId'];\n actionId: DeleteReleaseAction.Request['params']['actionId'];\n}\n\nconst DeleteReleaseActionItem = ({ releaseId, actionId }: DeleteReleaseActionItemProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const [deleteReleaseAction] = useDeleteReleaseActionMutation();\n const {\n allowedActions: { canDeleteAction },\n } = useRBAC(PERMISSIONS);\n\n const handleDeleteAction = async () => {\n const response = await deleteReleaseAction({\n params: { releaseId, actionId },\n });\n\n if ('data' in response) {\n // Handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release.notification.success',\n defaultMessage: 'Entry removed from release',\n }),\n });\n\n return;\n }\n\n if ('error' in response) {\n if (isFetchError(response.error)) {\n // Handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Handle generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (!canDeleteAction) {\n return null;\n }\n\n return (\n <Menu.Item variant=\"danger\" startIcon={<Cross />} onSelect={handleDeleteAction}>\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release',\n defaultMessage: 'Remove from release',\n })}\n </Menu.Item>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseActionEntryLinkItem\n * -----------------------------------------------------------------------------------------------*/\ninterface ReleaseActionEntryLinkItemProps {\n contentTypeUid: ReleaseAction['contentType'];\n documentId: ReleaseAction['entry']['documentId'];\n locale: ReleaseAction['locale'];\n}\n\nconst ReleaseActionEntryLinkItem = ({\n contentTypeUid,\n documentId,\n locale,\n}: ReleaseActionEntryLinkItemProps) => {\n const { formatMessage } = useIntl();\n const userPermissions = useAuth('ReleaseActionEntryLinkItem', (state) => state.permissions);\n\n // Confirm user has permissions to access the entry for the given locale\n const canUpdateEntryForLocale = React.useMemo(() => {\n const updatePermissions = userPermissions.find(\n (permission) =>\n permission.subject === contentTypeUid &&\n permission.action === 'plugin::content-manager.explorer.update'\n );\n\n if (!updatePermissions) {\n return false;\n }\n\n return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));\n }, [contentTypeUid, locale, userPermissions]);\n\n const {\n allowedActions: { canUpdate: canUpdateContentType },\n } = useRBAC({\n updateContentType: [\n {\n action: 'plugin::content-manager.explorer.update',\n subject: contentTypeUid,\n },\n ],\n });\n\n if (!canUpdateContentType || !canUpdateEntryForLocale) {\n return null;\n }\n\n return (\n <StyledMenuLink\n /* @ts-expect-error inference isn't working in DS */\n tag={NavLink}\n isLink\n to={{\n pathname: `/content-manager/collection-types/${contentTypeUid}/${documentId}`,\n search: locale && `?plugins[i18n][locale]=${locale}`,\n }}\n startIcon={<Pencil />}\n >\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-entry',\n defaultMessage: 'Edit entry',\n })}\n </StyledMenuLink>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EditReleaseItem\n * -----------------------------------------------------------------------------------------------*/\ninterface EditReleaseItemProps {\n releaseId: Release['id'];\n}\n\nconst EditReleaseItem = ({ releaseId }: EditReleaseItemProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <StyledMenuLink\n /* @ts-expect-error inference isn't working in DS */\n tag={NavLink}\n isLink\n to={`/plugins/content-releases/${releaseId}`}\n startIcon={<Pencil />}\n >\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-release',\n defaultMessage: 'Edit release',\n })}\n </StyledMenuLink>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RootProps {\n children: React.ReactNode;\n hasTriggerBorder?: boolean;\n}\n\nconst Root = ({ children }: RootProps) => {\n const { formatMessage } = useIntl();\n\n const { allowedActions } = useRBAC(PERMISSIONS);\n\n return (\n // A user can access the dropdown if they have permissions to delete a release-action OR update a release\n allowedActions.canDeleteAction || allowedActions.canUpdate ? (\n <Menu.Root>\n <StyledMoreButton variant=\"tertiary\" endIcon={null} paddingLeft=\"7px\" paddingRight=\"7px\">\n <AccessibleIcon\n label={formatMessage({\n id: 'content-releases.content-manager-edit-view.release-action-menu',\n defaultMessage: 'Release action options',\n })}\n >\n <More />\n </AccessibleIcon>\n </StyledMoreButton>\n <Menu.Content top={1} popoverPlacement=\"bottom-end\">\n {children}\n </Menu.Content>\n </Menu.Root>\n ) : null\n );\n};\n\nconst StyledMoreButton = styled(Menu.Trigger)`\n & > span {\n display: flex;\n }\n`;\n\nexport const ReleaseActionMenu = {\n Root,\n EditReleaseItem,\n DeleteReleaseActionItem,\n ReleaseActionEntryLinkItem,\n};\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","paddingLeft","paddingRight","AccessibleIcon","label","More","Content","top","popoverPlacement","Trigger","ReleaseActionMenu"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA;AACA,MAAMA,cAAiBC,GAAAA,uBAAAA,CAAOC,iBAAKC,CAAAA,IAAI,CAAC;;;WAG7B,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAAC,YAAA,CAAa,CAAC;;;;;UAK7C,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAAC,YAAA,CAAa,CAAC;;AAEtD,CAAC;AAUD,MAAMC,0BAA0B,CAAC,EAAEC,SAAS,EAAEC,QAAQ,EAAgC,GAAA;IACpF,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;IAC/B,MAAM,EAAEC,cAAc,EAAE,GAAGC,8BAAAA,EAAAA;IAC3B,MAAM,CAACC,oBAAoB,GAAGC,sCAAAA,EAAAA;AAC9B,IAAA,MAAM,EACJC,cAAgB,EAAA,EAAEC,eAAe,EAAE,EACpC,GAAGC,mBAAQC,CAAAA,qBAAAA,CAAAA;AAEZ,IAAA,MAAMC,kBAAqB,GAAA,UAAA;QACzB,MAAMC,QAAAA,GAAW,MAAMP,mBAAoB,CAAA;YACzCQ,MAAQ,EAAA;AAAEhB,gBAAAA,SAAAA;AAAWC,gBAAAA;AAAS;AAChC,SAAA,CAAA;AAEA,QAAA,IAAI,UAAUc,QAAU,EAAA;;YAEtBX,kBAAmB,CAAA;gBACjBa,IAAM,EAAA,SAAA;AACNC,gBAAAA,OAAAA,EAAShB,aAAc,CAAA;oBACrBiB,EAAI,EAAA,qFAAA;oBACJC,cAAgB,EAAA;AAClB,iBAAA;AACF,aAAA,CAAA;AAEA,YAAA;AACF;AAEA,QAAA,IAAI,WAAWL,QAAU,EAAA;YACvB,IAAIM,wBAAAA,CAAaN,QAASO,CAAAA,KAAK,CAAG,EAAA;;gBAEhClB,kBAAmB,CAAA;oBACjBa,IAAM,EAAA,QAAA;oBACNC,OAASZ,EAAAA,cAAAA,CAAeS,SAASO,KAAK;AACxC,iBAAA,CAAA;aACK,MAAA;;gBAELlB,kBAAmB,CAAA;oBACjBa,IAAM,EAAA,QAAA;AACNC,oBAAAA,OAAAA,EAAShB,aAAc,CAAA;wBAAEiB,EAAI,EAAA,oBAAA;wBAAsBC,cAAgB,EAAA;AAAoB,qBAAA;AACzF,iBAAA,CAAA;AACF;AACF;AACF,KAAA;AAEA,IAAA,IAAI,CAACT,eAAiB,EAAA;QACpB,OAAO,IAAA;AACT;IAEA,qBACEY,cAAA,CAAC5B,kBAAKC,IAAI,EAAA;QAAC4B,OAAQ,EAAA,QAAA;AAASC,QAAAA,SAAAA,gBAAWF,cAACG,CAAAA,WAAAA,EAAAA,EAAAA,CAAAA;QAAUC,QAAUb,EAAAA,kBAAAA;kBACzDZ,aAAc,CAAA;YACbiB,EAAI,EAAA,gEAAA;YACJC,cAAgB,EAAA;AAClB,SAAA;;AAGN,CAAA;AAWA,MAAMQ,0BAAAA,GAA6B,CAAC,EAClCC,cAAc,EACdC,UAAU,EACVC,MAAM,EAC0B,GAAA;IAChC,MAAM,EAAE7B,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM6B,kBAAkBC,mBAAQ,CAAA,4BAAA,EAA8B,CAACC,KAAAA,GAAUA,MAAMC,WAAW,CAAA;;IAG1F,MAAMC,uBAAAA,GAA0BC,gBAAMC,CAAAA,OAAO,CAAC,IAAA;AAC5C,QAAA,MAAMC,iBAAoBP,GAAAA,eAAAA,CAAgBQ,IAAI,CAC5C,CAACC,UAAAA,GACCA,UAAWC,CAAAA,OAAO,KAAKb,cAAAA,IACvBY,UAAWE,CAAAA,MAAM,KAAK,yCAAA,CAAA;AAG1B,QAAA,IAAI,CAACJ,iBAAmB,EAAA;YACtB,OAAO,KAAA;AACT;AAEA,QAAA,OAAOK,QAAQ,CAACb,MAAAA,IAAUQ,kBAAkBM,UAAU,EAAEC,SAASC,QAAShB,CAAAA,MAAAA,CAAAA,CAAAA;KACzE,EAAA;AAACF,QAAAA,cAAAA;AAAgBE,QAAAA,MAAAA;AAAQC,QAAAA;AAAgB,KAAA,CAAA;IAE5C,MAAM,EACJtB,gBAAgB,EAAEsC,SAAAA,EAAWC,oBAAoB,EAAE,EACpD,GAAGrC,mBAAQ,CAAA;QACVsC,iBAAmB,EAAA;AACjB,YAAA;gBACEP,MAAQ,EAAA,yCAAA;gBACRD,OAASb,EAAAA;AACX;AACD;AACH,KAAA,CAAA;IAEA,IAAI,CAACoB,oBAAwB,IAAA,CAACb,uBAAyB,EAAA;QACrD,OAAO,IAAA;AACT;AAEA,IAAA,qBACEb,cAAC9B,CAAAA,cAAAA,EAAAA;AACC,6DACA0D,GAAKC,EAAAA,sBAAAA;QACLC,MAAM,EAAA,IAAA;QACNC,EAAI,EAAA;AACFC,YAAAA,QAAAA,EAAU,CAAC,kCAAkC,EAAE1B,eAAe,CAAC,EAAEC,WAAW,CAAC;AAC7E0B,YAAAA,MAAAA,EAAQzB,MAAU,IAAA,CAAC,uBAAuB,EAAEA,OAAO;AACrD,SAAA;AACAN,QAAAA,SAAAA,gBAAWF,cAACkC,CAAAA,YAAAA,EAAAA,EAAAA,CAAAA;kBAEXvD,aAAc,CAAA;YACbiB,EAAI,EAAA,uDAAA;YACJC,cAAgB,EAAA;AAClB,SAAA;;AAGN,CAAA;AASA,MAAMsC,eAAkB,GAAA,CAAC,EAAE1D,SAAS,EAAwB,GAAA;IAC1D,MAAM,EAAEE,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,qBACEoB,cAAC9B,CAAAA,cAAAA,EAAAA;AACC,6DACA0D,GAAKC,EAAAA,sBAAAA;QACLC,MAAM,EAAA,IAAA;AACNC,QAAAA,EAAAA,EAAI,CAAC,0BAA0B,EAAEtD,SAAAA,CAAU,CAAC;AAC5CyB,QAAAA,SAAAA,gBAAWF,cAACkC,CAAAA,YAAAA,EAAAA,EAAAA,CAAAA;kBAEXvD,aAAc,CAAA;YACbiB,EAAI,EAAA,yDAAA;YACJC,cAAgB,EAAA;AAClB,SAAA;;AAGN,CAAA;AAWA,MAAMuC,IAAO,GAAA,CAAC,EAAEC,QAAQ,EAAa,GAAA;IACnC,MAAM,EAAE1D,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,MAAM,EAAEO,cAAc,EAAE,GAAGE,mBAAQC,CAAAA,qBAAAA,CAAAA;AAEnC,IAAA;AAEEH,IAAAA,cAAAA,CAAeC,eAAe,IAAID,cAAAA,CAAesC,SAAS,iBACxDa,eAAA,CAAClE,kBAAKgE,IAAI,EAAA;;0BACRpC,cAACuC,CAAAA,gBAAAA,EAAAA;gBAAiBtC,OAAQ,EAAA,UAAA;gBAAWuC,OAAS,EAAA,IAAA;gBAAMC,WAAY,EAAA,KAAA;gBAAMC,YAAa,EAAA,KAAA;AACjF,gBAAA,QAAA,gBAAA1C,cAAC2C,CAAAA,2BAAAA,EAAAA;AACCC,oBAAAA,KAAAA,EAAOjE,aAAc,CAAA;wBACnBiB,EAAI,EAAA,gEAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA,CAAA;AAEA,oBAAA,QAAA,gBAAAG,cAAC6C,CAAAA,UAAAA,EAAAA,EAAAA;;;AAGL,0BAAA7C,cAAA,CAAC5B,kBAAK0E,OAAO,EAAA;gBAACC,GAAK,EAAA,CAAA;gBAAGC,gBAAiB,EAAA,YAAA;AACpCX,gBAAAA,QAAAA,EAAAA;;;AAGH,KAAA,CAAA,GAAA,IAAA;AAER,CAAA;AAEA,MAAME,gBAAmBpE,GAAAA,uBAAAA,CAAOC,iBAAK6E,CAAAA,OAAO,CAAC;;;;AAI7C,CAAC;MAEYC,iBAAoB,GAAA;AAC/Bd,IAAAA,IAAAA;AACAD,IAAAA,eAAAA;AACA3D,IAAAA,uBAAAA;AACA6B,IAAAA;AACF;;;;"}
@@ -1,7 +1,7 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import { useNotification, useAPIErrorHandler, useRBAC, useAuth, isFetchError } from '@strapi/admin/strapi-admin';
4
- import { Menu, Flex, Typography, AccessibleIcon } from '@strapi/design-system';
4
+ import { Menu, AccessibleIcon } from '@strapi/design-system';
5
5
  import { Cross, Pencil, More } from '@strapi/icons';
6
6
  import { useIntl } from 'react-intl';
7
7
  import { NavLink } from 'react-router-dom';
@@ -9,30 +9,16 @@ import { styled } from 'styled-components';
9
9
  import { PERMISSIONS } from '../constants.mjs';
10
10
  import { useDeleteReleaseActionMutation } from '../services/release.mjs';
11
11
 
12
- const StyledMenuItem = styled(Menu.Item)`
13
- &:hover {
14
- background: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}100`]};
15
-
16
- svg {
17
- fill: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}600`]};
18
- }
19
-
20
- a {
21
- color: ${({ theme })=>theme.colors.neutral800};
22
- }
23
- }
24
-
25
- svg {
26
- color: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}500`]};
12
+ // TODO: has to be fixed in the DS - https://github.com/strapi/design-system/issues/1934
13
+ const StyledMenuLink = styled(Menu.Item)`
14
+ span,
15
+ &:hover span {
16
+ color: ${({ theme })=>theme.colors['neutral800']};
27
17
  }
28
18
 
29
- span {
30
- color: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}800`]};
31
- }
32
-
33
- span,
34
- a {
35
- width: 100%;
19
+ svg path,
20
+ &:hover svg path {
21
+ fill: ${({ theme })=>theme.colors['neutral500']};
36
22
  }
37
23
  `;
38
24
  const DeleteReleaseActionItem = ({ releaseId, actionId })=>{
@@ -81,25 +67,13 @@ const DeleteReleaseActionItem = ({ releaseId, actionId })=>{
81
67
  if (!canDeleteAction) {
82
68
  return null;
83
69
  }
84
- return /*#__PURE__*/ jsx(StyledMenuItem, {
85
- $variant: "danger",
70
+ return /*#__PURE__*/ jsx(Menu.Item, {
71
+ variant: "danger",
72
+ startIcon: /*#__PURE__*/ jsx(Cross, {}),
86
73
  onSelect: handleDeleteAction,
87
- children: /*#__PURE__*/ jsxs(Flex, {
88
- gap: 2,
89
- children: [
90
- /*#__PURE__*/ jsx(Cross, {
91
- width: "1.6rem",
92
- height: "1.6rem"
93
- }),
94
- /*#__PURE__*/ jsx(Typography, {
95
- textColor: "danger600",
96
- variant: "omega",
97
- children: formatMessage({
98
- id: 'content-releases.content-manager-edit-view.remove-from-release',
99
- defaultMessage: 'Remove from release'
100
- })
101
- })
102
- ]
74
+ children: formatMessage({
75
+ id: 'content-releases.content-manager-edit-view.remove-from-release',
76
+ defaultMessage: 'Remove from release'
103
77
  })
104
78
  });
105
79
  };
@@ -129,53 +103,30 @@ const ReleaseActionEntryLinkItem = ({ contentTypeUid, documentId, locale })=>{
129
103
  if (!canUpdateContentType || !canUpdateEntryForLocale) {
130
104
  return null;
131
105
  }
132
- return /*#__PURE__*/ jsx(StyledMenuItem, {
106
+ return /*#__PURE__*/ jsx(StyledMenuLink, {
133
107
  /* @ts-expect-error inference isn't working in DS */ tag: NavLink,
134
108
  isLink: true,
135
109
  to: {
136
110
  pathname: `/content-manager/collection-types/${contentTypeUid}/${documentId}`,
137
111
  search: locale && `?plugins[i18n][locale]=${locale}`
138
112
  },
139
- children: /*#__PURE__*/ jsxs(Flex, {
140
- gap: 2,
141
- children: [
142
- /*#__PURE__*/ jsx(Pencil, {
143
- width: "1.6rem",
144
- height: "1.6rem"
145
- }),
146
- /*#__PURE__*/ jsx(Typography, {
147
- variant: "omega",
148
- children: formatMessage({
149
- id: 'content-releases.content-manager-edit-view.edit-entry',
150
- defaultMessage: 'Edit entry'
151
- })
152
- })
153
- ]
113
+ startIcon: /*#__PURE__*/ jsx(Pencil, {}),
114
+ children: formatMessage({
115
+ id: 'content-releases.content-manager-edit-view.edit-entry',
116
+ defaultMessage: 'Edit entry'
154
117
  })
155
118
  });
156
119
  };
157
120
  const EditReleaseItem = ({ releaseId })=>{
158
121
  const { formatMessage } = useIntl();
159
- return /* @ts-expect-error inference isn't working in DS */ /*#__PURE__*/ jsx(StyledMenuItem, {
160
- tag: NavLink,
122
+ return /*#__PURE__*/ jsx(StyledMenuLink, {
123
+ /* @ts-expect-error inference isn't working in DS */ tag: NavLink,
161
124
  isLink: true,
162
125
  to: `/plugins/content-releases/${releaseId}`,
163
- children: /*#__PURE__*/ jsxs(Flex, {
164
- gap: 2,
165
- children: [
166
- /*#__PURE__*/ jsx(Pencil, {
167
- width: "1.6rem",
168
- height: "1.6rem"
169
- }),
170
- /*#__PURE__*/ jsx(Typography, {
171
- textColor: "neutral800",
172
- variant: "omega",
173
- children: formatMessage({
174
- id: 'content-releases.content-manager-edit-view.edit-release',
175
- defaultMessage: 'Edit release'
176
- })
177
- })
178
- ]
126
+ startIcon: /*#__PURE__*/ jsx(Pencil, {}),
127
+ children: formatMessage({
128
+ id: 'content-releases.content-manager-edit-view.edit-release',
129
+ defaultMessage: 'Edit release'
179
130
  })
180
131
  });
181
132
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ReleaseActionMenu.mjs","sources":["../../../admin/src/components/ReleaseActionMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useAPIErrorHandler,\n useNotification,\n useAuth,\n useRBAC,\n isFetchError,\n} from '@strapi/admin/strapi-admin';\nimport { Flex, Typography, Menu, AccessibleIcon } from '@strapi/design-system';\nimport { Cross, More, Pencil } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { DeleteReleaseAction, ReleaseAction } from '../../../shared/contracts/release-actions';\nimport { Release } from '../../../shared/contracts/releases';\nimport { PERMISSIONS } from '../constants';\nimport { useDeleteReleaseActionMutation } from '../services/release';\n\nconst StyledMenuItem = styled(Menu.Item)<{ $variant?: 'neutral' | 'danger' }>`\n &:hover {\n background: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}100`]};\n\n svg {\n fill: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}600`]};\n }\n\n a {\n color: ${({ theme }) => theme.colors.neutral800};\n }\n }\n\n svg {\n color: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}500`]};\n }\n\n span {\n color: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}800`]};\n }\n\n span,\n a {\n width: 100%;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteReleaseActionItemProps\n * -----------------------------------------------------------------------------------------------*/\ninterface DeleteReleaseActionItemProps {\n releaseId: DeleteReleaseAction.Request['params']['releaseId'];\n actionId: DeleteReleaseAction.Request['params']['actionId'];\n}\n\nconst DeleteReleaseActionItem = ({ releaseId, actionId }: DeleteReleaseActionItemProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const [deleteReleaseAction] = useDeleteReleaseActionMutation();\n const {\n allowedActions: { canDeleteAction },\n } = useRBAC(PERMISSIONS);\n\n const handleDeleteAction = async () => {\n const response = await deleteReleaseAction({\n params: { releaseId, actionId },\n });\n\n if ('data' in response) {\n // Handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release.notification.success',\n defaultMessage: 'Entry removed from release',\n }),\n });\n\n return;\n }\n\n if ('error' in response) {\n if (isFetchError(response.error)) {\n // Handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Handle generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (!canDeleteAction) {\n return null;\n }\n\n return (\n <StyledMenuItem $variant=\"danger\" onSelect={handleDeleteAction}>\n <Flex gap={2}>\n <Cross width=\"1.6rem\" height=\"1.6rem\" />\n <Typography textColor=\"danger600\" variant=\"omega\">\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release',\n defaultMessage: 'Remove from release',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseActionEntryLinkItem\n * -----------------------------------------------------------------------------------------------*/\ninterface ReleaseActionEntryLinkItemProps {\n contentTypeUid: ReleaseAction['contentType'];\n documentId: ReleaseAction['entry']['documentId'];\n locale: ReleaseAction['locale'];\n}\n\nconst ReleaseActionEntryLinkItem = ({\n contentTypeUid,\n documentId,\n locale,\n}: ReleaseActionEntryLinkItemProps) => {\n const { formatMessage } = useIntl();\n const userPermissions = useAuth('ReleaseActionEntryLinkItem', (state) => state.permissions);\n\n // Confirm user has permissions to access the entry for the given locale\n const canUpdateEntryForLocale = React.useMemo(() => {\n const updatePermissions = userPermissions.find(\n (permission) =>\n permission.subject === contentTypeUid &&\n permission.action === 'plugin::content-manager.explorer.update'\n );\n\n if (!updatePermissions) {\n return false;\n }\n\n return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));\n }, [contentTypeUid, locale, userPermissions]);\n\n const {\n allowedActions: { canUpdate: canUpdateContentType },\n } = useRBAC({\n updateContentType: [\n {\n action: 'plugin::content-manager.explorer.update',\n subject: contentTypeUid,\n },\n ],\n });\n\n if (!canUpdateContentType || !canUpdateEntryForLocale) {\n return null;\n }\n\n return (\n <StyledMenuItem\n /* @ts-expect-error inference isn't working in DS */\n tag={NavLink}\n isLink\n to={{\n pathname: `/content-manager/collection-types/${contentTypeUid}/${documentId}`,\n search: locale && `?plugins[i18n][locale]=${locale}`,\n }}\n >\n <Flex gap={2}>\n <Pencil width=\"1.6rem\" height=\"1.6rem\" />\n <Typography variant=\"omega\">\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-entry',\n defaultMessage: 'Edit entry',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EditReleaseItem\n * -----------------------------------------------------------------------------------------------*/\ninterface EditReleaseItemProps {\n releaseId: Release['id'];\n}\n\nconst EditReleaseItem = ({ releaseId }: EditReleaseItemProps) => {\n const { formatMessage } = useIntl();\n\n return (\n /* @ts-expect-error inference isn't working in DS */\n <StyledMenuItem tag={NavLink} isLink to={`/plugins/content-releases/${releaseId}`}>\n <Flex gap={2}>\n <Pencil width=\"1.6rem\" height=\"1.6rem\" />\n <Typography textColor=\"neutral800\" variant=\"omega\">\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-release',\n defaultMessage: 'Edit release',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RootProps {\n children: React.ReactNode;\n hasTriggerBorder?: boolean;\n}\n\nconst Root = ({ children }: RootProps) => {\n const { formatMessage } = useIntl();\n\n const { allowedActions } = useRBAC(PERMISSIONS);\n\n return (\n // A user can access the dropdown if they have permissions to delete a release-action OR update a release\n allowedActions.canDeleteAction || allowedActions.canUpdate ? (\n <Menu.Root>\n <StyledMoreButton variant=\"tertiary\" endIcon={null} paddingLeft=\"7px\" paddingRight=\"7px\">\n <AccessibleIcon\n label={formatMessage({\n id: 'content-releases.content-manager-edit-view.release-action-menu',\n defaultMessage: 'Release action options',\n })}\n >\n <More />\n </AccessibleIcon>\n </StyledMoreButton>\n <Menu.Content top={1} popoverPlacement=\"bottom-end\">\n {children}\n </Menu.Content>\n </Menu.Root>\n ) : null\n );\n};\n\nconst StyledMoreButton = styled(Menu.Trigger)`\n & > span {\n display: flex;\n }\n`;\n\nexport const ReleaseActionMenu = {\n Root,\n EditReleaseItem,\n DeleteReleaseActionItem,\n ReleaseActionEntryLinkItem,\n};\n"],"names":["StyledMenuItem","styled","Menu","Item","theme","$variant","colors","neutral800","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","onSelect","_jsxs","Flex","gap","Cross","width","height","Typography","textColor","variant","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","StyledMoreButton","endIcon","paddingLeft","paddingRight","AccessibleIcon","label","More","Content","top","popoverPlacement","Trigger","ReleaseActionMenu"],"mappings":"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"}
1
+ {"version":3,"file":"ReleaseActionMenu.mjs","sources":["../../../admin/src/components/ReleaseActionMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useAPIErrorHandler,\n useNotification,\n useAuth,\n useRBAC,\n isFetchError,\n} from '@strapi/admin/strapi-admin';\nimport { Menu, AccessibleIcon } from '@strapi/design-system';\nimport { Cross, More, Pencil } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { DeleteReleaseAction, ReleaseAction } from '../../../shared/contracts/release-actions';\nimport { Release } from '../../../shared/contracts/releases';\nimport { PERMISSIONS } from '../constants';\nimport { useDeleteReleaseActionMutation } from '../services/release';\n\n// TODO: has to be fixed in the DS - https://github.com/strapi/design-system/issues/1934\nconst StyledMenuLink = styled(Menu.Item)`\n span,\n &:hover span {\n color: ${({ theme }) => theme.colors['neutral800']};\n }\n\n svg path,\n &:hover svg path {\n fill: ${({ theme }) => theme.colors['neutral500']};\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteReleaseActionItemProps\n * -----------------------------------------------------------------------------------------------*/\ninterface DeleteReleaseActionItemProps {\n releaseId: DeleteReleaseAction.Request['params']['releaseId'];\n actionId: DeleteReleaseAction.Request['params']['actionId'];\n}\n\nconst DeleteReleaseActionItem = ({ releaseId, actionId }: DeleteReleaseActionItemProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const [deleteReleaseAction] = useDeleteReleaseActionMutation();\n const {\n allowedActions: { canDeleteAction },\n } = useRBAC(PERMISSIONS);\n\n const handleDeleteAction = async () => {\n const response = await deleteReleaseAction({\n params: { releaseId, actionId },\n });\n\n if ('data' in response) {\n // Handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release.notification.success',\n defaultMessage: 'Entry removed from release',\n }),\n });\n\n return;\n }\n\n if ('error' in response) {\n if (isFetchError(response.error)) {\n // Handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Handle generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (!canDeleteAction) {\n return null;\n }\n\n return (\n <Menu.Item variant=\"danger\" startIcon={<Cross />} onSelect={handleDeleteAction}>\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release',\n defaultMessage: 'Remove from release',\n })}\n </Menu.Item>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseActionEntryLinkItem\n * -----------------------------------------------------------------------------------------------*/\ninterface ReleaseActionEntryLinkItemProps {\n contentTypeUid: ReleaseAction['contentType'];\n documentId: ReleaseAction['entry']['documentId'];\n locale: ReleaseAction['locale'];\n}\n\nconst ReleaseActionEntryLinkItem = ({\n contentTypeUid,\n documentId,\n locale,\n}: ReleaseActionEntryLinkItemProps) => {\n const { formatMessage } = useIntl();\n const userPermissions = useAuth('ReleaseActionEntryLinkItem', (state) => state.permissions);\n\n // Confirm user has permissions to access the entry for the given locale\n const canUpdateEntryForLocale = React.useMemo(() => {\n const updatePermissions = userPermissions.find(\n (permission) =>\n permission.subject === contentTypeUid &&\n permission.action === 'plugin::content-manager.explorer.update'\n );\n\n if (!updatePermissions) {\n return false;\n }\n\n return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));\n }, [contentTypeUid, locale, userPermissions]);\n\n const {\n allowedActions: { canUpdate: canUpdateContentType },\n } = useRBAC({\n updateContentType: [\n {\n action: 'plugin::content-manager.explorer.update',\n subject: contentTypeUid,\n },\n ],\n });\n\n if (!canUpdateContentType || !canUpdateEntryForLocale) {\n return null;\n }\n\n return (\n <StyledMenuLink\n /* @ts-expect-error inference isn't working in DS */\n tag={NavLink}\n isLink\n to={{\n pathname: `/content-manager/collection-types/${contentTypeUid}/${documentId}`,\n search: locale && `?plugins[i18n][locale]=${locale}`,\n }}\n startIcon={<Pencil />}\n >\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-entry',\n defaultMessage: 'Edit entry',\n })}\n </StyledMenuLink>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EditReleaseItem\n * -----------------------------------------------------------------------------------------------*/\ninterface EditReleaseItemProps {\n releaseId: Release['id'];\n}\n\nconst EditReleaseItem = ({ releaseId }: EditReleaseItemProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <StyledMenuLink\n /* @ts-expect-error inference isn't working in DS */\n tag={NavLink}\n isLink\n to={`/plugins/content-releases/${releaseId}`}\n startIcon={<Pencil />}\n >\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-release',\n defaultMessage: 'Edit release',\n })}\n </StyledMenuLink>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RootProps {\n children: React.ReactNode;\n hasTriggerBorder?: boolean;\n}\n\nconst Root = ({ children }: RootProps) => {\n const { formatMessage } = useIntl();\n\n const { allowedActions } = useRBAC(PERMISSIONS);\n\n return (\n // A user can access the dropdown if they have permissions to delete a release-action OR update a release\n allowedActions.canDeleteAction || allowedActions.canUpdate ? (\n <Menu.Root>\n <StyledMoreButton variant=\"tertiary\" endIcon={null} paddingLeft=\"7px\" paddingRight=\"7px\">\n <AccessibleIcon\n label={formatMessage({\n id: 'content-releases.content-manager-edit-view.release-action-menu',\n defaultMessage: 'Release action options',\n })}\n >\n <More />\n </AccessibleIcon>\n </StyledMoreButton>\n <Menu.Content top={1} popoverPlacement=\"bottom-end\">\n {children}\n </Menu.Content>\n </Menu.Root>\n ) : null\n );\n};\n\nconst StyledMoreButton = styled(Menu.Trigger)`\n & > span {\n display: flex;\n }\n`;\n\nexport const ReleaseActionMenu = {\n Root,\n EditReleaseItem,\n DeleteReleaseActionItem,\n ReleaseActionEntryLinkItem,\n};\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","paddingLeft","paddingRight","AccessibleIcon","label","More","Content","top","popoverPlacement","Trigger","ReleaseActionMenu"],"mappings":"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"}
@@ -146,9 +146,15 @@ const ReleaseModal = ({ handleClose, open, handleSubmit, initialValues, isLoadin
146
146
  /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
147
147
  gap: 4,
148
148
  alignItems: "start",
149
+ direction: {
150
+ initial: 'column',
151
+ medium: 'row'
152
+ },
153
+ wrap: "wrap",
149
154
  children: [
150
155
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
151
156
  width: "100%",
157
+ flex: 1,
152
158
  children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
153
159
  name: "date",
154
160
  error: errors.date && formatMessage({
@@ -186,6 +192,7 @@ const ReleaseModal = ({ handleClose, open, handleSubmit, initialValues, isLoadin
186
192
  }),
187
193
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
188
194
  width: "100%",
195
+ flex: 1,
189
196
  children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
190
197
  name: "time",
191
198
  error: errors.time && formatMessage({
@@ -1 +1 @@
1
- {"version":3,"file":"ReleaseModal.js","sources":["../../../admin/src/components/ReleaseModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Button,\n Modal,\n TextInput,\n Typography,\n Checkbox,\n Flex,\n Box,\n DatePicker,\n TimePicker,\n Combobox,\n ComboboxOption,\n Field,\n} from '@strapi/design-system';\nimport { formatISO } from 'date-fns';\nimport { utcToZonedTime, zonedTimeToUtc } from 'date-fns-tz';\nimport { Formik, Form, useFormikContext } from 'formik';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { useLocation } from 'react-router-dom';\n\nimport { pluginId } from '../pluginId';\nimport { getTimezones } from '../utils/time';\nimport { RELEASE_SCHEMA } from '../validation/schemas';\n\nexport interface FormValues {\n name: string;\n date?: string;\n time: string;\n timezone: string | null;\n isScheduled?: boolean;\n scheduledAt: Date | null;\n}\n\ninterface ReleaseModalProps {\n handleClose: () => void;\n handleSubmit: (values: FormValues) => void;\n isLoading?: boolean;\n initialValues: FormValues;\n open?: boolean;\n}\n\nexport const ReleaseModal = ({\n handleClose,\n open,\n handleSubmit,\n initialValues,\n isLoading = false,\n}: ReleaseModalProps) => {\n const { formatMessage } = useIntl();\n const { pathname } = useLocation();\n const isCreatingRelease = pathname === `/plugins/${pluginId}`;\n // Set default first timezone from the list if no system timezone detected\n const { timezoneList, systemTimezone = { value: 'UTC+00:00-Africa/Abidjan ' } } = getTimezones(\n initialValues.scheduledAt ? new Date(initialValues.scheduledAt) : new Date()\n );\n\n /**\n * Generate scheduled time using selected date, time and timezone\n */\n const getScheduledTimestamp = (values: FormValues) => {\n const { date, time, timezone } = values;\n if (!date || !time || !timezone) return null;\n const timezoneWithoutOffset = timezone.split('&')[1];\n return zonedTimeToUtc(`${date} ${time}`, timezoneWithoutOffset);\n };\n\n /**\n * Get timezone with offset to show the selected value in the dropdown\n */\n const getTimezoneWithOffset = () => {\n const currentTimezone = timezoneList.find(\n (timezone) => timezone.value.split('&')[1] === initialValues.timezone\n );\n return currentTimezone?.value || systemTimezone.value;\n };\n\n return (\n <Modal.Root open={open} onOpenChange={handleClose}>\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>\n {formatMessage(\n {\n id: 'content-releases.modal.title',\n defaultMessage:\n '{isCreatingRelease, select, true {New release} other {Edit release}}',\n },\n { isCreatingRelease: isCreatingRelease }\n )}\n </Modal.Title>\n </Modal.Header>\n <Formik\n onSubmit={(values) => {\n handleSubmit({\n ...values,\n timezone: values.timezone ? values.timezone.split('&')[1] : null,\n scheduledAt: values.isScheduled ? getScheduledTimestamp(values) : null,\n });\n }}\n initialValues={{\n ...initialValues,\n timezone: initialValues.timezone ? getTimezoneWithOffset() : systemTimezone.value,\n }}\n validationSchema={RELEASE_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleChange, setFieldValue }) => {\n return (\n <Form>\n <Modal.Body>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Field.Root\n name=\"name\"\n error={\n errors.name &&\n formatMessage({ id: errors.name, defaultMessage: errors.name })\n }\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'content-releases.modal.form.input.label.release-name',\n defaultMessage: 'Name',\n })}\n </Field.Label>\n <TextInput value={values.name} onChange={handleChange} />\n <Field.Error />\n </Field.Root>\n <Box width=\"max-content\">\n <Checkbox\n name=\"isScheduled\"\n checked={values.isScheduled}\n onCheckedChange={(checked) => {\n setFieldValue('isScheduled', checked);\n if (!checked) {\n // Clear scheduling info from a release on unchecking schedule release, which reset scheduling info in DB\n setFieldValue('date', null);\n setFieldValue('time', '');\n setFieldValue('timezone', null);\n } else {\n // On ticking back schedule release date, time and timezone should be restored to the initial state\n setFieldValue('date', initialValues.date);\n setFieldValue('time', initialValues.time);\n setFieldValue(\n 'timezone',\n initialValues.timezone ?? systemTimezone?.value\n );\n }\n }}\n >\n <Typography\n textColor={values.isScheduled ? 'primary600' : 'neutral800'}\n fontWeight={values.isScheduled ? 'semiBold' : 'regular'}\n >\n {formatMessage({\n id: 'modal.form.input.label.schedule-release',\n defaultMessage: 'Schedule release',\n })}\n </Typography>\n </Checkbox>\n </Box>\n {values.isScheduled && (\n <>\n <Flex gap={4} alignItems=\"start\">\n <Box width=\"100%\">\n <Field.Root\n name=\"date\"\n error={\n errors.date &&\n formatMessage({ id: errors.date, defaultMessage: errors.date })\n }\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'content-releases.modal.form.input.label.date',\n defaultMessage: 'Date',\n })}\n </Field.Label>\n <DatePicker\n onChange={(date) => {\n const isoFormatDate = date\n ? formatISO(date, { representation: 'date' })\n : null;\n setFieldValue('date', isoFormatDate);\n }}\n clearLabel={formatMessage({\n id: 'content-releases.modal.form.input.clearLabel',\n defaultMessage: 'Clear',\n })}\n onClear={() => {\n setFieldValue('date', null);\n }}\n value={values.date ? new Date(values.date) : new Date()}\n minDate={utcToZonedTime(new Date(), values.timezone.split('&')[1])}\n />\n <Field.Error />\n </Field.Root>\n </Box>\n <Box width=\"100%\">\n <Field.Root\n name=\"time\"\n error={\n errors.time &&\n formatMessage({ id: errors.time, defaultMessage: errors.time })\n }\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'content-releases.modal.form.input.label.time',\n defaultMessage: 'Time',\n })}\n </Field.Label>\n <TimePicker\n onChange={(time) => {\n setFieldValue('time', time);\n }}\n clearLabel={formatMessage({\n id: 'content-releases.modal.form.input.clearLabel',\n defaultMessage: 'Clear',\n })}\n onClear={() => {\n setFieldValue('time', '');\n }}\n value={values.time || undefined}\n />\n <Field.Error />\n </Field.Root>\n </Box>\n </Flex>\n <TimezoneComponent timezoneOptions={timezoneList} />\n </>\n )}\n </Flex>\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\" name=\"cancel\">\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Close>\n <Button name=\"submit\" loading={isLoading} type=\"submit\">\n {formatMessage(\n {\n id: 'content-releases.modal.form.button.submit',\n defaultMessage: '{isCreatingRelease, select, true {Continue} other {Save}}',\n },\n { isCreatingRelease: isCreatingRelease }\n )}\n </Button>\n </Modal.Footer>\n </Form>\n );\n }}\n </Formik>\n </Modal.Content>\n </Modal.Root>\n );\n};\n\n/**\n * Generates the list of timezones and user's current timezone(system timezone)\n */\ninterface ITimezoneOption {\n offset: string;\n value: string;\n}\n\nconst TimezoneComponent = ({ timezoneOptions }: { timezoneOptions: ITimezoneOption[] }) => {\n const { values, errors, setFieldValue } = useFormikContext<FormValues>();\n const { formatMessage } = useIntl();\n const [timezoneList, setTimezoneList] = React.useState<ITimezoneOption[]>(timezoneOptions);\n\n React.useEffect(() => {\n if (values.date) {\n // Update the timezone offset which varies with DST based on the date selected\n const { timezoneList } = getTimezones(new Date(values.date));\n setTimezoneList(timezoneList);\n\n const updatedTimezone =\n values.timezone &&\n timezoneList.find((tz) => tz.value.split('&')[1] === values.timezone!.split('&')[1]);\n if (updatedTimezone) {\n setFieldValue('timezone', updatedTimezone!.value);\n }\n }\n }, [setFieldValue, values.date, values.timezone]);\n\n return (\n <Field.Root\n name=\"timezone\"\n error={\n errors.timezone && formatMessage({ id: errors.timezone, defaultMessage: errors.timezone })\n }\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'content-releases.modal.form.input.label.timezone',\n defaultMessage: 'Timezone',\n })}\n </Field.Label>\n <Combobox\n autocomplete={{ type: 'list', filter: 'contains' }}\n value={values.timezone || undefined}\n textValue={values.timezone ? values.timezone.replace(/&/, ' ') : undefined} // textValue is required to show the updated DST timezone\n onChange={(timezone) => {\n setFieldValue('timezone', timezone);\n }}\n onTextValueChange={(timezone) => {\n setFieldValue('timezone', timezone);\n }}\n onClear={() => {\n setFieldValue('timezone', '');\n }}\n >\n {timezoneList.map((timezone) => (\n <ComboboxOption key={timezone.value} value={timezone.value}>\n {timezone.value.replace(/&/, ' ')}\n </ComboboxOption>\n ))}\n </Combobox>\n <Field.Error />\n </Field.Root>\n );\n};\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","onChange","Error","Box","width","Checkbox","checked","onCheckedChange","Typography","textColor","fontWeight","_Fragment","DatePicker","isoFormatDate","formatISO","representation","clearLabel","onClear","minDate","utcToZonedTime","TimePicker","undefined","TimezoneComponent","timezoneOptions","Footer","Close","Button","variant","loading","type","useFormikContext","setTimezoneList","React","useState","useEffect","updatedTimezone","tz","Combobox","autocomplete","filter","textValue","replace","onTextValueChange","map","ComboboxOption"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CaA,MAAAA,YAAAA,GAAe,CAAC,EAC3BC,WAAW,EACXC,IAAI,EACJC,YAAY,EACZC,aAAa,EACbC,SAAAA,GAAY,KAAK,EACC,GAAA;IAClB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,QAAQ,EAAE,GAAGC,0BAAAA,EAAAA;AACrB,IAAA,MAAMC,oBAAoBF,QAAa,KAAA,CAAC,SAAS,EAAEG,kBAAS,CAAC;;IAE7D,MAAM,EAAEC,YAAY,EAAEC,cAAiB,GAAA;QAAEC,KAAO,EAAA;KAA6B,EAAE,GAAGC,iBAAAA,CAChFX,aAAcY,CAAAA,WAAW,GAAG,IAAIC,IAAKb,CAAAA,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,IAAQ,IAAA,CAACC,IAAQ,IAAA,CAACC,UAAU,OAAO,IAAA;AACxC,QAAA,MAAMC,wBAAwBD,QAASE,CAAAA,KAAK,CAAC,GAAA,CAAI,CAAC,CAAE,CAAA;QACpD,OAAOC,wBAAAA,CAAe,CAAC,EAAEL,IAAAA,CAAK,CAAC,EAAEC,IAAAA,CAAK,CAAC,EAAEE,qBAAAA,CAAAA;AAC3C,KAAA;AAEA;;AAEC,MACD,MAAMG,qBAAwB,GAAA,IAAA;AAC5B,QAAA,MAAMC,kBAAkBf,YAAagB,CAAAA,IAAI,CACvC,CAACN,WAAaA,QAASR,CAAAA,KAAK,CAACU,KAAK,CAAC,GAAI,CAAA,CAAC,CAAE,CAAA,KAAKpB,cAAckB,QAAQ,CAAA;QAEvE,OAAOK,eAAAA,EAAiBb,KAASD,IAAAA,cAAAA,CAAeC,KAAK;AACvD,KAAA;IAEA,qBACEe,cAAA,CAACC,mBAAMC,IAAI,EAAA;QAAC7B,IAAMA,EAAAA,IAAAA;QAAM8B,YAAc/B,EAAAA,WAAAA;gCACpCgC,eAAA,CAACH,mBAAMI,OAAO,EAAA;;AACZ,8BAAAL,cAAA,CAACC,mBAAMK,MAAM,EAAA;4CACXN,cAAA,CAACC,mBAAMM,KAAK,EAAA;kCACT9B,aACC,CAAA;4BACE+B,EAAI,EAAA,8BAAA;4BACJC,cACE,EAAA;yBAEJ,EAAA;4BAAE5B,iBAAmBA,EAAAA;AAAkB,yBAAA;;;8BAI7CmB,cAACU,CAAAA,aAAAA,EAAAA;AACCC,oBAAAA,QAAAA,EAAU,CAACrB,MAAAA,GAAAA;wBACThB,YAAa,CAAA;AACX,4BAAA,GAAGgB,MAAM;4BACTG,QAAUH,EAAAA,MAAAA,CAAOG,QAAQ,GAAGH,MAAOG,CAAAA,QAAQ,CAACE,KAAK,CAAC,GAAA,CAAI,CAAC,CAAA,CAAE,GAAG,IAAA;AAC5DR,4BAAAA,WAAAA,EAAaG,MAAOsB,CAAAA,WAAW,GAAGvB,qBAAAA,CAAsBC,MAAU,CAAA,GAAA;AACpE,yBAAA,CAAA;AACF,qBAAA;oBACAf,aAAe,EAAA;AACb,wBAAA,GAAGA,aAAa;AAChBkB,wBAAAA,QAAAA,EAAUlB,aAAckB,CAAAA,QAAQ,GAAGI,qBAAAA,EAAAA,GAA0Bb,eAAeC;AAC9E,qBAAA;oBACA4B,gBAAkBC,EAAAA,sBAAAA;oBAClBC,gBAAkB,EAAA,KAAA;8BAEjB,CAAC,EAAEzB,MAAM,EAAE0B,MAAM,EAAEC,YAAY,EAAEC,aAAa,EAAE,GAAA;AAC/C,wBAAA,qBACEd,eAACe,CAAAA,WAAAA,EAAAA;;AACC,8CAAAnB,cAAA,CAACC,mBAAMmB,IAAI,EAAA;AACT,oCAAA,QAAA,gBAAAhB,eAACiB,CAAAA,iBAAAA,EAAAA;wCAAKC,SAAU,EAAA,QAAA;wCAASC,UAAW,EAAA,SAAA;wCAAUC,GAAK,EAAA,CAAA;;AACjD,0DAAApB,eAAA,CAACqB,mBAAMvB,IAAI,EAAA;gDACTwB,IAAK,EAAA,MAAA;gDACLC,KACEX,EAAAA,MAAAA,CAAOU,IAAI,IACXjD,aAAc,CAAA;AAAE+B,oDAAAA,EAAAA,EAAIQ,OAAOU,IAAI;AAAEjB,oDAAAA,cAAAA,EAAgBO,OAAOU;AAAK,iDAAA,CAAA;gDAE/DE,QAAQ,EAAA,IAAA;;AAER,kEAAA5B,cAAA,CAACyB,mBAAMI,KAAK,EAAA;kEACTpD,aAAc,CAAA;4DACb+B,EAAI,EAAA,sDAAA;4DACJC,cAAgB,EAAA;AAClB,yDAAA;;kEAEFT,cAAC8B,CAAAA,sBAAAA,EAAAA;AAAU7C,wDAAAA,KAAAA,EAAOK,OAAOoC,IAAI;wDAAEK,QAAUd,EAAAA;;AACzC,kEAAAjB,cAAA,CAACyB,mBAAMO,KAAK,EAAA,EAAA;;;0DAEdhC,cAACiC,CAAAA,gBAAAA,EAAAA;gDAAIC,KAAM,EAAA,aAAA;AACT,gDAAA,QAAA,gBAAAlC,cAACmC,CAAAA,qBAAAA,EAAAA;oDACCT,IAAK,EAAA,aAAA;AACLU,oDAAAA,OAAAA,EAAS9C,OAAOsB,WAAW;AAC3ByB,oDAAAA,eAAAA,EAAiB,CAACD,OAAAA,GAAAA;AAChBlB,wDAAAA,aAAAA,CAAc,aAAekB,EAAAA,OAAAA,CAAAA;AAC7B,wDAAA,IAAI,CAACA,OAAS,EAAA;;AAEZlB,4DAAAA,aAAAA,CAAc,MAAQ,EAAA,IAAA,CAAA;AACtBA,4DAAAA,aAAAA,CAAc,MAAQ,EAAA,EAAA,CAAA;AACtBA,4DAAAA,aAAAA,CAAc,UAAY,EAAA,IAAA,CAAA;yDACrB,MAAA;;4DAELA,aAAc,CAAA,MAAA,EAAQ3C,cAAcgB,IAAI,CAAA;4DACxC2B,aAAc,CAAA,MAAA,EAAQ3C,cAAciB,IAAI,CAAA;AACxC0B,4DAAAA,aAAAA,CACE,UACA3C,EAAAA,aAAAA,CAAckB,QAAQ,IAAIT,cAAgBC,EAAAA,KAAAA,CAAAA;AAE9C;AACF,qDAAA;AAEA,oDAAA,QAAA,gBAAAe,cAACsC,CAAAA,uBAAAA,EAAAA;wDACCC,SAAWjD,EAAAA,MAAAA,CAAOsB,WAAW,GAAG,YAAe,GAAA,YAAA;wDAC/C4B,UAAYlD,EAAAA,MAAAA,CAAOsB,WAAW,GAAG,UAAa,GAAA,SAAA;kEAE7CnC,aAAc,CAAA;4DACb+B,EAAI,EAAA,yCAAA;4DACJC,cAAgB,EAAA;AAClB,yDAAA;;;;AAILnB,4CAAAA,MAAAA,CAAOsB,WAAW,kBACjBR,eAAA,CAAAqC,mBAAA,EAAA;;kEACErC,eAACiB,CAAAA,iBAAAA,EAAAA;wDAAKG,GAAK,EAAA,CAAA;wDAAGD,UAAW,EAAA,OAAA;;0EACvBvB,cAACiC,CAAAA,gBAAAA,EAAAA;gEAAIC,KAAM,EAAA,MAAA;wFACT9B,eAAA,CAACqB,mBAAMvB,IAAI,EAAA;oEACTwB,IAAK,EAAA,MAAA;oEACLC,KACEX,EAAAA,MAAAA,CAAOzB,IAAI,IACXd,aAAc,CAAA;AAAE+B,wEAAAA,EAAAA,EAAIQ,OAAOzB,IAAI;AAAEkB,wEAAAA,cAAAA,EAAgBO,OAAOzB;AAAK,qEAAA,CAAA;oEAE/DqC,QAAQ,EAAA,IAAA;;AAER,sFAAA5B,cAAA,CAACyB,mBAAMI,KAAK,EAAA;sFACTpD,aAAc,CAAA;gFACb+B,EAAI,EAAA,8CAAA;gFACJC,cAAgB,EAAA;AAClB,6EAAA;;sFAEFT,cAAC0C,CAAAA,uBAAAA,EAAAA;AACCX,4EAAAA,QAAAA,EAAU,CAACxC,IAAAA,GAAAA;gFACT,MAAMoD,aAAAA,GAAgBpD,IAClBqD,GAAAA,iBAAAA,CAAUrD,IAAM,EAAA;oFAAEsD,cAAgB,EAAA;iFAClC,CAAA,GAAA,IAAA;AACJ3B,gFAAAA,aAAAA,CAAc,MAAQyB,EAAAA,aAAAA,CAAAA;AACxB,6EAAA;AACAG,4EAAAA,UAAAA,EAAYrE,aAAc,CAAA;gFACxB+B,EAAI,EAAA,8CAAA;gFACJC,cAAgB,EAAA;AAClB,6EAAA,CAAA;4EACAsC,OAAS,EAAA,IAAA;AACP7B,gFAAAA,aAAAA,CAAc,MAAQ,EAAA,IAAA,CAAA;AACxB,6EAAA;4EACAjC,KAAOK,EAAAA,MAAAA,CAAOC,IAAI,GAAG,IAAIH,KAAKE,MAAOC,CAAAA,IAAI,IAAI,IAAIH,IAAAA,EAAAA;4EACjD4D,OAASC,EAAAA,wBAAAA,CAAe,IAAI7D,IAAAA,EAAAA,EAAQE,MAAOG,CAAAA,QAAQ,CAACE,KAAK,CAAC,GAAI,CAAA,CAAC,CAAE,CAAA;;AAEnE,sFAAAK,cAAA,CAACyB,mBAAMO,KAAK,EAAA,EAAA;;;;0EAGhBhC,cAACiC,CAAAA,gBAAAA,EAAAA;gEAAIC,KAAM,EAAA,MAAA;wFACT9B,eAAA,CAACqB,mBAAMvB,IAAI,EAAA;oEACTwB,IAAK,EAAA,MAAA;oEACLC,KACEX,EAAAA,MAAAA,CAAOxB,IAAI,IACXf,aAAc,CAAA;AAAE+B,wEAAAA,EAAAA,EAAIQ,OAAOxB,IAAI;AAAEiB,wEAAAA,cAAAA,EAAgBO,OAAOxB;AAAK,qEAAA,CAAA;oEAE/DoC,QAAQ,EAAA,IAAA;;AAER,sFAAA5B,cAAA,CAACyB,mBAAMI,KAAK,EAAA;sFACTpD,aAAc,CAAA;gFACb+B,EAAI,EAAA,8CAAA;gFACJC,cAAgB,EAAA;AAClB,6EAAA;;sFAEFT,cAACkD,CAAAA,uBAAAA,EAAAA;AACCnB,4EAAAA,QAAAA,EAAU,CAACvC,IAAAA,GAAAA;AACT0B,gFAAAA,aAAAA,CAAc,MAAQ1B,EAAAA,IAAAA,CAAAA;AACxB,6EAAA;AACAsD,4EAAAA,UAAAA,EAAYrE,aAAc,CAAA;gFACxB+B,EAAI,EAAA,8CAAA;gFACJC,cAAgB,EAAA;AAClB,6EAAA,CAAA;4EACAsC,OAAS,EAAA,IAAA;AACP7B,gFAAAA,aAAAA,CAAc,MAAQ,EAAA,EAAA,CAAA;AACxB,6EAAA;4EACAjC,KAAOK,EAAAA,MAAAA,CAAOE,IAAI,IAAI2D;;AAExB,sFAAAnD,cAAA,CAACyB,mBAAMO,KAAK,EAAA,EAAA;;;;;;kEAIlBhC,cAACoD,CAAAA,iBAAAA,EAAAA;wDAAkBC,eAAiBtE,EAAAA;;;;;;;AAK5C,8CAAAqB,eAAA,CAACH,mBAAMqD,MAAM,EAAA;;AACX,sDAAAtD,cAAA,CAACC,mBAAMsD,KAAK,EAAA;AACV,4CAAA,QAAA,gBAAAvD,cAACwD,CAAAA,mBAAAA,EAAAA;gDAAOC,OAAQ,EAAA,UAAA;gDAAW/B,IAAK,EAAA,QAAA;0DAC7BjD,aAAc,CAAA;oDAAE+B,EAAI,EAAA,QAAA;oDAAUC,cAAgB,EAAA;AAAS,iDAAA;;;sDAG5DT,cAACwD,CAAAA,mBAAAA,EAAAA;4CAAO9B,IAAK,EAAA,QAAA;4CAASgC,OAASlF,EAAAA,SAAAA;4CAAWmF,IAAK,EAAA,QAAA;sDAC5ClF,aACC,CAAA;gDACE+B,EAAI,EAAA,2CAAA;gDACJC,cAAgB,EAAA;6CAElB,EAAA;gDAAE5B,iBAAmBA,EAAAA;AAAkB,6CAAA;;;;;;AAMnD;;;;;AAKV;AAUA,MAAMuE,iBAAoB,GAAA,CAAC,EAAEC,eAAe,EAA0C,GAAA;AACpF,IAAA,MAAM,EAAE/D,MAAM,EAAE0B,MAAM,EAAEE,aAAa,EAAE,GAAG0C,uBAAAA,EAAAA;IAC1C,MAAM,EAAEnF,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,CAACK,YAAc8E,EAAAA,eAAAA,CAAgB,GAAGC,gBAAAA,CAAMC,QAAQ,CAAoBV,eAAAA,CAAAA;AAE1ES,IAAAA,gBAAAA,CAAME,SAAS,CAAC,IAAA;QACd,IAAI1E,MAAAA,CAAOC,IAAI,EAAE;;YAEf,MAAM,EAAER,YAAY,EAAE,GAAGG,kBAAa,IAAIE,IAAAA,CAAKE,OAAOC,IAAI,CAAA,CAAA;YAC1DsE,eAAgB9E,CAAAA,YAAAA,CAAAA;YAEhB,MAAMkF,eAAAA,GACJ3E,MAAOG,CAAAA,QAAQ,IACfV,YAAAA,CAAagB,IAAI,CAAC,CAACmE,EAAOA,GAAAA,EAAAA,CAAGjF,KAAK,CAACU,KAAK,CAAC,GAAA,CAAI,CAAC,CAAA,CAAE,KAAKL,MAAAA,CAAOG,QAAQ,CAAEE,KAAK,CAAC,GAAI,CAAA,CAAC,CAAE,CAAA,CAAA;AACrF,YAAA,IAAIsE,eAAiB,EAAA;gBACnB/C,aAAc,CAAA,UAAA,EAAY+C,gBAAiBhF,KAAK,CAAA;AAClD;AACF;KACC,EAAA;AAACiC,QAAAA,aAAAA;AAAe5B,QAAAA,MAAAA,CAAOC,IAAI;AAAED,QAAAA,MAAAA,CAAOG;AAAS,KAAA,CAAA;IAEhD,qBACEW,eAAA,CAACqB,mBAAMvB,IAAI,EAAA;QACTwB,IAAK,EAAA,UAAA;QACLC,KACEX,EAAAA,MAAAA,CAAOvB,QAAQ,IAAIhB,aAAc,CAAA;AAAE+B,YAAAA,EAAAA,EAAIQ,OAAOvB,QAAQ;AAAEgB,YAAAA,cAAAA,EAAgBO,OAAOvB;AAAS,SAAA,CAAA;QAE1FmC,QAAQ,EAAA,IAAA;;AAER,0BAAA5B,cAAA,CAACyB,mBAAMI,KAAK,EAAA;0BACTpD,aAAc,CAAA;oBACb+B,EAAI,EAAA,kDAAA;oBACJC,cAAgB,EAAA;AAClB,iBAAA;;0BAEFT,cAACmE,CAAAA,qBAAAA,EAAAA;gBACCC,YAAc,EAAA;oBAAET,IAAM,EAAA,MAAA;oBAAQU,MAAQ,EAAA;AAAW,iBAAA;gBACjDpF,KAAOK,EAAAA,MAAAA,CAAOG,QAAQ,IAAI0D,SAAAA;gBAC1BmB,SAAWhF,EAAAA,MAAAA,CAAOG,QAAQ,GAAGH,MAAAA,CAAOG,QAAQ,CAAC8E,OAAO,CAAC,GAAA,EAAK,GAAOpB,CAAAA,GAAAA,SAAAA;AACjEpB,gBAAAA,QAAAA,EAAU,CAACtC,QAAAA,GAAAA;AACTyB,oBAAAA,aAAAA,CAAc,UAAYzB,EAAAA,QAAAA,CAAAA;AAC5B,iBAAA;AACA+E,gBAAAA,iBAAAA,EAAmB,CAAC/E,QAAAA,GAAAA;AAClByB,oBAAAA,aAAAA,CAAc,UAAYzB,EAAAA,QAAAA,CAAAA;AAC5B,iBAAA;gBACAsD,OAAS,EAAA,IAAA;AACP7B,oBAAAA,aAAAA,CAAc,UAAY,EAAA,EAAA,CAAA;AAC5B,iBAAA;AAECnC,gBAAAA,QAAAA,EAAAA,YAAAA,CAAa0F,GAAG,CAAC,CAAChF,QAAAA,iBACjBO,cAAC0E,CAAAA,2BAAAA,EAAAA;AAAoCzF,wBAAAA,KAAAA,EAAOQ,SAASR,KAAK;AACvDQ,wBAAAA,QAAAA,EAAAA,QAAAA,CAASR,KAAK,CAACsF,OAAO,CAAC,GAAK,EAAA,GAAA;AADV9E,qBAAAA,EAAAA,QAAAA,CAASR,KAAK,CAAA;;AAKvC,0BAAAe,cAAA,CAACyB,mBAAMO,KAAK,EAAA,EAAA;;;AAGlB,CAAA;;;;"}
1
+ {"version":3,"file":"ReleaseModal.js","sources":["../../../admin/src/components/ReleaseModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Button,\n Modal,\n TextInput,\n Typography,\n Checkbox,\n Flex,\n Box,\n DatePicker,\n TimePicker,\n Combobox,\n ComboboxOption,\n Field,\n} from '@strapi/design-system';\nimport { formatISO } from 'date-fns';\nimport { utcToZonedTime, zonedTimeToUtc } from 'date-fns-tz';\nimport { Formik, Form, useFormikContext } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useLocation } from 'react-router-dom';\n\nimport { pluginId } from '../pluginId';\nimport { getTimezones } from '../utils/time';\nimport { RELEASE_SCHEMA } from '../validation/schemas';\n\nexport interface FormValues {\n name: string;\n date?: string;\n time: string;\n timezone: string | null;\n isScheduled?: boolean;\n scheduledAt: Date | null;\n}\n\ninterface ReleaseModalProps {\n handleClose: () => void;\n handleSubmit: (values: FormValues) => void;\n isLoading?: boolean;\n initialValues: FormValues;\n open?: boolean;\n}\n\nexport const ReleaseModal = ({\n handleClose,\n open,\n handleSubmit,\n initialValues,\n isLoading = false,\n}: ReleaseModalProps) => {\n const { formatMessage } = useIntl();\n const { pathname } = useLocation();\n const isCreatingRelease = pathname === `/plugins/${pluginId}`;\n // Set default first timezone from the list if no system timezone detected\n const { timezoneList, systemTimezone = { value: 'UTC+00:00-Africa/Abidjan ' } } = getTimezones(\n initialValues.scheduledAt ? new Date(initialValues.scheduledAt) : new Date()\n );\n\n /**\n * Generate scheduled time using selected date, time and timezone\n */\n const getScheduledTimestamp = (values: FormValues) => {\n const { date, time, timezone } = values;\n if (!date || !time || !timezone) return null;\n const timezoneWithoutOffset = timezone.split('&')[1];\n return zonedTimeToUtc(`${date} ${time}`, timezoneWithoutOffset);\n };\n\n /**\n * Get timezone with offset to show the selected value in the dropdown\n */\n const getTimezoneWithOffset = () => {\n const currentTimezone = timezoneList.find(\n (timezone) => timezone.value.split('&')[1] === initialValues.timezone\n );\n return currentTimezone?.value || systemTimezone.value;\n };\n\n return (\n <Modal.Root open={open} onOpenChange={handleClose}>\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>\n {formatMessage(\n {\n id: 'content-releases.modal.title',\n defaultMessage:\n '{isCreatingRelease, select, true {New release} other {Edit release}}',\n },\n { isCreatingRelease: isCreatingRelease }\n )}\n </Modal.Title>\n </Modal.Header>\n <Formik\n onSubmit={(values) => {\n handleSubmit({\n ...values,\n timezone: values.timezone ? values.timezone.split('&')[1] : null,\n scheduledAt: values.isScheduled ? getScheduledTimestamp(values) : null,\n });\n }}\n initialValues={{\n ...initialValues,\n timezone: initialValues.timezone ? getTimezoneWithOffset() : systemTimezone.value,\n }}\n validationSchema={RELEASE_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleChange, setFieldValue }) => {\n return (\n <Form>\n <Modal.Body>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Field.Root\n name=\"name\"\n error={\n errors.name &&\n formatMessage({ id: errors.name, defaultMessage: errors.name })\n }\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'content-releases.modal.form.input.label.release-name',\n defaultMessage: 'Name',\n })}\n </Field.Label>\n <TextInput value={values.name} onChange={handleChange} />\n <Field.Error />\n </Field.Root>\n <Box width=\"max-content\">\n <Checkbox\n name=\"isScheduled\"\n checked={values.isScheduled}\n onCheckedChange={(checked) => {\n setFieldValue('isScheduled', checked);\n if (!checked) {\n // Clear scheduling info from a release on unchecking schedule release, which reset scheduling info in DB\n setFieldValue('date', null);\n setFieldValue('time', '');\n setFieldValue('timezone', null);\n } else {\n // On ticking back schedule release date, time and timezone should be restored to the initial state\n setFieldValue('date', initialValues.date);\n setFieldValue('time', initialValues.time);\n setFieldValue(\n 'timezone',\n initialValues.timezone ?? systemTimezone?.value\n );\n }\n }}\n >\n <Typography\n textColor={values.isScheduled ? 'primary600' : 'neutral800'}\n fontWeight={values.isScheduled ? 'semiBold' : 'regular'}\n >\n {formatMessage({\n id: 'modal.form.input.label.schedule-release',\n defaultMessage: 'Schedule release',\n })}\n </Typography>\n </Checkbox>\n </Box>\n {values.isScheduled && (\n <>\n <Flex\n gap={4}\n alignItems=\"start\"\n direction={{ initial: 'column', medium: 'row' }}\n wrap=\"wrap\"\n >\n <Box width=\"100%\" flex={1}>\n <Field.Root\n name=\"date\"\n error={\n errors.date &&\n formatMessage({ id: errors.date, defaultMessage: errors.date })\n }\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'content-releases.modal.form.input.label.date',\n defaultMessage: 'Date',\n })}\n </Field.Label>\n <DatePicker\n onChange={(date) => {\n const isoFormatDate = date\n ? formatISO(date, { representation: 'date' })\n : null;\n setFieldValue('date', isoFormatDate);\n }}\n clearLabel={formatMessage({\n id: 'content-releases.modal.form.input.clearLabel',\n defaultMessage: 'Clear',\n })}\n onClear={() => {\n setFieldValue('date', null);\n }}\n value={values.date ? new Date(values.date) : new Date()}\n minDate={utcToZonedTime(new Date(), values.timezone.split('&')[1])}\n />\n <Field.Error />\n </Field.Root>\n </Box>\n <Box width=\"100%\" flex={1}>\n <Field.Root\n name=\"time\"\n error={\n errors.time &&\n formatMessage({ id: errors.time, defaultMessage: errors.time })\n }\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'content-releases.modal.form.input.label.time',\n defaultMessage: 'Time',\n })}\n </Field.Label>\n <TimePicker\n onChange={(time) => {\n setFieldValue('time', time);\n }}\n clearLabel={formatMessage({\n id: 'content-releases.modal.form.input.clearLabel',\n defaultMessage: 'Clear',\n })}\n onClear={() => {\n setFieldValue('time', '');\n }}\n value={values.time || undefined}\n />\n <Field.Error />\n </Field.Root>\n </Box>\n </Flex>\n <TimezoneComponent timezoneOptions={timezoneList} />\n </>\n )}\n </Flex>\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\" name=\"cancel\">\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Close>\n <Button name=\"submit\" loading={isLoading} type=\"submit\">\n {formatMessage(\n {\n id: 'content-releases.modal.form.button.submit',\n defaultMessage: '{isCreatingRelease, select, true {Continue} other {Save}}',\n },\n { isCreatingRelease: isCreatingRelease }\n )}\n </Button>\n </Modal.Footer>\n </Form>\n );\n }}\n </Formik>\n </Modal.Content>\n </Modal.Root>\n );\n};\n\n/**\n * Generates the list of timezones and user's current timezone(system timezone)\n */\ninterface ITimezoneOption {\n offset: string;\n value: string;\n}\n\nconst TimezoneComponent = ({ timezoneOptions }: { timezoneOptions: ITimezoneOption[] }) => {\n const { values, errors, setFieldValue } = useFormikContext<FormValues>();\n const { formatMessage } = useIntl();\n const [timezoneList, setTimezoneList] = React.useState<ITimezoneOption[]>(timezoneOptions);\n\n React.useEffect(() => {\n if (values.date) {\n // Update the timezone offset which varies with DST based on the date selected\n const { timezoneList } = getTimezones(new Date(values.date));\n setTimezoneList(timezoneList);\n\n const updatedTimezone =\n values.timezone &&\n timezoneList.find((tz) => tz.value.split('&')[1] === values.timezone!.split('&')[1]);\n if (updatedTimezone) {\n setFieldValue('timezone', updatedTimezone!.value);\n }\n }\n }, [setFieldValue, values.date, values.timezone]);\n\n return (\n <Field.Root\n name=\"timezone\"\n error={\n errors.timezone && formatMessage({ id: errors.timezone, defaultMessage: errors.timezone })\n }\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'content-releases.modal.form.input.label.timezone',\n defaultMessage: 'Timezone',\n })}\n </Field.Label>\n <Combobox\n autocomplete={{ type: 'list', filter: 'contains' }}\n value={values.timezone || undefined}\n textValue={values.timezone ? values.timezone.replace(/&/, ' ') : undefined} // textValue is required to show the updated DST timezone\n onChange={(timezone) => {\n setFieldValue('timezone', timezone);\n }}\n onTextValueChange={(timezone) => {\n setFieldValue('timezone', timezone);\n }}\n onClear={() => {\n setFieldValue('timezone', '');\n }}\n >\n {timezoneList.map((timezone) => (\n <ComboboxOption key={timezone.value} value={timezone.value}>\n {timezone.value.replace(/&/, ' ')}\n </ComboboxOption>\n ))}\n </Combobox>\n <Field.Error />\n </Field.Root>\n );\n};\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","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","type","useFormikContext","setTimezoneList","React","useState","useEffect","updatedTimezone","tz","Combobox","autocomplete","filter","textValue","replace","onTextValueChange","map","ComboboxOption"],"mappings":"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"}
@@ -125,9 +125,15 @@ const ReleaseModal = ({ handleClose, open, handleSubmit, initialValues, isLoadin
125
125
  /*#__PURE__*/ jsxs(Flex, {
126
126
  gap: 4,
127
127
  alignItems: "start",
128
+ direction: {
129
+ initial: 'column',
130
+ medium: 'row'
131
+ },
132
+ wrap: "wrap",
128
133
  children: [
129
134
  /*#__PURE__*/ jsx(Box, {
130
135
  width: "100%",
136
+ flex: 1,
131
137
  children: /*#__PURE__*/ jsxs(Field.Root, {
132
138
  name: "date",
133
139
  error: errors.date && formatMessage({
@@ -165,6 +171,7 @@ const ReleaseModal = ({ handleClose, open, handleSubmit, initialValues, isLoadin
165
171
  }),
166
172
  /*#__PURE__*/ jsx(Box, {
167
173
  width: "100%",
174
+ flex: 1,
168
175
  children: /*#__PURE__*/ jsxs(Field.Root, {
169
176
  name: "time",
170
177
  error: errors.time && formatMessage({