@strapi/content-releases 0.0.0-next.d8f8da8f5b333be4a20563a1a15cd61350139956 → 0.0.0-next.da19c0501ff87d14fb664b55b8e0630d3c548485

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 (124) 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/ReleaseAction.js +3 -1
  6. package/dist/admin/components/ReleaseAction.js.map +1 -1
  7. package/dist/admin/components/ReleaseAction.mjs +3 -1
  8. package/dist/admin/components/ReleaseAction.mjs.map +1 -1
  9. package/dist/admin/components/ReleaseActionMenu.js +25 -74
  10. package/dist/admin/components/ReleaseActionMenu.js.map +1 -1
  11. package/dist/admin/components/ReleaseActionMenu.mjs +26 -75
  12. package/dist/admin/components/ReleaseActionMenu.mjs.map +1 -1
  13. package/dist/admin/components/ReleaseModal.js +8 -0
  14. package/dist/admin/components/ReleaseModal.js.map +1 -1
  15. package/dist/admin/components/ReleaseModal.mjs +8 -0
  16. package/dist/admin/components/ReleaseModal.mjs.map +1 -1
  17. package/dist/admin/components/Widgets.js +122 -0
  18. package/dist/admin/components/Widgets.js.map +1 -0
  19. package/dist/admin/components/Widgets.mjs +120 -0
  20. package/dist/admin/components/Widgets.mjs.map +1 -0
  21. package/dist/admin/constants.js +2 -0
  22. package/dist/admin/constants.js.map +1 -1
  23. package/dist/admin/constants.mjs +2 -1
  24. package/dist/admin/constants.mjs.map +1 -1
  25. package/dist/admin/index.js +25 -2
  26. package/dist/admin/index.js.map +1 -1
  27. package/dist/admin/index.mjs +26 -3
  28. package/dist/admin/index.mjs.map +1 -1
  29. package/dist/admin/pages/PurchaseContentReleases.js +2 -2
  30. package/dist/admin/pages/PurchaseContentReleases.js.map +1 -1
  31. package/dist/admin/pages/PurchaseContentReleases.mjs +3 -3
  32. package/dist/admin/pages/PurchaseContentReleases.mjs.map +1 -1
  33. package/dist/admin/pages/ReleaseDetailsPage.js +111 -158
  34. package/dist/admin/pages/ReleaseDetailsPage.js.map +1 -1
  35. package/dist/admin/pages/ReleaseDetailsPage.mjs +113 -160
  36. package/dist/admin/pages/ReleaseDetailsPage.mjs.map +1 -1
  37. package/dist/admin/pages/ReleasesPage.js +130 -122
  38. package/dist/admin/pages/ReleasesPage.js.map +1 -1
  39. package/dist/admin/pages/ReleasesPage.mjs +131 -123
  40. package/dist/admin/pages/ReleasesPage.mjs.map +1 -1
  41. package/dist/admin/pages/ReleasesSettingsPage.js +36 -10
  42. package/dist/admin/pages/ReleasesSettingsPage.js.map +1 -1
  43. package/dist/admin/pages/ReleasesSettingsPage.mjs +37 -11
  44. package/dist/admin/pages/ReleasesSettingsPage.mjs.map +1 -1
  45. package/dist/admin/services/homepage.js +24 -0
  46. package/dist/admin/services/homepage.js.map +1 -0
  47. package/dist/admin/services/homepage.mjs +22 -0
  48. package/dist/admin/services/homepage.mjs.map +1 -0
  49. package/dist/admin/services/release.js +21 -12
  50. package/dist/admin/services/release.js.map +1 -1
  51. package/dist/admin/services/release.mjs +21 -12
  52. package/dist/admin/services/release.mjs.map +1 -1
  53. package/dist/admin/src/components/Widgets.d.ts +2 -0
  54. package/dist/admin/src/constants.d.ts +1 -0
  55. package/dist/admin/src/services/homepage.d.ts +9 -0
  56. package/dist/admin/src/services/release.d.ts +28 -28
  57. package/dist/admin/translations/en.json.js +6 -3
  58. package/dist/admin/translations/en.json.js.map +1 -1
  59. package/dist/admin/translations/en.json.mjs +6 -3
  60. package/dist/admin/translations/en.json.mjs.map +1 -1
  61. package/dist/server/controllers/homepage.js +15 -0
  62. package/dist/server/controllers/homepage.js.map +1 -0
  63. package/dist/server/controllers/homepage.mjs +13 -0
  64. package/dist/server/controllers/homepage.mjs.map +1 -0
  65. package/dist/server/controllers/index.js +2 -0
  66. package/dist/server/controllers/index.js.map +1 -1
  67. package/dist/server/controllers/index.mjs +2 -0
  68. package/dist/server/controllers/index.mjs.map +1 -1
  69. package/dist/server/destroy.js +2 -2
  70. package/dist/server/destroy.js.map +1 -1
  71. package/dist/server/destroy.mjs +2 -2
  72. package/dist/server/destroy.mjs.map +1 -1
  73. package/dist/server/routes/homepage.js +25 -0
  74. package/dist/server/routes/homepage.js.map +1 -0
  75. package/dist/server/routes/homepage.mjs +23 -0
  76. package/dist/server/routes/homepage.mjs.map +1 -0
  77. package/dist/server/routes/index.js +2 -0
  78. package/dist/server/routes/index.js.map +1 -1
  79. package/dist/server/routes/index.mjs +2 -0
  80. package/dist/server/routes/index.mjs.map +1 -1
  81. package/dist/server/services/homepage.js +26 -0
  82. package/dist/server/services/homepage.js.map +1 -0
  83. package/dist/server/services/homepage.mjs +24 -0
  84. package/dist/server/services/homepage.mjs.map +1 -0
  85. package/dist/server/services/index.js +2 -0
  86. package/dist/server/services/index.js.map +1 -1
  87. package/dist/server/services/index.mjs +2 -0
  88. package/dist/server/services/index.mjs.map +1 -1
  89. package/dist/server/services/release-action.js +2 -1
  90. package/dist/server/services/release-action.js.map +1 -1
  91. package/dist/server/services/release-action.mjs +2 -1
  92. package/dist/server/services/release-action.mjs.map +1 -1
  93. package/dist/server/services/scheduling.js +16 -12
  94. package/dist/server/services/scheduling.js.map +1 -1
  95. package/dist/server/services/scheduling.mjs +16 -12
  96. package/dist/server/services/scheduling.mjs.map +1 -1
  97. package/dist/server/src/controllers/homepage.d.ts +6 -0
  98. package/dist/server/src/controllers/homepage.d.ts.map +1 -0
  99. package/dist/server/src/controllers/index.d.ts +3 -0
  100. package/dist/server/src/controllers/index.d.ts.map +1 -1
  101. package/dist/server/src/destroy.d.ts.map +1 -1
  102. package/dist/server/src/index.d.ts +13 -4
  103. package/dist/server/src/index.d.ts.map +1 -1
  104. package/dist/server/src/routes/homepage.d.ts +4 -0
  105. package/dist/server/src/routes/homepage.d.ts.map +1 -0
  106. package/dist/server/src/routes/index.d.ts +1 -0
  107. package/dist/server/src/routes/index.d.ts.map +1 -1
  108. package/dist/server/src/services/homepage.d.ts +9 -0
  109. package/dist/server/src/services/homepage.d.ts.map +1 -0
  110. package/dist/server/src/services/index.d.ts +9 -4
  111. package/dist/server/src/services/index.d.ts.map +1 -1
  112. package/dist/server/src/services/release-action.d.ts.map +1 -1
  113. package/dist/server/src/services/scheduling.d.ts +4 -5
  114. package/dist/server/src/services/scheduling.d.ts.map +1 -1
  115. package/dist/server/src/utils/index.d.ts.map +1 -1
  116. package/dist/server/utils/index.js +2 -1
  117. package/dist/server/utils/index.js.map +1 -1
  118. package/dist/server/utils/index.mjs +2 -1
  119. package/dist/server/utils/index.mjs.map +1 -1
  120. package/dist/shared/contracts/homepage.d.ts +11 -0
  121. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  122. package/dist/shared/types.d.ts +1 -0
  123. package/dist/shared/types.d.ts.map +1 -1
  124. package/package.json +10 -11
@@ -106,6 +106,7 @@ const ReleaseModal = ({ handleClose, open, handleSubmit, initialValues, isLoadin
106
106
  })
107
107
  }),
108
108
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
109
+ type: "text",
109
110
  value: values.name,
110
111
  onChange: handleChange
111
112
  }),
@@ -146,9 +147,15 @@ const ReleaseModal = ({ handleClose, open, handleSubmit, initialValues, isLoadin
146
147
  /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
147
148
  gap: 4,
148
149
  alignItems: "start",
150
+ direction: {
151
+ initial: 'column',
152
+ medium: 'row'
153
+ },
154
+ wrap: "wrap",
149
155
  children: [
150
156
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
151
157
  width: "100%",
158
+ flex: 1,
152
159
  children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
153
160
  name: "date",
154
161
  error: errors.date && formatMessage({
@@ -186,6 +193,7 @@ const ReleaseModal = ({ handleClose, open, handleSubmit, initialValues, isLoadin
186
193
  }),
187
194
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
188
195
  width: "100%",
196
+ flex: 1,
189
197
  children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
190
198
  name: "time",
191
199
  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":"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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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"}
@@ -85,6 +85,7 @@ const ReleaseModal = ({ handleClose, open, handleSubmit, initialValues, isLoadin
85
85
  })
86
86
  }),
87
87
  /*#__PURE__*/ jsx(TextInput, {
88
+ type: "text",
88
89
  value: values.name,
89
90
  onChange: handleChange
90
91
  }),
@@ -125,9 +126,15 @@ const ReleaseModal = ({ handleClose, open, handleSubmit, initialValues, isLoadin
125
126
  /*#__PURE__*/ jsxs(Flex, {
126
127
  gap: 4,
127
128
  alignItems: "start",
129
+ direction: {
130
+ initial: 'column',
131
+ medium: 'row'
132
+ },
133
+ wrap: "wrap",
128
134
  children: [
129
135
  /*#__PURE__*/ jsx(Box, {
130
136
  width: "100%",
137
+ flex: 1,
131
138
  children: /*#__PURE__*/ jsxs(Field.Root, {
132
139
  name: "date",
133
140
  error: errors.date && formatMessage({
@@ -165,6 +172,7 @@ const ReleaseModal = ({ handleClose, open, handleSubmit, initialValues, isLoadin
165
172
  }),
166
173
  /*#__PURE__*/ jsx(Box, {
167
174
  width: "100%",
175
+ flex: 1,
168
176
  children: /*#__PURE__*/ jsxs(Field.Root, {
169
177
  name: "time",
170
178
  error: errors.time && formatMessage({
@@ -1 +1 @@
1
- {"version":3,"file":"ReleaseModal.mjs","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":"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"}
1
+ {"version":3,"file":"ReleaseModal.mjs","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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"}
@@ -0,0 +1,122 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var strapiAdmin = require('@strapi/admin/strapi-admin');
5
+ var designSystem = require('@strapi/design-system');
6
+ var icons = require('@strapi/icons');
7
+ var reactIntl = require('react-intl');
8
+ var reactRouterDom = require('react-router-dom');
9
+ var styledComponents = require('styled-components');
10
+ var ReleasesPage = require('../pages/ReleasesPage.js');
11
+ var homepage = require('../services/homepage.js');
12
+ var RelativeTime = require('./RelativeTime.js');
13
+
14
+ const CellTypography = styledComponents.styled(designSystem.Typography)`
15
+ display: block;
16
+ max-width: 14.4rem;
17
+ overflow: hidden;
18
+ text-overflow: ellipsis;
19
+ white-space: nowrap;
20
+ `;
21
+ const ReleasesTable = ({ items })=>{
22
+ const { formatMessage } = reactIntl.useIntl();
23
+ const { trackUsage } = strapiAdmin.useTracking();
24
+ const navigate = reactRouterDom.useNavigate();
25
+ const getEditViewLink = (item)=>{
26
+ return `/plugins/content-releases/${item.id}`;
27
+ };
28
+ const handleRowClick = (item)=>()=>{
29
+ trackUsage('willEditReleaseFromHome');
30
+ const link = getEditViewLink(item);
31
+ navigate(link);
32
+ };
33
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Table, {
34
+ colCount: 4,
35
+ rowCount: items?.length ?? 0,
36
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tbody, {
37
+ children: items?.map((item)=>/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tr, {
38
+ onClick: handleRowClick(item),
39
+ cursor: "pointer",
40
+ children: [
41
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
42
+ children: /*#__PURE__*/ jsxRuntime.jsx(CellTypography, {
43
+ title: item.name,
44
+ variant: "omega",
45
+ textColor: "neutral800",
46
+ children: item.name
47
+ })
48
+ }),
49
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
50
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
51
+ display: "inline-block",
52
+ children: item.status ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.Badge, {
53
+ ...ReleasesPage.getBadgeProps(item.status),
54
+ children: item.status
55
+ }) : /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
56
+ textColor: "neutral600",
57
+ "aria-hidden": true,
58
+ children: "-"
59
+ })
60
+ })
61
+ }),
62
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
63
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
64
+ variant: "omega",
65
+ textTransform: "capitalize",
66
+ textColor: "neutral600",
67
+ children: item.scheduledAt ? /*#__PURE__*/ jsxRuntime.jsx(RelativeTime.RelativeTime, {
68
+ timestamp: new Date(item.scheduledAt)
69
+ }) : formatMessage({
70
+ id: 'content-releases.pages.Releases.not-scheduled',
71
+ defaultMessage: 'Not scheduled'
72
+ })
73
+ })
74
+ }),
75
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
76
+ onClick: (e)=>e.stopPropagation(),
77
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
78
+ display: "inline-block",
79
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
80
+ tag: reactRouterDom.Link,
81
+ to: getEditViewLink(item),
82
+ onClick: ()=>trackUsage('willEditReleaseFromHome'),
83
+ label: formatMessage({
84
+ id: 'content-manager.actions.edit.label',
85
+ defaultMessage: 'Edit'
86
+ }),
87
+ variant: "ghost",
88
+ children: /*#__PURE__*/ jsxRuntime.jsx(icons.Pencil, {})
89
+ })
90
+ })
91
+ })
92
+ ]
93
+ }, item.documentId))
94
+ })
95
+ });
96
+ };
97
+ /* -------------------------------------------------------------------------------------------------
98
+ * Upcoming Releases
99
+ * -----------------------------------------------------------------------------------------------*/ const UpcomingReleasesWidget = ()=>{
100
+ const { formatMessage } = reactIntl.useIntl();
101
+ const { data, isLoading, error } = homepage.useGetUpcomingReleasesQuery();
102
+ if (isLoading) {
103
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Widget.Loading, {});
104
+ }
105
+ if (error || !data) {
106
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Widget.Error, {});
107
+ }
108
+ if (data.length === 0) {
109
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Widget.NoData, {
110
+ children: formatMessage({
111
+ id: 'content-releases.widget.upcoming-releases.no-data',
112
+ defaultMessage: 'No releases'
113
+ })
114
+ });
115
+ }
116
+ return /*#__PURE__*/ jsxRuntime.jsx(ReleasesTable, {
117
+ items: data
118
+ });
119
+ };
120
+
121
+ exports.UpcomingReleasesWidget = UpcomingReleasesWidget;
122
+ //# sourceMappingURL=Widgets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Widgets.js","sources":["../../../admin/src/components/Widgets.tsx"],"sourcesContent":["import { useTracking, Widget } from '@strapi/admin/strapi-admin';\nimport { Badge, Box, IconButton, Table, Tbody, Td, Tr, Typography } from '@strapi/design-system';\nimport { Pencil } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { Release } from '../../../shared/contracts/releases';\nimport { getBadgeProps } from '../pages/ReleasesPage';\nimport { useGetUpcomingReleasesQuery } from '../services/homepage';\n\nimport { RelativeTime } from './RelativeTime';\n\nconst CellTypography = styled(Typography)`\n display: block;\n max-width: 14.4rem;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst ReleasesTable = ({ items }: { items: Release[] }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n\n const getEditViewLink = (item: Release): string => {\n return `/plugins/content-releases/${item.id}`;\n };\n\n const handleRowClick = (item: Release) => () => {\n trackUsage('willEditReleaseFromHome');\n const link = getEditViewLink(item);\n navigate(link);\n };\n\n return (\n <Table colCount={4} rowCount={items?.length ?? 0}>\n <Tbody>\n {items?.map((item) => (\n <Tr onClick={handleRowClick(item)} cursor=\"pointer\" key={item.documentId}>\n <Td>\n <CellTypography title={item.name} variant=\"omega\" textColor=\"neutral800\">\n {item.name}\n </CellTypography>\n </Td>\n <Td>\n <Box display=\"inline-block\">\n {item.status ? (\n <Badge {...getBadgeProps(item.status)}>{item.status}</Badge>\n ) : (\n <Typography textColor=\"neutral600\" aria-hidden>\n -\n </Typography>\n )}\n </Box>\n </Td>\n <Td>\n <Typography variant=\"omega\" textTransform=\"capitalize\" textColor=\"neutral600\">\n {item.scheduledAt ? (\n <RelativeTime timestamp={new Date(item.scheduledAt)} />\n ) : (\n formatMessage({\n id: 'content-releases.pages.Releases.not-scheduled',\n defaultMessage: 'Not scheduled',\n })\n )}\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <Box display=\"inline-block\">\n <IconButton\n tag={Link}\n to={getEditViewLink(item)}\n onClick={() => trackUsage('willEditReleaseFromHome')}\n label={formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n })}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n </Box>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Upcoming Releases\n * -----------------------------------------------------------------------------------------------*/\n\nconst UpcomingReleasesWidget = () => {\n const { formatMessage } = useIntl();\n const { data, isLoading, error } = useGetUpcomingReleasesQuery();\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data) {\n return <Widget.Error />;\n }\n\n if (data.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-releases.widget.upcoming-releases.no-data',\n defaultMessage: 'No releases',\n })}\n </Widget.NoData>\n );\n }\n\n return <ReleasesTable items={data} />;\n};\n\nexport { UpcomingReleasesWidget };\n"],"names":["CellTypography","styled","Typography","ReleasesTable","items","formatMessage","useIntl","trackUsage","useTracking","navigate","useNavigate","getEditViewLink","item","id","handleRowClick","link","_jsx","Table","colCount","rowCount","length","Tbody","map","_jsxs","Tr","onClick","cursor","Td","title","name","variant","textColor","Box","display","status","Badge","getBadgeProps","aria-hidden","textTransform","scheduledAt","RelativeTime","timestamp","Date","defaultMessage","e","stopPropagation","IconButton","tag","Link","to","label","Pencil","documentId","UpcomingReleasesWidget","data","isLoading","error","useGetUpcomingReleasesQuery","Widget","Loading","Error","NoData"],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { Widget, useTracking } from '@strapi/admin/strapi-admin';
3
+ import { Typography, Table, Tbody, Tr, Td, Box, Badge, IconButton } from '@strapi/design-system';
4
+ import { Pencil } from '@strapi/icons';
5
+ import { useIntl } from 'react-intl';
6
+ import { useNavigate, Link } from 'react-router-dom';
7
+ import { styled } from 'styled-components';
8
+ import { getBadgeProps } from '../pages/ReleasesPage.mjs';
9
+ import { useGetUpcomingReleasesQuery } from '../services/homepage.mjs';
10
+ import { RelativeTime } from './RelativeTime.mjs';
11
+
12
+ const CellTypography = styled(Typography)`
13
+ display: block;
14
+ max-width: 14.4rem;
15
+ overflow: hidden;
16
+ text-overflow: ellipsis;
17
+ white-space: nowrap;
18
+ `;
19
+ const ReleasesTable = ({ items })=>{
20
+ const { formatMessage } = useIntl();
21
+ const { trackUsage } = useTracking();
22
+ const navigate = useNavigate();
23
+ const getEditViewLink = (item)=>{
24
+ return `/plugins/content-releases/${item.id}`;
25
+ };
26
+ const handleRowClick = (item)=>()=>{
27
+ trackUsage('willEditReleaseFromHome');
28
+ const link = getEditViewLink(item);
29
+ navigate(link);
30
+ };
31
+ return /*#__PURE__*/ jsx(Table, {
32
+ colCount: 4,
33
+ rowCount: items?.length ?? 0,
34
+ children: /*#__PURE__*/ jsx(Tbody, {
35
+ children: items?.map((item)=>/*#__PURE__*/ jsxs(Tr, {
36
+ onClick: handleRowClick(item),
37
+ cursor: "pointer",
38
+ children: [
39
+ /*#__PURE__*/ jsx(Td, {
40
+ children: /*#__PURE__*/ jsx(CellTypography, {
41
+ title: item.name,
42
+ variant: "omega",
43
+ textColor: "neutral800",
44
+ children: item.name
45
+ })
46
+ }),
47
+ /*#__PURE__*/ jsx(Td, {
48
+ children: /*#__PURE__*/ jsx(Box, {
49
+ display: "inline-block",
50
+ children: item.status ? /*#__PURE__*/ jsx(Badge, {
51
+ ...getBadgeProps(item.status),
52
+ children: item.status
53
+ }) : /*#__PURE__*/ jsx(Typography, {
54
+ textColor: "neutral600",
55
+ "aria-hidden": true,
56
+ children: "-"
57
+ })
58
+ })
59
+ }),
60
+ /*#__PURE__*/ jsx(Td, {
61
+ children: /*#__PURE__*/ jsx(Typography, {
62
+ variant: "omega",
63
+ textTransform: "capitalize",
64
+ textColor: "neutral600",
65
+ children: item.scheduledAt ? /*#__PURE__*/ jsx(RelativeTime, {
66
+ timestamp: new Date(item.scheduledAt)
67
+ }) : formatMessage({
68
+ id: 'content-releases.pages.Releases.not-scheduled',
69
+ defaultMessage: 'Not scheduled'
70
+ })
71
+ })
72
+ }),
73
+ /*#__PURE__*/ jsx(Td, {
74
+ onClick: (e)=>e.stopPropagation(),
75
+ children: /*#__PURE__*/ jsx(Box, {
76
+ display: "inline-block",
77
+ children: /*#__PURE__*/ jsx(IconButton, {
78
+ tag: Link,
79
+ to: getEditViewLink(item),
80
+ onClick: ()=>trackUsage('willEditReleaseFromHome'),
81
+ label: formatMessage({
82
+ id: 'content-manager.actions.edit.label',
83
+ defaultMessage: 'Edit'
84
+ }),
85
+ variant: "ghost",
86
+ children: /*#__PURE__*/ jsx(Pencil, {})
87
+ })
88
+ })
89
+ })
90
+ ]
91
+ }, item.documentId))
92
+ })
93
+ });
94
+ };
95
+ /* -------------------------------------------------------------------------------------------------
96
+ * Upcoming Releases
97
+ * -----------------------------------------------------------------------------------------------*/ const UpcomingReleasesWidget = ()=>{
98
+ const { formatMessage } = useIntl();
99
+ const { data, isLoading, error } = useGetUpcomingReleasesQuery();
100
+ if (isLoading) {
101
+ return /*#__PURE__*/ jsx(Widget.Loading, {});
102
+ }
103
+ if (error || !data) {
104
+ return /*#__PURE__*/ jsx(Widget.Error, {});
105
+ }
106
+ if (data.length === 0) {
107
+ return /*#__PURE__*/ jsx(Widget.NoData, {
108
+ children: formatMessage({
109
+ id: 'content-releases.widget.upcoming-releases.no-data',
110
+ defaultMessage: 'No releases'
111
+ })
112
+ });
113
+ }
114
+ return /*#__PURE__*/ jsx(ReleasesTable, {
115
+ items: data
116
+ });
117
+ };
118
+
119
+ export { UpcomingReleasesWidget };
120
+ //# sourceMappingURL=Widgets.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Widgets.mjs","sources":["../../../admin/src/components/Widgets.tsx"],"sourcesContent":["import { useTracking, Widget } from '@strapi/admin/strapi-admin';\nimport { Badge, Box, IconButton, Table, Tbody, Td, Tr, Typography } from '@strapi/design-system';\nimport { Pencil } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { Release } from '../../../shared/contracts/releases';\nimport { getBadgeProps } from '../pages/ReleasesPage';\nimport { useGetUpcomingReleasesQuery } from '../services/homepage';\n\nimport { RelativeTime } from './RelativeTime';\n\nconst CellTypography = styled(Typography)`\n display: block;\n max-width: 14.4rem;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst ReleasesTable = ({ items }: { items: Release[] }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n\n const getEditViewLink = (item: Release): string => {\n return `/plugins/content-releases/${item.id}`;\n };\n\n const handleRowClick = (item: Release) => () => {\n trackUsage('willEditReleaseFromHome');\n const link = getEditViewLink(item);\n navigate(link);\n };\n\n return (\n <Table colCount={4} rowCount={items?.length ?? 0}>\n <Tbody>\n {items?.map((item) => (\n <Tr onClick={handleRowClick(item)} cursor=\"pointer\" key={item.documentId}>\n <Td>\n <CellTypography title={item.name} variant=\"omega\" textColor=\"neutral800\">\n {item.name}\n </CellTypography>\n </Td>\n <Td>\n <Box display=\"inline-block\">\n {item.status ? (\n <Badge {...getBadgeProps(item.status)}>{item.status}</Badge>\n ) : (\n <Typography textColor=\"neutral600\" aria-hidden>\n -\n </Typography>\n )}\n </Box>\n </Td>\n <Td>\n <Typography variant=\"omega\" textTransform=\"capitalize\" textColor=\"neutral600\">\n {item.scheduledAt ? (\n <RelativeTime timestamp={new Date(item.scheduledAt)} />\n ) : (\n formatMessage({\n id: 'content-releases.pages.Releases.not-scheduled',\n defaultMessage: 'Not scheduled',\n })\n )}\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <Box display=\"inline-block\">\n <IconButton\n tag={Link}\n to={getEditViewLink(item)}\n onClick={() => trackUsage('willEditReleaseFromHome')}\n label={formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n })}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n </Box>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Upcoming Releases\n * -----------------------------------------------------------------------------------------------*/\n\nconst UpcomingReleasesWidget = () => {\n const { formatMessage } = useIntl();\n const { data, isLoading, error } = useGetUpcomingReleasesQuery();\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data) {\n return <Widget.Error />;\n }\n\n if (data.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-releases.widget.upcoming-releases.no-data',\n defaultMessage: 'No releases',\n })}\n </Widget.NoData>\n );\n }\n\n return <ReleasesTable items={data} />;\n};\n\nexport { UpcomingReleasesWidget };\n"],"names":["CellTypography","styled","Typography","ReleasesTable","items","formatMessage","useIntl","trackUsage","useTracking","navigate","useNavigate","getEditViewLink","item","id","handleRowClick","link","_jsx","Table","colCount","rowCount","length","Tbody","map","_jsxs","Tr","onClick","cursor","Td","title","name","variant","textColor","Box","display","status","Badge","getBadgeProps","aria-hidden","textTransform","scheduledAt","RelativeTime","timestamp","Date","defaultMessage","e","stopPropagation","IconButton","tag","Link","to","label","Pencil","documentId","UpcomingReleasesWidget","data","isLoading","error","useGetUpcomingReleasesQuery","Widget","Loading","Error","NoData"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ const PLUGIN_ID = 'content-releases';
3
4
  const PERMISSIONS = {
4
5
  main: [
5
6
  {
@@ -74,4 +75,5 @@ const PERMISSIONS = {
74
75
  };
75
76
 
76
77
  exports.PERMISSIONS = PERMISSIONS;
78
+ exports.PLUGIN_ID = PLUGIN_ID;
77
79
  //# sourceMappingURL=constants.js.map