@strapi/content-releases 5.48.0 → 5.49.0

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.
@@ -5,7 +5,8 @@ var React = require('react');
5
5
  var dateFns = require('date-fns');
6
6
  var reactIntl = require('react-intl');
7
7
 
8
- function _interopNamespaceDefault(e) {
8
+ function _interopNamespace(e) {
9
+ if (e && e.__esModule) return e;
9
10
  var n = Object.create(null);
10
11
  if (e) {
11
12
  Object.keys(e).forEach(function (k) {
@@ -22,7 +23,7 @@ function _interopNamespaceDefault(e) {
22
23
  return Object.freeze(n);
23
24
  }
24
25
 
25
- var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
26
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
26
27
 
27
28
  const intervals = [
28
29
  'years',
@@ -1 +1 @@
1
- {"version":3,"file":"RelativeTime.js","sources":["../../../admin/src/components/RelativeTime.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Duration, intervalToDuration, isPast } from 'date-fns';\nimport { useIntl } from 'react-intl';\n\nconst intervals: Array<keyof Duration> = ['years', 'months', 'days', 'hours', 'minutes', 'seconds'];\n\ninterface CustomInterval {\n unit: keyof Duration;\n text: string;\n threshold: number;\n}\n\ninterface RelativeTimeProps extends React.ComponentPropsWithoutRef<'time'> {\n timestamp: Date;\n customIntervals?: CustomInterval[];\n}\n\n/**\n * Displays the relative time between a given timestamp and the current time.\n * You can display a custom message for given time intervals by passing an array of custom intervals.\n *\n * @example\n * ```jsx\n * <caption>Display \"last hour\" if the timestamp is less than an hour ago</caption>\n * <RelativeTime\n * timestamp={new Date('2021-01-01')}\n * customIntervals={[\n * { unit: 'hours', threshold: 1, text: 'last hour' },\n * ]}\n * ```\n */\nconst RelativeTime = React.forwardRef<HTMLTimeElement, RelativeTimeProps>(\n ({ timestamp, customIntervals = [], ...restProps }, forwardedRef) => {\n const { formatRelativeTime, formatDate, formatTime } = useIntl();\n\n /**\n * TODO: make this auto-update, like a clock.\n */\n const interval = intervalToDuration({\n start: timestamp,\n end: Date.now(),\n // see https://github.com/date-fns/date-fns/issues/2891 – No idea why it's all partial it returns it every time.\n }) as Required<Duration>;\n\n const unit = intervals.find((intervalUnit) => {\n return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);\n })!;\n\n const relativeTime = isPast(timestamp) ? -interval[unit] : interval[unit];\n\n // Display custom text if interval is less than the threshold\n const customInterval = customIntervals.find(\n (custom) => interval[custom.unit] < custom.threshold\n );\n\n const displayText = customInterval\n ? customInterval.text\n : formatRelativeTime(relativeTime, unit, { numeric: 'auto' });\n\n return (\n <time\n ref={forwardedRef}\n dateTime={timestamp.toISOString()}\n role=\"time\"\n title={`${formatDate(timestamp)} ${formatTime(timestamp)}`}\n {...restProps}\n >\n {displayText}\n </time>\n );\n }\n);\n\nexport { RelativeTime };\nexport type { CustomInterval, RelativeTimeProps };\n"],"names":["intervals","RelativeTime","React","forwardRef","timestamp","customIntervals","restProps","forwardedRef","formatRelativeTime","formatDate","formatTime","useIntl","interval","intervalToDuration","start","end","Date","now","unit","find","intervalUnit","Object","keys","includes","relativeTime","isPast","customInterval","custom","threshold","displayText","text","numeric","_jsx","time","ref","dateTime","toISOString","role","title"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,MAAMA,SAAAA,GAAmC;AAAC,IAAA,OAAA;AAAS,IAAA,QAAA;AAAU,IAAA,MAAA;AAAQ,IAAA,OAAA;AAAS,IAAA,SAAA;AAAW,IAAA;AAAU,CAAA;AAanG;;;;;;;;;;;;;AAaC,IACD,MAAMC,YAAAA,iBAAeC,gBAAAA,CAAMC,UAAU,CACnC,CAAC,EAAEC,SAAS,EAAEC,eAAAA,GAAkB,EAAE,EAAE,GAAGC,WAAW,EAAEC,YAAAA,GAAAA;AAClD,IAAA,MAAM,EAAEC,kBAAkB,EAAEC,UAAU,EAAEC,UAAU,EAAE,GAAGC,iBAAAA,EAAAA;AAEvD;;QAGA,MAAMC,WAAWC,0BAAAA,CAAmB;QAClCC,KAAAA,EAAOV,SAAAA;AACPW,QAAAA,GAAAA,EAAKC,KAAKC,GAAG;AAEf,KAAA,CAAA;AAEA,IAAA,MAAMC,IAAAA,GAAOlB,SAAAA,CAAUmB,IAAI,CAAC,CAACC,YAAAA,GAAAA;QAC3B,OAAOR,QAAQ,CAACQ,YAAAA,CAAa,GAAG,CAAA,IAAKC,OAAOC,IAAI,CAACV,QAAAA,CAAAA,CAAUW,QAAQ,CAACH,YAAAA,CAAAA;AACtE,IAAA,CAAA,CAAA;IAEA,MAAMI,YAAAA,GAAeC,cAAAA,CAAOrB,SAAAA,CAAAA,GAAa,CAACQ,QAAQ,CAACM,IAAAA,CAAK,GAAGN,QAAQ,CAACM,IAAAA,CAAK;;AAGzE,IAAA,MAAMQ,cAAAA,GAAiBrB,eAAAA,CAAgBc,IAAI,CACzC,CAACQ,MAAAA,GAAWf,QAAQ,CAACe,MAAAA,CAAOT,IAAI,CAAC,GAAGS,OAAOC,SAAS,CAAA;AAGtD,IAAA,MAAMC,cAAcH,cAAAA,GAChBA,cAAAA,CAAeI,IAAI,GACnBtB,kBAAAA,CAAmBgB,cAAcN,IAAAA,EAAM;QAAEa,OAAAA,EAAS;AAAO,KAAA,CAAA;AAE7D,IAAA,qBACEC,cAAA,CAACC,MAAAA,EAAAA;QACCC,GAAAA,EAAK3B,YAAAA;AACL4B,QAAAA,QAAAA,EAAU/B,UAAUgC,WAAW,EAAA;QAC/BC,IAAAA,EAAK,MAAA;AACLC,QAAAA,KAAAA,EAAO,GAAG7B,UAAAA,CAAWL,SAAAA,CAAAA,CAAW,CAAC,EAAEM,WAAWN,SAAAA,CAAAA,CAAAA,CAAY;AACzD,QAAA,GAAGE,SAAS;AAEZuB,QAAAA,QAAAA,EAAAA;;AAGP,CAAA;;;;"}
1
+ {"version":3,"file":"RelativeTime.js","sources":["../../../admin/src/components/RelativeTime.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Duration, intervalToDuration, isPast } from 'date-fns';\nimport { useIntl } from 'react-intl';\n\nconst intervals: Array<keyof Duration> = ['years', 'months', 'days', 'hours', 'minutes', 'seconds'];\n\ninterface CustomInterval {\n unit: keyof Duration;\n text: string;\n threshold: number;\n}\n\ninterface RelativeTimeProps extends React.ComponentPropsWithoutRef<'time'> {\n timestamp: Date;\n customIntervals?: CustomInterval[];\n}\n\n/**\n * Displays the relative time between a given timestamp and the current time.\n * You can display a custom message for given time intervals by passing an array of custom intervals.\n *\n * @example\n * ```jsx\n * <caption>Display \"last hour\" if the timestamp is less than an hour ago</caption>\n * <RelativeTime\n * timestamp={new Date('2021-01-01')}\n * customIntervals={[\n * { unit: 'hours', threshold: 1, text: 'last hour' },\n * ]}\n * ```\n */\nconst RelativeTime = React.forwardRef<HTMLTimeElement, RelativeTimeProps>(\n ({ timestamp, customIntervals = [], ...restProps }, forwardedRef) => {\n const { formatRelativeTime, formatDate, formatTime } = useIntl();\n\n /**\n * TODO: make this auto-update, like a clock.\n */\n const interval = intervalToDuration({\n start: timestamp,\n end: Date.now(),\n // see https://github.com/date-fns/date-fns/issues/2891 – No idea why it's all partial it returns it every time.\n }) as Required<Duration>;\n\n const unit = intervals.find((intervalUnit) => {\n return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);\n })!;\n\n const relativeTime = isPast(timestamp) ? -interval[unit] : interval[unit];\n\n // Display custom text if interval is less than the threshold\n const customInterval = customIntervals.find(\n (custom) => interval[custom.unit] < custom.threshold\n );\n\n const displayText = customInterval\n ? customInterval.text\n : formatRelativeTime(relativeTime, unit, { numeric: 'auto' });\n\n return (\n <time\n ref={forwardedRef}\n dateTime={timestamp.toISOString()}\n role=\"time\"\n title={`${formatDate(timestamp)} ${formatTime(timestamp)}`}\n {...restProps}\n >\n {displayText}\n </time>\n );\n }\n);\n\nexport { RelativeTime };\nexport type { CustomInterval, RelativeTimeProps };\n"],"names":["intervals","RelativeTime","React","forwardRef","timestamp","customIntervals","restProps","forwardedRef","formatRelativeTime","formatDate","formatTime","useIntl","interval","intervalToDuration","start","end","Date","now","unit","find","intervalUnit","Object","keys","includes","relativeTime","isPast","customInterval","custom","threshold","displayText","text","numeric","_jsx","time","ref","dateTime","toISOString","role","title"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,MAAMA,SAAAA,GAAmC;AAAC,IAAA,OAAA;AAAS,IAAA,QAAA;AAAU,IAAA,MAAA;AAAQ,IAAA,OAAA;AAAS,IAAA,SAAA;AAAW,IAAA;AAAU,CAAA;AAanG;;;;;;;;;;;;;AAaC,IACD,MAAMC,YAAAA,iBAAeC,gBAAAA,CAAMC,UAAU,CACnC,CAAC,EAAEC,SAAS,EAAEC,eAAAA,GAAkB,EAAE,EAAE,GAAGC,WAAW,EAAEC,YAAAA,GAAAA;AAClD,IAAA,MAAM,EAAEC,kBAAkB,EAAEC,UAAU,EAAEC,UAAU,EAAE,GAAGC,iBAAAA,EAAAA;AAEvD;;QAGA,MAAMC,WAAWC,0BAAAA,CAAmB;QAClCC,KAAAA,EAAOV,SAAAA;AACPW,QAAAA,GAAAA,EAAKC,KAAKC,GAAG;AAEf,KAAA,CAAA;AAEA,IAAA,MAAMC,IAAAA,GAAOlB,SAAAA,CAAUmB,IAAI,CAAC,CAACC,YAAAA,GAAAA;QAC3B,OAAOR,QAAQ,CAACQ,YAAAA,CAAa,GAAG,CAAA,IAAKC,OAAOC,IAAI,CAACV,QAAAA,CAAAA,CAAUW,QAAQ,CAACH,YAAAA,CAAAA;AACtE,IAAA,CAAA,CAAA;IAEA,MAAMI,YAAAA,GAAeC,cAAAA,CAAOrB,SAAAA,CAAAA,GAAa,CAACQ,QAAQ,CAACM,IAAAA,CAAK,GAAGN,QAAQ,CAACM,IAAAA,CAAK;;AAGzE,IAAA,MAAMQ,cAAAA,GAAiBrB,eAAAA,CAAgBc,IAAI,CACzC,CAACQ,MAAAA,GAAWf,QAAQ,CAACe,MAAAA,CAAOT,IAAI,CAAC,GAAGS,OAAOC,SAAS,CAAA;AAGtD,IAAA,MAAMC,cAAcH,cAAAA,GAChBA,cAAAA,CAAeI,IAAI,GACnBtB,kBAAAA,CAAmBgB,cAAcN,IAAAA,EAAM;QAAEa,OAAAA,EAAS;AAAO,KAAA,CAAA;AAE7D,IAAA,qBACEC,cAAA,CAACC,MAAAA,EAAAA;QACCC,GAAAA,EAAK3B,YAAAA;AACL4B,QAAAA,QAAAA,EAAU/B,UAAUgC,WAAW,EAAA;QAC/BC,IAAAA,EAAK,MAAA;AACLC,QAAAA,KAAAA,EAAO,GAAG7B,UAAAA,CAAWL,SAAAA,CAAAA,CAAW,CAAC,EAAEM,WAAWN,SAAAA,CAAAA,CAAAA,CAAY;AACzD,QAAA,GAAGE,SAAS;AAEZuB,QAAAA,QAAAA,EAAAA;;AAGP,CAAA;;;;"}
@@ -11,7 +11,8 @@ var styledComponents = require('styled-components');
11
11
  var constants = require('../constants.js');
12
12
  var release = require('../services/release.js');
13
13
 
14
- function _interopNamespaceDefault(e) {
14
+ function _interopNamespace(e) {
15
+ if (e && e.__esModule) return e;
15
16
  var n = Object.create(null);
16
17
  if (e) {
17
18
  Object.keys(e).forEach(function (k) {
@@ -28,7 +29,7 @@ function _interopNamespaceDefault(e) {
28
29
  return Object.freeze(n);
29
30
  }
30
31
 
31
- var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
32
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
32
33
 
33
34
  // TODO: has to be fixed in the DS - https://github.com/strapi/design-system/issues/1934
34
35
  const StyledMenuLink = styledComponents.styled(designSystem.Menu.Item)`
@@ -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 { Menu, AccessibleIcon, IconButton } 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\n variant=\"tertiary\"\n endIcon={null}\n tag={IconButton}\n icon={\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 }\n />\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","IconButton","icon","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, IconButton } 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\n variant=\"tertiary\"\n endIcon={null}\n tag={IconButton}\n icon={\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 }\n />\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","IconButton","icon","AccessibleIcon","label","More","Content","top","popoverPlacement","Trigger","ReleaseActionMenu"],"mappings":"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"}
@@ -15,7 +15,8 @@ var constants = require('../constants.js');
15
15
  var release = require('../services/release.js');
16
16
  var ReleaseActionOptions = require('./ReleaseActionOptions.js');
17
17
 
18
- function _interopNamespaceDefault(e) {
18
+ function _interopNamespace(e) {
19
+ if (e && e.__esModule) return e;
19
20
  var n = Object.create(null);
20
21
  if (e) {
21
22
  Object.keys(e).forEach(function (k) {
@@ -32,7 +33,7 @@ function _interopNamespaceDefault(e) {
32
33
  return Object.freeze(n);
33
34
  }
34
35
 
35
- var yup__namespace = /*#__PURE__*/_interopNamespaceDefault(yup);
36
+ var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
36
37
 
37
38
  /* -------------------------------------------------------------------------------------------------
38
39
  * AddActionToReleaseModal
@@ -1 +1 @@
1
- {"version":3,"file":"ReleaseActionModal.js","sources":["../../../admin/src/components/ReleaseActionModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useAPIErrorHandler,\n useNotification,\n useQueryParams,\n useRBAC,\n isFetchError,\n} from '@strapi/admin/strapi-admin';\nimport { unstable_useDocumentLayout as useDocumentLayout } from '@strapi/content-manager/strapi-admin';\nimport {\n Box,\n Button,\n Flex,\n SingleSelect,\n SingleSelectOption,\n EmptyStateLayout,\n LinkButton,\n Field,\n Modal,\n} from '@strapi/design-system';\nimport { PaperPlane } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useFormik } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { Link as ReactRouterLink } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { CreateReleaseAction } from '../../../shared/contracts/release-actions';\nimport { PERMISSIONS } from '../constants';\nimport { useCreateReleaseActionMutation, useGetReleasesForEntryQuery } from '../services/release';\n\nimport { ReleaseActionOptions } from './ReleaseActionOptions';\n\nimport type {\n DocumentActionComponent,\n DocumentActionProps,\n} from '@strapi/content-manager/strapi-admin';\nimport type { UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * AddActionToReleaseModal\n * -----------------------------------------------------------------------------------------------*/\nexport const RELEASE_ACTION_FORM_SCHEMA = yup.object().shape({\n type: yup.string().oneOf(['publish', 'unpublish']).required(),\n releaseId: yup.string().required(),\n});\n\nexport interface FormValues {\n type: CreateReleaseAction.Request['body']['type'];\n releaseId: CreateReleaseAction.Request['params']['releaseId'];\n}\n\nexport const INITIAL_VALUES = {\n type: 'publish',\n releaseId: '',\n} satisfies FormValues;\n\ninterface AddActionToReleaseModalProps {\n contentType: string;\n documentId?: string;\n onInputChange: (field: keyof FormValues, value: string | number) => void;\n values: FormValues;\n}\n\nexport const NoReleases = () => {\n const { formatMessage } = useIntl();\n return (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release.no-releases-message',\n defaultMessage:\n 'No available releases. Open the list of releases and create a new one from there.',\n })}\n action={\n <LinkButton\n to={{\n pathname: '/plugins/content-releases',\n }}\n tag={ReactRouterLink}\n variant=\"secondary\"\n >\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release.redirect-button',\n defaultMessage: 'Open the list of releases',\n })}\n </LinkButton>\n }\n shadow=\"none\"\n />\n );\n};\n\nconst AddActionToReleaseModal = ({\n contentType,\n documentId,\n onInputChange,\n values,\n}: AddActionToReleaseModalProps) => {\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const locale = query.plugins?.i18n?.locale;\n\n // Get all 'pending' releases that do not have the entry attached\n const response = useGetReleasesForEntryQuery({\n contentType,\n entryDocumentId: documentId,\n hasEntryAttached: false,\n locale,\n });\n\n const releases = response.data?.data;\n\n if (releases?.length === 0) {\n return <NoReleases />;\n }\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Box paddingBottom={6}>\n <Field.Root required>\n <Field.Label>\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release.select-label',\n defaultMessage: 'Select a release',\n })}\n </Field.Label>\n <SingleSelect\n required\n placeholder={formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release.select-placeholder',\n defaultMessage: 'Select',\n })}\n name=\"releaseId\"\n onChange={(value) => onInputChange('releaseId', value)}\n value={values.releaseId}\n >\n {releases?.map((release) => (\n <SingleSelectOption key={release.id} value={release.id}>\n {release.name}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Field.Root>\n </Box>\n <Field.Label>\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release.action-type-label',\n defaultMessage: 'What do you want to do with this entry?',\n })}\n </Field.Label>\n <ReleaseActionOptions\n selected={values.type}\n handleChange={(e) => onInputChange('type', e.target.value)}\n name=\"type\"\n />\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseActionModalForm\n * -----------------------------------------------------------------------------------------------*/\n\nconst ReleaseActionModalForm: DocumentActionComponent = ({\n documentId,\n document,\n model,\n collectionType,\n}: DocumentActionProps) => {\n const { formatMessage } = useIntl();\n const { allowedActions } = useRBAC(PERMISSIONS);\n const { canCreateAction } = allowedActions;\n const [createReleaseAction, { isLoading }] = useCreateReleaseActionMutation();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const locale = query.plugins?.i18n?.locale;\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>, onClose: () => void) => {\n try {\n await formik.handleSubmit(e);\n onClose();\n } catch (error) {\n if (isFetchError(error)) {\n // Handle axios error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n } else {\n // Handle generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n }\n };\n\n const formik = useFormik({\n initialValues: INITIAL_VALUES,\n validationSchema: RELEASE_ACTION_FORM_SCHEMA,\n onSubmit: async (values: FormValues) => {\n if (collectionType === 'collection-types' && !documentId) {\n throw new Error('Document id is required');\n }\n\n const response = await createReleaseAction({\n body: {\n type: values.type,\n contentType: model as UID.ContentType,\n entryDocumentId: documentId,\n locale,\n },\n params: { releaseId: values.releaseId },\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.add-to-release.notification.success',\n defaultMessage: 'Entry added to release',\n }),\n });\n\n return;\n }\n\n if ('error' in response) {\n throw response.error;\n }\n },\n });\n\n const {\n edit: { options },\n } = useDocumentLayout(model);\n\n // Project is not EE or contentType does not have draftAndPublish enabled\n if (!window.strapi.isEE || !options?.draftAndPublish || !canCreateAction) {\n return null;\n }\n\n if (collectionType === 'collection-types' && (!documentId || documentId === 'create')) {\n return null;\n }\n\n return {\n label: formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release',\n defaultMessage: 'Add to release',\n }),\n icon: <PaperPlane />,\n // Entry is creating so we don't want to allow adding it to a release\n disabled: !document,\n position: ['panel', 'table-row'],\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release',\n defaultMessage: 'Add to release',\n }),\n content: (\n <AddActionToReleaseModal\n contentType={model}\n documentId={documentId}\n onInputChange={formik.setFieldValue}\n values={formik.values}\n />\n ),\n footer: ({ onClose }) => (\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\" name=\"cancel\">\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release.cancel-button',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <Button\n type=\"submit\"\n // @ts-expect-error - formik ReactEvent types don't match button onClick types as they expect a MouseEvent\n onClick={(e) => handleSubmit(e, onClose)}\n disabled={!formik.values.releaseId}\n loading={isLoading}\n >\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release.continue-button',\n defaultMessage: 'Continue',\n })}\n </Button>\n </Modal.Footer>\n ),\n },\n };\n};\n\nexport { ReleaseActionModalForm };\n"],"names":["RELEASE_ACTION_FORM_SCHEMA","yup","object","shape","type","string","oneOf","required","releaseId","INITIAL_VALUES","NoReleases","formatMessage","useIntl","_jsx","EmptyStateLayout","icon","EmptyDocuments","width","content","id","defaultMessage","action","LinkButton","to","pathname","tag","ReactRouterLink","variant","shadow","AddActionToReleaseModal","contentType","documentId","onInputChange","values","query","useQueryParams","locale","plugins","i18n","response","useGetReleasesForEntryQuery","entryDocumentId","hasEntryAttached","releases","data","length","_jsxs","Flex","direction","alignItems","gap","Box","paddingBottom","Field","Root","Label","SingleSelect","placeholder","name","onChange","value","map","release","SingleSelectOption","ReleaseActionOptions","selected","handleChange","e","target","ReleaseActionModalForm","document","model","collectionType","allowedActions","useRBAC","PERMISSIONS","canCreateAction","createReleaseAction","isLoading","useCreateReleaseActionMutation","toggleNotification","useNotification","formatAPIError","useAPIErrorHandler","handleSubmit","onClose","formik","error","isFetchError","message","useFormik","initialValues","validationSchema","onSubmit","Error","body","params","edit","options","useDocumentLayout","window","strapi","isEE","draftAndPublish","label","PaperPlane","disabled","position","dialog","title","setFieldValue","footer","Modal","Footer","Button","onClick","loading"],"mappings":"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"}
1
+ {"version":3,"file":"ReleaseActionModal.js","sources":["../../../admin/src/components/ReleaseActionModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useAPIErrorHandler,\n useNotification,\n useQueryParams,\n useRBAC,\n isFetchError,\n} from '@strapi/admin/strapi-admin';\nimport { unstable_useDocumentLayout as useDocumentLayout } from '@strapi/content-manager/strapi-admin';\nimport {\n Box,\n Button,\n Flex,\n SingleSelect,\n SingleSelectOption,\n EmptyStateLayout,\n LinkButton,\n Field,\n Modal,\n} from '@strapi/design-system';\nimport { PaperPlane } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useFormik } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { Link as ReactRouterLink } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { CreateReleaseAction } from '../../../shared/contracts/release-actions';\nimport { PERMISSIONS } from '../constants';\nimport { useCreateReleaseActionMutation, useGetReleasesForEntryQuery } from '../services/release';\n\nimport { ReleaseActionOptions } from './ReleaseActionOptions';\n\nimport type {\n DocumentActionComponent,\n DocumentActionProps,\n} from '@strapi/content-manager/strapi-admin';\nimport type { UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * AddActionToReleaseModal\n * -----------------------------------------------------------------------------------------------*/\nexport const RELEASE_ACTION_FORM_SCHEMA = yup.object().shape({\n type: yup.string().oneOf(['publish', 'unpublish']).required(),\n releaseId: yup.string().required(),\n});\n\nexport interface FormValues {\n type: CreateReleaseAction.Request['body']['type'];\n releaseId: CreateReleaseAction.Request['params']['releaseId'];\n}\n\nexport const INITIAL_VALUES = {\n type: 'publish',\n releaseId: '',\n} satisfies FormValues;\n\ninterface AddActionToReleaseModalProps {\n contentType: string;\n documentId?: string;\n onInputChange: (field: keyof FormValues, value: string | number) => void;\n values: FormValues;\n}\n\nexport const NoReleases = () => {\n const { formatMessage } = useIntl();\n return (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release.no-releases-message',\n defaultMessage:\n 'No available releases. Open the list of releases and create a new one from there.',\n })}\n action={\n <LinkButton\n to={{\n pathname: '/plugins/content-releases',\n }}\n tag={ReactRouterLink}\n variant=\"secondary\"\n >\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release.redirect-button',\n defaultMessage: 'Open the list of releases',\n })}\n </LinkButton>\n }\n shadow=\"none\"\n />\n );\n};\n\nconst AddActionToReleaseModal = ({\n contentType,\n documentId,\n onInputChange,\n values,\n}: AddActionToReleaseModalProps) => {\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const locale = query.plugins?.i18n?.locale;\n\n // Get all 'pending' releases that do not have the entry attached\n const response = useGetReleasesForEntryQuery({\n contentType,\n entryDocumentId: documentId,\n hasEntryAttached: false,\n locale,\n });\n\n const releases = response.data?.data;\n\n if (releases?.length === 0) {\n return <NoReleases />;\n }\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Box paddingBottom={6}>\n <Field.Root required>\n <Field.Label>\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release.select-label',\n defaultMessage: 'Select a release',\n })}\n </Field.Label>\n <SingleSelect\n required\n placeholder={formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release.select-placeholder',\n defaultMessage: 'Select',\n })}\n name=\"releaseId\"\n onChange={(value) => onInputChange('releaseId', value)}\n value={values.releaseId}\n >\n {releases?.map((release) => (\n <SingleSelectOption key={release.id} value={release.id}>\n {release.name}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Field.Root>\n </Box>\n <Field.Label>\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release.action-type-label',\n defaultMessage: 'What do you want to do with this entry?',\n })}\n </Field.Label>\n <ReleaseActionOptions\n selected={values.type}\n handleChange={(e) => onInputChange('type', e.target.value)}\n name=\"type\"\n />\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseActionModalForm\n * -----------------------------------------------------------------------------------------------*/\n\nconst ReleaseActionModalForm: DocumentActionComponent = ({\n documentId,\n document,\n model,\n collectionType,\n}: DocumentActionProps) => {\n const { formatMessage } = useIntl();\n const { allowedActions } = useRBAC(PERMISSIONS);\n const { canCreateAction } = allowedActions;\n const [createReleaseAction, { isLoading }] = useCreateReleaseActionMutation();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const locale = query.plugins?.i18n?.locale;\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>, onClose: () => void) => {\n try {\n await formik.handleSubmit(e);\n onClose();\n } catch (error) {\n if (isFetchError(error)) {\n // Handle axios error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n } else {\n // Handle generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n }\n };\n\n const formik = useFormik({\n initialValues: INITIAL_VALUES,\n validationSchema: RELEASE_ACTION_FORM_SCHEMA,\n onSubmit: async (values: FormValues) => {\n if (collectionType === 'collection-types' && !documentId) {\n throw new Error('Document id is required');\n }\n\n const response = await createReleaseAction({\n body: {\n type: values.type,\n contentType: model as UID.ContentType,\n entryDocumentId: documentId,\n locale,\n },\n params: { releaseId: values.releaseId },\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.add-to-release.notification.success',\n defaultMessage: 'Entry added to release',\n }),\n });\n\n return;\n }\n\n if ('error' in response) {\n throw response.error;\n }\n },\n });\n\n const {\n edit: { options },\n } = useDocumentLayout(model);\n\n // Project is not EE or contentType does not have draftAndPublish enabled\n if (!window.strapi.isEE || !options?.draftAndPublish || !canCreateAction) {\n return null;\n }\n\n if (collectionType === 'collection-types' && (!documentId || documentId === 'create')) {\n return null;\n }\n\n return {\n label: formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release',\n defaultMessage: 'Add to release',\n }),\n icon: <PaperPlane />,\n // Entry is creating so we don't want to allow adding it to a release\n disabled: !document,\n position: ['panel', 'table-row'],\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release',\n defaultMessage: 'Add to release',\n }),\n content: (\n <AddActionToReleaseModal\n contentType={model}\n documentId={documentId}\n onInputChange={formik.setFieldValue}\n values={formik.values}\n />\n ),\n footer: ({ onClose }) => (\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\" name=\"cancel\">\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release.cancel-button',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <Button\n type=\"submit\"\n // @ts-expect-error - formik ReactEvent types don't match button onClick types as they expect a MouseEvent\n onClick={(e) => handleSubmit(e, onClose)}\n disabled={!formik.values.releaseId}\n loading={isLoading}\n >\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release.continue-button',\n defaultMessage: 'Continue',\n })}\n </Button>\n </Modal.Footer>\n ),\n },\n };\n};\n\nexport { ReleaseActionModalForm };\n"],"names":["RELEASE_ACTION_FORM_SCHEMA","yup","object","shape","type","string","oneOf","required","releaseId","INITIAL_VALUES","NoReleases","formatMessage","useIntl","_jsx","EmptyStateLayout","icon","EmptyDocuments","width","content","id","defaultMessage","action","LinkButton","to","pathname","tag","ReactRouterLink","variant","shadow","AddActionToReleaseModal","contentType","documentId","onInputChange","values","query","useQueryParams","locale","plugins","i18n","response","useGetReleasesForEntryQuery","entryDocumentId","hasEntryAttached","releases","data","length","_jsxs","Flex","direction","alignItems","gap","Box","paddingBottom","Field","Root","Label","SingleSelect","placeholder","name","onChange","value","map","release","SingleSelectOption","ReleaseActionOptions","selected","handleChange","e","target","ReleaseActionModalForm","document","model","collectionType","allowedActions","useRBAC","PERMISSIONS","canCreateAction","createReleaseAction","isLoading","useCreateReleaseActionMutation","toggleNotification","useNotification","formatAPIError","useAPIErrorHandler","handleSubmit","onClose","formik","error","isFetchError","message","useFormik","initialValues","validationSchema","onSubmit","Error","body","params","edit","options","useDocumentLayout","window","strapi","isEE","draftAndPublish","label","PaperPlane","disabled","position","dialog","title","setFieldValue","footer","Modal","Footer","Button","onClick","loading"],"mappings":"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"}
@@ -12,7 +12,8 @@ var pluginId = require('../pluginId.js');
12
12
  var time = require('../utils/time.js');
13
13
  var schemas = require('../validation/schemas.js');
14
14
 
15
- function _interopNamespaceDefault(e) {
15
+ function _interopNamespace(e) {
16
+ if (e && e.__esModule) return e;
16
17
  var n = Object.create(null);
17
18
  if (e) {
18
19
  Object.keys(e).forEach(function (k) {
@@ -29,7 +30,7 @@ function _interopNamespaceDefault(e) {
29
30
  return Object.freeze(n);
30
31
  }
31
32
 
32
- var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
33
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
33
34
 
34
35
  const ReleaseModal = ({ handleClose, open, handleSubmit, initialValues, isLoading = false })=>{
35
36
  const { formatMessage } = reactIntl.useIntl();
@@ -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 { 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 type=\"text\" 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","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":"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"}
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 type=\"text\" 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","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":"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"}
@@ -23,7 +23,10 @@ var api = require('../utils/api.js');
23
23
  var time = require('../utils/time.js');
24
24
  var ReleasesPage = require('./ReleasesPage.js');
25
25
 
26
- function _interopNamespaceDefault(e) {
26
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
27
+
28
+ function _interopNamespace(e) {
29
+ if (e && e.__esModule) return e;
27
30
  var n = Object.create(null);
28
31
  if (e) {
29
32
  Object.keys(e).forEach(function (k) {
@@ -40,7 +43,8 @@ function _interopNamespaceDefault(e) {
40
43
  return Object.freeze(n);
41
44
  }
42
45
 
43
- var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
46
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
47
+ var format__default = /*#__PURE__*/_interopDefault(format);
44
48
 
45
49
  /* -------------------------------------------------------------------------------------------------
46
50
  * ReleaseDetailsLayout
@@ -675,8 +679,8 @@ const ReleaseDetailsBody = ({ releaseId })=>{
675
679
  const timezone = getTimezoneValue();
676
680
  const scheduledAt = releaseData?.scheduledAt && timezone ? dateFnsTz.utcToZonedTime(releaseData.scheduledAt, timezone) : null;
677
681
  // Just get the date and time to display without considering updated timezone time
678
- const date = scheduledAt ? format(scheduledAt, 'yyyy-MM-dd') : undefined;
679
- const time = scheduledAt ? format(scheduledAt, 'HH:mm') : '';
682
+ const date = scheduledAt ? format__default.default(scheduledAt, 'yyyy-MM-dd') : undefined;
683
+ const time = scheduledAt ? format__default.default(scheduledAt, 'HH:mm') : '';
680
684
  const handleEditRelease = async (values)=>{
681
685
  const response = await updateRelease({
682
686
  id: releaseId,