@strapi/content-releases 5.15.1 → 5.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/ReleaseActionMenu.js +25 -74
- package/dist/admin/components/ReleaseActionMenu.js.map +1 -1
- package/dist/admin/components/ReleaseActionMenu.mjs +26 -75
- package/dist/admin/components/ReleaseActionMenu.mjs.map +1 -1
- package/dist/admin/pages/ReleaseDetailsPage.js +11 -60
- package/dist/admin/pages/ReleaseDetailsPage.js.map +1 -1
- package/dist/admin/pages/ReleaseDetailsPage.mjs +13 -62
- package/dist/admin/pages/ReleaseDetailsPage.mjs.map +1 -1
- package/package.json +9 -9
|
@@ -30,30 +30,16 @@ function _interopNamespaceDefault(e) {
|
|
|
30
30
|
|
|
31
31
|
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
fill: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}600`]};
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
a {
|
|
42
|
-
color: ${({ theme })=>theme.colors.neutral800};
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
svg {
|
|
47
|
-
color: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}500`]};
|
|
33
|
+
// TODO: has to be fixed in the DS - https://github.com/strapi/design-system/issues/1934
|
|
34
|
+
const StyledMenuLink = styledComponents.styled(designSystem.Menu.Item)`
|
|
35
|
+
span,
|
|
36
|
+
&:hover span {
|
|
37
|
+
color: ${({ theme })=>theme.colors['neutral800']};
|
|
48
38
|
}
|
|
49
39
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
span,
|
|
55
|
-
a {
|
|
56
|
-
width: 100%;
|
|
40
|
+
svg path,
|
|
41
|
+
&:hover svg path {
|
|
42
|
+
fill: ${({ theme })=>theme.colors['neutral500']};
|
|
57
43
|
}
|
|
58
44
|
`;
|
|
59
45
|
const DeleteReleaseActionItem = ({ releaseId, actionId })=>{
|
|
@@ -102,25 +88,13 @@ const DeleteReleaseActionItem = ({ releaseId, actionId })=>{
|
|
|
102
88
|
if (!canDeleteAction) {
|
|
103
89
|
return null;
|
|
104
90
|
}
|
|
105
|
-
return /*#__PURE__*/ jsxRuntime.jsx(
|
|
106
|
-
|
|
91
|
+
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Item, {
|
|
92
|
+
variant: "danger",
|
|
93
|
+
startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Cross, {}),
|
|
107
94
|
onSelect: handleDeleteAction,
|
|
108
|
-
children:
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
/*#__PURE__*/ jsxRuntime.jsx(icons.Cross, {
|
|
112
|
-
width: "1.6rem",
|
|
113
|
-
height: "1.6rem"
|
|
114
|
-
}),
|
|
115
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
116
|
-
textColor: "danger600",
|
|
117
|
-
variant: "omega",
|
|
118
|
-
children: formatMessage({
|
|
119
|
-
id: 'content-releases.content-manager-edit-view.remove-from-release',
|
|
120
|
-
defaultMessage: 'Remove from release'
|
|
121
|
-
})
|
|
122
|
-
})
|
|
123
|
-
]
|
|
95
|
+
children: formatMessage({
|
|
96
|
+
id: 'content-releases.content-manager-edit-view.remove-from-release',
|
|
97
|
+
defaultMessage: 'Remove from release'
|
|
124
98
|
})
|
|
125
99
|
});
|
|
126
100
|
};
|
|
@@ -150,53 +124,30 @@ const ReleaseActionEntryLinkItem = ({ contentTypeUid, documentId, locale })=>{
|
|
|
150
124
|
if (!canUpdateContentType || !canUpdateEntryForLocale) {
|
|
151
125
|
return null;
|
|
152
126
|
}
|
|
153
|
-
return /*#__PURE__*/ jsxRuntime.jsx(
|
|
127
|
+
return /*#__PURE__*/ jsxRuntime.jsx(StyledMenuLink, {
|
|
154
128
|
/* @ts-expect-error inference isn't working in DS */ tag: reactRouterDom.NavLink,
|
|
155
129
|
isLink: true,
|
|
156
130
|
to: {
|
|
157
131
|
pathname: `/content-manager/collection-types/${contentTypeUid}/${documentId}`,
|
|
158
132
|
search: locale && `?plugins[i18n][locale]=${locale}`
|
|
159
133
|
},
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
width: "1.6rem",
|
|
165
|
-
height: "1.6rem"
|
|
166
|
-
}),
|
|
167
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
168
|
-
variant: "omega",
|
|
169
|
-
children: formatMessage({
|
|
170
|
-
id: 'content-releases.content-manager-edit-view.edit-entry',
|
|
171
|
-
defaultMessage: 'Edit entry'
|
|
172
|
-
})
|
|
173
|
-
})
|
|
174
|
-
]
|
|
134
|
+
startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Pencil, {}),
|
|
135
|
+
children: formatMessage({
|
|
136
|
+
id: 'content-releases.content-manager-edit-view.edit-entry',
|
|
137
|
+
defaultMessage: 'Edit entry'
|
|
175
138
|
})
|
|
176
139
|
});
|
|
177
140
|
};
|
|
178
141
|
const EditReleaseItem = ({ releaseId })=>{
|
|
179
142
|
const { formatMessage } = reactIntl.useIntl();
|
|
180
|
-
return
|
|
181
|
-
tag: reactRouterDom.NavLink,
|
|
143
|
+
return /*#__PURE__*/ jsxRuntime.jsx(StyledMenuLink, {
|
|
144
|
+
/* @ts-expect-error inference isn't working in DS */ tag: reactRouterDom.NavLink,
|
|
182
145
|
isLink: true,
|
|
183
146
|
to: `/plugins/content-releases/${releaseId}`,
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
width: "1.6rem",
|
|
189
|
-
height: "1.6rem"
|
|
190
|
-
}),
|
|
191
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
192
|
-
textColor: "neutral800",
|
|
193
|
-
variant: "omega",
|
|
194
|
-
children: formatMessage({
|
|
195
|
-
id: 'content-releases.content-manager-edit-view.edit-release',
|
|
196
|
-
defaultMessage: 'Edit release'
|
|
197
|
-
})
|
|
198
|
-
})
|
|
199
|
-
]
|
|
147
|
+
startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Pencil, {}),
|
|
148
|
+
children: formatMessage({
|
|
149
|
+
id: 'content-releases.content-manager-edit-view.edit-release',
|
|
150
|
+
defaultMessage: 'Edit release'
|
|
200
151
|
})
|
|
201
152
|
});
|
|
202
153
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReleaseActionMenu.js","sources":["../../../admin/src/components/ReleaseActionMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useAPIErrorHandler,\n useNotification,\n useAuth,\n useRBAC,\n isFetchError,\n} from '@strapi/admin/strapi-admin';\nimport { Flex, Typography, Menu, AccessibleIcon } from '@strapi/design-system';\nimport { Cross, More, Pencil } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { DeleteReleaseAction, ReleaseAction } from '../../../shared/contracts/release-actions';\nimport { Release } from '../../../shared/contracts/releases';\nimport { PERMISSIONS } from '../constants';\nimport { useDeleteReleaseActionMutation } from '../services/release';\n\nconst StyledMenuItem = styled(Menu.Item)<{ $variant?: 'neutral' | 'danger' }>`\n &:hover {\n background: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}100`]};\n\n svg {\n fill: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}600`]};\n }\n\n a {\n color: ${({ theme }) => theme.colors.neutral800};\n }\n }\n\n svg {\n color: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}500`]};\n }\n\n span {\n color: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}800`]};\n }\n\n span,\n a {\n width: 100%;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteReleaseActionItemProps\n * -----------------------------------------------------------------------------------------------*/\ninterface DeleteReleaseActionItemProps {\n releaseId: DeleteReleaseAction.Request['params']['releaseId'];\n actionId: DeleteReleaseAction.Request['params']['actionId'];\n}\n\nconst DeleteReleaseActionItem = ({ releaseId, actionId }: DeleteReleaseActionItemProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const [deleteReleaseAction] = useDeleteReleaseActionMutation();\n const {\n allowedActions: { canDeleteAction },\n } = useRBAC(PERMISSIONS);\n\n const handleDeleteAction = async () => {\n const response = await deleteReleaseAction({\n params: { releaseId, actionId },\n });\n\n if ('data' in response) {\n // Handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release.notification.success',\n defaultMessage: 'Entry removed from release',\n }),\n });\n\n return;\n }\n\n if ('error' in response) {\n if (isFetchError(response.error)) {\n // Handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Handle generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (!canDeleteAction) {\n return null;\n }\n\n return (\n <StyledMenuItem $variant=\"danger\" onSelect={handleDeleteAction}>\n <Flex gap={2}>\n <Cross width=\"1.6rem\" height=\"1.6rem\" />\n <Typography textColor=\"danger600\" variant=\"omega\">\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release',\n defaultMessage: 'Remove from release',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseActionEntryLinkItem\n * -----------------------------------------------------------------------------------------------*/\ninterface ReleaseActionEntryLinkItemProps {\n contentTypeUid: ReleaseAction['contentType'];\n documentId: ReleaseAction['entry']['documentId'];\n locale: ReleaseAction['locale'];\n}\n\nconst ReleaseActionEntryLinkItem = ({\n contentTypeUid,\n documentId,\n locale,\n}: ReleaseActionEntryLinkItemProps) => {\n const { formatMessage } = useIntl();\n const userPermissions = useAuth('ReleaseActionEntryLinkItem', (state) => state.permissions);\n\n // Confirm user has permissions to access the entry for the given locale\n const canUpdateEntryForLocale = React.useMemo(() => {\n const updatePermissions = userPermissions.find(\n (permission) =>\n permission.subject === contentTypeUid &&\n permission.action === 'plugin::content-manager.explorer.update'\n );\n\n if (!updatePermissions) {\n return false;\n }\n\n return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));\n }, [contentTypeUid, locale, userPermissions]);\n\n const {\n allowedActions: { canUpdate: canUpdateContentType },\n } = useRBAC({\n updateContentType: [\n {\n action: 'plugin::content-manager.explorer.update',\n subject: contentTypeUid,\n },\n ],\n });\n\n if (!canUpdateContentType || !canUpdateEntryForLocale) {\n return null;\n }\n\n return (\n <StyledMenuItem\n /* @ts-expect-error inference isn't working in DS */\n tag={NavLink}\n isLink\n to={{\n pathname: `/content-manager/collection-types/${contentTypeUid}/${documentId}`,\n search: locale && `?plugins[i18n][locale]=${locale}`,\n }}\n >\n <Flex gap={2}>\n <Pencil width=\"1.6rem\" height=\"1.6rem\" />\n <Typography variant=\"omega\">\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-entry',\n defaultMessage: 'Edit entry',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EditReleaseItem\n * -----------------------------------------------------------------------------------------------*/\ninterface EditReleaseItemProps {\n releaseId: Release['id'];\n}\n\nconst EditReleaseItem = ({ releaseId }: EditReleaseItemProps) => {\n const { formatMessage } = useIntl();\n\n return (\n /* @ts-expect-error inference isn't working in DS */\n <StyledMenuItem tag={NavLink} isLink to={`/plugins/content-releases/${releaseId}`}>\n <Flex gap={2}>\n <Pencil width=\"1.6rem\" height=\"1.6rem\" />\n <Typography textColor=\"neutral800\" variant=\"omega\">\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-release',\n defaultMessage: 'Edit release',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RootProps {\n children: React.ReactNode;\n hasTriggerBorder?: boolean;\n}\n\nconst Root = ({ children }: RootProps) => {\n const { formatMessage } = useIntl();\n\n const { allowedActions } = useRBAC(PERMISSIONS);\n\n return (\n // A user can access the dropdown if they have permissions to delete a release-action OR update a release\n allowedActions.canDeleteAction || allowedActions.canUpdate ? (\n <Menu.Root>\n <StyledMoreButton variant=\"tertiary\" endIcon={null} paddingLeft=\"7px\" paddingRight=\"7px\">\n <AccessibleIcon\n label={formatMessage({\n id: 'content-releases.content-manager-edit-view.release-action-menu',\n defaultMessage: 'Release action options',\n })}\n >\n <More />\n </AccessibleIcon>\n </StyledMoreButton>\n <Menu.Content top={1} popoverPlacement=\"bottom-end\">\n {children}\n </Menu.Content>\n </Menu.Root>\n ) : null\n );\n};\n\nconst StyledMoreButton = styled(Menu.Trigger)`\n & > span {\n display: flex;\n }\n`;\n\nexport const ReleaseActionMenu = {\n Root,\n EditReleaseItem,\n DeleteReleaseActionItem,\n ReleaseActionEntryLinkItem,\n};\n"],"names":["StyledMenuItem","styled","Menu","Item","theme","$variant","colors","neutral800","DeleteReleaseActionItem","releaseId","actionId","formatMessage","useIntl","toggleNotification","useNotification","formatAPIError","useAPIErrorHandler","deleteReleaseAction","useDeleteReleaseActionMutation","allowedActions","canDeleteAction","useRBAC","PERMISSIONS","handleDeleteAction","response","params","type","message","id","defaultMessage","isFetchError","error","_jsx","onSelect","_jsxs","Flex","gap","Cross","width","height","Typography","textColor","variant","ReleaseActionEntryLinkItem","contentTypeUid","documentId","locale","userPermissions","useAuth","state","permissions","canUpdateEntryForLocale","React","useMemo","updatePermissions","find","permission","subject","action","Boolean","properties","locales","includes","canUpdate","canUpdateContentType","updateContentType","tag","NavLink","isLink","to","pathname","search","Pencil","EditReleaseItem","Root","children","StyledMoreButton","endIcon","paddingLeft","paddingRight","AccessibleIcon","label","More","Content","top","popoverPlacement","Trigger","ReleaseActionMenu"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA,MAAMA,cAAiBC,GAAAA,uBAAAA,CAAOC,iBAAKC,CAAAA,IAAI,CAAsC;;AAE7D,gBAAA,EAAE,CAAC,EAAEC,KAAK,EAAEC,QAAAA,GAAW,SAAS,EAAE,GAAKD,KAAME,CAAAA,MAAM,CAAC,CAAC,EAAED,SAAS,GAAG,CAAC,CAAC,CAAC;;;AAG1E,YAAA,EAAE,CAAC,EAAED,KAAK,EAAEC,QAAAA,GAAW,SAAS,EAAE,GAAKD,KAAME,CAAAA,MAAM,CAAC,CAAC,EAAED,SAAS,GAAG,CAAC,CAAC,CAAC;;;;aAIrE,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAME,CAAAA,MAAM,CAACC,UAAU,CAAC;;;;;AAK3C,WAAA,EAAE,CAAC,EAAEH,KAAK,EAAEC,QAAAA,GAAW,SAAS,EAAE,GAAKD,KAAME,CAAAA,MAAM,CAAC,CAAC,EAAED,SAAS,GAAG,CAAC,CAAC,CAAC;;;;AAItE,WAAA,EAAE,CAAC,EAAED,KAAK,EAAEC,QAAAA,GAAW,SAAS,EAAE,GAAKD,KAAME,CAAAA,MAAM,CAAC,CAAC,EAAED,SAAS,GAAG,CAAC,CAAC,CAAC;;;;;;;AAOjF,CAAC;AAUD,MAAMG,0BAA0B,CAAC,EAAEC,SAAS,EAAEC,QAAQ,EAAgC,GAAA;IACpF,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;IAC/B,MAAM,EAAEC,cAAc,EAAE,GAAGC,8BAAAA,EAAAA;IAC3B,MAAM,CAACC,oBAAoB,GAAGC,sCAAAA,EAAAA;AAC9B,IAAA,MAAM,EACJC,cAAgB,EAAA,EAAEC,eAAe,EAAE,EACpC,GAAGC,mBAAQC,CAAAA,qBAAAA,CAAAA;AAEZ,IAAA,MAAMC,kBAAqB,GAAA,UAAA;QACzB,MAAMC,QAAAA,GAAW,MAAMP,mBAAoB,CAAA;YACzCQ,MAAQ,EAAA;AAAEhB,gBAAAA,SAAAA;AAAWC,gBAAAA;AAAS;AAChC,SAAA,CAAA;AAEA,QAAA,IAAI,UAAUc,QAAU,EAAA;;YAEtBX,kBAAmB,CAAA;gBACjBa,IAAM,EAAA,SAAA;AACNC,gBAAAA,OAAAA,EAAShB,aAAc,CAAA;oBACrBiB,EAAI,EAAA,qFAAA;oBACJC,cAAgB,EAAA;AAClB,iBAAA;AACF,aAAA,CAAA;AAEA,YAAA;AACF;AAEA,QAAA,IAAI,WAAWL,QAAU,EAAA;YACvB,IAAIM,wBAAAA,CAAaN,QAASO,CAAAA,KAAK,CAAG,EAAA;;gBAEhClB,kBAAmB,CAAA;oBACjBa,IAAM,EAAA,QAAA;oBACNC,OAASZ,EAAAA,cAAAA,CAAeS,SAASO,KAAK;AACxC,iBAAA,CAAA;aACK,MAAA;;gBAELlB,kBAAmB,CAAA;oBACjBa,IAAM,EAAA,QAAA;AACNC,oBAAAA,OAAAA,EAAShB,aAAc,CAAA;wBAAEiB,EAAI,EAAA,oBAAA;wBAAsBC,cAAgB,EAAA;AAAoB,qBAAA;AACzF,iBAAA,CAAA;AACF;AACF;AACF,KAAA;AAEA,IAAA,IAAI,CAACT,eAAiB,EAAA;QACpB,OAAO,IAAA;AACT;AAEA,IAAA,qBACEY,cAAChC,CAAAA,cAAAA,EAAAA;QAAeK,QAAS,EAAA,QAAA;QAAS4B,QAAUV,EAAAA,kBAAAA;AAC1C,QAAA,QAAA,gBAAAW,eAACC,CAAAA,iBAAAA,EAAAA;YAAKC,GAAK,EAAA,CAAA;;8BACTJ,cAACK,CAAAA,WAAAA,EAAAA;oBAAMC,KAAM,EAAA,QAAA;oBAASC,MAAO,EAAA;;8BAC7BP,cAACQ,CAAAA,uBAAAA,EAAAA;oBAAWC,SAAU,EAAA,WAAA;oBAAYC,OAAQ,EAAA,OAAA;8BACvC/B,aAAc,CAAA;wBACbiB,EAAI,EAAA,gEAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA;;;;;AAKV,CAAA;AAWA,MAAMc,0BAAAA,GAA6B,CAAC,EAClCC,cAAc,EACdC,UAAU,EACVC,MAAM,EAC0B,GAAA;IAChC,MAAM,EAAEnC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMmC,kBAAkBC,mBAAQ,CAAA,4BAAA,EAA8B,CAACC,KAAAA,GAAUA,MAAMC,WAAW,CAAA;;IAG1F,MAAMC,uBAAAA,GAA0BC,gBAAMC,CAAAA,OAAO,CAAC,IAAA;AAC5C,QAAA,MAAMC,iBAAoBP,GAAAA,eAAAA,CAAgBQ,IAAI,CAC5C,CAACC,UAAAA,GACCA,UAAWC,CAAAA,OAAO,KAAKb,cAAAA,IACvBY,UAAWE,CAAAA,MAAM,KAAK,yCAAA,CAAA;AAG1B,QAAA,IAAI,CAACJ,iBAAmB,EAAA;YACtB,OAAO,KAAA;AACT;AAEA,QAAA,OAAOK,QAAQ,CAACb,MAAAA,IAAUQ,kBAAkBM,UAAU,EAAEC,SAASC,QAAShB,CAAAA,MAAAA,CAAAA,CAAAA;KACzE,EAAA;AAACF,QAAAA,cAAAA;AAAgBE,QAAAA,MAAAA;AAAQC,QAAAA;AAAgB,KAAA,CAAA;IAE5C,MAAM,EACJ5B,gBAAgB,EAAE4C,SAAAA,EAAWC,oBAAoB,EAAE,EACpD,GAAG3C,mBAAQ,CAAA;QACV4C,iBAAmB,EAAA;AACjB,YAAA;gBACEP,MAAQ,EAAA,yCAAA;gBACRD,OAASb,EAAAA;AACX;AACD;AACH,KAAA,CAAA;IAEA,IAAI,CAACoB,oBAAwB,IAAA,CAACb,uBAAyB,EAAA;QACrD,OAAO,IAAA;AACT;AAEA,IAAA,qBACEnB,cAAChC,CAAAA,cAAAA,EAAAA;AACC,6DACAkE,GAAKC,EAAAA,sBAAAA;QACLC,MAAM,EAAA,IAAA;QACNC,EAAI,EAAA;AACFC,YAAAA,QAAAA,EAAU,CAAC,kCAAkC,EAAE1B,eAAe,CAAC,EAAEC,WAAW,CAAC;AAC7E0B,YAAAA,MAAAA,EAAQzB,MAAU,IAAA,CAAC,uBAAuB,EAAEA,OAAO;AACrD,SAAA;AAEA,QAAA,QAAA,gBAAAZ,eAACC,CAAAA,iBAAAA,EAAAA;YAAKC,GAAK,EAAA,CAAA;;8BACTJ,cAACwC,CAAAA,YAAAA,EAAAA;oBAAOlC,KAAM,EAAA,QAAA;oBAASC,MAAO,EAAA;;8BAC9BP,cAACQ,CAAAA,uBAAAA,EAAAA;oBAAWE,OAAQ,EAAA,OAAA;8BACjB/B,aAAc,CAAA;wBACbiB,EAAI,EAAA,uDAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA;;;;;AAKV,CAAA;AASA,MAAM4C,eAAkB,GAAA,CAAC,EAAEhE,SAAS,EAAwB,GAAA;IAC1D,MAAM,EAAEE,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAE1B,0EAEEoB,cAAChC,CAAAA,cAAAA,EAAAA;QAAekE,GAAKC,EAAAA,sBAAAA;QAASC,MAAM,EAAA,IAAA;AAACC,QAAAA,EAAAA,EAAI,CAAC,0BAA0B,EAAE5D,SAAAA,CAAU,CAAC;AAC/E,QAAA,QAAA,gBAAAyB,eAACC,CAAAA,iBAAAA,EAAAA;YAAKC,GAAK,EAAA,CAAA;;8BACTJ,cAACwC,CAAAA,YAAAA,EAAAA;oBAAOlC,KAAM,EAAA,QAAA;oBAASC,MAAO,EAAA;;8BAC9BP,cAACQ,CAAAA,uBAAAA,EAAAA;oBAAWC,SAAU,EAAA,YAAA;oBAAaC,OAAQ,EAAA,OAAA;8BACxC/B,aAAc,CAAA;wBACbiB,EAAI,EAAA,yDAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA;;;;;AAKV,CAAA;AAWA,MAAM6C,IAAO,GAAA,CAAC,EAAEC,QAAQ,EAAa,GAAA;IACnC,MAAM,EAAEhE,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,MAAM,EAAEO,cAAc,EAAE,GAAGE,mBAAQC,CAAAA,qBAAAA,CAAAA;AAEnC,IAAA;AAEEH,IAAAA,cAAAA,CAAeC,eAAe,IAAID,cAAAA,CAAe4C,SAAS,iBACxD7B,eAAA,CAAChC,kBAAKwE,IAAI,EAAA;;0BACR1C,cAAC4C,CAAAA,gBAAAA,EAAAA;gBAAiBlC,OAAQ,EAAA,UAAA;gBAAWmC,OAAS,EAAA,IAAA;gBAAMC,WAAY,EAAA,KAAA;gBAAMC,YAAa,EAAA,KAAA;AACjF,gBAAA,QAAA,gBAAA/C,cAACgD,CAAAA,2BAAAA,EAAAA;AACCC,oBAAAA,KAAAA,EAAOtE,aAAc,CAAA;wBACnBiB,EAAI,EAAA,gEAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA,CAAA;AAEA,oBAAA,QAAA,gBAAAG,cAACkD,CAAAA,UAAAA,EAAAA,EAAAA;;;AAGL,0BAAAlD,cAAA,CAAC9B,kBAAKiF,OAAO,EAAA;gBAACC,GAAK,EAAA,CAAA;gBAAGC,gBAAiB,EAAA,YAAA;AACpCV,gBAAAA,QAAAA,EAAAA;;;AAGH,KAAA,CAAA,GAAA,IAAA;AAER,CAAA;AAEA,MAAMC,gBAAmB3E,GAAAA,uBAAAA,CAAOC,iBAAKoF,CAAAA,OAAO,CAAC;;;;AAI7C,CAAC;MAEYC,iBAAoB,GAAA;AAC/Bb,IAAAA,IAAAA;AACAD,IAAAA,eAAAA;AACAjE,IAAAA,uBAAAA;AACAmC,IAAAA;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"ReleaseActionMenu.js","sources":["../../../admin/src/components/ReleaseActionMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useAPIErrorHandler,\n useNotification,\n useAuth,\n useRBAC,\n isFetchError,\n} from '@strapi/admin/strapi-admin';\nimport { Menu, AccessibleIcon } from '@strapi/design-system';\nimport { Cross, More, Pencil } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { DeleteReleaseAction, ReleaseAction } from '../../../shared/contracts/release-actions';\nimport { Release } from '../../../shared/contracts/releases';\nimport { PERMISSIONS } from '../constants';\nimport { useDeleteReleaseActionMutation } from '../services/release';\n\n// TODO: has to be fixed in the DS - https://github.com/strapi/design-system/issues/1934\nconst StyledMenuLink = styled(Menu.Item)`\n span,\n &:hover span {\n color: ${({ theme }) => theme.colors['neutral800']};\n }\n\n svg path,\n &:hover svg path {\n fill: ${({ theme }) => theme.colors['neutral500']};\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteReleaseActionItemProps\n * -----------------------------------------------------------------------------------------------*/\ninterface DeleteReleaseActionItemProps {\n releaseId: DeleteReleaseAction.Request['params']['releaseId'];\n actionId: DeleteReleaseAction.Request['params']['actionId'];\n}\n\nconst DeleteReleaseActionItem = ({ releaseId, actionId }: DeleteReleaseActionItemProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const [deleteReleaseAction] = useDeleteReleaseActionMutation();\n const {\n allowedActions: { canDeleteAction },\n } = useRBAC(PERMISSIONS);\n\n const handleDeleteAction = async () => {\n const response = await deleteReleaseAction({\n params: { releaseId, actionId },\n });\n\n if ('data' in response) {\n // Handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release.notification.success',\n defaultMessage: 'Entry removed from release',\n }),\n });\n\n return;\n }\n\n if ('error' in response) {\n if (isFetchError(response.error)) {\n // Handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Handle generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (!canDeleteAction) {\n return null;\n }\n\n return (\n <Menu.Item variant=\"danger\" startIcon={<Cross />} onSelect={handleDeleteAction}>\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release',\n defaultMessage: 'Remove from release',\n })}\n </Menu.Item>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseActionEntryLinkItem\n * -----------------------------------------------------------------------------------------------*/\ninterface ReleaseActionEntryLinkItemProps {\n contentTypeUid: ReleaseAction['contentType'];\n documentId: ReleaseAction['entry']['documentId'];\n locale: ReleaseAction['locale'];\n}\n\nconst ReleaseActionEntryLinkItem = ({\n contentTypeUid,\n documentId,\n locale,\n}: ReleaseActionEntryLinkItemProps) => {\n const { formatMessage } = useIntl();\n const userPermissions = useAuth('ReleaseActionEntryLinkItem', (state) => state.permissions);\n\n // Confirm user has permissions to access the entry for the given locale\n const canUpdateEntryForLocale = React.useMemo(() => {\n const updatePermissions = userPermissions.find(\n (permission) =>\n permission.subject === contentTypeUid &&\n permission.action === 'plugin::content-manager.explorer.update'\n );\n\n if (!updatePermissions) {\n return false;\n }\n\n return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));\n }, [contentTypeUid, locale, userPermissions]);\n\n const {\n allowedActions: { canUpdate: canUpdateContentType },\n } = useRBAC({\n updateContentType: [\n {\n action: 'plugin::content-manager.explorer.update',\n subject: contentTypeUid,\n },\n ],\n });\n\n if (!canUpdateContentType || !canUpdateEntryForLocale) {\n return null;\n }\n\n return (\n <StyledMenuLink\n /* @ts-expect-error inference isn't working in DS */\n tag={NavLink}\n isLink\n to={{\n pathname: `/content-manager/collection-types/${contentTypeUid}/${documentId}`,\n search: locale && `?plugins[i18n][locale]=${locale}`,\n }}\n startIcon={<Pencil />}\n >\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-entry',\n defaultMessage: 'Edit entry',\n })}\n </StyledMenuLink>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EditReleaseItem\n * -----------------------------------------------------------------------------------------------*/\ninterface EditReleaseItemProps {\n releaseId: Release['id'];\n}\n\nconst EditReleaseItem = ({ releaseId }: EditReleaseItemProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <StyledMenuLink\n /* @ts-expect-error inference isn't working in DS */\n tag={NavLink}\n isLink\n to={`/plugins/content-releases/${releaseId}`}\n startIcon={<Pencil />}\n >\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-release',\n defaultMessage: 'Edit release',\n })}\n </StyledMenuLink>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RootProps {\n children: React.ReactNode;\n hasTriggerBorder?: boolean;\n}\n\nconst Root = ({ children }: RootProps) => {\n const { formatMessage } = useIntl();\n\n const { allowedActions } = useRBAC(PERMISSIONS);\n\n return (\n // A user can access the dropdown if they have permissions to delete a release-action OR update a release\n allowedActions.canDeleteAction || allowedActions.canUpdate ? (\n <Menu.Root>\n <StyledMoreButton variant=\"tertiary\" endIcon={null} paddingLeft=\"7px\" paddingRight=\"7px\">\n <AccessibleIcon\n label={formatMessage({\n id: 'content-releases.content-manager-edit-view.release-action-menu',\n defaultMessage: 'Release action options',\n })}\n >\n <More />\n </AccessibleIcon>\n </StyledMoreButton>\n <Menu.Content top={1} popoverPlacement=\"bottom-end\">\n {children}\n </Menu.Content>\n </Menu.Root>\n ) : null\n );\n};\n\nconst StyledMoreButton = styled(Menu.Trigger)`\n & > span {\n display: flex;\n }\n`;\n\nexport const ReleaseActionMenu = {\n Root,\n EditReleaseItem,\n DeleteReleaseActionItem,\n ReleaseActionEntryLinkItem,\n};\n"],"names":["StyledMenuLink","styled","Menu","Item","theme","colors","DeleteReleaseActionItem","releaseId","actionId","formatMessage","useIntl","toggleNotification","useNotification","formatAPIError","useAPIErrorHandler","deleteReleaseAction","useDeleteReleaseActionMutation","allowedActions","canDeleteAction","useRBAC","PERMISSIONS","handleDeleteAction","response","params","type","message","id","defaultMessage","isFetchError","error","_jsx","variant","startIcon","Cross","onSelect","ReleaseActionEntryLinkItem","contentTypeUid","documentId","locale","userPermissions","useAuth","state","permissions","canUpdateEntryForLocale","React","useMemo","updatePermissions","find","permission","subject","action","Boolean","properties","locales","includes","canUpdate","canUpdateContentType","updateContentType","tag","NavLink","isLink","to","pathname","search","Pencil","EditReleaseItem","Root","children","_jsxs","StyledMoreButton","endIcon","paddingLeft","paddingRight","AccessibleIcon","label","More","Content","top","popoverPlacement","Trigger","ReleaseActionMenu"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { useNotification, useAPIErrorHandler, useRBAC, useAuth, isFetchError } from '@strapi/admin/strapi-admin';
|
|
4
|
-
import { Menu,
|
|
4
|
+
import { Menu, AccessibleIcon } from '@strapi/design-system';
|
|
5
5
|
import { Cross, Pencil, More } from '@strapi/icons';
|
|
6
6
|
import { useIntl } from 'react-intl';
|
|
7
7
|
import { NavLink } from 'react-router-dom';
|
|
@@ -9,30 +9,16 @@ import { styled } from 'styled-components';
|
|
|
9
9
|
import { PERMISSIONS } from '../constants.mjs';
|
|
10
10
|
import { useDeleteReleaseActionMutation } from '../services/release.mjs';
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
fill: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}600`]};
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
a {
|
|
21
|
-
color: ${({ theme })=>theme.colors.neutral800};
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
svg {
|
|
26
|
-
color: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}500`]};
|
|
12
|
+
// TODO: has to be fixed in the DS - https://github.com/strapi/design-system/issues/1934
|
|
13
|
+
const StyledMenuLink = styled(Menu.Item)`
|
|
14
|
+
span,
|
|
15
|
+
&:hover span {
|
|
16
|
+
color: ${({ theme })=>theme.colors['neutral800']};
|
|
27
17
|
}
|
|
28
18
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
span,
|
|
34
|
-
a {
|
|
35
|
-
width: 100%;
|
|
19
|
+
svg path,
|
|
20
|
+
&:hover svg path {
|
|
21
|
+
fill: ${({ theme })=>theme.colors['neutral500']};
|
|
36
22
|
}
|
|
37
23
|
`;
|
|
38
24
|
const DeleteReleaseActionItem = ({ releaseId, actionId })=>{
|
|
@@ -81,25 +67,13 @@ const DeleteReleaseActionItem = ({ releaseId, actionId })=>{
|
|
|
81
67
|
if (!canDeleteAction) {
|
|
82
68
|
return null;
|
|
83
69
|
}
|
|
84
|
-
return /*#__PURE__*/ jsx(
|
|
85
|
-
|
|
70
|
+
return /*#__PURE__*/ jsx(Menu.Item, {
|
|
71
|
+
variant: "danger",
|
|
72
|
+
startIcon: /*#__PURE__*/ jsx(Cross, {}),
|
|
86
73
|
onSelect: handleDeleteAction,
|
|
87
|
-
children:
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
/*#__PURE__*/ jsx(Cross, {
|
|
91
|
-
width: "1.6rem",
|
|
92
|
-
height: "1.6rem"
|
|
93
|
-
}),
|
|
94
|
-
/*#__PURE__*/ jsx(Typography, {
|
|
95
|
-
textColor: "danger600",
|
|
96
|
-
variant: "omega",
|
|
97
|
-
children: formatMessage({
|
|
98
|
-
id: 'content-releases.content-manager-edit-view.remove-from-release',
|
|
99
|
-
defaultMessage: 'Remove from release'
|
|
100
|
-
})
|
|
101
|
-
})
|
|
102
|
-
]
|
|
74
|
+
children: formatMessage({
|
|
75
|
+
id: 'content-releases.content-manager-edit-view.remove-from-release',
|
|
76
|
+
defaultMessage: 'Remove from release'
|
|
103
77
|
})
|
|
104
78
|
});
|
|
105
79
|
};
|
|
@@ -129,53 +103,30 @@ const ReleaseActionEntryLinkItem = ({ contentTypeUid, documentId, locale })=>{
|
|
|
129
103
|
if (!canUpdateContentType || !canUpdateEntryForLocale) {
|
|
130
104
|
return null;
|
|
131
105
|
}
|
|
132
|
-
return /*#__PURE__*/ jsx(
|
|
106
|
+
return /*#__PURE__*/ jsx(StyledMenuLink, {
|
|
133
107
|
/* @ts-expect-error inference isn't working in DS */ tag: NavLink,
|
|
134
108
|
isLink: true,
|
|
135
109
|
to: {
|
|
136
110
|
pathname: `/content-manager/collection-types/${contentTypeUid}/${documentId}`,
|
|
137
111
|
search: locale && `?plugins[i18n][locale]=${locale}`
|
|
138
112
|
},
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
width: "1.6rem",
|
|
144
|
-
height: "1.6rem"
|
|
145
|
-
}),
|
|
146
|
-
/*#__PURE__*/ jsx(Typography, {
|
|
147
|
-
variant: "omega",
|
|
148
|
-
children: formatMessage({
|
|
149
|
-
id: 'content-releases.content-manager-edit-view.edit-entry',
|
|
150
|
-
defaultMessage: 'Edit entry'
|
|
151
|
-
})
|
|
152
|
-
})
|
|
153
|
-
]
|
|
113
|
+
startIcon: /*#__PURE__*/ jsx(Pencil, {}),
|
|
114
|
+
children: formatMessage({
|
|
115
|
+
id: 'content-releases.content-manager-edit-view.edit-entry',
|
|
116
|
+
defaultMessage: 'Edit entry'
|
|
154
117
|
})
|
|
155
118
|
});
|
|
156
119
|
};
|
|
157
120
|
const EditReleaseItem = ({ releaseId })=>{
|
|
158
121
|
const { formatMessage } = useIntl();
|
|
159
|
-
return
|
|
160
|
-
tag: NavLink,
|
|
122
|
+
return /*#__PURE__*/ jsx(StyledMenuLink, {
|
|
123
|
+
/* @ts-expect-error inference isn't working in DS */ tag: NavLink,
|
|
161
124
|
isLink: true,
|
|
162
125
|
to: `/plugins/content-releases/${releaseId}`,
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
width: "1.6rem",
|
|
168
|
-
height: "1.6rem"
|
|
169
|
-
}),
|
|
170
|
-
/*#__PURE__*/ jsx(Typography, {
|
|
171
|
-
textColor: "neutral800",
|
|
172
|
-
variant: "omega",
|
|
173
|
-
children: formatMessage({
|
|
174
|
-
id: 'content-releases.content-manager-edit-view.edit-release',
|
|
175
|
-
defaultMessage: 'Edit release'
|
|
176
|
-
})
|
|
177
|
-
})
|
|
178
|
-
]
|
|
126
|
+
startIcon: /*#__PURE__*/ jsx(Pencil, {}),
|
|
127
|
+
children: formatMessage({
|
|
128
|
+
id: 'content-releases.content-manager-edit-view.edit-release',
|
|
129
|
+
defaultMessage: 'Edit release'
|
|
179
130
|
})
|
|
180
131
|
});
|
|
181
132
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReleaseActionMenu.mjs","sources":["../../../admin/src/components/ReleaseActionMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useAPIErrorHandler,\n useNotification,\n useAuth,\n useRBAC,\n isFetchError,\n} from '@strapi/admin/strapi-admin';\nimport { Flex, Typography, Menu, AccessibleIcon } from '@strapi/design-system';\nimport { Cross, More, Pencil } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { DeleteReleaseAction, ReleaseAction } from '../../../shared/contracts/release-actions';\nimport { Release } from '../../../shared/contracts/releases';\nimport { PERMISSIONS } from '../constants';\nimport { useDeleteReleaseActionMutation } from '../services/release';\n\nconst StyledMenuItem = styled(Menu.Item)<{ $variant?: 'neutral' | 'danger' }>`\n &:hover {\n background: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}100`]};\n\n svg {\n fill: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}600`]};\n }\n\n a {\n color: ${({ theme }) => theme.colors.neutral800};\n }\n }\n\n svg {\n color: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}500`]};\n }\n\n span {\n color: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}800`]};\n }\n\n span,\n a {\n width: 100%;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteReleaseActionItemProps\n * -----------------------------------------------------------------------------------------------*/\ninterface DeleteReleaseActionItemProps {\n releaseId: DeleteReleaseAction.Request['params']['releaseId'];\n actionId: DeleteReleaseAction.Request['params']['actionId'];\n}\n\nconst DeleteReleaseActionItem = ({ releaseId, actionId }: DeleteReleaseActionItemProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const [deleteReleaseAction] = useDeleteReleaseActionMutation();\n const {\n allowedActions: { canDeleteAction },\n } = useRBAC(PERMISSIONS);\n\n const handleDeleteAction = async () => {\n const response = await deleteReleaseAction({\n params: { releaseId, actionId },\n });\n\n if ('data' in response) {\n // Handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release.notification.success',\n defaultMessage: 'Entry removed from release',\n }),\n });\n\n return;\n }\n\n if ('error' in response) {\n if (isFetchError(response.error)) {\n // Handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Handle generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (!canDeleteAction) {\n return null;\n }\n\n return (\n <StyledMenuItem $variant=\"danger\" onSelect={handleDeleteAction}>\n <Flex gap={2}>\n <Cross width=\"1.6rem\" height=\"1.6rem\" />\n <Typography textColor=\"danger600\" variant=\"omega\">\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release',\n defaultMessage: 'Remove from release',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseActionEntryLinkItem\n * -----------------------------------------------------------------------------------------------*/\ninterface ReleaseActionEntryLinkItemProps {\n contentTypeUid: ReleaseAction['contentType'];\n documentId: ReleaseAction['entry']['documentId'];\n locale: ReleaseAction['locale'];\n}\n\nconst ReleaseActionEntryLinkItem = ({\n contentTypeUid,\n documentId,\n locale,\n}: ReleaseActionEntryLinkItemProps) => {\n const { formatMessage } = useIntl();\n const userPermissions = useAuth('ReleaseActionEntryLinkItem', (state) => state.permissions);\n\n // Confirm user has permissions to access the entry for the given locale\n const canUpdateEntryForLocale = React.useMemo(() => {\n const updatePermissions = userPermissions.find(\n (permission) =>\n permission.subject === contentTypeUid &&\n permission.action === 'plugin::content-manager.explorer.update'\n );\n\n if (!updatePermissions) {\n return false;\n }\n\n return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));\n }, [contentTypeUid, locale, userPermissions]);\n\n const {\n allowedActions: { canUpdate: canUpdateContentType },\n } = useRBAC({\n updateContentType: [\n {\n action: 'plugin::content-manager.explorer.update',\n subject: contentTypeUid,\n },\n ],\n });\n\n if (!canUpdateContentType || !canUpdateEntryForLocale) {\n return null;\n }\n\n return (\n <StyledMenuItem\n /* @ts-expect-error inference isn't working in DS */\n tag={NavLink}\n isLink\n to={{\n pathname: `/content-manager/collection-types/${contentTypeUid}/${documentId}`,\n search: locale && `?plugins[i18n][locale]=${locale}`,\n }}\n >\n <Flex gap={2}>\n <Pencil width=\"1.6rem\" height=\"1.6rem\" />\n <Typography variant=\"omega\">\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-entry',\n defaultMessage: 'Edit entry',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EditReleaseItem\n * -----------------------------------------------------------------------------------------------*/\ninterface EditReleaseItemProps {\n releaseId: Release['id'];\n}\n\nconst EditReleaseItem = ({ releaseId }: EditReleaseItemProps) => {\n const { formatMessage } = useIntl();\n\n return (\n /* @ts-expect-error inference isn't working in DS */\n <StyledMenuItem tag={NavLink} isLink to={`/plugins/content-releases/${releaseId}`}>\n <Flex gap={2}>\n <Pencil width=\"1.6rem\" height=\"1.6rem\" />\n <Typography textColor=\"neutral800\" variant=\"omega\">\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-release',\n defaultMessage: 'Edit release',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RootProps {\n children: React.ReactNode;\n hasTriggerBorder?: boolean;\n}\n\nconst Root = ({ children }: RootProps) => {\n const { formatMessage } = useIntl();\n\n const { allowedActions } = useRBAC(PERMISSIONS);\n\n return (\n // A user can access the dropdown if they have permissions to delete a release-action OR update a release\n allowedActions.canDeleteAction || allowedActions.canUpdate ? (\n <Menu.Root>\n <StyledMoreButton variant=\"tertiary\" endIcon={null} paddingLeft=\"7px\" paddingRight=\"7px\">\n <AccessibleIcon\n label={formatMessage({\n id: 'content-releases.content-manager-edit-view.release-action-menu',\n defaultMessage: 'Release action options',\n })}\n >\n <More />\n </AccessibleIcon>\n </StyledMoreButton>\n <Menu.Content top={1} popoverPlacement=\"bottom-end\">\n {children}\n </Menu.Content>\n </Menu.Root>\n ) : null\n );\n};\n\nconst StyledMoreButton = styled(Menu.Trigger)`\n & > span {\n display: flex;\n }\n`;\n\nexport const ReleaseActionMenu = {\n Root,\n EditReleaseItem,\n DeleteReleaseActionItem,\n ReleaseActionEntryLinkItem,\n};\n"],"names":["StyledMenuItem","styled","Menu","Item","theme","$variant","colors","neutral800","DeleteReleaseActionItem","releaseId","actionId","formatMessage","useIntl","toggleNotification","useNotification","formatAPIError","useAPIErrorHandler","deleteReleaseAction","useDeleteReleaseActionMutation","allowedActions","canDeleteAction","useRBAC","PERMISSIONS","handleDeleteAction","response","params","type","message","id","defaultMessage","isFetchError","error","_jsx","onSelect","_jsxs","Flex","gap","Cross","width","height","Typography","textColor","variant","ReleaseActionEntryLinkItem","contentTypeUid","documentId","locale","userPermissions","useAuth","state","permissions","canUpdateEntryForLocale","React","useMemo","updatePermissions","find","permission","subject","action","Boolean","properties","locales","includes","canUpdate","canUpdateContentType","updateContentType","tag","NavLink","isLink","to","pathname","search","Pencil","EditReleaseItem","Root","children","StyledMoreButton","endIcon","paddingLeft","paddingRight","AccessibleIcon","label","More","Content","top","popoverPlacement","Trigger","ReleaseActionMenu"],"mappings":";;;;;;;;;;;AAoBA,MAAMA,cAAiBC,GAAAA,MAAAA,CAAOC,IAAKC,CAAAA,IAAI,CAAsC;;AAE7D,gBAAA,EAAE,CAAC,EAAEC,KAAK,EAAEC,QAAAA,GAAW,SAAS,EAAE,GAAKD,KAAME,CAAAA,MAAM,CAAC,CAAC,EAAED,SAAS,GAAG,CAAC,CAAC,CAAC;;;AAG1E,YAAA,EAAE,CAAC,EAAED,KAAK,EAAEC,QAAAA,GAAW,SAAS,EAAE,GAAKD,KAAME,CAAAA,MAAM,CAAC,CAAC,EAAED,SAAS,GAAG,CAAC,CAAC,CAAC;;;;aAIrE,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAME,CAAAA,MAAM,CAACC,UAAU,CAAC;;;;;AAK3C,WAAA,EAAE,CAAC,EAAEH,KAAK,EAAEC,QAAAA,GAAW,SAAS,EAAE,GAAKD,KAAME,CAAAA,MAAM,CAAC,CAAC,EAAED,SAAS,GAAG,CAAC,CAAC,CAAC;;;;AAItE,WAAA,EAAE,CAAC,EAAED,KAAK,EAAEC,QAAAA,GAAW,SAAS,EAAE,GAAKD,KAAME,CAAAA,MAAM,CAAC,CAAC,EAAED,SAAS,GAAG,CAAC,CAAC,CAAC;;;;;;;AAOjF,CAAC;AAUD,MAAMG,0BAA0B,CAAC,EAAEC,SAAS,EAAEC,QAAQ,EAAgC,GAAA;IACpF,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAC/B,MAAM,EAAEC,cAAc,EAAE,GAAGC,kBAAAA,EAAAA;IAC3B,MAAM,CAACC,oBAAoB,GAAGC,8BAAAA,EAAAA;AAC9B,IAAA,MAAM,EACJC,cAAgB,EAAA,EAAEC,eAAe,EAAE,EACpC,GAAGC,OAAQC,CAAAA,WAAAA,CAAAA;AAEZ,IAAA,MAAMC,kBAAqB,GAAA,UAAA;QACzB,MAAMC,QAAAA,GAAW,MAAMP,mBAAoB,CAAA;YACzCQ,MAAQ,EAAA;AAAEhB,gBAAAA,SAAAA;AAAWC,gBAAAA;AAAS;AAChC,SAAA,CAAA;AAEA,QAAA,IAAI,UAAUc,QAAU,EAAA;;YAEtBX,kBAAmB,CAAA;gBACjBa,IAAM,EAAA,SAAA;AACNC,gBAAAA,OAAAA,EAAShB,aAAc,CAAA;oBACrBiB,EAAI,EAAA,qFAAA;oBACJC,cAAgB,EAAA;AAClB,iBAAA;AACF,aAAA,CAAA;AAEA,YAAA;AACF;AAEA,QAAA,IAAI,WAAWL,QAAU,EAAA;YACvB,IAAIM,YAAAA,CAAaN,QAASO,CAAAA,KAAK,CAAG,EAAA;;gBAEhClB,kBAAmB,CAAA;oBACjBa,IAAM,EAAA,QAAA;oBACNC,OAASZ,EAAAA,cAAAA,CAAeS,SAASO,KAAK;AACxC,iBAAA,CAAA;aACK,MAAA;;gBAELlB,kBAAmB,CAAA;oBACjBa,IAAM,EAAA,QAAA;AACNC,oBAAAA,OAAAA,EAAShB,aAAc,CAAA;wBAAEiB,EAAI,EAAA,oBAAA;wBAAsBC,cAAgB,EAAA;AAAoB,qBAAA;AACzF,iBAAA,CAAA;AACF;AACF;AACF,KAAA;AAEA,IAAA,IAAI,CAACT,eAAiB,EAAA;QACpB,OAAO,IAAA;AACT;AAEA,IAAA,qBACEY,GAAChC,CAAAA,cAAAA,EAAAA;QAAeK,QAAS,EAAA,QAAA;QAAS4B,QAAUV,EAAAA,kBAAAA;AAC1C,QAAA,QAAA,gBAAAW,IAACC,CAAAA,IAAAA,EAAAA;YAAKC,GAAK,EAAA,CAAA;;8BACTJ,GAACK,CAAAA,KAAAA,EAAAA;oBAAMC,KAAM,EAAA,QAAA;oBAASC,MAAO,EAAA;;8BAC7BP,GAACQ,CAAAA,UAAAA,EAAAA;oBAAWC,SAAU,EAAA,WAAA;oBAAYC,OAAQ,EAAA,OAAA;8BACvC/B,aAAc,CAAA;wBACbiB,EAAI,EAAA,gEAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA;;;;;AAKV,CAAA;AAWA,MAAMc,0BAAAA,GAA6B,CAAC,EAClCC,cAAc,EACdC,UAAU,EACVC,MAAM,EAC0B,GAAA;IAChC,MAAM,EAAEnC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMmC,kBAAkBC,OAAQ,CAAA,4BAAA,EAA8B,CAACC,KAAAA,GAAUA,MAAMC,WAAW,CAAA;;IAG1F,MAAMC,uBAAAA,GAA0BC,KAAMC,CAAAA,OAAO,CAAC,IAAA;AAC5C,QAAA,MAAMC,iBAAoBP,GAAAA,eAAAA,CAAgBQ,IAAI,CAC5C,CAACC,UAAAA,GACCA,UAAWC,CAAAA,OAAO,KAAKb,cAAAA,IACvBY,UAAWE,CAAAA,MAAM,KAAK,yCAAA,CAAA;AAG1B,QAAA,IAAI,CAACJ,iBAAmB,EAAA;YACtB,OAAO,KAAA;AACT;AAEA,QAAA,OAAOK,QAAQ,CAACb,MAAAA,IAAUQ,kBAAkBM,UAAU,EAAEC,SAASC,QAAShB,CAAAA,MAAAA,CAAAA,CAAAA;KACzE,EAAA;AAACF,QAAAA,cAAAA;AAAgBE,QAAAA,MAAAA;AAAQC,QAAAA;AAAgB,KAAA,CAAA;IAE5C,MAAM,EACJ5B,gBAAgB,EAAE4C,SAAAA,EAAWC,oBAAoB,EAAE,EACpD,GAAG3C,OAAQ,CAAA;QACV4C,iBAAmB,EAAA;AACjB,YAAA;gBACEP,MAAQ,EAAA,yCAAA;gBACRD,OAASb,EAAAA;AACX;AACD;AACH,KAAA,CAAA;IAEA,IAAI,CAACoB,oBAAwB,IAAA,CAACb,uBAAyB,EAAA;QACrD,OAAO,IAAA;AACT;AAEA,IAAA,qBACEnB,GAAChC,CAAAA,cAAAA,EAAAA;AACC,6DACAkE,GAAKC,EAAAA,OAAAA;QACLC,MAAM,EAAA,IAAA;QACNC,EAAI,EAAA;AACFC,YAAAA,QAAAA,EAAU,CAAC,kCAAkC,EAAE1B,eAAe,CAAC,EAAEC,WAAW,CAAC;AAC7E0B,YAAAA,MAAAA,EAAQzB,MAAU,IAAA,CAAC,uBAAuB,EAAEA,OAAO;AACrD,SAAA;AAEA,QAAA,QAAA,gBAAAZ,IAACC,CAAAA,IAAAA,EAAAA;YAAKC,GAAK,EAAA,CAAA;;8BACTJ,GAACwC,CAAAA,MAAAA,EAAAA;oBAAOlC,KAAM,EAAA,QAAA;oBAASC,MAAO,EAAA;;8BAC9BP,GAACQ,CAAAA,UAAAA,EAAAA;oBAAWE,OAAQ,EAAA,OAAA;8BACjB/B,aAAc,CAAA;wBACbiB,EAAI,EAAA,uDAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA;;;;;AAKV,CAAA;AASA,MAAM4C,eAAkB,GAAA,CAAC,EAAEhE,SAAS,EAAwB,GAAA;IAC1D,MAAM,EAAEE,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAE1B,0EAEEoB,GAAChC,CAAAA,cAAAA,EAAAA;QAAekE,GAAKC,EAAAA,OAAAA;QAASC,MAAM,EAAA,IAAA;AAACC,QAAAA,EAAAA,EAAI,CAAC,0BAA0B,EAAE5D,SAAAA,CAAU,CAAC;AAC/E,QAAA,QAAA,gBAAAyB,IAACC,CAAAA,IAAAA,EAAAA;YAAKC,GAAK,EAAA,CAAA;;8BACTJ,GAACwC,CAAAA,MAAAA,EAAAA;oBAAOlC,KAAM,EAAA,QAAA;oBAASC,MAAO,EAAA;;8BAC9BP,GAACQ,CAAAA,UAAAA,EAAAA;oBAAWC,SAAU,EAAA,YAAA;oBAAaC,OAAQ,EAAA,OAAA;8BACxC/B,aAAc,CAAA;wBACbiB,EAAI,EAAA,yDAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA;;;;;AAKV,CAAA;AAWA,MAAM6C,IAAO,GAAA,CAAC,EAAEC,QAAQ,EAAa,GAAA;IACnC,MAAM,EAAEhE,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAE1B,IAAA,MAAM,EAAEO,cAAc,EAAE,GAAGE,OAAQC,CAAAA,WAAAA,CAAAA;AAEnC,IAAA;AAEEH,IAAAA,cAAAA,CAAeC,eAAe,IAAID,cAAAA,CAAe4C,SAAS,iBACxD7B,IAAA,CAAChC,KAAKwE,IAAI,EAAA;;0BACR1C,GAAC4C,CAAAA,gBAAAA,EAAAA;gBAAiBlC,OAAQ,EAAA,UAAA;gBAAWmC,OAAS,EAAA,IAAA;gBAAMC,WAAY,EAAA,KAAA;gBAAMC,YAAa,EAAA,KAAA;AACjF,gBAAA,QAAA,gBAAA/C,GAACgD,CAAAA,cAAAA,EAAAA;AACCC,oBAAAA,KAAAA,EAAOtE,aAAc,CAAA;wBACnBiB,EAAI,EAAA,gEAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA,CAAA;AAEA,oBAAA,QAAA,gBAAAG,GAACkD,CAAAA,IAAAA,EAAAA,EAAAA;;;AAGL,0BAAAlD,GAAA,CAAC9B,KAAKiF,OAAO,EAAA;gBAACC,GAAK,EAAA,CAAA;gBAAGC,gBAAiB,EAAA,YAAA;AACpCV,gBAAAA,QAAAA,EAAAA;;;AAGH,KAAA,CAAA,GAAA,IAAA;AAER,CAAA;AAEA,MAAMC,gBAAmB3E,GAAAA,MAAAA,CAAOC,IAAKoF,CAAAA,OAAO,CAAC;;;;AAI7C,CAAC;MAEYC,iBAAoB,GAAA;AAC/Bb,IAAAA,IAAAA;AACAD,IAAAA,eAAAA;AACAjE,IAAAA,uBAAAA;AACAmC,IAAAA;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"ReleaseActionMenu.mjs","sources":["../../../admin/src/components/ReleaseActionMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useAPIErrorHandler,\n useNotification,\n useAuth,\n useRBAC,\n isFetchError,\n} from '@strapi/admin/strapi-admin';\nimport { Menu, AccessibleIcon } from '@strapi/design-system';\nimport { Cross, More, Pencil } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { DeleteReleaseAction, ReleaseAction } from '../../../shared/contracts/release-actions';\nimport { Release } from '../../../shared/contracts/releases';\nimport { PERMISSIONS } from '../constants';\nimport { useDeleteReleaseActionMutation } from '../services/release';\n\n// TODO: has to be fixed in the DS - https://github.com/strapi/design-system/issues/1934\nconst StyledMenuLink = styled(Menu.Item)`\n span,\n &:hover span {\n color: ${({ theme }) => theme.colors['neutral800']};\n }\n\n svg path,\n &:hover svg path {\n fill: ${({ theme }) => theme.colors['neutral500']};\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteReleaseActionItemProps\n * -----------------------------------------------------------------------------------------------*/\ninterface DeleteReleaseActionItemProps {\n releaseId: DeleteReleaseAction.Request['params']['releaseId'];\n actionId: DeleteReleaseAction.Request['params']['actionId'];\n}\n\nconst DeleteReleaseActionItem = ({ releaseId, actionId }: DeleteReleaseActionItemProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const [deleteReleaseAction] = useDeleteReleaseActionMutation();\n const {\n allowedActions: { canDeleteAction },\n } = useRBAC(PERMISSIONS);\n\n const handleDeleteAction = async () => {\n const response = await deleteReleaseAction({\n params: { releaseId, actionId },\n });\n\n if ('data' in response) {\n // Handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release.notification.success',\n defaultMessage: 'Entry removed from release',\n }),\n });\n\n return;\n }\n\n if ('error' in response) {\n if (isFetchError(response.error)) {\n // Handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Handle generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (!canDeleteAction) {\n return null;\n }\n\n return (\n <Menu.Item variant=\"danger\" startIcon={<Cross />} onSelect={handleDeleteAction}>\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release',\n defaultMessage: 'Remove from release',\n })}\n </Menu.Item>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseActionEntryLinkItem\n * -----------------------------------------------------------------------------------------------*/\ninterface ReleaseActionEntryLinkItemProps {\n contentTypeUid: ReleaseAction['contentType'];\n documentId: ReleaseAction['entry']['documentId'];\n locale: ReleaseAction['locale'];\n}\n\nconst ReleaseActionEntryLinkItem = ({\n contentTypeUid,\n documentId,\n locale,\n}: ReleaseActionEntryLinkItemProps) => {\n const { formatMessage } = useIntl();\n const userPermissions = useAuth('ReleaseActionEntryLinkItem', (state) => state.permissions);\n\n // Confirm user has permissions to access the entry for the given locale\n const canUpdateEntryForLocale = React.useMemo(() => {\n const updatePermissions = userPermissions.find(\n (permission) =>\n permission.subject === contentTypeUid &&\n permission.action === 'plugin::content-manager.explorer.update'\n );\n\n if (!updatePermissions) {\n return false;\n }\n\n return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));\n }, [contentTypeUid, locale, userPermissions]);\n\n const {\n allowedActions: { canUpdate: canUpdateContentType },\n } = useRBAC({\n updateContentType: [\n {\n action: 'plugin::content-manager.explorer.update',\n subject: contentTypeUid,\n },\n ],\n });\n\n if (!canUpdateContentType || !canUpdateEntryForLocale) {\n return null;\n }\n\n return (\n <StyledMenuLink\n /* @ts-expect-error inference isn't working in DS */\n tag={NavLink}\n isLink\n to={{\n pathname: `/content-manager/collection-types/${contentTypeUid}/${documentId}`,\n search: locale && `?plugins[i18n][locale]=${locale}`,\n }}\n startIcon={<Pencil />}\n >\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-entry',\n defaultMessage: 'Edit entry',\n })}\n </StyledMenuLink>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EditReleaseItem\n * -----------------------------------------------------------------------------------------------*/\ninterface EditReleaseItemProps {\n releaseId: Release['id'];\n}\n\nconst EditReleaseItem = ({ releaseId }: EditReleaseItemProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <StyledMenuLink\n /* @ts-expect-error inference isn't working in DS */\n tag={NavLink}\n isLink\n to={`/plugins/content-releases/${releaseId}`}\n startIcon={<Pencil />}\n >\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-release',\n defaultMessage: 'Edit release',\n })}\n </StyledMenuLink>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RootProps {\n children: React.ReactNode;\n hasTriggerBorder?: boolean;\n}\n\nconst Root = ({ children }: RootProps) => {\n const { formatMessage } = useIntl();\n\n const { allowedActions } = useRBAC(PERMISSIONS);\n\n return (\n // A user can access the dropdown if they have permissions to delete a release-action OR update a release\n allowedActions.canDeleteAction || allowedActions.canUpdate ? (\n <Menu.Root>\n <StyledMoreButton variant=\"tertiary\" endIcon={null} paddingLeft=\"7px\" paddingRight=\"7px\">\n <AccessibleIcon\n label={formatMessage({\n id: 'content-releases.content-manager-edit-view.release-action-menu',\n defaultMessage: 'Release action options',\n })}\n >\n <More />\n </AccessibleIcon>\n </StyledMoreButton>\n <Menu.Content top={1} popoverPlacement=\"bottom-end\">\n {children}\n </Menu.Content>\n </Menu.Root>\n ) : null\n );\n};\n\nconst StyledMoreButton = styled(Menu.Trigger)`\n & > span {\n display: flex;\n }\n`;\n\nexport const ReleaseActionMenu = {\n Root,\n EditReleaseItem,\n DeleteReleaseActionItem,\n ReleaseActionEntryLinkItem,\n};\n"],"names":["StyledMenuLink","styled","Menu","Item","theme","colors","DeleteReleaseActionItem","releaseId","actionId","formatMessage","useIntl","toggleNotification","useNotification","formatAPIError","useAPIErrorHandler","deleteReleaseAction","useDeleteReleaseActionMutation","allowedActions","canDeleteAction","useRBAC","PERMISSIONS","handleDeleteAction","response","params","type","message","id","defaultMessage","isFetchError","error","_jsx","variant","startIcon","Cross","onSelect","ReleaseActionEntryLinkItem","contentTypeUid","documentId","locale","userPermissions","useAuth","state","permissions","canUpdateEntryForLocale","React","useMemo","updatePermissions","find","permission","subject","action","Boolean","properties","locales","includes","canUpdate","canUpdateContentType","updateContentType","tag","NavLink","isLink","to","pathname","search","Pencil","EditReleaseItem","Root","children","_jsxs","StyledMoreButton","endIcon","paddingLeft","paddingRight","AccessibleIcon","label","More","Content","top","popoverPlacement","Trigger","ReleaseActionMenu"],"mappings":"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"}
|
|
@@ -50,32 +50,6 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
50
50
|
border-bottom-left-radius: ${({ theme })=>theme.borderRadius};
|
|
51
51
|
border-top: 1px solid ${({ theme })=>theme.colors.neutral150};
|
|
52
52
|
`;
|
|
53
|
-
const StyledMenuItem = styledComponents.styled(designSystem.MenuItem)`
|
|
54
|
-
svg path {
|
|
55
|
-
fill: ${({ theme, disabled })=>disabled && theme.colors.neutral500};
|
|
56
|
-
}
|
|
57
|
-
span {
|
|
58
|
-
color: ${({ theme, disabled })=>disabled && theme.colors.neutral500};
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
&:hover {
|
|
62
|
-
background: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}100`]};
|
|
63
|
-
}
|
|
64
|
-
`;
|
|
65
|
-
const PencilIcon = styledComponents.styled(icons.Pencil)`
|
|
66
|
-
width: ${({ theme })=>theme.spaces[4]};
|
|
67
|
-
height: ${({ theme })=>theme.spaces[4]};
|
|
68
|
-
path {
|
|
69
|
-
fill: ${({ theme })=>theme.colors.neutral600};
|
|
70
|
-
}
|
|
71
|
-
`;
|
|
72
|
-
const TrashIcon = styledComponents.styled(icons.Trash)`
|
|
73
|
-
width: ${({ theme })=>theme.spaces[4]};
|
|
74
|
-
height: ${({ theme })=>theme.spaces[4]};
|
|
75
|
-
path {
|
|
76
|
-
fill: ${({ theme })=>theme.colors.danger600};
|
|
77
|
-
}
|
|
78
|
-
`;
|
|
79
53
|
const ReleaseDetailsLayout = ({ toggleEditReleaseModal, toggleWarningSubmit, children })=>{
|
|
80
54
|
const { formatMessage, formatDate, formatTime } = reactIntl.useIntl();
|
|
81
55
|
const { releaseId } = reactRouterDom.useParams();
|
|
@@ -235,46 +209,23 @@ const ReleaseDetailsLayout = ({ toggleEditReleaseModal, toggleWarningSubmit, chi
|
|
|
235
209
|
}),
|
|
236
210
|
popoverPlacement: "bottom-end",
|
|
237
211
|
children: [
|
|
238
|
-
/*#__PURE__*/ jsxRuntime.jsx(
|
|
212
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Item, {
|
|
239
213
|
disabled: !canUpdate,
|
|
240
214
|
onSelect: toggleEditReleaseModal,
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
width: "100%",
|
|
246
|
-
children: [
|
|
247
|
-
/*#__PURE__*/ jsxRuntime.jsx(PencilIcon, {}),
|
|
248
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
249
|
-
ellipsis: true,
|
|
250
|
-
children: formatMessage({
|
|
251
|
-
id: 'content-releases.header.actions.edit',
|
|
252
|
-
defaultMessage: 'Edit'
|
|
253
|
-
})
|
|
254
|
-
})
|
|
255
|
-
]
|
|
215
|
+
startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Pencil, {}),
|
|
216
|
+
children: formatMessage({
|
|
217
|
+
id: 'content-releases.header.actions.edit',
|
|
218
|
+
defaultMessage: 'Edit'
|
|
256
219
|
})
|
|
257
220
|
}),
|
|
258
|
-
/*#__PURE__*/ jsxRuntime.jsx(
|
|
221
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Item, {
|
|
259
222
|
disabled: !canDelete,
|
|
260
223
|
onSelect: toggleWarningSubmit,
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
width: "100%",
|
|
267
|
-
children: [
|
|
268
|
-
/*#__PURE__*/ jsxRuntime.jsx(TrashIcon, {}),
|
|
269
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
270
|
-
ellipsis: true,
|
|
271
|
-
textColor: "danger600",
|
|
272
|
-
children: formatMessage({
|
|
273
|
-
id: 'content-releases.header.actions.delete',
|
|
274
|
-
defaultMessage: 'Delete'
|
|
275
|
-
})
|
|
276
|
-
})
|
|
277
|
-
]
|
|
224
|
+
variant: "danger",
|
|
225
|
+
startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Trash, {}),
|
|
226
|
+
children: formatMessage({
|
|
227
|
+
id: 'content-releases.header.actions.delete',
|
|
228
|
+
defaultMessage: 'Delete'
|
|
278
229
|
})
|
|
279
230
|
}),
|
|
280
231
|
/*#__PURE__*/ jsxRuntime.jsxs(ReleaseInfoWrapper, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReleaseDetailsPage.js","sources":["../../../admin/src/pages/ReleaseDetailsPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n Pagination,\n Table,\n BackButton,\n ConfirmDialog,\n useTracking,\n useAPIErrorHandler,\n useNotification,\n useQueryParams,\n useRBAC,\n isFetchError,\n useStrapiApp,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Flex,\n Main,\n Tr,\n Td,\n Typography,\n Badge,\n SingleSelect,\n SingleSelectOption,\n EmptyStateLayout,\n LinkButton,\n Dialog,\n SimpleMenu,\n MenuItem,\n} from '@strapi/design-system';\nimport { More, Pencil, Trash } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport format from 'date-fns/format';\nimport { utcToZonedTime } from 'date-fns-tz';\nimport { useIntl } from 'react-intl';\nimport { useParams, useNavigate, Link as ReactRouterLink, Navigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { EntryValidationPopover } from '../components/EntryValidationPopover';\nimport { RelativeTime } from '../components/RelativeTime';\nimport { ReleaseActionMenu } from '../components/ReleaseActionMenu';\nimport { ReleaseActionOptions } from '../components/ReleaseActionOptions';\nimport { ReleaseModal, FormValues } from '../components/ReleaseModal';\nimport { PERMISSIONS } from '../constants';\nimport {\n GetReleaseActionsQueryParams,\n useGetReleaseActionsQuery,\n useGetReleaseQuery,\n useGetReleaseSettingsQuery,\n useUpdateReleaseMutation,\n useUpdateReleaseActionMutation,\n usePublishReleaseMutation,\n useDeleteReleaseMutation,\n releaseApi,\n} from '../services/release';\nimport { useTypedDispatch } from '../store/hooks';\nimport { isBaseQueryError } from '../utils/api';\nimport { getTimezoneOffset } from '../utils/time';\n\nimport { getBadgeProps } from './ReleasesPage';\n\nimport type {\n ReleaseAction,\n ReleaseActionGroupBy,\n} from '../../../shared/contracts/release-actions';\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseDetailsLayout\n * -----------------------------------------------------------------------------------------------*/\nconst ReleaseInfoWrapper = styled(Flex)`\n align-self: stretch;\n border-bottom-right-radius: ${({ theme }) => theme.borderRadius};\n border-bottom-left-radius: ${({ theme }) => theme.borderRadius};\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst StyledMenuItem = styled(MenuItem)<{\n disabled?: boolean;\n $variant?: 'neutral' | 'danger';\n}>`\n svg path {\n fill: ${({ theme, disabled }) => disabled && theme.colors.neutral500};\n }\n span {\n color: ${({ theme, disabled }) => disabled && theme.colors.neutral500};\n }\n\n &:hover {\n background: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}100`]};\n }\n`;\n\nconst PencilIcon = styled(Pencil)`\n width: ${({ theme }) => theme.spaces[4]};\n height: ${({ theme }) => theme.spaces[4]};\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n`;\n\nconst TrashIcon = styled(Trash)`\n width: ${({ theme }) => theme.spaces[4]};\n height: ${({ theme }) => theme.spaces[4]};\n path {\n fill: ${({ theme }) => theme.colors.danger600};\n }\n`;\n\ninterface ReleaseDetailsLayoutProps {\n toggleEditReleaseModal: () => void;\n toggleWarningSubmit: () => void;\n children: React.ReactNode;\n}\n\nconst ReleaseDetailsLayout = ({\n toggleEditReleaseModal,\n toggleWarningSubmit,\n children,\n}: ReleaseDetailsLayoutProps) => {\n const { formatMessage, formatDate, formatTime } = useIntl();\n const { releaseId } = useParams<{ releaseId: string }>();\n const {\n data,\n isLoading: isLoadingDetails,\n error,\n } = useGetReleaseQuery(\n { id: releaseId! },\n {\n skip: !releaseId,\n }\n );\n const [publishRelease, { isLoading: isPublishing }] = usePublishReleaseMutation();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const { allowedActions } = useRBAC(PERMISSIONS);\n const { canUpdate, canDelete, canPublish } = allowedActions;\n const dispatch = useTypedDispatch();\n const { trackUsage } = useTracking();\n\n const release = data?.data;\n\n const handlePublishRelease = (id: string) => async () => {\n const response = await publishRelease({ id });\n\n if ('data' in response) {\n // When the response returns an object with 'data', handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.pages.ReleaseDetails.publish-notification-success',\n defaultMessage: 'Release was published successfully.',\n }),\n });\n\n const { totalEntries, totalPublishedEntries, totalUnpublishedEntries } = response.data.meta;\n\n trackUsage('didPublishRelease', {\n totalEntries,\n totalPublishedEntries,\n totalUnpublishedEntries,\n });\n } else if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const handleRefresh = () => {\n dispatch(\n releaseApi.util.invalidateTags([\n { type: 'ReleaseAction', id: 'LIST' },\n { type: 'Release', id: releaseId },\n ])\n );\n };\n\n const getCreatedByUser = () => {\n if (!release?.createdBy) {\n return null;\n }\n\n // Favor the username\n if (release.createdBy.username) {\n return release.createdBy.username;\n }\n\n // Firstname may not exist if created with SSO\n if (release.createdBy.firstname) {\n return `${release.createdBy.firstname} ${release.createdBy.lastname || ''}`.trim();\n }\n\n // All users must have at least an email\n return release.createdBy.email;\n };\n\n if (isLoadingDetails) {\n return <Page.Loading />;\n }\n\n if ((isBaseQueryError(error) && 'code' in error) || !release) {\n return (\n <Navigate\n to=\"..\"\n state={{\n errors: [\n {\n // @ts-expect-error – TODO: fix this weird error flow\n code: error?.code,\n },\n ],\n }}\n />\n );\n }\n\n const totalEntries = release.actions.meta.count || 0;\n const hasCreatedByUser = Boolean(getCreatedByUser());\n\n const isScheduled = release.scheduledAt && release.timezone;\n const numberOfEntriesText = formatMessage(\n {\n id: 'content-releases.pages.Details.header-subtitle',\n defaultMessage: '{number, plural, =0 {No entries} one {# entry} other {# entries}}',\n },\n { number: totalEntries }\n );\n const scheduledText = isScheduled\n ? formatMessage(\n {\n id: 'content-releases.pages.ReleaseDetails.header-subtitle.scheduled',\n defaultMessage: 'Scheduled for {date} at {time} ({offset})',\n },\n {\n date: formatDate(new Date(release.scheduledAt!), {\n weekday: 'long',\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n timeZone: release.timezone!,\n }),\n time: formatTime(new Date(release.scheduledAt!), {\n timeZone: release.timezone!,\n hourCycle: 'h23',\n }),\n offset: getTimezoneOffset(release.timezone!, new Date(release.scheduledAt!)),\n }\n )\n : '';\n\n return (\n <Main aria-busy={isLoadingDetails}>\n <Layouts.Header\n title={release.name}\n subtitle={\n <Flex gap={2} lineHeight={6}>\n <Typography textColor=\"neutral600\" variant=\"epsilon\">\n {numberOfEntriesText + (isScheduled ? ` - ${scheduledText}` : '')}\n </Typography>\n <Badge {...getBadgeProps(release.status)}>{release.status}</Badge>\n </Flex>\n }\n navigationAction={<BackButton fallback=\"..\" />}\n primaryAction={\n !release.releasedAt && (\n <Flex gap={2}>\n <SimpleMenuButton\n label={<More />}\n variant=\"tertiary\"\n endIcon={null}\n paddingLeft=\"7px\"\n paddingRight=\"7px\"\n aria-label={formatMessage({\n id: 'content-releases.header.actions.open-release-actions',\n defaultMessage: 'Release edit and delete menu',\n })}\n popoverPlacement=\"bottom-end\"\n >\n <StyledMenuItem disabled={!canUpdate} onSelect={toggleEditReleaseModal}>\n <Flex alignItems=\"center\" gap={2} hasRadius width=\"100%\">\n <PencilIcon />\n <Typography ellipsis>\n {formatMessage({\n id: 'content-releases.header.actions.edit',\n defaultMessage: 'Edit',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n <StyledMenuItem\n disabled={!canDelete}\n onSelect={toggleWarningSubmit}\n $variant=\"danger\"\n >\n <Flex alignItems=\"center\" gap={2} hasRadius width=\"100%\">\n <TrashIcon />\n <Typography ellipsis textColor=\"danger600\">\n {formatMessage({\n id: 'content-releases.header.actions.delete',\n defaultMessage: 'Delete',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n <ReleaseInfoWrapper\n direction=\"column\"\n justifyContent=\"center\"\n alignItems=\"flex-start\"\n gap={1}\n padding={4}\n >\n <Typography variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.header.actions.created',\n defaultMessage: 'Created',\n })}\n </Typography>\n <Typography variant=\"pi\" color=\"neutral300\">\n <RelativeTime timestamp={new Date(release.createdAt)} />\n {formatMessage(\n {\n id: 'content-releases.header.actions.created.description',\n defaultMessage:\n '{hasCreatedByUser, select, true { by {createdBy}} other { by deleted user}}',\n },\n { createdBy: getCreatedByUser(), hasCreatedByUser }\n )}\n </Typography>\n </ReleaseInfoWrapper>\n </SimpleMenuButton>\n <Button size=\"S\" variant=\"tertiary\" onClick={handleRefresh}>\n {formatMessage({\n id: 'content-releases.header.actions.refresh',\n defaultMessage: 'Refresh',\n })}\n </Button>\n {canPublish ? (\n <Button\n size=\"S\"\n variant=\"default\"\n onClick={handlePublishRelease(release.id.toString())}\n loading={isPublishing}\n disabled={release.actions.meta.count === 0}\n >\n {formatMessage({\n id: 'content-releases.header.actions.publish',\n defaultMessage: 'Publish',\n })}\n </Button>\n ) : null}\n </Flex>\n )\n }\n />\n {children}\n </Main>\n );\n};\n\nconst SimpleMenuButton = styled(SimpleMenu)`\n & > span {\n display: flex;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseDetailsBody\n * -----------------------------------------------------------------------------------------------*/\nconst GROUP_BY_OPTIONS = ['contentType', 'locale', 'action'] as const;\nconst GROUP_BY_OPTIONS_NO_LOCALE = ['contentType', 'action'] as const;\nconst getGroupByOptionLabel = (value: (typeof GROUP_BY_OPTIONS)[number]) => {\n if (value === 'locale') {\n return {\n id: 'content-releases.pages.ReleaseDetails.groupBy.option.locales',\n defaultMessage: 'Locales',\n };\n }\n\n if (value === 'action') {\n return {\n id: 'content-releases.pages.ReleaseDetails.groupBy.option.actions',\n defaultMessage: 'Actions',\n };\n }\n\n return {\n id: 'content-releases.pages.ReleaseDetails.groupBy.option.content-type',\n defaultMessage: 'Content-Types',\n };\n};\n\ninterface ReleaseDetailsBodyProps {\n releaseId: string;\n}\n\nconst ReleaseDetailsBody = ({ releaseId }: ReleaseDetailsBodyProps) => {\n const { formatMessage } = useIntl();\n const [{ query }, setQuery] = useQueryParams<GetReleaseActionsQueryParams>();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const {\n data: releaseData,\n isLoading: isReleaseLoading,\n error: releaseError,\n } = useGetReleaseQuery({ id: releaseId });\n const {\n allowedActions: { canUpdate },\n } = useRBAC(PERMISSIONS);\n const runHookWaterfall = useStrapiApp('ReleaseDetailsPage', (state) => state.runHookWaterfall);\n\n // TODO: Migrated displayedHeader to v5\n const { displayedHeaders, hasI18nEnabled }: { displayedHeaders: any; hasI18nEnabled: boolean } =\n runHookWaterfall('ContentReleases/pages/ReleaseDetails/add-locale-in-releases', {\n displayedHeaders: [\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.name',\n defaultMessage: 'name',\n },\n name: 'name',\n },\n ],\n hasI18nEnabled: false,\n });\n\n const release = releaseData?.data;\n const selectedGroupBy = query?.groupBy || 'contentType';\n\n const {\n isLoading,\n isFetching,\n isError,\n data,\n error: releaseActionsError,\n } = useGetReleaseActionsQuery({\n ...query,\n releaseId,\n });\n\n const [updateReleaseAction] = useUpdateReleaseActionMutation();\n\n const handleChangeType = async (\n e: React.ChangeEvent<HTMLInputElement>,\n actionId: ReleaseAction['id'],\n actionPath: [string, number]\n ) => {\n const response = await updateReleaseAction({\n params: {\n releaseId,\n actionId,\n },\n body: {\n type: e.target.value as ReleaseAction['type'],\n },\n query, // We are passing the query params to make optimistic updates\n actionPath, // We are passing the action path to found the position in the cache of the action for optimistic updates\n });\n\n if ('error' in response) {\n if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (isLoading || isReleaseLoading) {\n return <Page.Loading />;\n }\n\n const releaseActions = data?.data;\n const releaseMeta = data?.meta;\n const contentTypes = releaseMeta?.contentTypes || {};\n const components = releaseMeta?.components || {};\n\n if (isBaseQueryError(releaseError) || !release) {\n const errorsArray = [];\n if (releaseError && 'code' in releaseError) {\n errorsArray.push({\n code: releaseError.code,\n });\n }\n if (releaseActionsError && 'code' in releaseActionsError) {\n errorsArray.push({\n code: releaseActionsError.code,\n });\n }\n return (\n <Navigate\n to=\"..\"\n state={{\n errors: errorsArray,\n }}\n />\n );\n }\n\n if (isError || !releaseActions) {\n return <Page.Error />;\n }\n\n if (Object.keys(releaseActions).length === 0) {\n return (\n <Layouts.Content>\n <EmptyStateLayout\n action={\n <LinkButton\n tag={ReactRouterLink}\n to={{\n pathname: '/content-manager',\n }}\n style={{ textDecoration: 'none' }}\n variant=\"secondary\"\n >\n {formatMessage({\n id: 'content-releases.page.Details.button.openContentManager',\n defaultMessage: 'Open the Content Manager',\n })}\n </LinkButton>\n }\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'content-releases.pages.Details.tab.emptyEntries',\n defaultMessage:\n 'This release is empty. Open the Content Manager, select an entry and add it to the release.',\n })}\n />\n </Layouts.Content>\n );\n }\n\n const groupByLabel = formatMessage({\n id: 'content-releases.pages.ReleaseDetails.groupBy.aria-label',\n defaultMessage: 'Group by',\n });\n const headers = [\n ...displayedHeaders,\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.content-type',\n defaultMessage: 'content-type',\n },\n name: 'content-type',\n },\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.action',\n defaultMessage: 'action',\n },\n name: 'action',\n },\n ...(!release.releasedAt\n ? [\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.status',\n defaultMessage: 'status',\n },\n name: 'status',\n },\n ]\n : []),\n ];\n\n const options = hasI18nEnabled ? GROUP_BY_OPTIONS : GROUP_BY_OPTIONS_NO_LOCALE;\n\n return (\n <Layouts.Content>\n <Flex gap={8} direction=\"column\" alignItems=\"stretch\">\n <Flex>\n <SingleSelect\n placeholder={groupByLabel}\n aria-label={groupByLabel}\n customizeContent={(value) =>\n formatMessage(\n {\n id: `content-releases.pages.ReleaseDetails.groupBy.label`,\n defaultMessage: `Group by {groupBy}`,\n },\n {\n groupBy: value,\n }\n )\n }\n value={formatMessage(getGroupByOptionLabel(selectedGroupBy))}\n onChange={(value) => setQuery({ groupBy: value as ReleaseActionGroupBy })}\n >\n {options.map((option) => (\n <SingleSelectOption key={option} value={option}>\n {formatMessage(getGroupByOptionLabel(option))}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Flex>\n {Object.keys(releaseActions).map((key) => (\n <Flex key={`releases-group-${key}`} gap={4} direction=\"column\" alignItems=\"stretch\">\n <Flex role=\"separator\" aria-label={key}>\n <Badge>{key}</Badge>\n </Flex>\n <Table.Root\n rows={releaseActions[key].map((item) => ({\n ...item,\n id: Number(item.entry.id),\n }))}\n headers={headers}\n isLoading={isLoading || isFetching}\n >\n <Table.Content>\n <Table.Head>\n {headers.map(({ label, name }) => (\n <Table.HeaderCell key={name} label={formatMessage(label)} name={name} />\n ))}\n </Table.Head>\n <Table.Loading />\n <Table.Body>\n {releaseActions[key].map(\n ({ id, contentType, locale, type, entry, status }, actionIndex) => (\n <Tr key={id}>\n <Td width=\"25%\" maxWidth=\"200px\">\n <Typography ellipsis>{`${\n contentType.mainFieldValue || entry.id\n }`}</Typography>\n </Td>\n {hasI18nEnabled && (\n <Td width=\"10%\">\n <Typography>{`${locale?.name ? locale.name : '-'}`}</Typography>\n </Td>\n )}\n\n <Td width=\"10%\">\n <Typography>{contentType.displayName || ''}</Typography>\n </Td>\n <Td width=\"20%\">\n {release.releasedAt ? (\n <Typography>\n {formatMessage(\n {\n id: 'content-releases.page.ReleaseDetails.table.action-published',\n defaultMessage:\n 'This entry was <b>{isPublish, select, true {published} other {unpublished}}</b>.',\n },\n {\n isPublish: type === 'publish',\n b: (children: React.ReactNode) => (\n <Typography fontWeight=\"bold\">{children}</Typography>\n ),\n }\n )}\n </Typography>\n ) : (\n <ReleaseActionOptions\n selected={type}\n handleChange={(e) => handleChangeType(e, id, [key, actionIndex])}\n name={`release-action-${id}-type`}\n disabled={!canUpdate}\n />\n )}\n </Td>\n {!release.releasedAt && (\n <>\n <Td width=\"20%\" minWidth=\"200px\">\n <EntryValidationPopover\n action={type}\n schema={contentTypes?.[contentType.uid]}\n entry={entry}\n status={status}\n />\n </Td>\n <Td>\n <Flex justifyContent=\"flex-end\">\n <ReleaseActionMenu.Root>\n <ReleaseActionMenu.ReleaseActionEntryLinkItem\n contentTypeUid={contentType.uid}\n documentId={entry.documentId}\n locale={locale?.code}\n />\n <ReleaseActionMenu.DeleteReleaseActionItem\n releaseId={release.id}\n actionId={id}\n />\n </ReleaseActionMenu.Root>\n </Flex>\n </Td>\n </>\n )}\n </Tr>\n )\n )}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n </Flex>\n ))}\n <Pagination.Root\n {...releaseMeta?.pagination}\n defaultPageSize={releaseMeta?.pagination?.pageSize}\n >\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Flex>\n </Layouts.Content>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseDetailsPage\n * -----------------------------------------------------------------------------------------------*/\nconst ReleaseDetailsPage = () => {\n const { formatMessage } = useIntl();\n const { releaseId } = useParams<{ releaseId: string }>();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const navigate = useNavigate();\n const [releaseModalShown, setReleaseModalShown] = React.useState(false);\n const [showWarningSubmit, setWarningSubmit] = React.useState(false);\n\n const {\n isLoading: isLoadingDetails,\n data,\n isSuccess: isSuccessDetails,\n } = useGetReleaseQuery(\n { id: releaseId! },\n {\n skip: !releaseId,\n }\n );\n const { data: dataTimezone, isLoading: isLoadingTimezone } = useGetReleaseSettingsQuery();\n const [updateRelease, { isLoading: isSubmittingForm }] = useUpdateReleaseMutation();\n const [deleteRelease] = useDeleteReleaseMutation();\n\n const toggleEditReleaseModal = () => {\n setReleaseModalShown((prev) => !prev);\n };\n\n const getTimezoneValue = () => {\n if (releaseData?.timezone) {\n return releaseData.timezone;\n } else {\n if (dataTimezone?.data.defaultTimezone) {\n return dataTimezone.data.defaultTimezone;\n }\n return null;\n }\n };\n\n const toggleWarningSubmit = () => setWarningSubmit((prevState) => !prevState);\n\n if (isLoadingDetails || isLoadingTimezone) {\n return (\n <ReleaseDetailsLayout\n toggleEditReleaseModal={toggleEditReleaseModal}\n toggleWarningSubmit={toggleWarningSubmit}\n >\n <Page.Loading />\n </ReleaseDetailsLayout>\n );\n }\n\n if (!releaseId) {\n return <Navigate to=\"..\" />;\n }\n\n const releaseData = (isSuccessDetails && data?.data) || null;\n\n const title = releaseData?.name || '';\n const timezone = getTimezoneValue();\n const scheduledAt =\n releaseData?.scheduledAt && timezone ? utcToZonedTime(releaseData.scheduledAt, timezone) : null;\n // Just get the date and time to display without considering updated timezone time\n const date = scheduledAt ? format(scheduledAt, 'yyyy-MM-dd') : undefined;\n const time = scheduledAt ? format(scheduledAt, 'HH:mm') : '';\n\n const handleEditRelease = async (values: FormValues) => {\n const response = await updateRelease({\n id: releaseId,\n name: values.name,\n scheduledAt: values.scheduledAt,\n timezone: values.timezone,\n });\n\n if ('data' in response) {\n // When the response returns an object with 'data', handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.modal.release-updated-notification-success',\n defaultMessage: 'Release updated.',\n }),\n });\n toggleEditReleaseModal();\n } else if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const handleDeleteRelease = async () => {\n const response = await deleteRelease({\n id: releaseId,\n });\n\n if ('data' in response) {\n navigate('..');\n } else if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <ReleaseDetailsLayout\n toggleEditReleaseModal={toggleEditReleaseModal}\n toggleWarningSubmit={toggleWarningSubmit}\n >\n <ReleaseDetailsBody releaseId={releaseId} />\n <ReleaseModal\n open={releaseModalShown}\n handleClose={toggleEditReleaseModal}\n handleSubmit={handleEditRelease}\n isLoading={isLoadingDetails || isSubmittingForm}\n initialValues={{\n name: title || '',\n scheduledAt,\n date,\n time,\n isScheduled: Boolean(scheduledAt),\n timezone,\n }}\n />\n <Dialog.Root open={showWarningSubmit} onOpenChange={toggleWarningSubmit}>\n <ConfirmDialog onConfirm={handleDeleteRelease}>\n {formatMessage({\n id: 'content-releases.dialog.confirmation-message',\n defaultMessage: 'Are you sure you want to delete this release?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </ReleaseDetailsLayout>\n );\n};\n\nexport { ReleaseDetailsPage };\n"],"names":["ReleaseInfoWrapper","styled","Flex","theme","borderRadius","colors","neutral150","StyledMenuItem","MenuItem","disabled","neutral500","$variant","PencilIcon","Pencil","spaces","neutral600","TrashIcon","Trash","danger600","ReleaseDetailsLayout","toggleEditReleaseModal","toggleWarningSubmit","children","formatMessage","formatDate","formatTime","useIntl","releaseId","useParams","data","isLoading","isLoadingDetails","error","useGetReleaseQuery","id","skip","publishRelease","isPublishing","usePublishReleaseMutation","toggleNotification","useNotification","formatAPIError","useAPIErrorHandler","allowedActions","useRBAC","PERMISSIONS","canUpdate","canDelete","canPublish","dispatch","useTypedDispatch","trackUsage","useTracking","release","handlePublishRelease","response","type","message","defaultMessage","totalEntries","totalPublishedEntries","totalUnpublishedEntries","meta","isFetchError","handleRefresh","releaseApi","util","invalidateTags","getCreatedByUser","createdBy","username","firstname","lastname","trim","email","_jsx","Page","Loading","isBaseQueryError","Navigate","to","state","errors","code","actions","count","hasCreatedByUser","Boolean","isScheduled","scheduledAt","timezone","numberOfEntriesText","number","scheduledText","date","Date","weekday","day","month","year","timeZone","time","hourCycle","offset","getTimezoneOffset","_jsxs","Main","aria-busy","Layouts","Header","title","name","subtitle","gap","lineHeight","Typography","textColor","variant","Badge","getBadgeProps","status","navigationAction","BackButton","fallback","primaryAction","releasedAt","SimpleMenuButton","label","More","endIcon","paddingLeft","paddingRight","aria-label","popoverPlacement","onSelect","alignItems","hasRadius","width","ellipsis","direction","justifyContent","padding","fontWeight","color","RelativeTime","timestamp","createdAt","Button","size","onClick","toString","loading","SimpleMenu","GROUP_BY_OPTIONS","GROUP_BY_OPTIONS_NO_LOCALE","getGroupByOptionLabel","value","ReleaseDetailsBody","query","setQuery","useQueryParams","releaseData","isReleaseLoading","releaseError","runHookWaterfall","useStrapiApp","displayedHeaders","hasI18nEnabled","selectedGroupBy","groupBy","isFetching","isError","releaseActionsError","useGetReleaseActionsQuery","updateReleaseAction","useUpdateReleaseActionMutation","handleChangeType","e","actionId","actionPath","params","body","target","releaseActions","releaseMeta","contentTypes","components","errorsArray","push","Error","Object","keys","length","Content","EmptyStateLayout","action","LinkButton","tag","ReactRouterLink","pathname","style","textDecoration","icon","EmptyDocuments","content","groupByLabel","headers","options","SingleSelect","placeholder","customizeContent","onChange","map","option","SingleSelectOption","key","role","Table","Root","rows","item","Number","entry","Head","HeaderCell","Body","contentType","locale","actionIndex","Tr","Td","maxWidth","mainFieldValue","displayName","isPublish","b","ReleaseActionOptions","selected","handleChange","_Fragment","minWidth","EntryValidationPopover","schema","uid","ReleaseActionMenu","ReleaseActionEntryLinkItem","contentTypeUid","documentId","DeleteReleaseActionItem","Pagination","pagination","defaultPageSize","pageSize","PageSize","Links","ReleaseDetailsPage","navigate","useNavigate","releaseModalShown","setReleaseModalShown","React","useState","showWarningSubmit","setWarningSubmit","isSuccess","isSuccessDetails","dataTimezone","isLoadingTimezone","useGetReleaseSettingsQuery","updateRelease","isSubmittingForm","useUpdateReleaseMutation","deleteRelease","useDeleteReleaseMutation","prev","getTimezoneValue","defaultTimezone","prevState","utcToZonedTime","format","undefined","handleEditRelease","values","handleDeleteRelease","ReleaseModal","open","handleClose","handleSubmit","initialValues","Dialog","onOpenChange","ConfirmDialog","onConfirm"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ReleaseDetailsPage.js","sources":["../../../admin/src/pages/ReleaseDetailsPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n Pagination,\n Table,\n BackButton,\n ConfirmDialog,\n useTracking,\n useAPIErrorHandler,\n useNotification,\n useQueryParams,\n useRBAC,\n isFetchError,\n useStrapiApp,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Flex,\n Main,\n Tr,\n Td,\n Typography,\n Badge,\n SingleSelect,\n SingleSelectOption,\n EmptyStateLayout,\n LinkButton,\n Dialog,\n SimpleMenu,\n Menu,\n} from '@strapi/design-system';\nimport { More, Pencil, Trash } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport format from 'date-fns/format';\nimport { utcToZonedTime } from 'date-fns-tz';\nimport { useIntl } from 'react-intl';\nimport { useParams, useNavigate, Link as ReactRouterLink, Navigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { EntryValidationPopover } from '../components/EntryValidationPopover';\nimport { RelativeTime } from '../components/RelativeTime';\nimport { ReleaseActionMenu } from '../components/ReleaseActionMenu';\nimport { ReleaseActionOptions } from '../components/ReleaseActionOptions';\nimport { ReleaseModal, FormValues } from '../components/ReleaseModal';\nimport { PERMISSIONS } from '../constants';\nimport {\n GetReleaseActionsQueryParams,\n useGetReleaseActionsQuery,\n useGetReleaseQuery,\n useGetReleaseSettingsQuery,\n useUpdateReleaseMutation,\n useUpdateReleaseActionMutation,\n usePublishReleaseMutation,\n useDeleteReleaseMutation,\n releaseApi,\n} from '../services/release';\nimport { useTypedDispatch } from '../store/hooks';\nimport { isBaseQueryError } from '../utils/api';\nimport { getTimezoneOffset } from '../utils/time';\n\nimport { getBadgeProps } from './ReleasesPage';\n\nimport type {\n ReleaseAction,\n ReleaseActionGroupBy,\n} from '../../../shared/contracts/release-actions';\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseDetailsLayout\n * -----------------------------------------------------------------------------------------------*/\nconst ReleaseInfoWrapper = styled(Flex)`\n align-self: stretch;\n border-bottom-right-radius: ${({ theme }) => theme.borderRadius};\n border-bottom-left-radius: ${({ theme }) => theme.borderRadius};\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\ninterface ReleaseDetailsLayoutProps {\n toggleEditReleaseModal: () => void;\n toggleWarningSubmit: () => void;\n children: React.ReactNode;\n}\n\nconst ReleaseDetailsLayout = ({\n toggleEditReleaseModal,\n toggleWarningSubmit,\n children,\n}: ReleaseDetailsLayoutProps) => {\n const { formatMessage, formatDate, formatTime } = useIntl();\n const { releaseId } = useParams<{ releaseId: string }>();\n const {\n data,\n isLoading: isLoadingDetails,\n error,\n } = useGetReleaseQuery(\n { id: releaseId! },\n {\n skip: !releaseId,\n }\n );\n const [publishRelease, { isLoading: isPublishing }] = usePublishReleaseMutation();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const { allowedActions } = useRBAC(PERMISSIONS);\n const { canUpdate, canDelete, canPublish } = allowedActions;\n const dispatch = useTypedDispatch();\n const { trackUsage } = useTracking();\n\n const release = data?.data;\n\n const handlePublishRelease = (id: string) => async () => {\n const response = await publishRelease({ id });\n\n if ('data' in response) {\n // When the response returns an object with 'data', handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.pages.ReleaseDetails.publish-notification-success',\n defaultMessage: 'Release was published successfully.',\n }),\n });\n\n const { totalEntries, totalPublishedEntries, totalUnpublishedEntries } = response.data.meta;\n\n trackUsage('didPublishRelease', {\n totalEntries,\n totalPublishedEntries,\n totalUnpublishedEntries,\n });\n } else if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const handleRefresh = () => {\n dispatch(\n releaseApi.util.invalidateTags([\n { type: 'ReleaseAction', id: 'LIST' },\n { type: 'Release', id: releaseId },\n ])\n );\n };\n\n const getCreatedByUser = () => {\n if (!release?.createdBy) {\n return null;\n }\n\n // Favor the username\n if (release.createdBy.username) {\n return release.createdBy.username;\n }\n\n // Firstname may not exist if created with SSO\n if (release.createdBy.firstname) {\n return `${release.createdBy.firstname} ${release.createdBy.lastname || ''}`.trim();\n }\n\n // All users must have at least an email\n return release.createdBy.email;\n };\n\n if (isLoadingDetails) {\n return <Page.Loading />;\n }\n\n if ((isBaseQueryError(error) && 'code' in error) || !release) {\n return (\n <Navigate\n to=\"..\"\n state={{\n errors: [\n {\n // @ts-expect-error – TODO: fix this weird error flow\n code: error?.code,\n },\n ],\n }}\n />\n );\n }\n\n const totalEntries = release.actions.meta.count || 0;\n const hasCreatedByUser = Boolean(getCreatedByUser());\n\n const isScheduled = release.scheduledAt && release.timezone;\n const numberOfEntriesText = formatMessage(\n {\n id: 'content-releases.pages.Details.header-subtitle',\n defaultMessage: '{number, plural, =0 {No entries} one {# entry} other {# entries}}',\n },\n { number: totalEntries }\n );\n const scheduledText = isScheduled\n ? formatMessage(\n {\n id: 'content-releases.pages.ReleaseDetails.header-subtitle.scheduled',\n defaultMessage: 'Scheduled for {date} at {time} ({offset})',\n },\n {\n date: formatDate(new Date(release.scheduledAt!), {\n weekday: 'long',\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n timeZone: release.timezone!,\n }),\n time: formatTime(new Date(release.scheduledAt!), {\n timeZone: release.timezone!,\n hourCycle: 'h23',\n }),\n offset: getTimezoneOffset(release.timezone!, new Date(release.scheduledAt!)),\n }\n )\n : '';\n\n return (\n <Main aria-busy={isLoadingDetails}>\n <Layouts.Header\n title={release.name}\n subtitle={\n <Flex gap={2} lineHeight={6}>\n <Typography textColor=\"neutral600\" variant=\"epsilon\">\n {numberOfEntriesText + (isScheduled ? ` - ${scheduledText}` : '')}\n </Typography>\n <Badge {...getBadgeProps(release.status)}>{release.status}</Badge>\n </Flex>\n }\n navigationAction={<BackButton fallback=\"..\" />}\n primaryAction={\n !release.releasedAt && (\n <Flex gap={2}>\n <SimpleMenuButton\n label={<More />}\n variant=\"tertiary\"\n endIcon={null}\n paddingLeft=\"7px\"\n paddingRight=\"7px\"\n aria-label={formatMessage({\n id: 'content-releases.header.actions.open-release-actions',\n defaultMessage: 'Release edit and delete menu',\n })}\n popoverPlacement=\"bottom-end\"\n >\n <Menu.Item\n disabled={!canUpdate}\n onSelect={toggleEditReleaseModal}\n startIcon={<Pencil />}\n >\n {formatMessage({\n id: 'content-releases.header.actions.edit',\n defaultMessage: 'Edit',\n })}\n </Menu.Item>\n <Menu.Item\n disabled={!canDelete}\n onSelect={toggleWarningSubmit}\n variant=\"danger\"\n startIcon={<Trash />}\n >\n {formatMessage({\n id: 'content-releases.header.actions.delete',\n defaultMessage: 'Delete',\n })}\n </Menu.Item>\n <ReleaseInfoWrapper\n direction=\"column\"\n justifyContent=\"center\"\n alignItems=\"flex-start\"\n gap={1}\n padding={4}\n >\n <Typography variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.header.actions.created',\n defaultMessage: 'Created',\n })}\n </Typography>\n <Typography variant=\"pi\" color=\"neutral300\">\n <RelativeTime timestamp={new Date(release.createdAt)} />\n {formatMessage(\n {\n id: 'content-releases.header.actions.created.description',\n defaultMessage:\n '{hasCreatedByUser, select, true { by {createdBy}} other { by deleted user}}',\n },\n { createdBy: getCreatedByUser(), hasCreatedByUser }\n )}\n </Typography>\n </ReleaseInfoWrapper>\n </SimpleMenuButton>\n <Button size=\"S\" variant=\"tertiary\" onClick={handleRefresh}>\n {formatMessage({\n id: 'content-releases.header.actions.refresh',\n defaultMessage: 'Refresh',\n })}\n </Button>\n {canPublish ? (\n <Button\n size=\"S\"\n variant=\"default\"\n onClick={handlePublishRelease(release.id.toString())}\n loading={isPublishing}\n disabled={release.actions.meta.count === 0}\n >\n {formatMessage({\n id: 'content-releases.header.actions.publish',\n defaultMessage: 'Publish',\n })}\n </Button>\n ) : null}\n </Flex>\n )\n }\n />\n {children}\n </Main>\n );\n};\n\nconst SimpleMenuButton = styled(SimpleMenu)`\n & > span {\n display: flex;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseDetailsBody\n * -----------------------------------------------------------------------------------------------*/\nconst GROUP_BY_OPTIONS = ['contentType', 'locale', 'action'] as const;\nconst GROUP_BY_OPTIONS_NO_LOCALE = ['contentType', 'action'] as const;\nconst getGroupByOptionLabel = (value: (typeof GROUP_BY_OPTIONS)[number]) => {\n if (value === 'locale') {\n return {\n id: 'content-releases.pages.ReleaseDetails.groupBy.option.locales',\n defaultMessage: 'Locales',\n };\n }\n\n if (value === 'action') {\n return {\n id: 'content-releases.pages.ReleaseDetails.groupBy.option.actions',\n defaultMessage: 'Actions',\n };\n }\n\n return {\n id: 'content-releases.pages.ReleaseDetails.groupBy.option.content-type',\n defaultMessage: 'Content-Types',\n };\n};\n\ninterface ReleaseDetailsBodyProps {\n releaseId: string;\n}\n\nconst ReleaseDetailsBody = ({ releaseId }: ReleaseDetailsBodyProps) => {\n const { formatMessage } = useIntl();\n const [{ query }, setQuery] = useQueryParams<GetReleaseActionsQueryParams>();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const {\n data: releaseData,\n isLoading: isReleaseLoading,\n error: releaseError,\n } = useGetReleaseQuery({ id: releaseId });\n const {\n allowedActions: { canUpdate },\n } = useRBAC(PERMISSIONS);\n const runHookWaterfall = useStrapiApp('ReleaseDetailsPage', (state) => state.runHookWaterfall);\n\n // TODO: Migrated displayedHeader to v5\n const { displayedHeaders, hasI18nEnabled }: { displayedHeaders: any; hasI18nEnabled: boolean } =\n runHookWaterfall('ContentReleases/pages/ReleaseDetails/add-locale-in-releases', {\n displayedHeaders: [\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.name',\n defaultMessage: 'name',\n },\n name: 'name',\n },\n ],\n hasI18nEnabled: false,\n });\n\n const release = releaseData?.data;\n const selectedGroupBy = query?.groupBy || 'contentType';\n\n const {\n isLoading,\n isFetching,\n isError,\n data,\n error: releaseActionsError,\n } = useGetReleaseActionsQuery({\n ...query,\n releaseId,\n });\n\n const [updateReleaseAction] = useUpdateReleaseActionMutation();\n\n const handleChangeType = async (\n e: React.ChangeEvent<HTMLInputElement>,\n actionId: ReleaseAction['id'],\n actionPath: [string, number]\n ) => {\n const response = await updateReleaseAction({\n params: {\n releaseId,\n actionId,\n },\n body: {\n type: e.target.value as ReleaseAction['type'],\n },\n query, // We are passing the query params to make optimistic updates\n actionPath, // We are passing the action path to found the position in the cache of the action for optimistic updates\n });\n\n if ('error' in response) {\n if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (isLoading || isReleaseLoading) {\n return <Page.Loading />;\n }\n\n const releaseActions = data?.data;\n const releaseMeta = data?.meta;\n const contentTypes = releaseMeta?.contentTypes || {};\n const components = releaseMeta?.components || {};\n\n if (isBaseQueryError(releaseError) || !release) {\n const errorsArray = [];\n if (releaseError && 'code' in releaseError) {\n errorsArray.push({\n code: releaseError.code,\n });\n }\n if (releaseActionsError && 'code' in releaseActionsError) {\n errorsArray.push({\n code: releaseActionsError.code,\n });\n }\n return (\n <Navigate\n to=\"..\"\n state={{\n errors: errorsArray,\n }}\n />\n );\n }\n\n if (isError || !releaseActions) {\n return <Page.Error />;\n }\n\n if (Object.keys(releaseActions).length === 0) {\n return (\n <Layouts.Content>\n <EmptyStateLayout\n action={\n <LinkButton\n tag={ReactRouterLink}\n to={{\n pathname: '/content-manager',\n }}\n style={{ textDecoration: 'none' }}\n variant=\"secondary\"\n >\n {formatMessage({\n id: 'content-releases.page.Details.button.openContentManager',\n defaultMessage: 'Open the Content Manager',\n })}\n </LinkButton>\n }\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'content-releases.pages.Details.tab.emptyEntries',\n defaultMessage:\n 'This release is empty. Open the Content Manager, select an entry and add it to the release.',\n })}\n />\n </Layouts.Content>\n );\n }\n\n const groupByLabel = formatMessage({\n id: 'content-releases.pages.ReleaseDetails.groupBy.aria-label',\n defaultMessage: 'Group by',\n });\n const headers = [\n ...displayedHeaders,\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.content-type',\n defaultMessage: 'content-type',\n },\n name: 'content-type',\n },\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.action',\n defaultMessage: 'action',\n },\n name: 'action',\n },\n ...(!release.releasedAt\n ? [\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.status',\n defaultMessage: 'status',\n },\n name: 'status',\n },\n ]\n : []),\n ];\n\n const options = hasI18nEnabled ? GROUP_BY_OPTIONS : GROUP_BY_OPTIONS_NO_LOCALE;\n\n return (\n <Layouts.Content>\n <Flex gap={8} direction=\"column\" alignItems=\"stretch\">\n <Flex>\n <SingleSelect\n placeholder={groupByLabel}\n aria-label={groupByLabel}\n customizeContent={(value) =>\n formatMessage(\n {\n id: `content-releases.pages.ReleaseDetails.groupBy.label`,\n defaultMessage: `Group by {groupBy}`,\n },\n {\n groupBy: value,\n }\n )\n }\n value={formatMessage(getGroupByOptionLabel(selectedGroupBy))}\n onChange={(value) => setQuery({ groupBy: value as ReleaseActionGroupBy })}\n >\n {options.map((option) => (\n <SingleSelectOption key={option} value={option}>\n {formatMessage(getGroupByOptionLabel(option))}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Flex>\n {Object.keys(releaseActions).map((key) => (\n <Flex key={`releases-group-${key}`} gap={4} direction=\"column\" alignItems=\"stretch\">\n <Flex role=\"separator\" aria-label={key}>\n <Badge>{key}</Badge>\n </Flex>\n <Table.Root\n rows={releaseActions[key].map((item) => ({\n ...item,\n id: Number(item.entry.id),\n }))}\n headers={headers}\n isLoading={isLoading || isFetching}\n >\n <Table.Content>\n <Table.Head>\n {headers.map(({ label, name }) => (\n <Table.HeaderCell key={name} label={formatMessage(label)} name={name} />\n ))}\n </Table.Head>\n <Table.Loading />\n <Table.Body>\n {releaseActions[key].map(\n ({ id, contentType, locale, type, entry, status }, actionIndex) => (\n <Tr key={id}>\n <Td width=\"25%\" maxWidth=\"200px\">\n <Typography ellipsis>{`${\n contentType.mainFieldValue || entry.id\n }`}</Typography>\n </Td>\n {hasI18nEnabled && (\n <Td width=\"10%\">\n <Typography>{`${locale?.name ? locale.name : '-'}`}</Typography>\n </Td>\n )}\n\n <Td width=\"10%\">\n <Typography>{contentType.displayName || ''}</Typography>\n </Td>\n <Td width=\"20%\">\n {release.releasedAt ? (\n <Typography>\n {formatMessage(\n {\n id: 'content-releases.page.ReleaseDetails.table.action-published',\n defaultMessage:\n 'This entry was <b>{isPublish, select, true {published} other {unpublished}}</b>.',\n },\n {\n isPublish: type === 'publish',\n b: (children: React.ReactNode) => (\n <Typography fontWeight=\"bold\">{children}</Typography>\n ),\n }\n )}\n </Typography>\n ) : (\n <ReleaseActionOptions\n selected={type}\n handleChange={(e) => handleChangeType(e, id, [key, actionIndex])}\n name={`release-action-${id}-type`}\n disabled={!canUpdate}\n />\n )}\n </Td>\n {!release.releasedAt && (\n <>\n <Td width=\"20%\" minWidth=\"200px\">\n <EntryValidationPopover\n action={type}\n schema={contentTypes?.[contentType.uid]}\n entry={entry}\n status={status}\n />\n </Td>\n <Td>\n <Flex justifyContent=\"flex-end\">\n <ReleaseActionMenu.Root>\n <ReleaseActionMenu.ReleaseActionEntryLinkItem\n contentTypeUid={contentType.uid}\n documentId={entry.documentId}\n locale={locale?.code}\n />\n <ReleaseActionMenu.DeleteReleaseActionItem\n releaseId={release.id}\n actionId={id}\n />\n </ReleaseActionMenu.Root>\n </Flex>\n </Td>\n </>\n )}\n </Tr>\n )\n )}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n </Flex>\n ))}\n <Pagination.Root\n {...releaseMeta?.pagination}\n defaultPageSize={releaseMeta?.pagination?.pageSize}\n >\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Flex>\n </Layouts.Content>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseDetailsPage\n * -----------------------------------------------------------------------------------------------*/\nconst ReleaseDetailsPage = () => {\n const { formatMessage } = useIntl();\n const { releaseId } = useParams<{ releaseId: string }>();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const navigate = useNavigate();\n const [releaseModalShown, setReleaseModalShown] = React.useState(false);\n const [showWarningSubmit, setWarningSubmit] = React.useState(false);\n\n const {\n isLoading: isLoadingDetails,\n data,\n isSuccess: isSuccessDetails,\n } = useGetReleaseQuery(\n { id: releaseId! },\n {\n skip: !releaseId,\n }\n );\n const { data: dataTimezone, isLoading: isLoadingTimezone } = useGetReleaseSettingsQuery();\n const [updateRelease, { isLoading: isSubmittingForm }] = useUpdateReleaseMutation();\n const [deleteRelease] = useDeleteReleaseMutation();\n\n const toggleEditReleaseModal = () => {\n setReleaseModalShown((prev) => !prev);\n };\n\n const getTimezoneValue = () => {\n if (releaseData?.timezone) {\n return releaseData.timezone;\n } else {\n if (dataTimezone?.data.defaultTimezone) {\n return dataTimezone.data.defaultTimezone;\n }\n return null;\n }\n };\n\n const toggleWarningSubmit = () => setWarningSubmit((prevState) => !prevState);\n\n if (isLoadingDetails || isLoadingTimezone) {\n return (\n <ReleaseDetailsLayout\n toggleEditReleaseModal={toggleEditReleaseModal}\n toggleWarningSubmit={toggleWarningSubmit}\n >\n <Page.Loading />\n </ReleaseDetailsLayout>\n );\n }\n\n if (!releaseId) {\n return <Navigate to=\"..\" />;\n }\n\n const releaseData = (isSuccessDetails && data?.data) || null;\n\n const title = releaseData?.name || '';\n const timezone = getTimezoneValue();\n const scheduledAt =\n releaseData?.scheduledAt && timezone ? utcToZonedTime(releaseData.scheduledAt, timezone) : null;\n // Just get the date and time to display without considering updated timezone time\n const date = scheduledAt ? format(scheduledAt, 'yyyy-MM-dd') : undefined;\n const time = scheduledAt ? format(scheduledAt, 'HH:mm') : '';\n\n const handleEditRelease = async (values: FormValues) => {\n const response = await updateRelease({\n id: releaseId,\n name: values.name,\n scheduledAt: values.scheduledAt,\n timezone: values.timezone,\n });\n\n if ('data' in response) {\n // When the response returns an object with 'data', handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.modal.release-updated-notification-success',\n defaultMessage: 'Release updated.',\n }),\n });\n toggleEditReleaseModal();\n } else if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const handleDeleteRelease = async () => {\n const response = await deleteRelease({\n id: releaseId,\n });\n\n if ('data' in response) {\n navigate('..');\n } else if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <ReleaseDetailsLayout\n toggleEditReleaseModal={toggleEditReleaseModal}\n toggleWarningSubmit={toggleWarningSubmit}\n >\n <ReleaseDetailsBody releaseId={releaseId} />\n <ReleaseModal\n open={releaseModalShown}\n handleClose={toggleEditReleaseModal}\n handleSubmit={handleEditRelease}\n isLoading={isLoadingDetails || isSubmittingForm}\n initialValues={{\n name: title || '',\n scheduledAt,\n date,\n time,\n isScheduled: Boolean(scheduledAt),\n timezone,\n }}\n />\n <Dialog.Root open={showWarningSubmit} onOpenChange={toggleWarningSubmit}>\n <ConfirmDialog onConfirm={handleDeleteRelease}>\n {formatMessage({\n id: 'content-releases.dialog.confirmation-message',\n defaultMessage: 'Are you sure you want to delete this release?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </ReleaseDetailsLayout>\n );\n};\n\nexport { ReleaseDetailsPage };\n"],"names":["ReleaseInfoWrapper","styled","Flex","theme","borderRadius","colors","neutral150","ReleaseDetailsLayout","toggleEditReleaseModal","toggleWarningSubmit","children","formatMessage","formatDate","formatTime","useIntl","releaseId","useParams","data","isLoading","isLoadingDetails","error","useGetReleaseQuery","id","skip","publishRelease","isPublishing","usePublishReleaseMutation","toggleNotification","useNotification","formatAPIError","useAPIErrorHandler","allowedActions","useRBAC","PERMISSIONS","canUpdate","canDelete","canPublish","dispatch","useTypedDispatch","trackUsage","useTracking","release","handlePublishRelease","response","type","message","defaultMessage","totalEntries","totalPublishedEntries","totalUnpublishedEntries","meta","isFetchError","handleRefresh","releaseApi","util","invalidateTags","getCreatedByUser","createdBy","username","firstname","lastname","trim","email","_jsx","Page","Loading","isBaseQueryError","Navigate","to","state","errors","code","actions","count","hasCreatedByUser","Boolean","isScheduled","scheduledAt","timezone","numberOfEntriesText","number","scheduledText","date","Date","weekday","day","month","year","timeZone","time","hourCycle","offset","getTimezoneOffset","_jsxs","Main","aria-busy","Layouts","Header","title","name","subtitle","gap","lineHeight","Typography","textColor","variant","Badge","getBadgeProps","status","navigationAction","BackButton","fallback","primaryAction","releasedAt","SimpleMenuButton","label","More","endIcon","paddingLeft","paddingRight","aria-label","popoverPlacement","Menu","Item","disabled","onSelect","startIcon","Pencil","Trash","direction","justifyContent","alignItems","padding","fontWeight","color","RelativeTime","timestamp","createdAt","Button","size","onClick","toString","loading","SimpleMenu","GROUP_BY_OPTIONS","GROUP_BY_OPTIONS_NO_LOCALE","getGroupByOptionLabel","value","ReleaseDetailsBody","query","setQuery","useQueryParams","releaseData","isReleaseLoading","releaseError","runHookWaterfall","useStrapiApp","displayedHeaders","hasI18nEnabled","selectedGroupBy","groupBy","isFetching","isError","releaseActionsError","useGetReleaseActionsQuery","updateReleaseAction","useUpdateReleaseActionMutation","handleChangeType","e","actionId","actionPath","params","body","target","releaseActions","releaseMeta","contentTypes","components","errorsArray","push","Error","Object","keys","length","Content","EmptyStateLayout","action","LinkButton","tag","ReactRouterLink","pathname","style","textDecoration","icon","EmptyDocuments","width","content","groupByLabel","headers","options","SingleSelect","placeholder","customizeContent","onChange","map","option","SingleSelectOption","key","role","Table","Root","rows","item","Number","entry","Head","HeaderCell","Body","contentType","locale","actionIndex","Tr","Td","maxWidth","ellipsis","mainFieldValue","displayName","isPublish","b","ReleaseActionOptions","selected","handleChange","_Fragment","minWidth","EntryValidationPopover","schema","uid","ReleaseActionMenu","ReleaseActionEntryLinkItem","contentTypeUid","documentId","DeleteReleaseActionItem","Pagination","pagination","defaultPageSize","pageSize","PageSize","Links","ReleaseDetailsPage","navigate","useNavigate","releaseModalShown","setReleaseModalShown","React","useState","showWarningSubmit","setWarningSubmit","isSuccess","isSuccessDetails","dataTimezone","isLoadingTimezone","useGetReleaseSettingsQuery","updateRelease","isSubmittingForm","useUpdateReleaseMutation","deleteRelease","useDeleteReleaseMutation","prev","getTimezoneValue","defaultTimezone","prevState","utcToZonedTime","format","undefined","handleEditRelease","values","handleDeleteRelease","ReleaseModal","open","handleClose","handleSubmit","initialValues","Dialog","onOpenChange","ConfirmDialog","onConfirm"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqEA;;AAEkG,qGAClG,MAAMA,kBAAAA,GAAqBC,uBAAOC,CAAAA,iBAAAA,CAAK;;AAET,8BAAA,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,YAAY,CAAC;AACrC,6BAAA,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAAA,CAAMC,YAAY,CAAC;wBACzC,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAME,CAAAA,MAAM,CAACC,UAAU,CAAC;AACjE,CAAC;AAQD,MAAMC,oBAAAA,GAAuB,CAAC,EAC5BC,sBAAsB,EACtBC,mBAAmB,EACnBC,QAAQ,EACkB,GAAA;AAC1B,IAAA,MAAM,EAAEC,aAAa,EAAEC,UAAU,EAAEC,UAAU,EAAE,GAAGC,iBAAAA,EAAAA;IAClD,MAAM,EAAEC,SAAS,EAAE,GAAGC,wBAAAA,EAAAA;IACtB,MAAM,EACJC,IAAI,EACJC,SAAAA,EAAWC,gBAAgB,EAC3BC,KAAK,EACN,GAAGC,0BACF,CAAA;QAAEC,EAAIP,EAAAA;KACN,EAAA;AACEQ,QAAAA,IAAAA,EAAM,CAACR;AACT,KAAA,CAAA;AAEF,IAAA,MAAM,CAACS,cAAgB,EAAA,EAAEN,WAAWO,YAAY,EAAE,CAAC,GAAGC,iCAAAA,EAAAA;IACtD,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;IAC/B,MAAM,EAAEC,cAAc,EAAE,GAAGC,8BAAAA,EAAAA;AAC3B,IAAA,MAAM,EAAEC,cAAc,EAAE,GAAGC,mBAAQC,CAAAA,qBAAAA,CAAAA;AACnC,IAAA,MAAM,EAAEC,SAAS,EAAEC,SAAS,EAAEC,UAAU,EAAE,GAAGL,cAAAA;AAC7C,IAAA,MAAMM,QAAWC,GAAAA,sBAAAA,EAAAA;IACjB,MAAM,EAAEC,UAAU,EAAE,GAAGC,uBAAAA,EAAAA;AAEvB,IAAA,MAAMC,YAAUxB,IAAMA,EAAAA,IAAAA;IAEtB,MAAMyB,oBAAAA,GAAuB,CAACpB,EAAe,GAAA,UAAA;YAC3C,MAAMqB,QAAAA,GAAW,MAAMnB,cAAe,CAAA;AAAEF,gBAAAA;AAAG,aAAA,CAAA;AAE3C,YAAA,IAAI,UAAUqB,QAAU,EAAA;;gBAEtBhB,kBAAmB,CAAA;oBACjBiB,IAAM,EAAA,SAAA;AACNC,oBAAAA,OAAAA,EAASlC,aAAc,CAAA;wBACrBW,EAAI,EAAA,oEAAA;wBACJwB,cAAgB,EAAA;AAClB,qBAAA;AACF,iBAAA,CAAA;gBAEA,MAAM,EAAEC,YAAY,EAAEC,qBAAqB,EAAEC,uBAAuB,EAAE,GAAGN,QAAAA,CAAS1B,IAAI,CAACiC,IAAI;AAE3FX,gBAAAA,UAAAA,CAAW,mBAAqB,EAAA;AAC9BQ,oBAAAA,YAAAA;AACAC,oBAAAA,qBAAAA;AACAC,oBAAAA;AACF,iBAAA,CAAA;AACF,aAAA,MAAO,IAAIE,wBAAAA,CAAaR,QAASvB,CAAAA,KAAK,CAAG,EAAA;;gBAEvCO,kBAAmB,CAAA;oBACjBiB,IAAM,EAAA,QAAA;oBACNC,OAAShB,EAAAA,cAAAA,CAAec,SAASvB,KAAK;AACxC,iBAAA,CAAA;aACK,MAAA;;gBAELO,kBAAmB,CAAA;oBACjBiB,IAAM,EAAA,QAAA;AACNC,oBAAAA,OAAAA,EAASlC,aAAc,CAAA;wBAAEW,EAAI,EAAA,oBAAA;wBAAsBwB,cAAgB,EAAA;AAAoB,qBAAA;AACzF,iBAAA,CAAA;AACF;AACF,SAAA;AAEA,IAAA,MAAMM,aAAgB,GAAA,IAAA;AACpBf,QAAAA,QAAAA,CACEgB,kBAAWC,CAAAA,IAAI,CAACC,cAAc,CAAC;AAC7B,YAAA;gBAAEX,IAAM,EAAA,eAAA;gBAAiBtB,EAAI,EAAA;AAAO,aAAA;AACpC,YAAA;gBAAEsB,IAAM,EAAA,SAAA;gBAAWtB,EAAIP,EAAAA;AAAU;AAClC,SAAA,CAAA,CAAA;AAEL,KAAA;AAEA,IAAA,MAAMyC,gBAAmB,GAAA,IAAA;QACvB,IAAI,CAACf,WAASgB,SAAW,EAAA;YACvB,OAAO,IAAA;AACT;;AAGA,QAAA,IAAIhB,SAAQgB,CAAAA,SAAS,CAACC,QAAQ,EAAE;YAC9B,OAAOjB,SAAAA,CAAQgB,SAAS,CAACC,QAAQ;AACnC;;AAGA,QAAA,IAAIjB,SAAQgB,CAAAA,SAAS,CAACE,SAAS,EAAE;AAC/B,YAAA,OAAO,CAAC,EAAElB,SAAAA,CAAQgB,SAAS,CAACE,SAAS,CAAC,CAAC,EAAElB,SAAAA,CAAQgB,SAAS,CAACG,QAAQ,IAAI,EAAG,CAAA,CAAC,CAACC,IAAI,EAAA;AAClF;;QAGA,OAAOpB,SAAAA,CAAQgB,SAAS,CAACK,KAAK;AAChC,KAAA;AAEA,IAAA,IAAI3C,gBAAkB,EAAA;QACpB,qBAAO4C,cAAA,CAACC,iBAAKC,OAAO,EAAA,EAAA,CAAA;AACtB;AAEA,IAAA,IAAIC,oBAAkB9C,CAAAA,KAAAA,CAAAA,IAAU,MAAUA,IAAAA,KAAAA,IAAU,CAACqB,SAAS,EAAA;AAC5D,QAAA,qBACEsB,cAACI,CAAAA,uBAAAA,EAAAA;YACCC,EAAG,EAAA,IAAA;YACHC,KAAO,EAAA;gBACLC,MAAQ,EAAA;AACN,oBAAA;;AAEEC,wBAAAA,IAAAA,EAAMnD,KAAOmD,EAAAA;AACf;AACD;AACH;;AAGN;AAEA,IAAA,MAAMxB,eAAeN,SAAQ+B,CAAAA,OAAO,CAACtB,IAAI,CAACuB,KAAK,IAAI,CAAA;AACnD,IAAA,MAAMC,mBAAmBC,OAAQnB,CAAAA,gBAAAA,EAAAA,CAAAA;AAEjC,IAAA,MAAMoB,WAAcnC,GAAAA,SAAAA,CAAQoC,WAAW,IAAIpC,UAAQqC,QAAQ;AAC3D,IAAA,MAAMC,sBAAsBpE,aAC1B,CAAA;QACEW,EAAI,EAAA,gDAAA;QACJwB,cAAgB,EAAA;KAElB,EAAA;QAAEkC,MAAQjC,EAAAA;AAAa,KAAA,CAAA;IAEzB,MAAMkC,aAAAA,GAAgBL,cAClBjE,aACE,CAAA;QACEW,EAAI,EAAA,iEAAA;QACJwB,cAAgB,EAAA;KAElB,EAAA;AACEoC,QAAAA,IAAAA,EAAMtE,UAAW,CAAA,IAAIuE,IAAK1C,CAAAA,SAAAA,CAAQoC,WAAW,CAAI,EAAA;YAC/CO,OAAS,EAAA,MAAA;YACTC,GAAK,EAAA,SAAA;YACLC,KAAO,EAAA,MAAA;YACPC,IAAM,EAAA,SAAA;AACNC,YAAAA,QAAAA,EAAU/C,UAAQqC;AACpB,SAAA,CAAA;AACAW,QAAAA,IAAAA,EAAM5E,UAAW,CAAA,IAAIsE,IAAK1C,CAAAA,SAAAA,CAAQoC,WAAW,CAAI,EAAA;AAC/CW,YAAAA,QAAAA,EAAU/C,UAAQqC,QAAQ;YAC1BY,SAAW,EAAA;AACb,SAAA,CAAA;AACAC,QAAAA,MAAAA,EAAQC,uBAAkBnD,SAAQqC,CAAAA,QAAQ,EAAG,IAAIK,IAAAA,CAAK1C,UAAQoC,WAAW,CAAA;KAG7E,CAAA,GAAA,EAAA;AAEJ,IAAA,qBACEgB,eAACC,CAAAA,iBAAAA,EAAAA;QAAKC,WAAW5E,EAAAA,gBAAAA;;AACf,0BAAA4C,cAAA,CAACiC,oBAAQC,MAAM,EAAA;AACbC,gBAAAA,KAAAA,EAAOzD,UAAQ0D,IAAI;AACnBC,gBAAAA,QAAAA,gBACEP,eAAC3F,CAAAA,iBAAAA,EAAAA;oBAAKmG,GAAK,EAAA,CAAA;oBAAGC,UAAY,EAAA,CAAA;;sCACxBvC,cAACwC,CAAAA,uBAAAA,EAAAA;4BAAWC,SAAU,EAAA,YAAA;4BAAaC,OAAQ,EAAA,SAAA;sCACxC1B,mBAAuBH,IAAAA,cAAc,CAAC,GAAG,EAAEK,aAAc,CAAA,CAAC,GAAG,EAAC;;sCAEjElB,cAAC2C,CAAAA,kBAAAA,EAAAA;4BAAO,GAAGC,0BAAAA,CAAclE,SAAQmE,CAAAA,MAAM,CAAC;AAAGnE,4BAAAA,QAAAA,EAAAA,SAAAA,CAAQmE;;;;AAGvDC,gBAAAA,gBAAAA,gBAAkB9C,cAAC+C,CAAAA,sBAAAA,EAAAA;oBAAWC,QAAS,EAAA;;AACvCC,gBAAAA,aAAAA,EACE,CAACvE,SAAAA,CAAQwE,UAAU,kBACjBpB,eAAC3F,CAAAA,iBAAAA,EAAAA;oBAAKmG,GAAK,EAAA,CAAA;;sCACTR,eAACqB,CAAAA,gBAAAA,EAAAA;AACCC,4BAAAA,KAAAA,gBAAOpD,cAACqD,CAAAA,UAAAA,EAAAA,EAAAA,CAAAA;4BACRX,OAAQ,EAAA,UAAA;4BACRY,OAAS,EAAA,IAAA;4BACTC,WAAY,EAAA,KAAA;4BACZC,YAAa,EAAA,KAAA;AACbC,4BAAAA,YAAAA,EAAY7G,aAAc,CAAA;gCACxBW,EAAI,EAAA,sDAAA;gCACJwB,cAAgB,EAAA;AAClB,6BAAA,CAAA;4BACA2E,gBAAiB,EAAA,YAAA;;AAEjB,8CAAA1D,cAAA,CAAC2D,kBAAKC,IAAI,EAAA;AACRC,oCAAAA,QAAAA,EAAU,CAAC1F,SAAAA;oCACX2F,QAAUrH,EAAAA,sBAAAA;AACVsH,oCAAAA,SAAAA,gBAAW/D,cAACgE,CAAAA,YAAAA,EAAAA,EAAAA,CAAAA;8CAEXpH,aAAc,CAAA;wCACbW,EAAI,EAAA,sCAAA;wCACJwB,cAAgB,EAAA;AAClB,qCAAA;;AAEF,8CAAAiB,cAAA,CAAC2D,kBAAKC,IAAI,EAAA;AACRC,oCAAAA,QAAAA,EAAU,CAACzF,SAAAA;oCACX0F,QAAUpH,EAAAA,mBAAAA;oCACVgG,OAAQ,EAAA,QAAA;AACRqB,oCAAAA,SAAAA,gBAAW/D,cAACiE,CAAAA,WAAAA,EAAAA,EAAAA,CAAAA;8CAEXrH,aAAc,CAAA;wCACbW,EAAI,EAAA,wCAAA;wCACJwB,cAAgB,EAAA;AAClB,qCAAA;;8CAEF+C,eAAC7F,CAAAA,kBAAAA,EAAAA;oCACCiI,SAAU,EAAA,QAAA;oCACVC,cAAe,EAAA,QAAA;oCACfC,UAAW,EAAA,YAAA;oCACX9B,GAAK,EAAA,CAAA;oCACL+B,OAAS,EAAA,CAAA;;sDAETrE,cAACwC,CAAAA,uBAAAA,EAAAA;4CAAWE,OAAQ,EAAA,IAAA;4CAAK4B,UAAW,EAAA,MAAA;sDACjC1H,aAAc,CAAA;gDACbW,EAAI,EAAA,yCAAA;gDACJwB,cAAgB,EAAA;AAClB,6CAAA;;sDAEF+C,eAACU,CAAAA,uBAAAA,EAAAA;4CAAWE,OAAQ,EAAA,IAAA;4CAAK6B,KAAM,EAAA,YAAA;;8DAC7BvE,cAACwE,CAAAA,yBAAAA,EAAAA;oDAAaC,SAAW,EAAA,IAAIrD,IAAK1C,CAAAA,SAAAA,CAAQgG,SAAS;;gDAClD9H,aACC,CAAA;oDACEW,EAAI,EAAA,qDAAA;oDACJwB,cACE,EAAA;iDAEJ,EAAA;oDAAEW,SAAWD,EAAAA,gBAAAA,EAAAA;AAAoBkB,oDAAAA;AAAiB,iDAAA;;;;;;;sCAK1DX,cAAC2E,CAAAA,mBAAAA,EAAAA;4BAAOC,IAAK,EAAA,GAAA;4BAAIlC,OAAQ,EAAA,UAAA;4BAAWmC,OAASxF,EAAAA,aAAAA;sCAC1CzC,aAAc,CAAA;gCACbW,EAAI,EAAA,yCAAA;gCACJwB,cAAgB,EAAA;AAClB,6BAAA;;AAEDV,wBAAAA,UAAAA,iBACC2B,cAAC2E,CAAAA,mBAAAA,EAAAA;4BACCC,IAAK,EAAA,GAAA;4BACLlC,OAAQ,EAAA,SAAA;AACRmC,4BAAAA,OAAAA,EAASlG,oBAAqBD,CAAAA,SAAAA,CAAQnB,EAAE,CAACuH,QAAQ,EAAA,CAAA;4BACjDC,OAASrH,EAAAA,YAAAA;AACTmG,4BAAAA,QAAAA,EAAUnF,UAAQ+B,OAAO,CAACtB,IAAI,CAACuB,KAAK,KAAK,CAAA;sCAExC9D,aAAc,CAAA;gCACbW,EAAI,EAAA,yCAAA;gCACJwB,cAAgB,EAAA;AAClB,6BAAA;AAEA,yBAAA,CAAA,GAAA;;;;AAKXpC,YAAAA;;;AAGP,CAAA;AAEA,MAAMwG,gBAAAA,GAAmBjH,uBAAO8I,CAAAA,uBAAAA,CAAW;;;;AAI3C,CAAC;AAED;;AAEkG,qGAClG,MAAMC,gBAAmB,GAAA;AAAC,IAAA,aAAA;AAAe,IAAA,QAAA;AAAU,IAAA;AAAS,CAAA;AAC5D,MAAMC,0BAA6B,GAAA;AAAC,IAAA,aAAA;AAAe,IAAA;AAAS,CAAA;AAC5D,MAAMC,wBAAwB,CAACC,KAAAA,GAAAA;AAC7B,IAAA,IAAIA,UAAU,QAAU,EAAA;QACtB,OAAO;YACL7H,EAAI,EAAA,8DAAA;YACJwB,cAAgB,EAAA;AAClB,SAAA;AACF;AAEA,IAAA,IAAIqG,UAAU,QAAU,EAAA;QACtB,OAAO;YACL7H,EAAI,EAAA,8DAAA;YACJwB,cAAgB,EAAA;AAClB,SAAA;AACF;IAEA,OAAO;QACLxB,EAAI,EAAA,mEAAA;QACJwB,cAAgB,EAAA;AAClB,KAAA;AACF,CAAA;AAMA,MAAMsG,kBAAqB,GAAA,CAAC,EAAErI,SAAS,EAA2B,GAAA;IAChE,MAAM,EAAEJ,aAAa,EAAE,GAAGG,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,CAAC,EAAEuI,KAAK,EAAE,EAAEC,SAAS,GAAGC,0BAAAA,EAAAA;IAC9B,MAAM,EAAE5H,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;IAC/B,MAAM,EAAEC,cAAc,EAAE,GAAGC,8BAAAA,EAAAA;IAC3B,MAAM,EACJb,IAAMuI,EAAAA,WAAW,EACjBtI,SAAAA,EAAWuI,gBAAgB,EAC3BrI,KAAOsI,EAAAA,YAAY,EACpB,GAAGrI,0BAAmB,CAAA;QAAEC,EAAIP,EAAAA;AAAU,KAAA,CAAA;AACvC,IAAA,MAAM,EACJgB,cAAgB,EAAA,EAAEG,SAAS,EAAE,EAC9B,GAAGF,mBAAQC,CAAAA,qBAAAA,CAAAA;AACZ,IAAA,MAAM0H,mBAAmBC,wBAAa,CAAA,oBAAA,EAAsB,CAACvF,KAAAA,GAAUA,MAAMsF,gBAAgB,CAAA;;AAG7F,IAAA,MAAM,EAAEE,gBAAgB,EAAEC,cAAc,EAAE,GACxCH,iBAAiB,6DAA+D,EAAA;QAC9EE,gBAAkB,EAAA;AAChB,YAAA;gBACE1C,KAAO,EAAA;oBACL7F,EAAI,EAAA,8DAAA;oBACJwB,cAAgB,EAAA;AAClB,iBAAA;gBACAqD,IAAM,EAAA;AACR;AACD,SAAA;QACD2D,cAAgB,EAAA;AAClB,KAAA,CAAA;AAEF,IAAA,MAAMrH,YAAU+G,WAAavI,EAAAA,IAAAA;IAC7B,MAAM8I,eAAAA,GAAkBV,OAAOW,OAAW,IAAA,aAAA;AAE1C,IAAA,MAAM,EACJ9I,SAAS,EACT+I,UAAU,EACVC,OAAO,EACPjJ,IAAI,EACJG,KAAAA,EAAO+I,mBAAmB,EAC3B,GAAGC,iCAA0B,CAAA;AAC5B,QAAA,GAAGf,KAAK;AACRtI,QAAAA;AACF,KAAA,CAAA;IAEA,MAAM,CAACsJ,oBAAoB,GAAGC,sCAAAA,EAAAA;IAE9B,MAAMC,gBAAAA,GAAmB,OACvBC,CAAAA,EACAC,QACAC,EAAAA,UAAAA,GAAAA;QAEA,MAAM/H,QAAAA,GAAW,MAAM0H,mBAAoB,CAAA;YACzCM,MAAQ,EAAA;AACN5J,gBAAAA,SAAAA;AACA0J,gBAAAA;AACF,aAAA;YACAG,IAAM,EAAA;gBACJhI,IAAM4H,EAAAA,CAAAA,CAAEK,MAAM,CAAC1B;AACjB,aAAA;AACAE,YAAAA,KAAAA;AACAqB,YAAAA;AACF,SAAA,CAAA;AAEA,QAAA,IAAI,WAAW/H,QAAU,EAAA;YACvB,IAAIQ,wBAAAA,CAAaR,QAASvB,CAAAA,KAAK,CAAG,EAAA;;gBAEhCO,kBAAmB,CAAA;oBACjBiB,IAAM,EAAA,QAAA;oBACNC,OAAShB,EAAAA,cAAAA,CAAec,SAASvB,KAAK;AACxC,iBAAA,CAAA;aACK,MAAA;;gBAELO,kBAAmB,CAAA;oBACjBiB,IAAM,EAAA,QAAA;AACNC,oBAAAA,OAAAA,EAASlC,aAAc,CAAA;wBAAEW,EAAI,EAAA,oBAAA;wBAAsBwB,cAAgB,EAAA;AAAoB,qBAAA;AACzF,iBAAA,CAAA;AACF;AACF;AACF,KAAA;AAEA,IAAA,IAAI5B,aAAauI,gBAAkB,EAAA;QACjC,qBAAO1F,cAAA,CAACC,iBAAKC,OAAO,EAAA,EAAA,CAAA;AACtB;AAEA,IAAA,MAAM6G,iBAAiB7J,IAAMA,EAAAA,IAAAA;AAC7B,IAAA,MAAM8J,cAAc9J,IAAMiC,EAAAA,IAAAA;IAC1B,MAAM8H,YAAAA,GAAeD,WAAaC,EAAAA,YAAAA,IAAgB,EAAC;IAChCD,WAAaE,EAAAA,UAAAA,IAAc;IAE9C,IAAI/G,oBAAAA,CAAiBwF,YAAiB,CAAA,IAAA,CAACjH,SAAS,EAAA;AAC9C,QAAA,MAAMyI,cAAc,EAAE;QACtB,IAAIxB,YAAAA,IAAgB,UAAUA,YAAc,EAAA;AAC1CwB,YAAAA,WAAAA,CAAYC,IAAI,CAAC;AACf5G,gBAAAA,IAAAA,EAAMmF,aAAanF;AACrB,aAAA,CAAA;AACF;QACA,IAAI4F,mBAAAA,IAAuB,UAAUA,mBAAqB,EAAA;AACxDe,YAAAA,WAAAA,CAAYC,IAAI,CAAC;AACf5G,gBAAAA,IAAAA,EAAM4F,oBAAoB5F;AAC5B,aAAA,CAAA;AACF;AACA,QAAA,qBACER,cAACI,CAAAA,uBAAAA,EAAAA;YACCC,EAAG,EAAA,IAAA;YACHC,KAAO,EAAA;gBACLC,MAAQ4G,EAAAA;AACV;;AAGN;IAEA,IAAIhB,OAAAA,IAAW,CAACY,cAAgB,EAAA;QAC9B,qBAAO/G,cAAA,CAACC,iBAAKoH,KAAK,EAAA,EAAA,CAAA;AACpB;AAEA,IAAA,IAAIC,OAAOC,IAAI,CAACR,cAAgBS,CAAAA,CAAAA,MAAM,KAAK,CAAG,EAAA;QAC5C,qBACExH,cAAA,CAACiC,oBAAQwF,OAAO,EAAA;AACd,YAAA,QAAA,gBAAAzH,cAAC0H,CAAAA,6BAAAA,EAAAA;AACCC,gBAAAA,MAAAA,gBACE3H,cAAC4H,CAAAA,uBAAAA,EAAAA;oBACCC,GAAKC,EAAAA,mBAAAA;oBACLzH,EAAI,EAAA;wBACF0H,QAAU,EAAA;AACZ,qBAAA;oBACAC,KAAO,EAAA;wBAAEC,cAAgB,EAAA;AAAO,qBAAA;oBAChCvF,OAAQ,EAAA,WAAA;8BAEP9F,aAAc,CAAA;wBACbW,EAAI,EAAA,yDAAA;wBACJwB,cAAgB,EAAA;AAClB,qBAAA;;AAGJmJ,gBAAAA,IAAAA,gBAAMlI,cAACmI,CAAAA,sBAAAA,EAAAA;oBAAeC,KAAM,EAAA;;AAC5BC,gBAAAA,OAAAA,EAASzL,aAAc,CAAA;oBACrBW,EAAI,EAAA,iDAAA;oBACJwB,cACE,EAAA;AACJ,iBAAA;;;AAIR;AAEA,IAAA,MAAMuJ,eAAe1L,aAAc,CAAA;QACjCW,EAAI,EAAA,0DAAA;QACJwB,cAAgB,EAAA;AAClB,KAAA,CAAA;AACA,IAAA,MAAMwJ,OAAU,GAAA;AACXzC,QAAAA,GAAAA,gBAAAA;AACH,QAAA;YACE1C,KAAO,EAAA;gBACL7F,EAAI,EAAA,sEAAA;gBACJwB,cAAgB,EAAA;AAClB,aAAA;YACAqD,IAAM,EAAA;AACR,SAAA;AACA,QAAA;YACEgB,KAAO,EAAA;gBACL7F,EAAI,EAAA,gEAAA;gBACJwB,cAAgB,EAAA;AAClB,aAAA;YACAqD,IAAM,EAAA;AACR,SAAA;WACI,CAAC1D,SAAAA,CAAQwE,UAAU,GACnB;AACE,YAAA;gBACEE,KAAO,EAAA;oBACL7F,EAAI,EAAA,gEAAA;oBACJwB,cAAgB,EAAA;AAClB,iBAAA;gBACAqD,IAAM,EAAA;AACR;AACD,SAAA,GACD;AACL,KAAA;IAED,MAAMoG,OAAAA,GAAUzC,iBAAiBd,gBAAmBC,GAAAA,0BAAAA;IAEpD,qBACElF,cAAA,CAACiC,oBAAQwF,OAAO,EAAA;AACd,QAAA,QAAA,gBAAA3F,eAAC3F,CAAAA,iBAAAA,EAAAA;YAAKmG,GAAK,EAAA,CAAA;YAAG4B,SAAU,EAAA,QAAA;YAASE,UAAW,EAAA,SAAA;;8BAC1CpE,cAAC7D,CAAAA,iBAAAA,EAAAA;AACC,oBAAA,QAAA,gBAAA6D,cAACyI,CAAAA,yBAAAA,EAAAA;wBACCC,WAAaJ,EAAAA,YAAAA;wBACb7E,YAAY6E,EAAAA,YAAAA;wBACZK,gBAAkB,EAAA,CAACvD,QACjBxI,aACE,CAAA;gCACEW,EAAI,EAAA,CAAC,mDAAmD,CAAC;gCACzDwB,cAAgB,EAAA,CAAC,kBAAkB;6BAErC,EAAA;gCACEkH,OAASb,EAAAA;AACX,6BAAA,CAAA;AAGJA,wBAAAA,KAAAA,EAAOxI,cAAcuI,qBAAsBa,CAAAA,eAAAA,CAAAA,CAAAA;wBAC3C4C,QAAU,EAAA,CAACxD,QAAUG,QAAS,CAAA;gCAAEU,OAASb,EAAAA;AAA8B,6BAAA,CAAA;AAEtEoD,wBAAAA,QAAAA,EAAAA,OAAAA,CAAQK,GAAG,CAAC,CAACC,MAAAA,iBACZ9I,cAAC+I,CAAAA,+BAAAA,EAAAA;gCAAgC3D,KAAO0D,EAAAA,MAAAA;AACrClM,gCAAAA,QAAAA,EAAAA,aAAAA,CAAcuI,qBAAsB2D,CAAAA,MAAAA,CAAAA;AADdA,6BAAAA,EAAAA,MAAAA,CAAAA;;;AAM9BxB,gBAAAA,MAAAA,CAAOC,IAAI,CAACR,cAAAA,CAAAA,CAAgB8B,GAAG,CAAC,CAACG,oBAChClH,eAAC3F,CAAAA,iBAAAA,EAAAA;wBAAmCmG,GAAK,EAAA,CAAA;wBAAG4B,SAAU,EAAA,QAAA;wBAASE,UAAW,EAAA,SAAA;;0CACxEpE,cAAC7D,CAAAA,iBAAAA,EAAAA;gCAAK8M,IAAK,EAAA,WAAA;gCAAYxF,YAAYuF,EAAAA,GAAAA;AACjC,gCAAA,QAAA,gBAAAhJ,cAAC2C,CAAAA,kBAAAA,EAAAA;AAAOqG,oCAAAA,QAAAA,EAAAA;;;AAEV,0CAAAhJ,cAAA,CAACkJ,kBAAMC,IAAI,EAAA;gCACTC,IAAMrC,EAAAA,cAAc,CAACiC,GAAI,CAAA,CAACH,GAAG,CAAC,CAACQ,QAAU;AACvC,wCAAA,GAAGA,IAAI;AACP9L,wCAAAA,EAAAA,EAAI+L,MAAOD,CAAAA,IAAAA,CAAKE,KAAK,CAAChM,EAAE;qCAC1B,CAAA,CAAA;gCACAgL,OAASA,EAAAA,OAAAA;AACTpL,gCAAAA,SAAAA,EAAWA,SAAa+I,IAAAA,UAAAA;wDAExBpE,eAAA,CAACoH,kBAAMzB,OAAO,EAAA;;AACZ,sDAAAzH,cAAA,CAACkJ,kBAAMM,IAAI,EAAA;sDACRjB,OAAQM,CAAAA,GAAG,CAAC,CAAC,EAAEzF,KAAK,EAAEhB,IAAI,EAAE,iBAC3BpC,cAACkJ,CAAAA,iBAAAA,CAAMO,UAAU,EAAA;AAAYrG,oDAAAA,KAAAA,EAAOxG,aAAcwG,CAAAA,KAAAA,CAAAA;oDAAQhB,IAAMA,EAAAA;AAAzCA,iDAAAA,EAAAA,IAAAA,CAAAA;;AAG3B,sDAAApC,cAAA,CAACkJ,kBAAMhJ,OAAO,EAAA,EAAA,CAAA;AACd,sDAAAF,cAAA,CAACkJ,kBAAMQ,IAAI,EAAA;sDACR3C,cAAc,CAACiC,IAAI,CAACH,GAAG,CACtB,CAAC,EAAEtL,EAAE,EAAEoM,WAAW,EAAEC,MAAM,EAAE/K,IAAI,EAAE0K,KAAK,EAAE1G,MAAM,EAAE,EAAEgH,WAAAA,iBACjD/H,eAACgI,CAAAA,eAAAA,EAAAA;;sEACC9J,cAAC+J,CAAAA,eAAAA,EAAAA;4DAAG3B,KAAM,EAAA,KAAA;4DAAM4B,QAAS,EAAA,OAAA;AACvB,4DAAA,QAAA,gBAAAhK,cAACwC,CAAAA,uBAAAA,EAAAA;gEAAWyH,QAAQ,EAAA,IAAA;AAAE,gEAAA,QAAA,EAAA,CAAC,EACrBN,WAAYO,CAAAA,cAAc,IAAIX,KAAMhM,CAAAA,EAAE,CACvC;;;AAEFwI,wDAAAA,cAAAA,kBACC/F,cAAC+J,CAAAA,eAAAA,EAAAA;4DAAG3B,KAAM,EAAA,KAAA;AACR,4DAAA,QAAA,gBAAApI,cAACwC,CAAAA,uBAAAA,EAAAA;AAAY,gEAAA,QAAA,EAAA,CAAC,EAAEoH,MAAQxH,EAAAA,IAAAA,GAAOwH,OAAOxH,IAAI,GAAG,IAAI;;;sEAIrDpC,cAAC+J,CAAAA,eAAAA,EAAAA;4DAAG3B,KAAM,EAAA,KAAA;AACR,4DAAA,QAAA,gBAAApI,cAACwC,CAAAA,uBAAAA,EAAAA;AAAYmH,gEAAAA,QAAAA,EAAAA,WAAAA,CAAYQ,WAAW,IAAI;;;sEAE1CnK,cAAC+J,CAAAA,eAAAA,EAAAA;4DAAG3B,KAAM,EAAA,KAAA;sEACP1J,SAAQwE,CAAAA,UAAU,iBACjBlD,cAACwC,CAAAA,uBAAAA,EAAAA;0EACE5F,aACC,CAAA;oEACEW,EAAI,EAAA,6DAAA;oEACJwB,cACE,EAAA;iEAEJ,EAAA;AACEqL,oEAAAA,SAAAA,EAAWvL,IAAS,KAAA,SAAA;oEACpBwL,CAAG,EAAA,CAAC1N,yBACFqD,cAACwC,CAAAA,uBAAAA,EAAAA;4EAAW8B,UAAW,EAAA,MAAA;AAAQ3H,4EAAAA,QAAAA,EAAAA;;AAEnC,iEAAA;+EAIJqD,cAACsK,CAAAA,yCAAAA,EAAAA;gEACCC,QAAU1L,EAAAA,IAAAA;AACV2L,gEAAAA,YAAAA,EAAc,CAAC/D,CAAAA,GAAMD,gBAAiBC,CAAAA,CAAAA,EAAGlJ,EAAI,EAAA;AAACyL,wEAAAA,GAAAA;AAAKa,wEAAAA;AAAY,qEAAA,CAAA;AAC/DzH,gEAAAA,IAAAA,EAAM,CAAC,eAAe,EAAE7E,EAAAA,CAAG,KAAK,CAAC;AACjCsG,gEAAAA,QAAAA,EAAU,CAAC1F;;;wDAIhB,CAACO,SAAAA,CAAQwE,UAAU,kBAClBpB,eAAA,CAAA2I,mBAAA,EAAA;;8EACEzK,cAAC+J,CAAAA,eAAAA,EAAAA;oEAAG3B,KAAM,EAAA,KAAA;oEAAMsC,QAAS,EAAA,OAAA;AACvB,oEAAA,QAAA,gBAAA1K,cAAC2K,CAAAA,6CAAAA,EAAAA;wEACChD,MAAQ9I,EAAAA,IAAAA;AACR+L,wEAAAA,MAAAA,EAAQ3D,YAAc,GAAC0C,WAAYkB,CAAAA,GAAG,CAAC;wEACvCtB,KAAOA,EAAAA,KAAAA;wEACP1G,MAAQA,EAAAA;;;8EAGZ7C,cAAC+J,CAAAA,eAAAA,EAAAA;AACC,oEAAA,QAAA,gBAAA/J,cAAC7D,CAAAA,iBAAAA,EAAAA;wEAAKgI,cAAe,EAAA,UAAA;gGACnBrC,eAAA,CAACgJ,oCAAkB3B,IAAI,EAAA;;AACrB,8FAAAnJ,cAAA,CAAC8K,oCAAkBC,0BAA0B,EAAA;AAC3CC,oFAAAA,cAAAA,EAAgBrB,YAAYkB,GAAG;AAC/BI,oFAAAA,UAAAA,EAAY1B,MAAM0B,UAAU;AAC5BrB,oFAAAA,MAAAA,EAAQA,MAAQpJ,EAAAA;;AAElB,8FAAAR,cAAA,CAAC8K,oCAAkBI,uBAAuB,EAAA;AACxClO,oFAAAA,SAAAA,EAAW0B,UAAQnB,EAAE;oFACrBmJ,QAAUnJ,EAAAA;;;;;;;;;AA7DfA,iDAAAA,EAAAA,EAAAA,CAAAA;;;;;;uBAtBV,CAAC,eAAe,EAAEyL,GAAAA,CAAI,CAAC,CAAA,CAAA;AAkGpC,8BAAAlH,eAAA,CAACqJ,uBAAWhC,IAAI,EAAA;AACb,oBAAA,GAAGnC,aAAaoE,UAAU;AAC3BC,oBAAAA,eAAAA,EAAiBrE,aAAaoE,UAAYE,EAAAA,QAAAA;;AAE1C,sCAAAtL,cAAA,CAACmL,uBAAWI,QAAQ,EAAA,EAAA,CAAA;AACpB,sCAAAvL,cAAA,CAACmL,uBAAWK,KAAK,EAAA,EAAA;;;;;;AAK3B,CAAA;AAEA;;AAEkG,2GAC5FC,kBAAqB,GAAA,IAAA;IACzB,MAAM,EAAE7O,aAAa,EAAE,GAAGG,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,SAAS,EAAE,GAAGC,wBAAAA,EAAAA;IACtB,MAAM,EAAEW,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;IAC/B,MAAM,EAAEC,cAAc,EAAE,GAAGC,8BAAAA,EAAAA;AAC3B,IAAA,MAAM2N,QAAWC,GAAAA,0BAAAA,EAAAA;AACjB,IAAA,MAAM,CAACC,iBAAmBC,EAAAA,oBAAAA,CAAqB,GAAGC,gBAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AACjE,IAAA,MAAM,CAACC,iBAAmBC,EAAAA,gBAAAA,CAAiB,GAAGH,gBAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;IAE7D,MAAM,EACJ5O,SAAWC,EAAAA,gBAAgB,EAC3BF,IAAI,EACJgP,SAAWC,EAAAA,gBAAgB,EAC5B,GAAG7O,0BACF,CAAA;QAAEC,EAAIP,EAAAA;KACN,EAAA;AACEQ,QAAAA,IAAAA,EAAM,CAACR;AACT,KAAA,CAAA;AAEF,IAAA,MAAM,EAAEE,IAAMkP,EAAAA,YAAY,EAAEjP,SAAWkP,EAAAA,iBAAiB,EAAE,GAAGC,kCAAAA,EAAAA;AAC7D,IAAA,MAAM,CAACC,aAAe,EAAA,EAAEpP,WAAWqP,gBAAgB,EAAE,CAAC,GAAGC,gCAAAA,EAAAA;IACzD,MAAM,CAACC,cAAc,GAAGC,gCAAAA,EAAAA;AAExB,IAAA,MAAMlQ,sBAAyB,GAAA,IAAA;QAC7BoP,oBAAqB,CAAA,CAACe,OAAS,CAACA,IAAAA,CAAAA;AAClC,KAAA;AAEA,IAAA,MAAMC,gBAAmB,GAAA,IAAA;AACvB,QAAA,IAAIpH,aAAa1E,QAAU,EAAA;AACzB,YAAA,OAAO0E,YAAY1E,QAAQ;SACtB,MAAA;YACL,IAAIqL,YAAAA,EAAclP,KAAK4P,eAAiB,EAAA;gBACtC,OAAOV,YAAAA,CAAalP,IAAI,CAAC4P,eAAe;AAC1C;YACA,OAAO,IAAA;AACT;AACF,KAAA;AAEA,IAAA,MAAMpQ,mBAAsB,GAAA,IAAMuP,gBAAiB,CAAA,CAACc,YAAc,CAACA,SAAAA,CAAAA;AAEnE,IAAA,IAAI3P,oBAAoBiP,iBAAmB,EAAA;AACzC,QAAA,qBACErM,cAACxD,CAAAA,oBAAAA,EAAAA;YACCC,sBAAwBA,EAAAA,sBAAAA;YACxBC,mBAAqBA,EAAAA,mBAAAA;oCAErBsD,cAAA,CAACC,iBAAKC,OAAO,EAAA,EAAA;;AAGnB;AAEA,IAAA,IAAI,CAAClD,SAAW,EAAA;AACd,QAAA,qBAAOgD,cAACI,CAAAA,uBAAAA,EAAAA;YAASC,EAAG,EAAA;;AACtB;AAEA,IAAA,MAAMoF,WAAc,GAAC0G,gBAAoBjP,IAAAA,IAAAA,EAAMA,IAAS,IAAA,IAAA;IAExD,MAAMiF,KAAAA,GAAQsD,aAAarD,IAAQ,IAAA,EAAA;AACnC,IAAA,MAAMrB,QAAW8L,GAAAA,gBAAAA,EAAAA;IACjB,MAAM/L,WAAAA,GACJ2E,aAAa3E,WAAeC,IAAAA,QAAAA,GAAWiM,yBAAevH,WAAY3E,CAAAA,WAAW,EAAEC,QAAY,CAAA,GAAA,IAAA;;AAE7F,IAAA,MAAMI,IAAOL,GAAAA,WAAAA,GAAcmM,MAAOnM,CAAAA,WAAAA,EAAa,YAAgBoM,CAAAA,GAAAA,SAAAA;AAC/D,IAAA,MAAMxL,IAAOZ,GAAAA,WAAAA,GAAcmM,MAAOnM,CAAAA,WAAAA,EAAa,OAAW,CAAA,GAAA,EAAA;AAE1D,IAAA,MAAMqM,oBAAoB,OAAOC,MAAAA,GAAAA;QAC/B,MAAMxO,QAAAA,GAAW,MAAM2N,aAAc,CAAA;YACnChP,EAAIP,EAAAA,SAAAA;AACJoF,YAAAA,IAAAA,EAAMgL,OAAOhL,IAAI;AACjBtB,YAAAA,WAAAA,EAAasM,OAAOtM,WAAW;AAC/BC,YAAAA,QAAAA,EAAUqM,OAAOrM;AACnB,SAAA,CAAA;AAEA,QAAA,IAAI,UAAUnC,QAAU,EAAA;;YAEtBhB,kBAAmB,CAAA;gBACjBiB,IAAM,EAAA,SAAA;AACNC,gBAAAA,OAAAA,EAASlC,aAAc,CAAA;oBACrBW,EAAI,EAAA,6DAAA;oBACJwB,cAAgB,EAAA;AAClB,iBAAA;AACF,aAAA,CAAA;AACAtC,YAAAA,sBAAAA,EAAAA;AACF,SAAA,MAAO,IAAI2C,wBAAAA,CAAaR,QAASvB,CAAAA,KAAK,CAAG,EAAA;;YAEvCO,kBAAmB,CAAA;gBACjBiB,IAAM,EAAA,QAAA;gBACNC,OAAShB,EAAAA,cAAAA,CAAec,SAASvB,KAAK;AACxC,aAAA,CAAA;SACK,MAAA;;YAELO,kBAAmB,CAAA;gBACjBiB,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAASlC,aAAc,CAAA;oBAAEW,EAAI,EAAA,oBAAA;oBAAsBwB,cAAgB,EAAA;AAAoB,iBAAA;AACzF,aAAA,CAAA;AACF;AACF,KAAA;AAEA,IAAA,MAAMsO,mBAAsB,GAAA,UAAA;QAC1B,MAAMzO,QAAAA,GAAW,MAAM8N,aAAc,CAAA;YACnCnP,EAAIP,EAAAA;AACN,SAAA,CAAA;AAEA,QAAA,IAAI,UAAU4B,QAAU,EAAA;YACtB8M,QAAS,CAAA,IAAA,CAAA;AACX,SAAA,MAAO,IAAItM,wBAAAA,CAAaR,QAASvB,CAAAA,KAAK,CAAG,EAAA;;YAEvCO,kBAAmB,CAAA;gBACjBiB,IAAM,EAAA,QAAA;gBACNC,OAAShB,EAAAA,cAAAA,CAAec,SAASvB,KAAK;AACxC,aAAA,CAAA;SACK,MAAA;;YAELO,kBAAmB,CAAA;gBACjBiB,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAASlC,aAAc,CAAA;oBAAEW,EAAI,EAAA,oBAAA;oBAAsBwB,cAAgB,EAAA;AAAoB,iBAAA;AACzF,aAAA,CAAA;AACF;AACF,KAAA;AAEA,IAAA,qBACE+C,eAACtF,CAAAA,oBAAAA,EAAAA;QACCC,sBAAwBA,EAAAA,sBAAAA;QACxBC,mBAAqBA,EAAAA,mBAAAA;;0BAErBsD,cAACqF,CAAAA,kBAAAA,EAAAA;gBAAmBrI,SAAWA,EAAAA;;0BAC/BgD,cAACsN,CAAAA,yBAAAA,EAAAA;gBACCC,IAAM3B,EAAAA,iBAAAA;gBACN4B,WAAa/Q,EAAAA,sBAAAA;gBACbgR,YAAcN,EAAAA,iBAAAA;AACdhQ,gBAAAA,SAAAA,EAAWC,gBAAoBoP,IAAAA,gBAAAA;gBAC/BkB,aAAe,EAAA;AACbtL,oBAAAA,IAAAA,EAAMD,KAAS,IAAA,EAAA;AACfrB,oBAAAA,WAAAA;AACAK,oBAAAA,IAAAA;AACAO,oBAAAA,IAAAA;AACAb,oBAAAA,WAAAA,EAAaD,OAAQE,CAAAA,WAAAA,CAAAA;AACrBC,oBAAAA;AACF;;AAEF,0BAAAf,cAAA,CAAC2N,oBAAOxE,IAAI,EAAA;gBAACoE,IAAMvB,EAAAA,iBAAAA;gBAAmB4B,YAAclR,EAAAA,mBAAAA;AAClD,gBAAA,QAAA,gBAAAsD,cAAC6N,CAAAA,yBAAAA,EAAAA;oBAAcC,SAAWT,EAAAA,mBAAAA;8BACvBzQ,aAAc,CAAA;wBACbW,EAAI,EAAA,8CAAA;wBACJwB,cAAgB,EAAA;AAClB,qBAAA;;;;;AAKV;;;;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { useNotification, useAPIErrorHandler, Page, ConfirmDialog, useRBAC, useTracking, Layouts, BackButton, useQueryParams, useStrapiApp, Table, Pagination, isFetchError } from '@strapi/admin/strapi-admin';
|
|
4
|
-
import { Flex,
|
|
5
|
-
import { Pencil, Trash
|
|
4
|
+
import { Flex, SimpleMenu, Dialog, Main, Typography, Badge, Menu, Button, EmptyStateLayout, LinkButton, SingleSelect, SingleSelectOption, Tr, Td } from '@strapi/design-system';
|
|
5
|
+
import { More, Pencil, Trash } from '@strapi/icons';
|
|
6
6
|
import { EmptyDocuments } from '@strapi/icons/symbols';
|
|
7
7
|
import format from 'date-fns/format';
|
|
8
8
|
import { utcToZonedTime } from 'date-fns-tz';
|
|
@@ -29,32 +29,6 @@ import { getBadgeProps } from './ReleasesPage.mjs';
|
|
|
29
29
|
border-bottom-left-radius: ${({ theme })=>theme.borderRadius};
|
|
30
30
|
border-top: 1px solid ${({ theme })=>theme.colors.neutral150};
|
|
31
31
|
`;
|
|
32
|
-
const StyledMenuItem = styled(MenuItem)`
|
|
33
|
-
svg path {
|
|
34
|
-
fill: ${({ theme, disabled })=>disabled && theme.colors.neutral500};
|
|
35
|
-
}
|
|
36
|
-
span {
|
|
37
|
-
color: ${({ theme, disabled })=>disabled && theme.colors.neutral500};
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
&:hover {
|
|
41
|
-
background: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}100`]};
|
|
42
|
-
}
|
|
43
|
-
`;
|
|
44
|
-
const PencilIcon = styled(Pencil)`
|
|
45
|
-
width: ${({ theme })=>theme.spaces[4]};
|
|
46
|
-
height: ${({ theme })=>theme.spaces[4]};
|
|
47
|
-
path {
|
|
48
|
-
fill: ${({ theme })=>theme.colors.neutral600};
|
|
49
|
-
}
|
|
50
|
-
`;
|
|
51
|
-
const TrashIcon = styled(Trash)`
|
|
52
|
-
width: ${({ theme })=>theme.spaces[4]};
|
|
53
|
-
height: ${({ theme })=>theme.spaces[4]};
|
|
54
|
-
path {
|
|
55
|
-
fill: ${({ theme })=>theme.colors.danger600};
|
|
56
|
-
}
|
|
57
|
-
`;
|
|
58
32
|
const ReleaseDetailsLayout = ({ toggleEditReleaseModal, toggleWarningSubmit, children })=>{
|
|
59
33
|
const { formatMessage, formatDate, formatTime } = useIntl();
|
|
60
34
|
const { releaseId } = useParams();
|
|
@@ -214,46 +188,23 @@ const ReleaseDetailsLayout = ({ toggleEditReleaseModal, toggleWarningSubmit, chi
|
|
|
214
188
|
}),
|
|
215
189
|
popoverPlacement: "bottom-end",
|
|
216
190
|
children: [
|
|
217
|
-
/*#__PURE__*/ jsx(
|
|
191
|
+
/*#__PURE__*/ jsx(Menu.Item, {
|
|
218
192
|
disabled: !canUpdate,
|
|
219
193
|
onSelect: toggleEditReleaseModal,
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
width: "100%",
|
|
225
|
-
children: [
|
|
226
|
-
/*#__PURE__*/ jsx(PencilIcon, {}),
|
|
227
|
-
/*#__PURE__*/ jsx(Typography, {
|
|
228
|
-
ellipsis: true,
|
|
229
|
-
children: formatMessage({
|
|
230
|
-
id: 'content-releases.header.actions.edit',
|
|
231
|
-
defaultMessage: 'Edit'
|
|
232
|
-
})
|
|
233
|
-
})
|
|
234
|
-
]
|
|
194
|
+
startIcon: /*#__PURE__*/ jsx(Pencil, {}),
|
|
195
|
+
children: formatMessage({
|
|
196
|
+
id: 'content-releases.header.actions.edit',
|
|
197
|
+
defaultMessage: 'Edit'
|
|
235
198
|
})
|
|
236
199
|
}),
|
|
237
|
-
/*#__PURE__*/ jsx(
|
|
200
|
+
/*#__PURE__*/ jsx(Menu.Item, {
|
|
238
201
|
disabled: !canDelete,
|
|
239
202
|
onSelect: toggleWarningSubmit,
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
width: "100%",
|
|
246
|
-
children: [
|
|
247
|
-
/*#__PURE__*/ jsx(TrashIcon, {}),
|
|
248
|
-
/*#__PURE__*/ jsx(Typography, {
|
|
249
|
-
ellipsis: true,
|
|
250
|
-
textColor: "danger600",
|
|
251
|
-
children: formatMessage({
|
|
252
|
-
id: 'content-releases.header.actions.delete',
|
|
253
|
-
defaultMessage: 'Delete'
|
|
254
|
-
})
|
|
255
|
-
})
|
|
256
|
-
]
|
|
203
|
+
variant: "danger",
|
|
204
|
+
startIcon: /*#__PURE__*/ jsx(Trash, {}),
|
|
205
|
+
children: formatMessage({
|
|
206
|
+
id: 'content-releases.header.actions.delete',
|
|
207
|
+
defaultMessage: 'Delete'
|
|
257
208
|
})
|
|
258
209
|
}),
|
|
259
210
|
/*#__PURE__*/ jsxs(ReleaseInfoWrapper, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReleaseDetailsPage.mjs","sources":["../../../admin/src/pages/ReleaseDetailsPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n Pagination,\n Table,\n BackButton,\n ConfirmDialog,\n useTracking,\n useAPIErrorHandler,\n useNotification,\n useQueryParams,\n useRBAC,\n isFetchError,\n useStrapiApp,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Flex,\n Main,\n Tr,\n Td,\n Typography,\n Badge,\n SingleSelect,\n SingleSelectOption,\n EmptyStateLayout,\n LinkButton,\n Dialog,\n SimpleMenu,\n MenuItem,\n} from '@strapi/design-system';\nimport { More, Pencil, Trash } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport format from 'date-fns/format';\nimport { utcToZonedTime } from 'date-fns-tz';\nimport { useIntl } from 'react-intl';\nimport { useParams, useNavigate, Link as ReactRouterLink, Navigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { EntryValidationPopover } from '../components/EntryValidationPopover';\nimport { RelativeTime } from '../components/RelativeTime';\nimport { ReleaseActionMenu } from '../components/ReleaseActionMenu';\nimport { ReleaseActionOptions } from '../components/ReleaseActionOptions';\nimport { ReleaseModal, FormValues } from '../components/ReleaseModal';\nimport { PERMISSIONS } from '../constants';\nimport {\n GetReleaseActionsQueryParams,\n useGetReleaseActionsQuery,\n useGetReleaseQuery,\n useGetReleaseSettingsQuery,\n useUpdateReleaseMutation,\n useUpdateReleaseActionMutation,\n usePublishReleaseMutation,\n useDeleteReleaseMutation,\n releaseApi,\n} from '../services/release';\nimport { useTypedDispatch } from '../store/hooks';\nimport { isBaseQueryError } from '../utils/api';\nimport { getTimezoneOffset } from '../utils/time';\n\nimport { getBadgeProps } from './ReleasesPage';\n\nimport type {\n ReleaseAction,\n ReleaseActionGroupBy,\n} from '../../../shared/contracts/release-actions';\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseDetailsLayout\n * -----------------------------------------------------------------------------------------------*/\nconst ReleaseInfoWrapper = styled(Flex)`\n align-self: stretch;\n border-bottom-right-radius: ${({ theme }) => theme.borderRadius};\n border-bottom-left-radius: ${({ theme }) => theme.borderRadius};\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst StyledMenuItem = styled(MenuItem)<{\n disabled?: boolean;\n $variant?: 'neutral' | 'danger';\n}>`\n svg path {\n fill: ${({ theme, disabled }) => disabled && theme.colors.neutral500};\n }\n span {\n color: ${({ theme, disabled }) => disabled && theme.colors.neutral500};\n }\n\n &:hover {\n background: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}100`]};\n }\n`;\n\nconst PencilIcon = styled(Pencil)`\n width: ${({ theme }) => theme.spaces[4]};\n height: ${({ theme }) => theme.spaces[4]};\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n`;\n\nconst TrashIcon = styled(Trash)`\n width: ${({ theme }) => theme.spaces[4]};\n height: ${({ theme }) => theme.spaces[4]};\n path {\n fill: ${({ theme }) => theme.colors.danger600};\n }\n`;\n\ninterface ReleaseDetailsLayoutProps {\n toggleEditReleaseModal: () => void;\n toggleWarningSubmit: () => void;\n children: React.ReactNode;\n}\n\nconst ReleaseDetailsLayout = ({\n toggleEditReleaseModal,\n toggleWarningSubmit,\n children,\n}: ReleaseDetailsLayoutProps) => {\n const { formatMessage, formatDate, formatTime } = useIntl();\n const { releaseId } = useParams<{ releaseId: string }>();\n const {\n data,\n isLoading: isLoadingDetails,\n error,\n } = useGetReleaseQuery(\n { id: releaseId! },\n {\n skip: !releaseId,\n }\n );\n const [publishRelease, { isLoading: isPublishing }] = usePublishReleaseMutation();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const { allowedActions } = useRBAC(PERMISSIONS);\n const { canUpdate, canDelete, canPublish } = allowedActions;\n const dispatch = useTypedDispatch();\n const { trackUsage } = useTracking();\n\n const release = data?.data;\n\n const handlePublishRelease = (id: string) => async () => {\n const response = await publishRelease({ id });\n\n if ('data' in response) {\n // When the response returns an object with 'data', handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.pages.ReleaseDetails.publish-notification-success',\n defaultMessage: 'Release was published successfully.',\n }),\n });\n\n const { totalEntries, totalPublishedEntries, totalUnpublishedEntries } = response.data.meta;\n\n trackUsage('didPublishRelease', {\n totalEntries,\n totalPublishedEntries,\n totalUnpublishedEntries,\n });\n } else if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const handleRefresh = () => {\n dispatch(\n releaseApi.util.invalidateTags([\n { type: 'ReleaseAction', id: 'LIST' },\n { type: 'Release', id: releaseId },\n ])\n );\n };\n\n const getCreatedByUser = () => {\n if (!release?.createdBy) {\n return null;\n }\n\n // Favor the username\n if (release.createdBy.username) {\n return release.createdBy.username;\n }\n\n // Firstname may not exist if created with SSO\n if (release.createdBy.firstname) {\n return `${release.createdBy.firstname} ${release.createdBy.lastname || ''}`.trim();\n }\n\n // All users must have at least an email\n return release.createdBy.email;\n };\n\n if (isLoadingDetails) {\n return <Page.Loading />;\n }\n\n if ((isBaseQueryError(error) && 'code' in error) || !release) {\n return (\n <Navigate\n to=\"..\"\n state={{\n errors: [\n {\n // @ts-expect-error – TODO: fix this weird error flow\n code: error?.code,\n },\n ],\n }}\n />\n );\n }\n\n const totalEntries = release.actions.meta.count || 0;\n const hasCreatedByUser = Boolean(getCreatedByUser());\n\n const isScheduled = release.scheduledAt && release.timezone;\n const numberOfEntriesText = formatMessage(\n {\n id: 'content-releases.pages.Details.header-subtitle',\n defaultMessage: '{number, plural, =0 {No entries} one {# entry} other {# entries}}',\n },\n { number: totalEntries }\n );\n const scheduledText = isScheduled\n ? formatMessage(\n {\n id: 'content-releases.pages.ReleaseDetails.header-subtitle.scheduled',\n defaultMessage: 'Scheduled for {date} at {time} ({offset})',\n },\n {\n date: formatDate(new Date(release.scheduledAt!), {\n weekday: 'long',\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n timeZone: release.timezone!,\n }),\n time: formatTime(new Date(release.scheduledAt!), {\n timeZone: release.timezone!,\n hourCycle: 'h23',\n }),\n offset: getTimezoneOffset(release.timezone!, new Date(release.scheduledAt!)),\n }\n )\n : '';\n\n return (\n <Main aria-busy={isLoadingDetails}>\n <Layouts.Header\n title={release.name}\n subtitle={\n <Flex gap={2} lineHeight={6}>\n <Typography textColor=\"neutral600\" variant=\"epsilon\">\n {numberOfEntriesText + (isScheduled ? ` - ${scheduledText}` : '')}\n </Typography>\n <Badge {...getBadgeProps(release.status)}>{release.status}</Badge>\n </Flex>\n }\n navigationAction={<BackButton fallback=\"..\" />}\n primaryAction={\n !release.releasedAt && (\n <Flex gap={2}>\n <SimpleMenuButton\n label={<More />}\n variant=\"tertiary\"\n endIcon={null}\n paddingLeft=\"7px\"\n paddingRight=\"7px\"\n aria-label={formatMessage({\n id: 'content-releases.header.actions.open-release-actions',\n defaultMessage: 'Release edit and delete menu',\n })}\n popoverPlacement=\"bottom-end\"\n >\n <StyledMenuItem disabled={!canUpdate} onSelect={toggleEditReleaseModal}>\n <Flex alignItems=\"center\" gap={2} hasRadius width=\"100%\">\n <PencilIcon />\n <Typography ellipsis>\n {formatMessage({\n id: 'content-releases.header.actions.edit',\n defaultMessage: 'Edit',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n <StyledMenuItem\n disabled={!canDelete}\n onSelect={toggleWarningSubmit}\n $variant=\"danger\"\n >\n <Flex alignItems=\"center\" gap={2} hasRadius width=\"100%\">\n <TrashIcon />\n <Typography ellipsis textColor=\"danger600\">\n {formatMessage({\n id: 'content-releases.header.actions.delete',\n defaultMessage: 'Delete',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n <ReleaseInfoWrapper\n direction=\"column\"\n justifyContent=\"center\"\n alignItems=\"flex-start\"\n gap={1}\n padding={4}\n >\n <Typography variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.header.actions.created',\n defaultMessage: 'Created',\n })}\n </Typography>\n <Typography variant=\"pi\" color=\"neutral300\">\n <RelativeTime timestamp={new Date(release.createdAt)} />\n {formatMessage(\n {\n id: 'content-releases.header.actions.created.description',\n defaultMessage:\n '{hasCreatedByUser, select, true { by {createdBy}} other { by deleted user}}',\n },\n { createdBy: getCreatedByUser(), hasCreatedByUser }\n )}\n </Typography>\n </ReleaseInfoWrapper>\n </SimpleMenuButton>\n <Button size=\"S\" variant=\"tertiary\" onClick={handleRefresh}>\n {formatMessage({\n id: 'content-releases.header.actions.refresh',\n defaultMessage: 'Refresh',\n })}\n </Button>\n {canPublish ? (\n <Button\n size=\"S\"\n variant=\"default\"\n onClick={handlePublishRelease(release.id.toString())}\n loading={isPublishing}\n disabled={release.actions.meta.count === 0}\n >\n {formatMessage({\n id: 'content-releases.header.actions.publish',\n defaultMessage: 'Publish',\n })}\n </Button>\n ) : null}\n </Flex>\n )\n }\n />\n {children}\n </Main>\n );\n};\n\nconst SimpleMenuButton = styled(SimpleMenu)`\n & > span {\n display: flex;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseDetailsBody\n * -----------------------------------------------------------------------------------------------*/\nconst GROUP_BY_OPTIONS = ['contentType', 'locale', 'action'] as const;\nconst GROUP_BY_OPTIONS_NO_LOCALE = ['contentType', 'action'] as const;\nconst getGroupByOptionLabel = (value: (typeof GROUP_BY_OPTIONS)[number]) => {\n if (value === 'locale') {\n return {\n id: 'content-releases.pages.ReleaseDetails.groupBy.option.locales',\n defaultMessage: 'Locales',\n };\n }\n\n if (value === 'action') {\n return {\n id: 'content-releases.pages.ReleaseDetails.groupBy.option.actions',\n defaultMessage: 'Actions',\n };\n }\n\n return {\n id: 'content-releases.pages.ReleaseDetails.groupBy.option.content-type',\n defaultMessage: 'Content-Types',\n };\n};\n\ninterface ReleaseDetailsBodyProps {\n releaseId: string;\n}\n\nconst ReleaseDetailsBody = ({ releaseId }: ReleaseDetailsBodyProps) => {\n const { formatMessage } = useIntl();\n const [{ query }, setQuery] = useQueryParams<GetReleaseActionsQueryParams>();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const {\n data: releaseData,\n isLoading: isReleaseLoading,\n error: releaseError,\n } = useGetReleaseQuery({ id: releaseId });\n const {\n allowedActions: { canUpdate },\n } = useRBAC(PERMISSIONS);\n const runHookWaterfall = useStrapiApp('ReleaseDetailsPage', (state) => state.runHookWaterfall);\n\n // TODO: Migrated displayedHeader to v5\n const { displayedHeaders, hasI18nEnabled }: { displayedHeaders: any; hasI18nEnabled: boolean } =\n runHookWaterfall('ContentReleases/pages/ReleaseDetails/add-locale-in-releases', {\n displayedHeaders: [\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.name',\n defaultMessage: 'name',\n },\n name: 'name',\n },\n ],\n hasI18nEnabled: false,\n });\n\n const release = releaseData?.data;\n const selectedGroupBy = query?.groupBy || 'contentType';\n\n const {\n isLoading,\n isFetching,\n isError,\n data,\n error: releaseActionsError,\n } = useGetReleaseActionsQuery({\n ...query,\n releaseId,\n });\n\n const [updateReleaseAction] = useUpdateReleaseActionMutation();\n\n const handleChangeType = async (\n e: React.ChangeEvent<HTMLInputElement>,\n actionId: ReleaseAction['id'],\n actionPath: [string, number]\n ) => {\n const response = await updateReleaseAction({\n params: {\n releaseId,\n actionId,\n },\n body: {\n type: e.target.value as ReleaseAction['type'],\n },\n query, // We are passing the query params to make optimistic updates\n actionPath, // We are passing the action path to found the position in the cache of the action for optimistic updates\n });\n\n if ('error' in response) {\n if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (isLoading || isReleaseLoading) {\n return <Page.Loading />;\n }\n\n const releaseActions = data?.data;\n const releaseMeta = data?.meta;\n const contentTypes = releaseMeta?.contentTypes || {};\n const components = releaseMeta?.components || {};\n\n if (isBaseQueryError(releaseError) || !release) {\n const errorsArray = [];\n if (releaseError && 'code' in releaseError) {\n errorsArray.push({\n code: releaseError.code,\n });\n }\n if (releaseActionsError && 'code' in releaseActionsError) {\n errorsArray.push({\n code: releaseActionsError.code,\n });\n }\n return (\n <Navigate\n to=\"..\"\n state={{\n errors: errorsArray,\n }}\n />\n );\n }\n\n if (isError || !releaseActions) {\n return <Page.Error />;\n }\n\n if (Object.keys(releaseActions).length === 0) {\n return (\n <Layouts.Content>\n <EmptyStateLayout\n action={\n <LinkButton\n tag={ReactRouterLink}\n to={{\n pathname: '/content-manager',\n }}\n style={{ textDecoration: 'none' }}\n variant=\"secondary\"\n >\n {formatMessage({\n id: 'content-releases.page.Details.button.openContentManager',\n defaultMessage: 'Open the Content Manager',\n })}\n </LinkButton>\n }\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'content-releases.pages.Details.tab.emptyEntries',\n defaultMessage:\n 'This release is empty. Open the Content Manager, select an entry and add it to the release.',\n })}\n />\n </Layouts.Content>\n );\n }\n\n const groupByLabel = formatMessage({\n id: 'content-releases.pages.ReleaseDetails.groupBy.aria-label',\n defaultMessage: 'Group by',\n });\n const headers = [\n ...displayedHeaders,\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.content-type',\n defaultMessage: 'content-type',\n },\n name: 'content-type',\n },\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.action',\n defaultMessage: 'action',\n },\n name: 'action',\n },\n ...(!release.releasedAt\n ? [\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.status',\n defaultMessage: 'status',\n },\n name: 'status',\n },\n ]\n : []),\n ];\n\n const options = hasI18nEnabled ? GROUP_BY_OPTIONS : GROUP_BY_OPTIONS_NO_LOCALE;\n\n return (\n <Layouts.Content>\n <Flex gap={8} direction=\"column\" alignItems=\"stretch\">\n <Flex>\n <SingleSelect\n placeholder={groupByLabel}\n aria-label={groupByLabel}\n customizeContent={(value) =>\n formatMessage(\n {\n id: `content-releases.pages.ReleaseDetails.groupBy.label`,\n defaultMessage: `Group by {groupBy}`,\n },\n {\n groupBy: value,\n }\n )\n }\n value={formatMessage(getGroupByOptionLabel(selectedGroupBy))}\n onChange={(value) => setQuery({ groupBy: value as ReleaseActionGroupBy })}\n >\n {options.map((option) => (\n <SingleSelectOption key={option} value={option}>\n {formatMessage(getGroupByOptionLabel(option))}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Flex>\n {Object.keys(releaseActions).map((key) => (\n <Flex key={`releases-group-${key}`} gap={4} direction=\"column\" alignItems=\"stretch\">\n <Flex role=\"separator\" aria-label={key}>\n <Badge>{key}</Badge>\n </Flex>\n <Table.Root\n rows={releaseActions[key].map((item) => ({\n ...item,\n id: Number(item.entry.id),\n }))}\n headers={headers}\n isLoading={isLoading || isFetching}\n >\n <Table.Content>\n <Table.Head>\n {headers.map(({ label, name }) => (\n <Table.HeaderCell key={name} label={formatMessage(label)} name={name} />\n ))}\n </Table.Head>\n <Table.Loading />\n <Table.Body>\n {releaseActions[key].map(\n ({ id, contentType, locale, type, entry, status }, actionIndex) => (\n <Tr key={id}>\n <Td width=\"25%\" maxWidth=\"200px\">\n <Typography ellipsis>{`${\n contentType.mainFieldValue || entry.id\n }`}</Typography>\n </Td>\n {hasI18nEnabled && (\n <Td width=\"10%\">\n <Typography>{`${locale?.name ? locale.name : '-'}`}</Typography>\n </Td>\n )}\n\n <Td width=\"10%\">\n <Typography>{contentType.displayName || ''}</Typography>\n </Td>\n <Td width=\"20%\">\n {release.releasedAt ? (\n <Typography>\n {formatMessage(\n {\n id: 'content-releases.page.ReleaseDetails.table.action-published',\n defaultMessage:\n 'This entry was <b>{isPublish, select, true {published} other {unpublished}}</b>.',\n },\n {\n isPublish: type === 'publish',\n b: (children: React.ReactNode) => (\n <Typography fontWeight=\"bold\">{children}</Typography>\n ),\n }\n )}\n </Typography>\n ) : (\n <ReleaseActionOptions\n selected={type}\n handleChange={(e) => handleChangeType(e, id, [key, actionIndex])}\n name={`release-action-${id}-type`}\n disabled={!canUpdate}\n />\n )}\n </Td>\n {!release.releasedAt && (\n <>\n <Td width=\"20%\" minWidth=\"200px\">\n <EntryValidationPopover\n action={type}\n schema={contentTypes?.[contentType.uid]}\n entry={entry}\n status={status}\n />\n </Td>\n <Td>\n <Flex justifyContent=\"flex-end\">\n <ReleaseActionMenu.Root>\n <ReleaseActionMenu.ReleaseActionEntryLinkItem\n contentTypeUid={contentType.uid}\n documentId={entry.documentId}\n locale={locale?.code}\n />\n <ReleaseActionMenu.DeleteReleaseActionItem\n releaseId={release.id}\n actionId={id}\n />\n </ReleaseActionMenu.Root>\n </Flex>\n </Td>\n </>\n )}\n </Tr>\n )\n )}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n </Flex>\n ))}\n <Pagination.Root\n {...releaseMeta?.pagination}\n defaultPageSize={releaseMeta?.pagination?.pageSize}\n >\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Flex>\n </Layouts.Content>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseDetailsPage\n * -----------------------------------------------------------------------------------------------*/\nconst ReleaseDetailsPage = () => {\n const { formatMessage } = useIntl();\n const { releaseId } = useParams<{ releaseId: string }>();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const navigate = useNavigate();\n const [releaseModalShown, setReleaseModalShown] = React.useState(false);\n const [showWarningSubmit, setWarningSubmit] = React.useState(false);\n\n const {\n isLoading: isLoadingDetails,\n data,\n isSuccess: isSuccessDetails,\n } = useGetReleaseQuery(\n { id: releaseId! },\n {\n skip: !releaseId,\n }\n );\n const { data: dataTimezone, isLoading: isLoadingTimezone } = useGetReleaseSettingsQuery();\n const [updateRelease, { isLoading: isSubmittingForm }] = useUpdateReleaseMutation();\n const [deleteRelease] = useDeleteReleaseMutation();\n\n const toggleEditReleaseModal = () => {\n setReleaseModalShown((prev) => !prev);\n };\n\n const getTimezoneValue = () => {\n if (releaseData?.timezone) {\n return releaseData.timezone;\n } else {\n if (dataTimezone?.data.defaultTimezone) {\n return dataTimezone.data.defaultTimezone;\n }\n return null;\n }\n };\n\n const toggleWarningSubmit = () => setWarningSubmit((prevState) => !prevState);\n\n if (isLoadingDetails || isLoadingTimezone) {\n return (\n <ReleaseDetailsLayout\n toggleEditReleaseModal={toggleEditReleaseModal}\n toggleWarningSubmit={toggleWarningSubmit}\n >\n <Page.Loading />\n </ReleaseDetailsLayout>\n );\n }\n\n if (!releaseId) {\n return <Navigate to=\"..\" />;\n }\n\n const releaseData = (isSuccessDetails && data?.data) || null;\n\n const title = releaseData?.name || '';\n const timezone = getTimezoneValue();\n const scheduledAt =\n releaseData?.scheduledAt && timezone ? utcToZonedTime(releaseData.scheduledAt, timezone) : null;\n // Just get the date and time to display without considering updated timezone time\n const date = scheduledAt ? format(scheduledAt, 'yyyy-MM-dd') : undefined;\n const time = scheduledAt ? format(scheduledAt, 'HH:mm') : '';\n\n const handleEditRelease = async (values: FormValues) => {\n const response = await updateRelease({\n id: releaseId,\n name: values.name,\n scheduledAt: values.scheduledAt,\n timezone: values.timezone,\n });\n\n if ('data' in response) {\n // When the response returns an object with 'data', handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.modal.release-updated-notification-success',\n defaultMessage: 'Release updated.',\n }),\n });\n toggleEditReleaseModal();\n } else if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const handleDeleteRelease = async () => {\n const response = await deleteRelease({\n id: releaseId,\n });\n\n if ('data' in response) {\n navigate('..');\n } else if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <ReleaseDetailsLayout\n toggleEditReleaseModal={toggleEditReleaseModal}\n toggleWarningSubmit={toggleWarningSubmit}\n >\n <ReleaseDetailsBody releaseId={releaseId} />\n <ReleaseModal\n open={releaseModalShown}\n handleClose={toggleEditReleaseModal}\n handleSubmit={handleEditRelease}\n isLoading={isLoadingDetails || isSubmittingForm}\n initialValues={{\n name: title || '',\n scheduledAt,\n date,\n time,\n isScheduled: Boolean(scheduledAt),\n timezone,\n }}\n />\n <Dialog.Root open={showWarningSubmit} onOpenChange={toggleWarningSubmit}>\n <ConfirmDialog onConfirm={handleDeleteRelease}>\n {formatMessage({\n id: 'content-releases.dialog.confirmation-message',\n defaultMessage: 'Are you sure you want to delete this release?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </ReleaseDetailsLayout>\n );\n};\n\nexport { ReleaseDetailsPage };\n"],"names":["ReleaseInfoWrapper","styled","Flex","theme","borderRadius","colors","neutral150","StyledMenuItem","MenuItem","disabled","neutral500","$variant","PencilIcon","Pencil","spaces","neutral600","TrashIcon","Trash","danger600","ReleaseDetailsLayout","toggleEditReleaseModal","toggleWarningSubmit","children","formatMessage","formatDate","formatTime","useIntl","releaseId","useParams","data","isLoading","isLoadingDetails","error","useGetReleaseQuery","id","skip","publishRelease","isPublishing","usePublishReleaseMutation","toggleNotification","useNotification","formatAPIError","useAPIErrorHandler","allowedActions","useRBAC","PERMISSIONS","canUpdate","canDelete","canPublish","dispatch","useTypedDispatch","trackUsage","useTracking","release","handlePublishRelease","response","type","message","defaultMessage","totalEntries","totalPublishedEntries","totalUnpublishedEntries","meta","isFetchError","handleRefresh","releaseApi","util","invalidateTags","getCreatedByUser","createdBy","username","firstname","lastname","trim","email","_jsx","Page","Loading","Navigate","to","state","errors","code","actions","count","hasCreatedByUser","Boolean","isScheduled","scheduledAt","timezone","numberOfEntriesText","number","scheduledText","date","Date","weekday","day","month","year","timeZone","time","hourCycle","offset","getTimezoneOffset","_jsxs","Main","aria-busy","Layouts","Header","title","name","subtitle","gap","lineHeight","Typography","textColor","variant","Badge","getBadgeProps","status","navigationAction","BackButton","fallback","primaryAction","releasedAt","SimpleMenuButton","label","More","endIcon","paddingLeft","paddingRight","aria-label","popoverPlacement","onSelect","alignItems","hasRadius","width","ellipsis","direction","justifyContent","padding","fontWeight","color","RelativeTime","timestamp","createdAt","Button","size","onClick","toString","loading","SimpleMenu","GROUP_BY_OPTIONS","GROUP_BY_OPTIONS_NO_LOCALE","getGroupByOptionLabel","value","ReleaseDetailsBody","query","setQuery","useQueryParams","releaseData","isReleaseLoading","releaseError","runHookWaterfall","useStrapiApp","displayedHeaders","hasI18nEnabled","selectedGroupBy","groupBy","isFetching","isError","releaseActionsError","useGetReleaseActionsQuery","updateReleaseAction","useUpdateReleaseActionMutation","handleChangeType","e","actionId","actionPath","params","body","target","releaseActions","releaseMeta","contentTypes","components","isBaseQueryError","errorsArray","push","Error","Object","keys","length","Content","EmptyStateLayout","action","LinkButton","tag","ReactRouterLink","pathname","style","textDecoration","icon","EmptyDocuments","content","groupByLabel","headers","options","SingleSelect","placeholder","customizeContent","onChange","map","option","SingleSelectOption","key","role","Table","Root","rows","item","Number","entry","Head","HeaderCell","Body","contentType","locale","actionIndex","Tr","Td","maxWidth","mainFieldValue","displayName","isPublish","b","ReleaseActionOptions","selected","handleChange","_Fragment","minWidth","EntryValidationPopover","schema","uid","ReleaseActionMenu","ReleaseActionEntryLinkItem","contentTypeUid","documentId","DeleteReleaseActionItem","Pagination","pagination","defaultPageSize","pageSize","PageSize","Links","ReleaseDetailsPage","navigate","useNavigate","releaseModalShown","setReleaseModalShown","React","useState","showWarningSubmit","setWarningSubmit","isSuccess","isSuccessDetails","dataTimezone","isLoadingTimezone","useGetReleaseSettingsQuery","updateRelease","isSubmittingForm","useUpdateReleaseMutation","deleteRelease","useDeleteReleaseMutation","prev","getTimezoneValue","defaultTimezone","prevState","utcToZonedTime","format","undefined","handleEditRelease","values","handleDeleteRelease","ReleaseModal","open","handleClose","handleSubmit","initialValues","Dialog","onOpenChange","ConfirmDialog","onConfirm"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ReleaseDetailsPage.mjs","sources":["../../../admin/src/pages/ReleaseDetailsPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n Pagination,\n Table,\n BackButton,\n ConfirmDialog,\n useTracking,\n useAPIErrorHandler,\n useNotification,\n useQueryParams,\n useRBAC,\n isFetchError,\n useStrapiApp,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Flex,\n Main,\n Tr,\n Td,\n Typography,\n Badge,\n SingleSelect,\n SingleSelectOption,\n EmptyStateLayout,\n LinkButton,\n Dialog,\n SimpleMenu,\n Menu,\n} from '@strapi/design-system';\nimport { More, Pencil, Trash } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport format from 'date-fns/format';\nimport { utcToZonedTime } from 'date-fns-tz';\nimport { useIntl } from 'react-intl';\nimport { useParams, useNavigate, Link as ReactRouterLink, Navigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { EntryValidationPopover } from '../components/EntryValidationPopover';\nimport { RelativeTime } from '../components/RelativeTime';\nimport { ReleaseActionMenu } from '../components/ReleaseActionMenu';\nimport { ReleaseActionOptions } from '../components/ReleaseActionOptions';\nimport { ReleaseModal, FormValues } from '../components/ReleaseModal';\nimport { PERMISSIONS } from '../constants';\nimport {\n GetReleaseActionsQueryParams,\n useGetReleaseActionsQuery,\n useGetReleaseQuery,\n useGetReleaseSettingsQuery,\n useUpdateReleaseMutation,\n useUpdateReleaseActionMutation,\n usePublishReleaseMutation,\n useDeleteReleaseMutation,\n releaseApi,\n} from '../services/release';\nimport { useTypedDispatch } from '../store/hooks';\nimport { isBaseQueryError } from '../utils/api';\nimport { getTimezoneOffset } from '../utils/time';\n\nimport { getBadgeProps } from './ReleasesPage';\n\nimport type {\n ReleaseAction,\n ReleaseActionGroupBy,\n} from '../../../shared/contracts/release-actions';\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseDetailsLayout\n * -----------------------------------------------------------------------------------------------*/\nconst ReleaseInfoWrapper = styled(Flex)`\n align-self: stretch;\n border-bottom-right-radius: ${({ theme }) => theme.borderRadius};\n border-bottom-left-radius: ${({ theme }) => theme.borderRadius};\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\ninterface ReleaseDetailsLayoutProps {\n toggleEditReleaseModal: () => void;\n toggleWarningSubmit: () => void;\n children: React.ReactNode;\n}\n\nconst ReleaseDetailsLayout = ({\n toggleEditReleaseModal,\n toggleWarningSubmit,\n children,\n}: ReleaseDetailsLayoutProps) => {\n const { formatMessage, formatDate, formatTime } = useIntl();\n const { releaseId } = useParams<{ releaseId: string }>();\n const {\n data,\n isLoading: isLoadingDetails,\n error,\n } = useGetReleaseQuery(\n { id: releaseId! },\n {\n skip: !releaseId,\n }\n );\n const [publishRelease, { isLoading: isPublishing }] = usePublishReleaseMutation();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const { allowedActions } = useRBAC(PERMISSIONS);\n const { canUpdate, canDelete, canPublish } = allowedActions;\n const dispatch = useTypedDispatch();\n const { trackUsage } = useTracking();\n\n const release = data?.data;\n\n const handlePublishRelease = (id: string) => async () => {\n const response = await publishRelease({ id });\n\n if ('data' in response) {\n // When the response returns an object with 'data', handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.pages.ReleaseDetails.publish-notification-success',\n defaultMessage: 'Release was published successfully.',\n }),\n });\n\n const { totalEntries, totalPublishedEntries, totalUnpublishedEntries } = response.data.meta;\n\n trackUsage('didPublishRelease', {\n totalEntries,\n totalPublishedEntries,\n totalUnpublishedEntries,\n });\n } else if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const handleRefresh = () => {\n dispatch(\n releaseApi.util.invalidateTags([\n { type: 'ReleaseAction', id: 'LIST' },\n { type: 'Release', id: releaseId },\n ])\n );\n };\n\n const getCreatedByUser = () => {\n if (!release?.createdBy) {\n return null;\n }\n\n // Favor the username\n if (release.createdBy.username) {\n return release.createdBy.username;\n }\n\n // Firstname may not exist if created with SSO\n if (release.createdBy.firstname) {\n return `${release.createdBy.firstname} ${release.createdBy.lastname || ''}`.trim();\n }\n\n // All users must have at least an email\n return release.createdBy.email;\n };\n\n if (isLoadingDetails) {\n return <Page.Loading />;\n }\n\n if ((isBaseQueryError(error) && 'code' in error) || !release) {\n return (\n <Navigate\n to=\"..\"\n state={{\n errors: [\n {\n // @ts-expect-error – TODO: fix this weird error flow\n code: error?.code,\n },\n ],\n }}\n />\n );\n }\n\n const totalEntries = release.actions.meta.count || 0;\n const hasCreatedByUser = Boolean(getCreatedByUser());\n\n const isScheduled = release.scheduledAt && release.timezone;\n const numberOfEntriesText = formatMessage(\n {\n id: 'content-releases.pages.Details.header-subtitle',\n defaultMessage: '{number, plural, =0 {No entries} one {# entry} other {# entries}}',\n },\n { number: totalEntries }\n );\n const scheduledText = isScheduled\n ? formatMessage(\n {\n id: 'content-releases.pages.ReleaseDetails.header-subtitle.scheduled',\n defaultMessage: 'Scheduled for {date} at {time} ({offset})',\n },\n {\n date: formatDate(new Date(release.scheduledAt!), {\n weekday: 'long',\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n timeZone: release.timezone!,\n }),\n time: formatTime(new Date(release.scheduledAt!), {\n timeZone: release.timezone!,\n hourCycle: 'h23',\n }),\n offset: getTimezoneOffset(release.timezone!, new Date(release.scheduledAt!)),\n }\n )\n : '';\n\n return (\n <Main aria-busy={isLoadingDetails}>\n <Layouts.Header\n title={release.name}\n subtitle={\n <Flex gap={2} lineHeight={6}>\n <Typography textColor=\"neutral600\" variant=\"epsilon\">\n {numberOfEntriesText + (isScheduled ? ` - ${scheduledText}` : '')}\n </Typography>\n <Badge {...getBadgeProps(release.status)}>{release.status}</Badge>\n </Flex>\n }\n navigationAction={<BackButton fallback=\"..\" />}\n primaryAction={\n !release.releasedAt && (\n <Flex gap={2}>\n <SimpleMenuButton\n label={<More />}\n variant=\"tertiary\"\n endIcon={null}\n paddingLeft=\"7px\"\n paddingRight=\"7px\"\n aria-label={formatMessage({\n id: 'content-releases.header.actions.open-release-actions',\n defaultMessage: 'Release edit and delete menu',\n })}\n popoverPlacement=\"bottom-end\"\n >\n <Menu.Item\n disabled={!canUpdate}\n onSelect={toggleEditReleaseModal}\n startIcon={<Pencil />}\n >\n {formatMessage({\n id: 'content-releases.header.actions.edit',\n defaultMessage: 'Edit',\n })}\n </Menu.Item>\n <Menu.Item\n disabled={!canDelete}\n onSelect={toggleWarningSubmit}\n variant=\"danger\"\n startIcon={<Trash />}\n >\n {formatMessage({\n id: 'content-releases.header.actions.delete',\n defaultMessage: 'Delete',\n })}\n </Menu.Item>\n <ReleaseInfoWrapper\n direction=\"column\"\n justifyContent=\"center\"\n alignItems=\"flex-start\"\n gap={1}\n padding={4}\n >\n <Typography variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.header.actions.created',\n defaultMessage: 'Created',\n })}\n </Typography>\n <Typography variant=\"pi\" color=\"neutral300\">\n <RelativeTime timestamp={new Date(release.createdAt)} />\n {formatMessage(\n {\n id: 'content-releases.header.actions.created.description',\n defaultMessage:\n '{hasCreatedByUser, select, true { by {createdBy}} other { by deleted user}}',\n },\n { createdBy: getCreatedByUser(), hasCreatedByUser }\n )}\n </Typography>\n </ReleaseInfoWrapper>\n </SimpleMenuButton>\n <Button size=\"S\" variant=\"tertiary\" onClick={handleRefresh}>\n {formatMessage({\n id: 'content-releases.header.actions.refresh',\n defaultMessage: 'Refresh',\n })}\n </Button>\n {canPublish ? (\n <Button\n size=\"S\"\n variant=\"default\"\n onClick={handlePublishRelease(release.id.toString())}\n loading={isPublishing}\n disabled={release.actions.meta.count === 0}\n >\n {formatMessage({\n id: 'content-releases.header.actions.publish',\n defaultMessage: 'Publish',\n })}\n </Button>\n ) : null}\n </Flex>\n )\n }\n />\n {children}\n </Main>\n );\n};\n\nconst SimpleMenuButton = styled(SimpleMenu)`\n & > span {\n display: flex;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseDetailsBody\n * -----------------------------------------------------------------------------------------------*/\nconst GROUP_BY_OPTIONS = ['contentType', 'locale', 'action'] as const;\nconst GROUP_BY_OPTIONS_NO_LOCALE = ['contentType', 'action'] as const;\nconst getGroupByOptionLabel = (value: (typeof GROUP_BY_OPTIONS)[number]) => {\n if (value === 'locale') {\n return {\n id: 'content-releases.pages.ReleaseDetails.groupBy.option.locales',\n defaultMessage: 'Locales',\n };\n }\n\n if (value === 'action') {\n return {\n id: 'content-releases.pages.ReleaseDetails.groupBy.option.actions',\n defaultMessage: 'Actions',\n };\n }\n\n return {\n id: 'content-releases.pages.ReleaseDetails.groupBy.option.content-type',\n defaultMessage: 'Content-Types',\n };\n};\n\ninterface ReleaseDetailsBodyProps {\n releaseId: string;\n}\n\nconst ReleaseDetailsBody = ({ releaseId }: ReleaseDetailsBodyProps) => {\n const { formatMessage } = useIntl();\n const [{ query }, setQuery] = useQueryParams<GetReleaseActionsQueryParams>();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const {\n data: releaseData,\n isLoading: isReleaseLoading,\n error: releaseError,\n } = useGetReleaseQuery({ id: releaseId });\n const {\n allowedActions: { canUpdate },\n } = useRBAC(PERMISSIONS);\n const runHookWaterfall = useStrapiApp('ReleaseDetailsPage', (state) => state.runHookWaterfall);\n\n // TODO: Migrated displayedHeader to v5\n const { displayedHeaders, hasI18nEnabled }: { displayedHeaders: any; hasI18nEnabled: boolean } =\n runHookWaterfall('ContentReleases/pages/ReleaseDetails/add-locale-in-releases', {\n displayedHeaders: [\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.name',\n defaultMessage: 'name',\n },\n name: 'name',\n },\n ],\n hasI18nEnabled: false,\n });\n\n const release = releaseData?.data;\n const selectedGroupBy = query?.groupBy || 'contentType';\n\n const {\n isLoading,\n isFetching,\n isError,\n data,\n error: releaseActionsError,\n } = useGetReleaseActionsQuery({\n ...query,\n releaseId,\n });\n\n const [updateReleaseAction] = useUpdateReleaseActionMutation();\n\n const handleChangeType = async (\n e: React.ChangeEvent<HTMLInputElement>,\n actionId: ReleaseAction['id'],\n actionPath: [string, number]\n ) => {\n const response = await updateReleaseAction({\n params: {\n releaseId,\n actionId,\n },\n body: {\n type: e.target.value as ReleaseAction['type'],\n },\n query, // We are passing the query params to make optimistic updates\n actionPath, // We are passing the action path to found the position in the cache of the action for optimistic updates\n });\n\n if ('error' in response) {\n if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (isLoading || isReleaseLoading) {\n return <Page.Loading />;\n }\n\n const releaseActions = data?.data;\n const releaseMeta = data?.meta;\n const contentTypes = releaseMeta?.contentTypes || {};\n const components = releaseMeta?.components || {};\n\n if (isBaseQueryError(releaseError) || !release) {\n const errorsArray = [];\n if (releaseError && 'code' in releaseError) {\n errorsArray.push({\n code: releaseError.code,\n });\n }\n if (releaseActionsError && 'code' in releaseActionsError) {\n errorsArray.push({\n code: releaseActionsError.code,\n });\n }\n return (\n <Navigate\n to=\"..\"\n state={{\n errors: errorsArray,\n }}\n />\n );\n }\n\n if (isError || !releaseActions) {\n return <Page.Error />;\n }\n\n if (Object.keys(releaseActions).length === 0) {\n return (\n <Layouts.Content>\n <EmptyStateLayout\n action={\n <LinkButton\n tag={ReactRouterLink}\n to={{\n pathname: '/content-manager',\n }}\n style={{ textDecoration: 'none' }}\n variant=\"secondary\"\n >\n {formatMessage({\n id: 'content-releases.page.Details.button.openContentManager',\n defaultMessage: 'Open the Content Manager',\n })}\n </LinkButton>\n }\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'content-releases.pages.Details.tab.emptyEntries',\n defaultMessage:\n 'This release is empty. Open the Content Manager, select an entry and add it to the release.',\n })}\n />\n </Layouts.Content>\n );\n }\n\n const groupByLabel = formatMessage({\n id: 'content-releases.pages.ReleaseDetails.groupBy.aria-label',\n defaultMessage: 'Group by',\n });\n const headers = [\n ...displayedHeaders,\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.content-type',\n defaultMessage: 'content-type',\n },\n name: 'content-type',\n },\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.action',\n defaultMessage: 'action',\n },\n name: 'action',\n },\n ...(!release.releasedAt\n ? [\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.status',\n defaultMessage: 'status',\n },\n name: 'status',\n },\n ]\n : []),\n ];\n\n const options = hasI18nEnabled ? GROUP_BY_OPTIONS : GROUP_BY_OPTIONS_NO_LOCALE;\n\n return (\n <Layouts.Content>\n <Flex gap={8} direction=\"column\" alignItems=\"stretch\">\n <Flex>\n <SingleSelect\n placeholder={groupByLabel}\n aria-label={groupByLabel}\n customizeContent={(value) =>\n formatMessage(\n {\n id: `content-releases.pages.ReleaseDetails.groupBy.label`,\n defaultMessage: `Group by {groupBy}`,\n },\n {\n groupBy: value,\n }\n )\n }\n value={formatMessage(getGroupByOptionLabel(selectedGroupBy))}\n onChange={(value) => setQuery({ groupBy: value as ReleaseActionGroupBy })}\n >\n {options.map((option) => (\n <SingleSelectOption key={option} value={option}>\n {formatMessage(getGroupByOptionLabel(option))}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Flex>\n {Object.keys(releaseActions).map((key) => (\n <Flex key={`releases-group-${key}`} gap={4} direction=\"column\" alignItems=\"stretch\">\n <Flex role=\"separator\" aria-label={key}>\n <Badge>{key}</Badge>\n </Flex>\n <Table.Root\n rows={releaseActions[key].map((item) => ({\n ...item,\n id: Number(item.entry.id),\n }))}\n headers={headers}\n isLoading={isLoading || isFetching}\n >\n <Table.Content>\n <Table.Head>\n {headers.map(({ label, name }) => (\n <Table.HeaderCell key={name} label={formatMessage(label)} name={name} />\n ))}\n </Table.Head>\n <Table.Loading />\n <Table.Body>\n {releaseActions[key].map(\n ({ id, contentType, locale, type, entry, status }, actionIndex) => (\n <Tr key={id}>\n <Td width=\"25%\" maxWidth=\"200px\">\n <Typography ellipsis>{`${\n contentType.mainFieldValue || entry.id\n }`}</Typography>\n </Td>\n {hasI18nEnabled && (\n <Td width=\"10%\">\n <Typography>{`${locale?.name ? locale.name : '-'}`}</Typography>\n </Td>\n )}\n\n <Td width=\"10%\">\n <Typography>{contentType.displayName || ''}</Typography>\n </Td>\n <Td width=\"20%\">\n {release.releasedAt ? (\n <Typography>\n {formatMessage(\n {\n id: 'content-releases.page.ReleaseDetails.table.action-published',\n defaultMessage:\n 'This entry was <b>{isPublish, select, true {published} other {unpublished}}</b>.',\n },\n {\n isPublish: type === 'publish',\n b: (children: React.ReactNode) => (\n <Typography fontWeight=\"bold\">{children}</Typography>\n ),\n }\n )}\n </Typography>\n ) : (\n <ReleaseActionOptions\n selected={type}\n handleChange={(e) => handleChangeType(e, id, [key, actionIndex])}\n name={`release-action-${id}-type`}\n disabled={!canUpdate}\n />\n )}\n </Td>\n {!release.releasedAt && (\n <>\n <Td width=\"20%\" minWidth=\"200px\">\n <EntryValidationPopover\n action={type}\n schema={contentTypes?.[contentType.uid]}\n entry={entry}\n status={status}\n />\n </Td>\n <Td>\n <Flex justifyContent=\"flex-end\">\n <ReleaseActionMenu.Root>\n <ReleaseActionMenu.ReleaseActionEntryLinkItem\n contentTypeUid={contentType.uid}\n documentId={entry.documentId}\n locale={locale?.code}\n />\n <ReleaseActionMenu.DeleteReleaseActionItem\n releaseId={release.id}\n actionId={id}\n />\n </ReleaseActionMenu.Root>\n </Flex>\n </Td>\n </>\n )}\n </Tr>\n )\n )}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n </Flex>\n ))}\n <Pagination.Root\n {...releaseMeta?.pagination}\n defaultPageSize={releaseMeta?.pagination?.pageSize}\n >\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Flex>\n </Layouts.Content>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseDetailsPage\n * -----------------------------------------------------------------------------------------------*/\nconst ReleaseDetailsPage = () => {\n const { formatMessage } = useIntl();\n const { releaseId } = useParams<{ releaseId: string }>();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const navigate = useNavigate();\n const [releaseModalShown, setReleaseModalShown] = React.useState(false);\n const [showWarningSubmit, setWarningSubmit] = React.useState(false);\n\n const {\n isLoading: isLoadingDetails,\n data,\n isSuccess: isSuccessDetails,\n } = useGetReleaseQuery(\n { id: releaseId! },\n {\n skip: !releaseId,\n }\n );\n const { data: dataTimezone, isLoading: isLoadingTimezone } = useGetReleaseSettingsQuery();\n const [updateRelease, { isLoading: isSubmittingForm }] = useUpdateReleaseMutation();\n const [deleteRelease] = useDeleteReleaseMutation();\n\n const toggleEditReleaseModal = () => {\n setReleaseModalShown((prev) => !prev);\n };\n\n const getTimezoneValue = () => {\n if (releaseData?.timezone) {\n return releaseData.timezone;\n } else {\n if (dataTimezone?.data.defaultTimezone) {\n return dataTimezone.data.defaultTimezone;\n }\n return null;\n }\n };\n\n const toggleWarningSubmit = () => setWarningSubmit((prevState) => !prevState);\n\n if (isLoadingDetails || isLoadingTimezone) {\n return (\n <ReleaseDetailsLayout\n toggleEditReleaseModal={toggleEditReleaseModal}\n toggleWarningSubmit={toggleWarningSubmit}\n >\n <Page.Loading />\n </ReleaseDetailsLayout>\n );\n }\n\n if (!releaseId) {\n return <Navigate to=\"..\" />;\n }\n\n const releaseData = (isSuccessDetails && data?.data) || null;\n\n const title = releaseData?.name || '';\n const timezone = getTimezoneValue();\n const scheduledAt =\n releaseData?.scheduledAt && timezone ? utcToZonedTime(releaseData.scheduledAt, timezone) : null;\n // Just get the date and time to display without considering updated timezone time\n const date = scheduledAt ? format(scheduledAt, 'yyyy-MM-dd') : undefined;\n const time = scheduledAt ? format(scheduledAt, 'HH:mm') : '';\n\n const handleEditRelease = async (values: FormValues) => {\n const response = await updateRelease({\n id: releaseId,\n name: values.name,\n scheduledAt: values.scheduledAt,\n timezone: values.timezone,\n });\n\n if ('data' in response) {\n // When the response returns an object with 'data', handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.modal.release-updated-notification-success',\n defaultMessage: 'Release updated.',\n }),\n });\n toggleEditReleaseModal();\n } else if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const handleDeleteRelease = async () => {\n const response = await deleteRelease({\n id: releaseId,\n });\n\n if ('data' in response) {\n navigate('..');\n } else if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <ReleaseDetailsLayout\n toggleEditReleaseModal={toggleEditReleaseModal}\n toggleWarningSubmit={toggleWarningSubmit}\n >\n <ReleaseDetailsBody releaseId={releaseId} />\n <ReleaseModal\n open={releaseModalShown}\n handleClose={toggleEditReleaseModal}\n handleSubmit={handleEditRelease}\n isLoading={isLoadingDetails || isSubmittingForm}\n initialValues={{\n name: title || '',\n scheduledAt,\n date,\n time,\n isScheduled: Boolean(scheduledAt),\n timezone,\n }}\n />\n <Dialog.Root open={showWarningSubmit} onOpenChange={toggleWarningSubmit}>\n <ConfirmDialog onConfirm={handleDeleteRelease}>\n {formatMessage({\n id: 'content-releases.dialog.confirmation-message',\n defaultMessage: 'Are you sure you want to delete this release?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </ReleaseDetailsLayout>\n );\n};\n\nexport { ReleaseDetailsPage };\n"],"names":["ReleaseInfoWrapper","styled","Flex","theme","borderRadius","colors","neutral150","ReleaseDetailsLayout","toggleEditReleaseModal","toggleWarningSubmit","children","formatMessage","formatDate","formatTime","useIntl","releaseId","useParams","data","isLoading","isLoadingDetails","error","useGetReleaseQuery","id","skip","publishRelease","isPublishing","usePublishReleaseMutation","toggleNotification","useNotification","formatAPIError","useAPIErrorHandler","allowedActions","useRBAC","PERMISSIONS","canUpdate","canDelete","canPublish","dispatch","useTypedDispatch","trackUsage","useTracking","release","handlePublishRelease","response","type","message","defaultMessage","totalEntries","totalPublishedEntries","totalUnpublishedEntries","meta","isFetchError","handleRefresh","releaseApi","util","invalidateTags","getCreatedByUser","createdBy","username","firstname","lastname","trim","email","_jsx","Page","Loading","Navigate","to","state","errors","code","actions","count","hasCreatedByUser","Boolean","isScheduled","scheduledAt","timezone","numberOfEntriesText","number","scheduledText","date","Date","weekday","day","month","year","timeZone","time","hourCycle","offset","getTimezoneOffset","_jsxs","Main","aria-busy","Layouts","Header","title","name","subtitle","gap","lineHeight","Typography","textColor","variant","Badge","getBadgeProps","status","navigationAction","BackButton","fallback","primaryAction","releasedAt","SimpleMenuButton","label","More","endIcon","paddingLeft","paddingRight","aria-label","popoverPlacement","Menu","Item","disabled","onSelect","startIcon","Pencil","Trash","direction","justifyContent","alignItems","padding","fontWeight","color","RelativeTime","timestamp","createdAt","Button","size","onClick","toString","loading","SimpleMenu","GROUP_BY_OPTIONS","GROUP_BY_OPTIONS_NO_LOCALE","getGroupByOptionLabel","value","ReleaseDetailsBody","query","setQuery","useQueryParams","releaseData","isReleaseLoading","releaseError","runHookWaterfall","useStrapiApp","displayedHeaders","hasI18nEnabled","selectedGroupBy","groupBy","isFetching","isError","releaseActionsError","useGetReleaseActionsQuery","updateReleaseAction","useUpdateReleaseActionMutation","handleChangeType","e","actionId","actionPath","params","body","target","releaseActions","releaseMeta","contentTypes","components","isBaseQueryError","errorsArray","push","Error","Object","keys","length","Content","EmptyStateLayout","action","LinkButton","tag","ReactRouterLink","pathname","style","textDecoration","icon","EmptyDocuments","width","content","groupByLabel","headers","options","SingleSelect","placeholder","customizeContent","onChange","map","option","SingleSelectOption","key","role","Table","Root","rows","item","Number","entry","Head","HeaderCell","Body","contentType","locale","actionIndex","Tr","Td","maxWidth","ellipsis","mainFieldValue","displayName","isPublish","b","ReleaseActionOptions","selected","handleChange","_Fragment","minWidth","EntryValidationPopover","schema","uid","ReleaseActionMenu","ReleaseActionEntryLinkItem","contentTypeUid","documentId","DeleteReleaseActionItem","Pagination","pagination","defaultPageSize","pageSize","PageSize","Links","ReleaseDetailsPage","navigate","useNavigate","releaseModalShown","setReleaseModalShown","React","useState","showWarningSubmit","setWarningSubmit","isSuccess","isSuccessDetails","dataTimezone","isLoadingTimezone","useGetReleaseSettingsQuery","updateRelease","isSubmittingForm","useUpdateReleaseMutation","deleteRelease","useDeleteReleaseMutation","prev","getTimezoneValue","defaultTimezone","prevState","utcToZonedTime","format","undefined","handleEditRelease","values","handleDeleteRelease","ReleaseModal","open","handleClose","handleSubmit","initialValues","Dialog","onOpenChange","ConfirmDialog","onConfirm"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAqEA;;AAEkG,qGAClG,MAAMA,kBAAAA,GAAqBC,MAAOC,CAAAA,IAAAA,CAAK;;AAET,8BAAA,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,YAAY,CAAC;AACrC,6BAAA,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAAA,CAAMC,YAAY,CAAC;wBACzC,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAME,CAAAA,MAAM,CAACC,UAAU,CAAC;AACjE,CAAC;AAQD,MAAMC,oBAAAA,GAAuB,CAAC,EAC5BC,sBAAsB,EACtBC,mBAAmB,EACnBC,QAAQ,EACkB,GAAA;AAC1B,IAAA,MAAM,EAAEC,aAAa,EAAEC,UAAU,EAAEC,UAAU,EAAE,GAAGC,OAAAA,EAAAA;IAClD,MAAM,EAAEC,SAAS,EAAE,GAAGC,SAAAA,EAAAA;IACtB,MAAM,EACJC,IAAI,EACJC,SAAAA,EAAWC,gBAAgB,EAC3BC,KAAK,EACN,GAAGC,kBACF,CAAA;QAAEC,EAAIP,EAAAA;KACN,EAAA;AACEQ,QAAAA,IAAAA,EAAM,CAACR;AACT,KAAA,CAAA;AAEF,IAAA,MAAM,CAACS,cAAgB,EAAA,EAAEN,WAAWO,YAAY,EAAE,CAAC,GAAGC,yBAAAA,EAAAA;IACtD,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAC/B,MAAM,EAAEC,cAAc,EAAE,GAAGC,kBAAAA,EAAAA;AAC3B,IAAA,MAAM,EAAEC,cAAc,EAAE,GAAGC,OAAQC,CAAAA,WAAAA,CAAAA;AACnC,IAAA,MAAM,EAAEC,SAAS,EAAEC,SAAS,EAAEC,UAAU,EAAE,GAAGL,cAAAA;AAC7C,IAAA,MAAMM,QAAWC,GAAAA,gBAAAA,EAAAA;IACjB,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;AAEvB,IAAA,MAAMC,UAAUxB,IAAMA,EAAAA,IAAAA;IAEtB,MAAMyB,oBAAAA,GAAuB,CAACpB,EAAe,GAAA,UAAA;YAC3C,MAAMqB,QAAAA,GAAW,MAAMnB,cAAe,CAAA;AAAEF,gBAAAA;AAAG,aAAA,CAAA;AAE3C,YAAA,IAAI,UAAUqB,QAAU,EAAA;;gBAEtBhB,kBAAmB,CAAA;oBACjBiB,IAAM,EAAA,SAAA;AACNC,oBAAAA,OAAAA,EAASlC,aAAc,CAAA;wBACrBW,EAAI,EAAA,oEAAA;wBACJwB,cAAgB,EAAA;AAClB,qBAAA;AACF,iBAAA,CAAA;gBAEA,MAAM,EAAEC,YAAY,EAAEC,qBAAqB,EAAEC,uBAAuB,EAAE,GAAGN,QAAAA,CAAS1B,IAAI,CAACiC,IAAI;AAE3FX,gBAAAA,UAAAA,CAAW,mBAAqB,EAAA;AAC9BQ,oBAAAA,YAAAA;AACAC,oBAAAA,qBAAAA;AACAC,oBAAAA;AACF,iBAAA,CAAA;AACF,aAAA,MAAO,IAAIE,YAAAA,CAAaR,QAASvB,CAAAA,KAAK,CAAG,EAAA;;gBAEvCO,kBAAmB,CAAA;oBACjBiB,IAAM,EAAA,QAAA;oBACNC,OAAShB,EAAAA,cAAAA,CAAec,SAASvB,KAAK;AACxC,iBAAA,CAAA;aACK,MAAA;;gBAELO,kBAAmB,CAAA;oBACjBiB,IAAM,EAAA,QAAA;AACNC,oBAAAA,OAAAA,EAASlC,aAAc,CAAA;wBAAEW,EAAI,EAAA,oBAAA;wBAAsBwB,cAAgB,EAAA;AAAoB,qBAAA;AACzF,iBAAA,CAAA;AACF;AACF,SAAA;AAEA,IAAA,MAAMM,aAAgB,GAAA,IAAA;AACpBf,QAAAA,QAAAA,CACEgB,UAAWC,CAAAA,IAAI,CAACC,cAAc,CAAC;AAC7B,YAAA;gBAAEX,IAAM,EAAA,eAAA;gBAAiBtB,EAAI,EAAA;AAAO,aAAA;AACpC,YAAA;gBAAEsB,IAAM,EAAA,SAAA;gBAAWtB,EAAIP,EAAAA;AAAU;AAClC,SAAA,CAAA,CAAA;AAEL,KAAA;AAEA,IAAA,MAAMyC,gBAAmB,GAAA,IAAA;QACvB,IAAI,CAACf,SAASgB,SAAW,EAAA;YACvB,OAAO,IAAA;AACT;;AAGA,QAAA,IAAIhB,OAAQgB,CAAAA,SAAS,CAACC,QAAQ,EAAE;YAC9B,OAAOjB,OAAAA,CAAQgB,SAAS,CAACC,QAAQ;AACnC;;AAGA,QAAA,IAAIjB,OAAQgB,CAAAA,SAAS,CAACE,SAAS,EAAE;AAC/B,YAAA,OAAO,CAAC,EAAElB,OAAAA,CAAQgB,SAAS,CAACE,SAAS,CAAC,CAAC,EAAElB,OAAAA,CAAQgB,SAAS,CAACG,QAAQ,IAAI,EAAG,CAAA,CAAC,CAACC,IAAI,EAAA;AAClF;;QAGA,OAAOpB,OAAAA,CAAQgB,SAAS,CAACK,KAAK;AAChC,KAAA;AAEA,IAAA,IAAI3C,gBAAkB,EAAA;QACpB,qBAAO4C,GAAA,CAACC,KAAKC,OAAO,EAAA,EAAA,CAAA;AACtB;AAEA,IAAA,IAAI,gBAAkB7C,CAAAA,KAAAA,CAAAA,IAAU,MAAUA,IAAAA,KAAAA,IAAU,CAACqB,OAAS,EAAA;AAC5D,QAAA,qBACEsB,GAACG,CAAAA,QAAAA,EAAAA;YACCC,EAAG,EAAA,IAAA;YACHC,KAAO,EAAA;gBACLC,MAAQ,EAAA;AACN,oBAAA;;AAEEC,wBAAAA,IAAAA,EAAMlD,KAAOkD,EAAAA;AACf;AACD;AACH;;AAGN;AAEA,IAAA,MAAMvB,eAAeN,OAAQ8B,CAAAA,OAAO,CAACrB,IAAI,CAACsB,KAAK,IAAI,CAAA;AACnD,IAAA,MAAMC,mBAAmBC,OAAQlB,CAAAA,gBAAAA,EAAAA,CAAAA;AAEjC,IAAA,MAAMmB,WAAclC,GAAAA,OAAAA,CAAQmC,WAAW,IAAInC,QAAQoC,QAAQ;AAC3D,IAAA,MAAMC,sBAAsBnE,aAC1B,CAAA;QACEW,EAAI,EAAA,gDAAA;QACJwB,cAAgB,EAAA;KAElB,EAAA;QAAEiC,MAAQhC,EAAAA;AAAa,KAAA,CAAA;IAEzB,MAAMiC,aAAAA,GAAgBL,cAClBhE,aACE,CAAA;QACEW,EAAI,EAAA,iEAAA;QACJwB,cAAgB,EAAA;KAElB,EAAA;AACEmC,QAAAA,IAAAA,EAAMrE,UAAW,CAAA,IAAIsE,IAAKzC,CAAAA,OAAAA,CAAQmC,WAAW,CAAI,EAAA;YAC/CO,OAAS,EAAA,MAAA;YACTC,GAAK,EAAA,SAAA;YACLC,KAAO,EAAA,MAAA;YACPC,IAAM,EAAA,SAAA;AACNC,YAAAA,QAAAA,EAAU9C,QAAQoC;AACpB,SAAA,CAAA;AACAW,QAAAA,IAAAA,EAAM3E,UAAW,CAAA,IAAIqE,IAAKzC,CAAAA,OAAAA,CAAQmC,WAAW,CAAI,EAAA;AAC/CW,YAAAA,QAAAA,EAAU9C,QAAQoC,QAAQ;YAC1BY,SAAW,EAAA;AACb,SAAA,CAAA;AACAC,QAAAA,MAAAA,EAAQC,kBAAkBlD,OAAQoC,CAAAA,QAAQ,EAAG,IAAIK,IAAAA,CAAKzC,QAAQmC,WAAW,CAAA;KAG7E,CAAA,GAAA,EAAA;AAEJ,IAAA,qBACEgB,IAACC,CAAAA,IAAAA,EAAAA;QAAKC,WAAW3E,EAAAA,gBAAAA;;AACf,0BAAA4C,GAAA,CAACgC,QAAQC,MAAM,EAAA;AACbC,gBAAAA,KAAAA,EAAOxD,QAAQyD,IAAI;AACnBC,gBAAAA,QAAAA,gBACEP,IAAC1F,CAAAA,IAAAA,EAAAA;oBAAKkG,GAAK,EAAA,CAAA;oBAAGC,UAAY,EAAA,CAAA;;sCACxBtC,GAACuC,CAAAA,UAAAA,EAAAA;4BAAWC,SAAU,EAAA,YAAA;4BAAaC,OAAQ,EAAA,SAAA;sCACxC1B,mBAAuBH,IAAAA,cAAc,CAAC,GAAG,EAAEK,aAAc,CAAA,CAAC,GAAG,EAAC;;sCAEjEjB,GAAC0C,CAAAA,KAAAA,EAAAA;4BAAO,GAAGC,aAAAA,CAAcjE,OAAQkE,CAAAA,MAAM,CAAC;AAAGlE,4BAAAA,QAAAA,EAAAA,OAAAA,CAAQkE;;;;AAGvDC,gBAAAA,gBAAAA,gBAAkB7C,GAAC8C,CAAAA,UAAAA,EAAAA;oBAAWC,QAAS,EAAA;;AACvCC,gBAAAA,aAAAA,EACE,CAACtE,OAAAA,CAAQuE,UAAU,kBACjBpB,IAAC1F,CAAAA,IAAAA,EAAAA;oBAAKkG,GAAK,EAAA,CAAA;;sCACTR,IAACqB,CAAAA,gBAAAA,EAAAA;AACCC,4BAAAA,KAAAA,gBAAOnD,GAACoD,CAAAA,IAAAA,EAAAA,EAAAA,CAAAA;4BACRX,OAAQ,EAAA,UAAA;4BACRY,OAAS,EAAA,IAAA;4BACTC,WAAY,EAAA,KAAA;4BACZC,YAAa,EAAA,KAAA;AACbC,4BAAAA,YAAAA,EAAY5G,aAAc,CAAA;gCACxBW,EAAI,EAAA,sDAAA;gCACJwB,cAAgB,EAAA;AAClB,6BAAA,CAAA;4BACA0E,gBAAiB,EAAA,YAAA;;AAEjB,8CAAAzD,GAAA,CAAC0D,KAAKC,IAAI,EAAA;AACRC,oCAAAA,QAAAA,EAAU,CAACzF,SAAAA;oCACX0F,QAAUpH,EAAAA,sBAAAA;AACVqH,oCAAAA,SAAAA,gBAAW9D,GAAC+D,CAAAA,MAAAA,EAAAA,EAAAA,CAAAA;8CAEXnH,aAAc,CAAA;wCACbW,EAAI,EAAA,sCAAA;wCACJwB,cAAgB,EAAA;AAClB,qCAAA;;AAEF,8CAAAiB,GAAA,CAAC0D,KAAKC,IAAI,EAAA;AACRC,oCAAAA,QAAAA,EAAU,CAACxF,SAAAA;oCACXyF,QAAUnH,EAAAA,mBAAAA;oCACV+F,OAAQ,EAAA,QAAA;AACRqB,oCAAAA,SAAAA,gBAAW9D,GAACgE,CAAAA,KAAAA,EAAAA,EAAAA,CAAAA;8CAEXpH,aAAc,CAAA;wCACbW,EAAI,EAAA,wCAAA;wCACJwB,cAAgB,EAAA;AAClB,qCAAA;;8CAEF8C,IAAC5F,CAAAA,kBAAAA,EAAAA;oCACCgI,SAAU,EAAA,QAAA;oCACVC,cAAe,EAAA,QAAA;oCACfC,UAAW,EAAA,YAAA;oCACX9B,GAAK,EAAA,CAAA;oCACL+B,OAAS,EAAA,CAAA;;sDAETpE,GAACuC,CAAAA,UAAAA,EAAAA;4CAAWE,OAAQ,EAAA,IAAA;4CAAK4B,UAAW,EAAA,MAAA;sDACjCzH,aAAc,CAAA;gDACbW,EAAI,EAAA,yCAAA;gDACJwB,cAAgB,EAAA;AAClB,6CAAA;;sDAEF8C,IAACU,CAAAA,UAAAA,EAAAA;4CAAWE,OAAQ,EAAA,IAAA;4CAAK6B,KAAM,EAAA,YAAA;;8DAC7BtE,GAACuE,CAAAA,YAAAA,EAAAA;oDAAaC,SAAW,EAAA,IAAIrD,IAAKzC,CAAAA,OAAAA,CAAQ+F,SAAS;;gDAClD7H,aACC,CAAA;oDACEW,EAAI,EAAA,qDAAA;oDACJwB,cACE,EAAA;iDAEJ,EAAA;oDAAEW,SAAWD,EAAAA,gBAAAA,EAAAA;AAAoBiB,oDAAAA;AAAiB,iDAAA;;;;;;;sCAK1DV,GAAC0E,CAAAA,MAAAA,EAAAA;4BAAOC,IAAK,EAAA,GAAA;4BAAIlC,OAAQ,EAAA,UAAA;4BAAWmC,OAASvF,EAAAA,aAAAA;sCAC1CzC,aAAc,CAAA;gCACbW,EAAI,EAAA,yCAAA;gCACJwB,cAAgB,EAAA;AAClB,6BAAA;;AAEDV,wBAAAA,UAAAA,iBACC2B,GAAC0E,CAAAA,MAAAA,EAAAA;4BACCC,IAAK,EAAA,GAAA;4BACLlC,OAAQ,EAAA,SAAA;AACRmC,4BAAAA,OAAAA,EAASjG,oBAAqBD,CAAAA,OAAAA,CAAQnB,EAAE,CAACsH,QAAQ,EAAA,CAAA;4BACjDC,OAASpH,EAAAA,YAAAA;AACTkG,4BAAAA,QAAAA,EAAUlF,QAAQ8B,OAAO,CAACrB,IAAI,CAACsB,KAAK,KAAK,CAAA;sCAExC7D,aAAc,CAAA;gCACbW,EAAI,EAAA,yCAAA;gCACJwB,cAAgB,EAAA;AAClB,6BAAA;AAEA,yBAAA,CAAA,GAAA;;;;AAKXpC,YAAAA;;;AAGP,CAAA;AAEA,MAAMuG,gBAAAA,GAAmBhH,MAAO6I,CAAAA,UAAAA,CAAW;;;;AAI3C,CAAC;AAED;;AAEkG,qGAClG,MAAMC,gBAAmB,GAAA;AAAC,IAAA,aAAA;AAAe,IAAA,QAAA;AAAU,IAAA;AAAS,CAAA;AAC5D,MAAMC,0BAA6B,GAAA;AAAC,IAAA,aAAA;AAAe,IAAA;AAAS,CAAA;AAC5D,MAAMC,wBAAwB,CAACC,KAAAA,GAAAA;AAC7B,IAAA,IAAIA,UAAU,QAAU,EAAA;QACtB,OAAO;YACL5H,EAAI,EAAA,8DAAA;YACJwB,cAAgB,EAAA;AAClB,SAAA;AACF;AAEA,IAAA,IAAIoG,UAAU,QAAU,EAAA;QACtB,OAAO;YACL5H,EAAI,EAAA,8DAAA;YACJwB,cAAgB,EAAA;AAClB,SAAA;AACF;IAEA,OAAO;QACLxB,EAAI,EAAA,mEAAA;QACJwB,cAAgB,EAAA;AAClB,KAAA;AACF,CAAA;AAMA,MAAMqG,kBAAqB,GAAA,CAAC,EAAEpI,SAAS,EAA2B,GAAA;IAChE,MAAM,EAAEJ,aAAa,EAAE,GAAGG,OAAAA,EAAAA;AAC1B,IAAA,MAAM,CAAC,EAAEsI,KAAK,EAAE,EAAEC,SAAS,GAAGC,cAAAA,EAAAA;IAC9B,MAAM,EAAE3H,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAC/B,MAAM,EAAEC,cAAc,EAAE,GAAGC,kBAAAA,EAAAA;IAC3B,MAAM,EACJb,IAAMsI,EAAAA,WAAW,EACjBrI,SAAAA,EAAWsI,gBAAgB,EAC3BpI,KAAOqI,EAAAA,YAAY,EACpB,GAAGpI,kBAAmB,CAAA;QAAEC,EAAIP,EAAAA;AAAU,KAAA,CAAA;AACvC,IAAA,MAAM,EACJgB,cAAgB,EAAA,EAAEG,SAAS,EAAE,EAC9B,GAAGF,OAAQC,CAAAA,WAAAA,CAAAA;AACZ,IAAA,MAAMyH,mBAAmBC,YAAa,CAAA,oBAAA,EAAsB,CAACvF,KAAAA,GAAUA,MAAMsF,gBAAgB,CAAA;;AAG7F,IAAA,MAAM,EAAEE,gBAAgB,EAAEC,cAAc,EAAE,GACxCH,iBAAiB,6DAA+D,EAAA;QAC9EE,gBAAkB,EAAA;AAChB,YAAA;gBACE1C,KAAO,EAAA;oBACL5F,EAAI,EAAA,8DAAA;oBACJwB,cAAgB,EAAA;AAClB,iBAAA;gBACAoD,IAAM,EAAA;AACR;AACD,SAAA;QACD2D,cAAgB,EAAA;AAClB,KAAA,CAAA;AAEF,IAAA,MAAMpH,UAAU8G,WAAatI,EAAAA,IAAAA;IAC7B,MAAM6I,eAAAA,GAAkBV,OAAOW,OAAW,IAAA,aAAA;AAE1C,IAAA,MAAM,EACJ7I,SAAS,EACT8I,UAAU,EACVC,OAAO,EACPhJ,IAAI,EACJG,KAAAA,EAAO8I,mBAAmB,EAC3B,GAAGC,yBAA0B,CAAA;AAC5B,QAAA,GAAGf,KAAK;AACRrI,QAAAA;AACF,KAAA,CAAA;IAEA,MAAM,CAACqJ,oBAAoB,GAAGC,8BAAAA,EAAAA;IAE9B,MAAMC,gBAAAA,GAAmB,OACvBC,CAAAA,EACAC,QACAC,EAAAA,UAAAA,GAAAA;QAEA,MAAM9H,QAAAA,GAAW,MAAMyH,mBAAoB,CAAA;YACzCM,MAAQ,EAAA;AACN3J,gBAAAA,SAAAA;AACAyJ,gBAAAA;AACF,aAAA;YACAG,IAAM,EAAA;gBACJ/H,IAAM2H,EAAAA,CAAAA,CAAEK,MAAM,CAAC1B;AACjB,aAAA;AACAE,YAAAA,KAAAA;AACAqB,YAAAA;AACF,SAAA,CAAA;AAEA,QAAA,IAAI,WAAW9H,QAAU,EAAA;YACvB,IAAIQ,YAAAA,CAAaR,QAASvB,CAAAA,KAAK,CAAG,EAAA;;gBAEhCO,kBAAmB,CAAA;oBACjBiB,IAAM,EAAA,QAAA;oBACNC,OAAShB,EAAAA,cAAAA,CAAec,SAASvB,KAAK;AACxC,iBAAA,CAAA;aACK,MAAA;;gBAELO,kBAAmB,CAAA;oBACjBiB,IAAM,EAAA,QAAA;AACNC,oBAAAA,OAAAA,EAASlC,aAAc,CAAA;wBAAEW,EAAI,EAAA,oBAAA;wBAAsBwB,cAAgB,EAAA;AAAoB,qBAAA;AACzF,iBAAA,CAAA;AACF;AACF;AACF,KAAA;AAEA,IAAA,IAAI5B,aAAasI,gBAAkB,EAAA;QACjC,qBAAOzF,GAAA,CAACC,KAAKC,OAAO,EAAA,EAAA,CAAA;AACtB;AAEA,IAAA,MAAM4G,iBAAiB5J,IAAMA,EAAAA,IAAAA;AAC7B,IAAA,MAAM6J,cAAc7J,IAAMiC,EAAAA,IAAAA;IAC1B,MAAM6H,YAAAA,GAAeD,WAAaC,EAAAA,YAAAA,IAAgB,EAAC;IAChCD,WAAaE,EAAAA,UAAAA,IAAc;IAE9C,IAAIC,gBAAAA,CAAiBxB,YAAiB,CAAA,IAAA,CAAChH,OAAS,EAAA;AAC9C,QAAA,MAAMyI,cAAc,EAAE;QACtB,IAAIzB,YAAAA,IAAgB,UAAUA,YAAc,EAAA;AAC1CyB,YAAAA,WAAAA,CAAYC,IAAI,CAAC;AACf7G,gBAAAA,IAAAA,EAAMmF,aAAanF;AACrB,aAAA,CAAA;AACF;QACA,IAAI4F,mBAAAA,IAAuB,UAAUA,mBAAqB,EAAA;AACxDgB,YAAAA,WAAAA,CAAYC,IAAI,CAAC;AACf7G,gBAAAA,IAAAA,EAAM4F,oBAAoB5F;AAC5B,aAAA,CAAA;AACF;AACA,QAAA,qBACEP,GAACG,CAAAA,QAAAA,EAAAA;YACCC,EAAG,EAAA,IAAA;YACHC,KAAO,EAAA;gBACLC,MAAQ6G,EAAAA;AACV;;AAGN;IAEA,IAAIjB,OAAAA,IAAW,CAACY,cAAgB,EAAA;QAC9B,qBAAO9G,GAAA,CAACC,KAAKoH,KAAK,EAAA,EAAA,CAAA;AACpB;AAEA,IAAA,IAAIC,OAAOC,IAAI,CAACT,cAAgBU,CAAAA,CAAAA,MAAM,KAAK,CAAG,EAAA;QAC5C,qBACExH,GAAA,CAACgC,QAAQyF,OAAO,EAAA;AACd,YAAA,QAAA,gBAAAzH,GAAC0H,CAAAA,gBAAAA,EAAAA;AACCC,gBAAAA,MAAAA,gBACE3H,GAAC4H,CAAAA,UAAAA,EAAAA;oBACCC,GAAKC,EAAAA,IAAAA;oBACL1H,EAAI,EAAA;wBACF2H,QAAU,EAAA;AACZ,qBAAA;oBACAC,KAAO,EAAA;wBAAEC,cAAgB,EAAA;AAAO,qBAAA;oBAChCxF,OAAQ,EAAA,WAAA;8BAEP7F,aAAc,CAAA;wBACbW,EAAI,EAAA,yDAAA;wBACJwB,cAAgB,EAAA;AAClB,qBAAA;;AAGJmJ,gBAAAA,IAAAA,gBAAMlI,GAACmI,CAAAA,cAAAA,EAAAA;oBAAeC,KAAM,EAAA;;AAC5BC,gBAAAA,OAAAA,EAASzL,aAAc,CAAA;oBACrBW,EAAI,EAAA,iDAAA;oBACJwB,cACE,EAAA;AACJ,iBAAA;;;AAIR;AAEA,IAAA,MAAMuJ,eAAe1L,aAAc,CAAA;QACjCW,EAAI,EAAA,0DAAA;QACJwB,cAAgB,EAAA;AAClB,KAAA,CAAA;AACA,IAAA,MAAMwJ,OAAU,GAAA;AACX1C,QAAAA,GAAAA,gBAAAA;AACH,QAAA;YACE1C,KAAO,EAAA;gBACL5F,EAAI,EAAA,sEAAA;gBACJwB,cAAgB,EAAA;AAClB,aAAA;YACAoD,IAAM,EAAA;AACR,SAAA;AACA,QAAA;YACEgB,KAAO,EAAA;gBACL5F,EAAI,EAAA,gEAAA;gBACJwB,cAAgB,EAAA;AAClB,aAAA;YACAoD,IAAM,EAAA;AACR,SAAA;WACI,CAACzD,OAAAA,CAAQuE,UAAU,GACnB;AACE,YAAA;gBACEE,KAAO,EAAA;oBACL5F,EAAI,EAAA,gEAAA;oBACJwB,cAAgB,EAAA;AAClB,iBAAA;gBACAoD,IAAM,EAAA;AACR;AACD,SAAA,GACD;AACL,KAAA;IAED,MAAMqG,OAAAA,GAAU1C,iBAAiBd,gBAAmBC,GAAAA,0BAAAA;IAEpD,qBACEjF,GAAA,CAACgC,QAAQyF,OAAO,EAAA;AACd,QAAA,QAAA,gBAAA5F,IAAC1F,CAAAA,IAAAA,EAAAA;YAAKkG,GAAK,EAAA,CAAA;YAAG4B,SAAU,EAAA,QAAA;YAASE,UAAW,EAAA,SAAA;;8BAC1CnE,GAAC7D,CAAAA,IAAAA,EAAAA;AACC,oBAAA,QAAA,gBAAA6D,GAACyI,CAAAA,YAAAA,EAAAA;wBACCC,WAAaJ,EAAAA,YAAAA;wBACb9E,YAAY8E,EAAAA,YAAAA;wBACZK,gBAAkB,EAAA,CAACxD,QACjBvI,aACE,CAAA;gCACEW,EAAI,EAAA,CAAC,mDAAmD,CAAC;gCACzDwB,cAAgB,EAAA,CAAC,kBAAkB;6BAErC,EAAA;gCACEiH,OAASb,EAAAA;AACX,6BAAA,CAAA;AAGJA,wBAAAA,KAAAA,EAAOvI,cAAcsI,qBAAsBa,CAAAA,eAAAA,CAAAA,CAAAA;wBAC3C6C,QAAU,EAAA,CAACzD,QAAUG,QAAS,CAAA;gCAAEU,OAASb,EAAAA;AAA8B,6BAAA,CAAA;AAEtEqD,wBAAAA,QAAAA,EAAAA,OAAAA,CAAQK,GAAG,CAAC,CAACC,MAAAA,iBACZ9I,GAAC+I,CAAAA,kBAAAA,EAAAA;gCAAgC5D,KAAO2D,EAAAA,MAAAA;AACrClM,gCAAAA,QAAAA,EAAAA,aAAAA,CAAcsI,qBAAsB4D,CAAAA,MAAAA,CAAAA;AADdA,6BAAAA,EAAAA,MAAAA,CAAAA;;;AAM9BxB,gBAAAA,MAAAA,CAAOC,IAAI,CAACT,cAAAA,CAAAA,CAAgB+B,GAAG,CAAC,CAACG,oBAChCnH,IAAC1F,CAAAA,IAAAA,EAAAA;wBAAmCkG,GAAK,EAAA,CAAA;wBAAG4B,SAAU,EAAA,QAAA;wBAASE,UAAW,EAAA,SAAA;;0CACxEnE,GAAC7D,CAAAA,IAAAA,EAAAA;gCAAK8M,IAAK,EAAA,WAAA;gCAAYzF,YAAYwF,EAAAA,GAAAA;AACjC,gCAAA,QAAA,gBAAAhJ,GAAC0C,CAAAA,KAAAA,EAAAA;AAAOsG,oCAAAA,QAAAA,EAAAA;;;AAEV,0CAAAhJ,GAAA,CAACkJ,MAAMC,IAAI,EAAA;gCACTC,IAAMtC,EAAAA,cAAc,CAACkC,GAAI,CAAA,CAACH,GAAG,CAAC,CAACQ,QAAU;AACvC,wCAAA,GAAGA,IAAI;AACP9L,wCAAAA,EAAAA,EAAI+L,MAAOD,CAAAA,IAAAA,CAAKE,KAAK,CAAChM,EAAE;qCAC1B,CAAA,CAAA;gCACAgL,OAASA,EAAAA,OAAAA;AACTpL,gCAAAA,SAAAA,EAAWA,SAAa8I,IAAAA,UAAAA;wDAExBpE,IAAA,CAACqH,MAAMzB,OAAO,EAAA;;AACZ,sDAAAzH,GAAA,CAACkJ,MAAMM,IAAI,EAAA;sDACRjB,OAAQM,CAAAA,GAAG,CAAC,CAAC,EAAE1F,KAAK,EAAEhB,IAAI,EAAE,iBAC3BnC,GAACkJ,CAAAA,KAAAA,CAAMO,UAAU,EAAA;AAAYtG,oDAAAA,KAAAA,EAAOvG,aAAcuG,CAAAA,KAAAA,CAAAA;oDAAQhB,IAAMA,EAAAA;AAAzCA,iDAAAA,EAAAA,IAAAA,CAAAA;;AAG3B,sDAAAnC,GAAA,CAACkJ,MAAMhJ,OAAO,EAAA,EAAA,CAAA;AACd,sDAAAF,GAAA,CAACkJ,MAAMQ,IAAI,EAAA;sDACR5C,cAAc,CAACkC,IAAI,CAACH,GAAG,CACtB,CAAC,EAAEtL,EAAE,EAAEoM,WAAW,EAAEC,MAAM,EAAE/K,IAAI,EAAE0K,KAAK,EAAE3G,MAAM,EAAE,EAAEiH,WAAAA,iBACjDhI,IAACiI,CAAAA,EAAAA,EAAAA;;sEACC9J,GAAC+J,CAAAA,EAAAA,EAAAA;4DAAG3B,KAAM,EAAA,KAAA;4DAAM4B,QAAS,EAAA,OAAA;AACvB,4DAAA,QAAA,gBAAAhK,GAACuC,CAAAA,UAAAA,EAAAA;gEAAW0H,QAAQ,EAAA,IAAA;AAAE,gEAAA,QAAA,EAAA,CAAC,EACrBN,WAAYO,CAAAA,cAAc,IAAIX,KAAMhM,CAAAA,EAAE,CACvC;;;AAEFuI,wDAAAA,cAAAA,kBACC9F,GAAC+J,CAAAA,EAAAA,EAAAA;4DAAG3B,KAAM,EAAA,KAAA;AACR,4DAAA,QAAA,gBAAApI,GAACuC,CAAAA,UAAAA,EAAAA;AAAY,gEAAA,QAAA,EAAA,CAAC,EAAEqH,MAAQzH,EAAAA,IAAAA,GAAOyH,OAAOzH,IAAI,GAAG,IAAI;;;sEAIrDnC,GAAC+J,CAAAA,EAAAA,EAAAA;4DAAG3B,KAAM,EAAA,KAAA;AACR,4DAAA,QAAA,gBAAApI,GAACuC,CAAAA,UAAAA,EAAAA;AAAYoH,gEAAAA,QAAAA,EAAAA,WAAAA,CAAYQ,WAAW,IAAI;;;sEAE1CnK,GAAC+J,CAAAA,EAAAA,EAAAA;4DAAG3B,KAAM,EAAA,KAAA;sEACP1J,OAAQuE,CAAAA,UAAU,iBACjBjD,GAACuC,CAAAA,UAAAA,EAAAA;0EACE3F,aACC,CAAA;oEACEW,EAAI,EAAA,6DAAA;oEACJwB,cACE,EAAA;iEAEJ,EAAA;AACEqL,oEAAAA,SAAAA,EAAWvL,IAAS,KAAA,SAAA;oEACpBwL,CAAG,EAAA,CAAC1N,yBACFqD,GAACuC,CAAAA,UAAAA,EAAAA;4EAAW8B,UAAW,EAAA,MAAA;AAAQ1H,4EAAAA,QAAAA,EAAAA;;AAEnC,iEAAA;+EAIJqD,GAACsK,CAAAA,oBAAAA,EAAAA;gEACCC,QAAU1L,EAAAA,IAAAA;AACV2L,gEAAAA,YAAAA,EAAc,CAAChE,CAAAA,GAAMD,gBAAiBC,CAAAA,CAAAA,EAAGjJ,EAAI,EAAA;AAACyL,wEAAAA,GAAAA;AAAKa,wEAAAA;AAAY,qEAAA,CAAA;AAC/D1H,gEAAAA,IAAAA,EAAM,CAAC,eAAe,EAAE5E,EAAAA,CAAG,KAAK,CAAC;AACjCqG,gEAAAA,QAAAA,EAAU,CAACzF;;;wDAIhB,CAACO,OAAAA,CAAQuE,UAAU,kBAClBpB,IAAA,CAAA4I,QAAA,EAAA;;8EACEzK,GAAC+J,CAAAA,EAAAA,EAAAA;oEAAG3B,KAAM,EAAA,KAAA;oEAAMsC,QAAS,EAAA,OAAA;AACvB,oEAAA,QAAA,gBAAA1K,GAAC2K,CAAAA,sBAAAA,EAAAA;wEACChD,MAAQ9I,EAAAA,IAAAA;AACR+L,wEAAAA,MAAAA,EAAQ5D,YAAc,GAAC2C,WAAYkB,CAAAA,GAAG,CAAC;wEACvCtB,KAAOA,EAAAA,KAAAA;wEACP3G,MAAQA,EAAAA;;;8EAGZ5C,GAAC+J,CAAAA,EAAAA,EAAAA;AACC,oEAAA,QAAA,gBAAA/J,GAAC7D,CAAAA,IAAAA,EAAAA;wEAAK+H,cAAe,EAAA,UAAA;gGACnBrC,IAAA,CAACiJ,kBAAkB3B,IAAI,EAAA;;AACrB,8FAAAnJ,GAAA,CAAC8K,kBAAkBC,0BAA0B,EAAA;AAC3CC,oFAAAA,cAAAA,EAAgBrB,YAAYkB,GAAG;AAC/BI,oFAAAA,UAAAA,EAAY1B,MAAM0B,UAAU;AAC5BrB,oFAAAA,MAAAA,EAAQA,MAAQrJ,EAAAA;;AAElB,8FAAAP,GAAA,CAAC8K,kBAAkBI,uBAAuB,EAAA;AACxClO,oFAAAA,SAAAA,EAAW0B,QAAQnB,EAAE;oFACrBkJ,QAAUlJ,EAAAA;;;;;;;;;AA7DfA,iDAAAA,EAAAA,EAAAA,CAAAA;;;;;;uBAtBV,CAAC,eAAe,EAAEyL,GAAAA,CAAI,CAAC,CAAA,CAAA;AAkGpC,8BAAAnH,IAAA,CAACsJ,WAAWhC,IAAI,EAAA;AACb,oBAAA,GAAGpC,aAAaqE,UAAU;AAC3BC,oBAAAA,eAAAA,EAAiBtE,aAAaqE,UAAYE,EAAAA,QAAAA;;AAE1C,sCAAAtL,GAAA,CAACmL,WAAWI,QAAQ,EAAA,EAAA,CAAA;AACpB,sCAAAvL,GAAA,CAACmL,WAAWK,KAAK,EAAA,EAAA;;;;;;AAK3B,CAAA;AAEA;;AAEkG,2GAC5FC,kBAAqB,GAAA,IAAA;IACzB,MAAM,EAAE7O,aAAa,EAAE,GAAGG,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,SAAS,EAAE,GAAGC,SAAAA,EAAAA;IACtB,MAAM,EAAEW,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAC/B,MAAM,EAAEC,cAAc,EAAE,GAAGC,kBAAAA,EAAAA;AAC3B,IAAA,MAAM2N,QAAWC,GAAAA,WAAAA,EAAAA;AACjB,IAAA,MAAM,CAACC,iBAAmBC,EAAAA,oBAAAA,CAAqB,GAAGC,KAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AACjE,IAAA,MAAM,CAACC,iBAAmBC,EAAAA,gBAAAA,CAAiB,GAAGH,KAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;IAE7D,MAAM,EACJ5O,SAAWC,EAAAA,gBAAgB,EAC3BF,IAAI,EACJgP,SAAWC,EAAAA,gBAAgB,EAC5B,GAAG7O,kBACF,CAAA;QAAEC,EAAIP,EAAAA;KACN,EAAA;AACEQ,QAAAA,IAAAA,EAAM,CAACR;AACT,KAAA,CAAA;AAEF,IAAA,MAAM,EAAEE,IAAMkP,EAAAA,YAAY,EAAEjP,SAAWkP,EAAAA,iBAAiB,EAAE,GAAGC,0BAAAA,EAAAA;AAC7D,IAAA,MAAM,CAACC,aAAe,EAAA,EAAEpP,WAAWqP,gBAAgB,EAAE,CAAC,GAAGC,wBAAAA,EAAAA;IACzD,MAAM,CAACC,cAAc,GAAGC,wBAAAA,EAAAA;AAExB,IAAA,MAAMlQ,sBAAyB,GAAA,IAAA;QAC7BoP,oBAAqB,CAAA,CAACe,OAAS,CAACA,IAAAA,CAAAA;AAClC,KAAA;AAEA,IAAA,MAAMC,gBAAmB,GAAA,IAAA;AACvB,QAAA,IAAIrH,aAAa1E,QAAU,EAAA;AACzB,YAAA,OAAO0E,YAAY1E,QAAQ;SACtB,MAAA;YACL,IAAIsL,YAAAA,EAAclP,KAAK4P,eAAiB,EAAA;gBACtC,OAAOV,YAAAA,CAAalP,IAAI,CAAC4P,eAAe;AAC1C;YACA,OAAO,IAAA;AACT;AACF,KAAA;AAEA,IAAA,MAAMpQ,mBAAsB,GAAA,IAAMuP,gBAAiB,CAAA,CAACc,YAAc,CAACA,SAAAA,CAAAA;AAEnE,IAAA,IAAI3P,oBAAoBiP,iBAAmB,EAAA;AACzC,QAAA,qBACErM,GAACxD,CAAAA,oBAAAA,EAAAA;YACCC,sBAAwBA,EAAAA,sBAAAA;YACxBC,mBAAqBA,EAAAA,mBAAAA;oCAErBsD,GAAA,CAACC,KAAKC,OAAO,EAAA,EAAA;;AAGnB;AAEA,IAAA,IAAI,CAAClD,SAAW,EAAA;AACd,QAAA,qBAAOgD,GAACG,CAAAA,QAAAA,EAAAA;YAASC,EAAG,EAAA;;AACtB;AAEA,IAAA,MAAMoF,WAAc,GAAC2G,gBAAoBjP,IAAAA,IAAAA,EAAMA,IAAS,IAAA,IAAA;IAExD,MAAMgF,KAAAA,GAAQsD,aAAarD,IAAQ,IAAA,EAAA;AACnC,IAAA,MAAMrB,QAAW+L,GAAAA,gBAAAA,EAAAA;IACjB,MAAMhM,WAAAA,GACJ2E,aAAa3E,WAAeC,IAAAA,QAAAA,GAAWkM,eAAexH,WAAY3E,CAAAA,WAAW,EAAEC,QAAY,CAAA,GAAA,IAAA;;AAE7F,IAAA,MAAMI,IAAOL,GAAAA,WAAAA,GAAcoM,MAAOpM,CAAAA,WAAAA,EAAa,YAAgBqM,CAAAA,GAAAA,SAAAA;AAC/D,IAAA,MAAMzL,IAAOZ,GAAAA,WAAAA,GAAcoM,MAAOpM,CAAAA,WAAAA,EAAa,OAAW,CAAA,GAAA,EAAA;AAE1D,IAAA,MAAMsM,oBAAoB,OAAOC,MAAAA,GAAAA;QAC/B,MAAMxO,QAAAA,GAAW,MAAM2N,aAAc,CAAA;YACnChP,EAAIP,EAAAA,SAAAA;AACJmF,YAAAA,IAAAA,EAAMiL,OAAOjL,IAAI;AACjBtB,YAAAA,WAAAA,EAAauM,OAAOvM,WAAW;AAC/BC,YAAAA,QAAAA,EAAUsM,OAAOtM;AACnB,SAAA,CAAA;AAEA,QAAA,IAAI,UAAUlC,QAAU,EAAA;;YAEtBhB,kBAAmB,CAAA;gBACjBiB,IAAM,EAAA,SAAA;AACNC,gBAAAA,OAAAA,EAASlC,aAAc,CAAA;oBACrBW,EAAI,EAAA,6DAAA;oBACJwB,cAAgB,EAAA;AAClB,iBAAA;AACF,aAAA,CAAA;AACAtC,YAAAA,sBAAAA,EAAAA;AACF,SAAA,MAAO,IAAI2C,YAAAA,CAAaR,QAASvB,CAAAA,KAAK,CAAG,EAAA;;YAEvCO,kBAAmB,CAAA;gBACjBiB,IAAM,EAAA,QAAA;gBACNC,OAAShB,EAAAA,cAAAA,CAAec,SAASvB,KAAK;AACxC,aAAA,CAAA;SACK,MAAA;;YAELO,kBAAmB,CAAA;gBACjBiB,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAASlC,aAAc,CAAA;oBAAEW,EAAI,EAAA,oBAAA;oBAAsBwB,cAAgB,EAAA;AAAoB,iBAAA;AACzF,aAAA,CAAA;AACF;AACF,KAAA;AAEA,IAAA,MAAMsO,mBAAsB,GAAA,UAAA;QAC1B,MAAMzO,QAAAA,GAAW,MAAM8N,aAAc,CAAA;YACnCnP,EAAIP,EAAAA;AACN,SAAA,CAAA;AAEA,QAAA,IAAI,UAAU4B,QAAU,EAAA;YACtB8M,QAAS,CAAA,IAAA,CAAA;AACX,SAAA,MAAO,IAAItM,YAAAA,CAAaR,QAASvB,CAAAA,KAAK,CAAG,EAAA;;YAEvCO,kBAAmB,CAAA;gBACjBiB,IAAM,EAAA,QAAA;gBACNC,OAAShB,EAAAA,cAAAA,CAAec,SAASvB,KAAK;AACxC,aAAA,CAAA;SACK,MAAA;;YAELO,kBAAmB,CAAA;gBACjBiB,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAASlC,aAAc,CAAA;oBAAEW,EAAI,EAAA,oBAAA;oBAAsBwB,cAAgB,EAAA;AAAoB,iBAAA;AACzF,aAAA,CAAA;AACF;AACF,KAAA;AAEA,IAAA,qBACE8C,IAACrF,CAAAA,oBAAAA,EAAAA;QACCC,sBAAwBA,EAAAA,sBAAAA;QACxBC,mBAAqBA,EAAAA,mBAAAA;;0BAErBsD,GAACoF,CAAAA,kBAAAA,EAAAA;gBAAmBpI,SAAWA,EAAAA;;0BAC/BgD,GAACsN,CAAAA,YAAAA,EAAAA;gBACCC,IAAM3B,EAAAA,iBAAAA;gBACN4B,WAAa/Q,EAAAA,sBAAAA;gBACbgR,YAAcN,EAAAA,iBAAAA;AACdhQ,gBAAAA,SAAAA,EAAWC,gBAAoBoP,IAAAA,gBAAAA;gBAC/BkB,aAAe,EAAA;AACbvL,oBAAAA,IAAAA,EAAMD,KAAS,IAAA,EAAA;AACfrB,oBAAAA,WAAAA;AACAK,oBAAAA,IAAAA;AACAO,oBAAAA,IAAAA;AACAb,oBAAAA,WAAAA,EAAaD,OAAQE,CAAAA,WAAAA,CAAAA;AACrBC,oBAAAA;AACF;;AAEF,0BAAAd,GAAA,CAAC2N,OAAOxE,IAAI,EAAA;gBAACoE,IAAMvB,EAAAA,iBAAAA;gBAAmB4B,YAAclR,EAAAA,mBAAAA;AAClD,gBAAA,QAAA,gBAAAsD,GAAC6N,CAAAA,aAAAA,EAAAA;oBAAcC,SAAWT,EAAAA,mBAAAA;8BACvBzQ,aAAc,CAAA;wBACbW,EAAI,EAAA,8CAAA;wBACJwB,cAAgB,EAAA;AAClB,qBAAA;;;;;AAKV;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/content-releases",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.16.1",
|
|
4
4
|
"description": "Strapi plugin for organizing and releasing content",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -59,11 +59,11 @@
|
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
61
|
"@reduxjs/toolkit": "1.9.7",
|
|
62
|
-
"@strapi/database": "5.
|
|
63
|
-
"@strapi/design-system": "2.0.0-rc.
|
|
64
|
-
"@strapi/icons": "2.0.0-rc.
|
|
65
|
-
"@strapi/types": "5.
|
|
66
|
-
"@strapi/utils": "5.
|
|
62
|
+
"@strapi/database": "5.16.1",
|
|
63
|
+
"@strapi/design-system": "2.0.0-rc.27",
|
|
64
|
+
"@strapi/icons": "2.0.0-rc.27",
|
|
65
|
+
"@strapi/types": "5.16.1",
|
|
66
|
+
"@strapi/utils": "5.16.1",
|
|
67
67
|
"date-fns": "2.30.0",
|
|
68
68
|
"date-fns-tz": "2.0.1",
|
|
69
69
|
"formik": "2.4.5",
|
|
@@ -75,9 +75,9 @@
|
|
|
75
75
|
"yup": "0.32.9"
|
|
76
76
|
},
|
|
77
77
|
"devDependencies": {
|
|
78
|
-
"@strapi/admin": "5.
|
|
79
|
-
"@strapi/admin-test-utils": "5.
|
|
80
|
-
"@strapi/content-manager": "5.
|
|
78
|
+
"@strapi/admin": "5.16.1",
|
|
79
|
+
"@strapi/admin-test-utils": "5.16.1",
|
|
80
|
+
"@strapi/content-manager": "5.16.1",
|
|
81
81
|
"@testing-library/dom": "10.1.0",
|
|
82
82
|
"@testing-library/react": "15.0.7",
|
|
83
83
|
"@testing-library/user-event": "14.5.2",
|