@strapi/content-manager 5.53.0 → 5.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/ActionsDrawer.js +17 -6
- package/dist/admin/components/ActionsDrawer.js.map +1 -1
- package/dist/admin/components/ActionsDrawer.mjs +19 -8
- package/dist/admin/components/ActionsDrawer.mjs.map +1 -1
- package/dist/admin/components/LeftMenu.js +131 -52
- package/dist/admin/components/LeftMenu.js.map +1 -1
- package/dist/admin/components/LeftMenu.mjs +133 -54
- package/dist/admin/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/history/components/VersionsList.js +37 -43
- package/dist/admin/history/components/VersionsList.js.map +1 -1
- package/dist/admin/history/components/VersionsList.mjs +37 -43
- package/dist/admin/history/components/VersionsList.mjs.map +1 -1
- package/dist/admin/hooks/useContentManagerInitData.js +3 -2
- package/dist/admin/hooks/useContentManagerInitData.js.map +1 -1
- package/dist/admin/hooks/useContentManagerInitData.mjs +3 -2
- package/dist/admin/hooks/useContentManagerInitData.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentActions.js +3 -1
- package/dist/admin/hooks/useDocumentActions.js.map +1 -1
- package/dist/admin/hooks/useDocumentActions.mjs +4 -2
- package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
- package/dist/admin/layout.js +2 -4
- package/dist/admin/layout.js.map +1 -1
- package/dist/admin/layout.mjs +2 -4
- package/dist/admin/layout.mjs.map +1 -1
- package/dist/admin/modules/app.js +3 -1
- package/dist/admin/modules/app.js.map +1 -1
- package/dist/admin/modules/app.mjs +3 -1
- package/dist/admin/modules/app.mjs.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.js +15 -20
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +15 -20
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +2 -0
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +2 -0
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.js +74 -7
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.js.map +1 -1
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.mjs +74 -7
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +7 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +7 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +59 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +60 -3
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js +4 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs +4 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +4 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +4 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +58 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +58 -2
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +25 -2
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +5 -2
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +5 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +6 -2
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +1 -0
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +1 -0
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/preview/components/InputPopover.js +64 -46
- package/dist/admin/preview/components/InputPopover.js.map +1 -1
- package/dist/admin/preview/components/InputPopover.mjs +66 -49
- package/dist/admin/preview/components/InputPopover.mjs.map +1 -1
- package/dist/admin/preview/hooks/usePreviewInputManager.js +23 -7
- package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -1
- package/dist/admin/preview/hooks/usePreviewInputManager.mjs +25 -9
- package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -1
- package/dist/admin/preview/pages/Preview.js +19 -0
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +20 -1
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/preview/utils/constants.js +9 -3
- package/dist/admin/preview/utils/constants.js.map +1 -1
- package/dist/admin/preview/utils/constants.mjs +9 -3
- package/dist/admin/preview/utils/constants.mjs.map +1 -1
- package/dist/admin/src/components/ActionsDrawer.d.ts +1 -0
- package/dist/admin/src/modules/app.d.ts +2 -0
- package/dist/admin/src/pages/EditView/components/EditorToolbarObserver.d.ts +2 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.d.ts +5 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +5 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.d.ts +5 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +14 -1
- package/dist/admin/src/preview/components/InputPopover.d.ts +2 -1
- package/dist/admin/src/preview/pages/Preview.d.ts +1 -0
- package/dist/admin/src/preview/utils/constants.d.ts +8 -1
- package/dist/admin/src/services/init.d.ts +1 -0
- package/dist/admin/src/utils/contentStructure.d.ts +59 -0
- package/dist/admin/utils/contentStructure.js +136 -0
- package/dist/admin/utils/contentStructure.js.map +1 -0
- package/dist/admin/utils/contentStructure.mjs +130 -0
- package/dist/admin/utils/contentStructure.mjs.map +1 -0
- package/dist/server/controllers/init.js +7 -2
- package/dist/server/controllers/init.js.map +1 -1
- package/dist/server/controllers/init.mjs +7 -2
- package/dist/server/controllers/init.mjs.map +1 -1
- package/dist/server/preview/controllers/previewScript.js +548 -22
- package/dist/server/services/content-structure.js +53 -0
- package/dist/server/services/content-structure.js.map +1 -0
- package/dist/server/services/content-structure.mjs +51 -0
- package/dist/server/services/content-structure.mjs.map +1 -0
- package/dist/server/services/index.js +2 -0
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs +2 -0
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/src/controllers/index.d.ts +1 -1
- package/dist/server/src/controllers/init.d.ts +1 -1
- package/dist/server/src/controllers/init.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +6 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/content-structure.d.ts +8 -0
- package/dist/server/src/services/content-structure.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +5 -0
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs.map +1 -1
- package/dist/shared/contracts/init.d.ts +2 -0
- package/dist/shared/contracts/init.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VersionsList.mjs","sources":["../../../../admin/src/history/components/VersionsList.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, useIsMobile } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\n\nimport { ActionsDrawer, useActionsDrawer } from '../../components/ActionsDrawer';\nimport { RelativeTime } from '../../components/RelativeTime';\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport { getDisplayName } from '../../utils/users';\nimport { useHistoryContext } from '../pages/History';\n\nimport type { HistoryVersions } from '../../../../shared/contracts';\n\n/* -------------------------------------------------------------------------------------------------\n * BlueText\n * -----------------------------------------------------------------------------------------------*/\n\nconst BlueText = (children: React.ReactNode) => (\n <Typography textColor=\"primary600\" variant=\"pi\">\n {children}\n </Typography>\n);\n\n/* -------------------------------------------------------------------------------------------------\n * VersionAuthor\n * -----------------------------------------------------------------------------------------------*/\n\nconst VersionAuthor = ({\n version,\n isCurrent,\n}: {\n version: HistoryVersions.HistoryVersionDataResponse;\n isCurrent: boolean;\n}) => {\n const { formatMessage } = useIntl();\n const author = version.createdBy && getDisplayName(version.createdBy);\n return (\n <>\n {formatMessage(\n {\n id: 'content-manager.history.sidebar.versionDescription',\n defaultMessage:\n '{distanceToNow}{isAnonymous, select, true {} other { by {author}}}{isCurrent, select, true { <b>(current)</b>} other {}}',\n },\n {\n distanceToNow: <RelativeTime timestamp={new Date(version.createdAt)} />,\n author,\n isAnonymous: !version.createdBy,\n isCurrent,\n b: BlueText,\n }\n )}\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * VersionCard\n * -----------------------------------------------------------------------------------------------*/\n\ninterface VersionCardProps {\n version: HistoryVersions.HistoryVersionDataResponse;\n isCurrent: boolean;\n}\n\nconst VersionCard = ({ version, isCurrent }: VersionCardProps) => {\n const { formatDate } = useIntl();\n const [{ query }] = useQueryParams<{ id?: string }>();\n const setIsOpen = useActionsDrawer('VersionCard', (s) => s?.setIsOpen, false);\n const isActive = query.id === version.id.toString();\n\n const handleClick = () => {\n setIsOpen?.(false);\n };\n\n return (\n <Flex\n direction=\"column\"\n alignItems=\"flex-start\"\n gap={3}\n hasRadius\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor={isActive ? 'primary600' : 'neutral200'}\n color=\"neutral800\"\n padding={5}\n tag={Link}\n to={`?${stringify({ ...query, id: version.id })}`}\n style={{ textDecoration: 'none' }}\n onClick={handleClick}\n >\n <Flex direction=\"column\" gap={1} alignItems=\"flex-start\">\n <Typography tag=\"h3\" fontWeight=\"semiBold\">\n {formatDate(version.createdAt, {\n day: 'numeric',\n month: 'numeric',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n })}\n </Typography>\n <Typography tag=\"p\" variant=\"pi\" textColor=\"neutral600\">\n <VersionAuthor version={version} isCurrent={isCurrent} />\n </Typography>\n </Flex>\n {version.status && <DocumentStatus status={version.status} size=\"XS\" />}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PaginationButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PaginationButtonProps {\n page: number;\n children: React.ReactNode;\n}\n\nconst PaginationButton = ({ page, children }: PaginationButtonProps) => {\n const [{ query }] = useQueryParams<{ id?: string }>();\n\n // Remove the id from the pagination link, so that the history page can redirect\n // to the id of the first history version in the new page once it's loaded\n const { id: _id, ...queryRest } = query;\n\n return (\n <Link to={{ search: stringify({ ...queryRest, page }) }} style={{ textDecoration: 'none' }}>\n <Typography variant=\"omega\" textColor=\"primary600\">\n {children}\n </Typography>\n </Link>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * VersionsListItems\n * -----------------------------------------------------------------------------------------------*/\n\nconst VersionsListItems = () => {\n const { formatMessage } = useIntl();\n const { versions, page } = useHistoryContext('VersionsListItems', (state) => ({\n versions: state.versions,\n page: state.page,\n }));\n\n return (\n <Box flex={1} overflow=\"auto\">\n {versions.meta.pagination.page > 1 && (\n <Box paddingTop={4} textAlign=\"center\">\n <PaginationButton page={page - 1}>\n {formatMessage({\n id: 'content-manager.history.sidebar.show-newer',\n defaultMessage: 'Show newer versions',\n })}\n </PaginationButton>\n </Box>\n )}\n <Flex\n direction=\"column\"\n gap={3}\n padding={{ initial: 0, medium: 4 }}\n tag=\"ul\"\n alignItems=\"stretch\"\n >\n {versions.data.map((version, index) => (\n <li\n key={version.id}\n aria-label={formatMessage({\n id: 'content-manager.history.sidebar.title.version-card.aria-label',\n defaultMessage: 'Version card',\n })}\n >\n <VersionCard version={version} isCurrent={page === 1 && index === 0} />\n </li>\n ))}\n </Flex>\n {versions.meta.pagination.page < versions.meta.pagination.pageCount && (\n <Box paddingBottom={4} textAlign=\"center\">\n <PaginationButton page={page + 1}>\n {formatMessage({\n id: 'content-manager.history.sidebar.show-older',\n defaultMessage: 'Show older versions',\n })}\n </PaginationButton>\n </Box>\n )}\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * VersionsList\n * -----------------------------------------------------------------------------------------------*/\n\nconst VersionsList = () => {\n const { formatMessage } = useIntl();\n const { versions, page } = useHistoryContext('VersionsList', (state) => ({\n versions: state.versions,\n page: state.page,\n }));\n const isMobile = useIsMobile();\n\n const [{ query }] = useQueryParams<{ id?: string }>();\n const currentVersion = versions.data.find((version) => version.id.toString() === query.id);\n\n return !isMobile ? (\n <Flex\n shrink={0}\n direction=\"column\"\n alignItems=\"stretch\"\n width={{ initial: '28rem', large: '32rem' }}\n height=\"100%\"\n overflow=\"hidden\"\n background=\"neutral0\"\n borderColor=\"neutral200\"\n borderWidth=\"0 0 0 1px\"\n borderStyle=\"solid\"\n tag=\"aside\"\n >\n <Flex\n direction=\"row\"\n justifyContent=\"space-between\"\n padding={4}\n borderColor=\"neutral200\"\n borderWidth=\"0 0 1px\"\n borderStyle=\"solid\"\n tag=\"header\"\n role=\"banner\"\n >\n <Typography tag=\"h2\" variant=\"omega\" fontWeight=\"semiBold\">\n {formatMessage({\n id: 'content-manager.history.sidebar.title',\n defaultMessage: 'Versions',\n })}\n </Typography>\n <Box background=\"neutral150\" hasRadius padding={1}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {versions.meta.pagination.total}\n </Typography>\n </Box>\n </Flex>\n <VersionsListItems />\n </Flex>\n ) : (\n <>\n <ActionsDrawer.Root hasContent hasSideNav>\n <ActionsDrawer.Overlay />\n <ActionsDrawer.Header>\n {currentVersion && (\n <Flex gap={2} overflow=\"hidden\">\n <Box flex={1} overflow=\"hidden\">\n <Typography\n display=\"block\"\n variant=\"omega\"\n textColor=\"neutral600\"\n overflow=\"hidden\"\n style={{ textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}\n >\n <VersionAuthor\n version={currentVersion}\n isCurrent={page === 1 && versions.data.indexOf(currentVersion) === 0}\n />\n </Typography>\n </Box>\n {currentVersion.status && <DocumentStatus status={currentVersion.status} size=\"XS\" />}\n </Flex>\n )}\n </ActionsDrawer.Header>\n <ActionsDrawer.Content>\n <VersionsListItems />\n </ActionsDrawer.Content>\n </ActionsDrawer.Root>\n {/* Adding a fixed height to the bottom of the page to prevent \n the actions drawer from covering the content\n (32px + 12px * 2 padding + 1px border) */}\n <Box width=\"100%\" height=\"5.7rem\" />\n </>\n );\n};\n\nexport { VersionsList };\n"],"names":["BlueText","children","_jsx","Typography","textColor","variant","VersionAuthor","version","isCurrent","formatMessage","useIntl","author","createdBy","getDisplayName","_Fragment","id","defaultMessage","distanceToNow","RelativeTime","timestamp","Date","createdAt","isAnonymous","b","VersionCard","formatDate","query","useQueryParams","setIsOpen","useActionsDrawer","s","isActive","toString","handleClick","_jsxs","Flex","direction","alignItems","gap","hasRadius","borderWidth","borderStyle","borderColor","color","padding","tag","Link","to","stringify","style","textDecoration","onClick","fontWeight","day","month","year","hour","minute","status","DocumentStatus","size","PaginationButton","page","_id","queryRest","search","VersionsListItems","versions","useHistoryContext","state","Box","flex","overflow","meta","pagination","paddingTop","textAlign","initial","medium","data","map","index","li","aria-label","pageCount","paddingBottom","VersionsList","isMobile","useIsMobile","currentVersion","find","shrink","width","large","height","background","justifyContent","role","total","ActionsDrawer","Root","hasContent","hasSideNav","Overlay","Header","display","textOverflow","whiteSpace","indexOf","Content"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VersionsList.mjs","sources":["../../../../admin/src/history/components/VersionsList.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, useIsMobile } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\n\nimport { ActionsDrawer, useActionsDrawer } from '../../components/ActionsDrawer';\nimport { RelativeTime } from '../../components/RelativeTime';\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport { getDisplayName } from '../../utils/users';\nimport { useHistoryContext } from '../pages/History';\n\nimport type { HistoryVersions } from '../../../../shared/contracts';\n\n/* -------------------------------------------------------------------------------------------------\n * BlueText\n * -----------------------------------------------------------------------------------------------*/\n\nconst BlueText = (children: React.ReactNode) => (\n <Typography textColor=\"primary600\" variant=\"pi\">\n {children}\n </Typography>\n);\n\n/* -------------------------------------------------------------------------------------------------\n * VersionAuthor\n * -----------------------------------------------------------------------------------------------*/\n\nconst VersionAuthor = ({\n version,\n isCurrent,\n}: {\n version: HistoryVersions.HistoryVersionDataResponse;\n isCurrent: boolean;\n}) => {\n const { formatMessage } = useIntl();\n const author = version.createdBy && getDisplayName(version.createdBy);\n return (\n <>\n {formatMessage(\n {\n id: 'content-manager.history.sidebar.versionDescription',\n defaultMessage:\n '{distanceToNow}{isAnonymous, select, true {} other { by {author}}}{isCurrent, select, true { <b>(current)</b>} other {}}',\n },\n {\n distanceToNow: <RelativeTime timestamp={new Date(version.createdAt)} />,\n author,\n isAnonymous: !version.createdBy,\n isCurrent,\n b: BlueText,\n }\n )}\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * VersionCard\n * -----------------------------------------------------------------------------------------------*/\n\ninterface VersionCardProps {\n version: HistoryVersions.HistoryVersionDataResponse;\n isCurrent: boolean;\n}\n\nconst VersionCard = ({ version, isCurrent }: VersionCardProps) => {\n const { formatDate } = useIntl();\n const [{ query }] = useQueryParams<{ id?: string }>();\n const setIsOpen = useActionsDrawer('VersionCard', (s) => s?.setIsOpen, false);\n const isActive = query.id === version.id.toString();\n\n const handleClick = () => {\n setIsOpen?.(false);\n };\n\n return (\n <Flex\n direction=\"column\"\n alignItems=\"flex-start\"\n gap={3}\n hasRadius\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor={isActive ? 'primary600' : 'neutral200'}\n color=\"neutral800\"\n padding={5}\n tag={Link}\n to={`?${stringify({ ...query, id: version.id })}`}\n style={{ textDecoration: 'none' }}\n onClick={handleClick}\n >\n <Flex direction=\"column\" gap={1} alignItems=\"flex-start\">\n <Typography tag=\"h3\" fontWeight=\"semiBold\">\n {formatDate(version.createdAt, {\n day: 'numeric',\n month: 'numeric',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n })}\n </Typography>\n <Typography tag=\"p\" variant=\"pi\" textColor=\"neutral600\">\n <VersionAuthor version={version} isCurrent={isCurrent} />\n </Typography>\n </Flex>\n {version.status && <DocumentStatus status={version.status} size=\"XS\" />}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PaginationButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PaginationButtonProps {\n page: number;\n children: React.ReactNode;\n}\n\nconst PaginationButton = ({ page, children }: PaginationButtonProps) => {\n const [{ query }] = useQueryParams<{ id?: string }>();\n\n // Remove the id from the pagination link, so that the history page can redirect\n // to the id of the first history version in the new page once it's loaded\n const { id: _id, ...queryRest } = query;\n\n return (\n <Link to={{ search: stringify({ ...queryRest, page }) }} style={{ textDecoration: 'none' }}>\n <Typography variant=\"omega\" textColor=\"primary600\">\n {children}\n </Typography>\n </Link>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * VersionsListItems\n * -----------------------------------------------------------------------------------------------*/\n\nconst VersionsListItems = () => {\n const { formatMessage } = useIntl();\n const { versions, page } = useHistoryContext('VersionsListItems', (state) => ({\n versions: state.versions,\n page: state.page,\n }));\n\n return (\n <Box flex={1} overflow=\"auto\">\n {versions.meta.pagination.page > 1 && (\n <Box paddingTop={4} textAlign=\"center\">\n <PaginationButton page={page - 1}>\n {formatMessage({\n id: 'content-manager.history.sidebar.show-newer',\n defaultMessage: 'Show newer versions',\n })}\n </PaginationButton>\n </Box>\n )}\n <Flex\n direction=\"column\"\n gap={3}\n padding={{ initial: 0, medium: 4 }}\n tag=\"ul\"\n alignItems=\"stretch\"\n >\n {versions.data.map((version, index) => (\n <li\n key={version.id}\n aria-label={formatMessage({\n id: 'content-manager.history.sidebar.title.version-card.aria-label',\n defaultMessage: 'Version card',\n })}\n >\n <VersionCard version={version} isCurrent={page === 1 && index === 0} />\n </li>\n ))}\n </Flex>\n {versions.meta.pagination.page < versions.meta.pagination.pageCount && (\n <Box paddingBottom={4} textAlign=\"center\">\n <PaginationButton page={page + 1}>\n {formatMessage({\n id: 'content-manager.history.sidebar.show-older',\n defaultMessage: 'Show older versions',\n })}\n </PaginationButton>\n </Box>\n )}\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * VersionsList\n * -----------------------------------------------------------------------------------------------*/\n\nconst VersionsList = () => {\n const { formatMessage } = useIntl();\n const { versions, page } = useHistoryContext('VersionsList', (state) => ({\n versions: state.versions,\n page: state.page,\n }));\n const isMobile = useIsMobile();\n\n const [{ query }] = useQueryParams<{ id?: string }>();\n const currentVersion = versions.data.find((version) => version.id.toString() === query.id);\n\n return !isMobile ? (\n <Flex\n shrink={0}\n direction=\"column\"\n alignItems=\"stretch\"\n width={{ initial: '28rem', large: '32rem' }}\n height=\"100%\"\n overflow=\"hidden\"\n background=\"neutral0\"\n borderColor=\"neutral200\"\n borderWidth=\"0 0 0 1px\"\n borderStyle=\"solid\"\n tag=\"aside\"\n >\n <Flex\n direction=\"row\"\n justifyContent=\"space-between\"\n padding={4}\n borderColor=\"neutral200\"\n borderWidth=\"0 0 1px\"\n borderStyle=\"solid\"\n tag=\"header\"\n role=\"banner\"\n >\n <Typography tag=\"h2\" variant=\"omega\" fontWeight=\"semiBold\">\n {formatMessage({\n id: 'content-manager.history.sidebar.title',\n defaultMessage: 'Versions',\n })}\n </Typography>\n <Box background=\"neutral150\" hasRadius padding={1}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {versions.meta.pagination.total}\n </Typography>\n </Box>\n </Flex>\n <VersionsListItems />\n </Flex>\n ) : (\n <>\n <ActionsDrawer.Root hasContent hasSideNav>\n <ActionsDrawer.Overlay />\n <ActionsDrawer.Header>\n {currentVersion && (\n <Flex gap={2} overflow=\"hidden\">\n <Box flex={1} overflow=\"hidden\">\n <Typography\n display=\"block\"\n variant=\"omega\"\n textColor=\"neutral600\"\n overflow=\"hidden\"\n style={{ textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}\n >\n <VersionAuthor\n version={currentVersion}\n isCurrent={page === 1 && versions.data.indexOf(currentVersion) === 0}\n />\n </Typography>\n </Box>\n {currentVersion.status && <DocumentStatus status={currentVersion.status} size=\"XS\" />}\n </Flex>\n )}\n </ActionsDrawer.Header>\n <ActionsDrawer.Content>\n <VersionsListItems />\n </ActionsDrawer.Content>\n </ActionsDrawer.Root>\n </>\n );\n};\n\nexport { VersionsList };\n"],"names":["BlueText","children","_jsx","Typography","textColor","variant","VersionAuthor","version","isCurrent","formatMessage","useIntl","author","createdBy","getDisplayName","_Fragment","id","defaultMessage","distanceToNow","RelativeTime","timestamp","Date","createdAt","isAnonymous","b","VersionCard","formatDate","query","useQueryParams","setIsOpen","useActionsDrawer","s","isActive","toString","handleClick","_jsxs","Flex","direction","alignItems","gap","hasRadius","borderWidth","borderStyle","borderColor","color","padding","tag","Link","to","stringify","style","textDecoration","onClick","fontWeight","day","month","year","hour","minute","status","DocumentStatus","size","PaginationButton","page","_id","queryRest","search","VersionsListItems","versions","useHistoryContext","state","Box","flex","overflow","meta","pagination","paddingTop","textAlign","initial","medium","data","map","index","li","aria-label","pageCount","paddingBottom","VersionsList","isMobile","useIsMobile","currentVersion","find","shrink","width","large","height","background","justifyContent","role","total","ActionsDrawer","Root","hasContent","hasSideNav","Overlay","Header","display","textOverflow","whiteSpace","indexOf","Content"],"mappings":"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"}
|
|
@@ -72,7 +72,7 @@ const useContentManagerInitData = ()=>{
|
|
|
72
72
|
contentTypeSettingsQuery.error,
|
|
73
73
|
toggleNotification
|
|
74
74
|
]);
|
|
75
|
-
const formatData = React.useCallback(async (components, contentTypes, fieldSizes, contentTypeConfigurations)=>{
|
|
75
|
+
const formatData = React.useCallback(async (components, contentTypes, fieldSizes, contentTypeConfigurations, contentStructure)=>{
|
|
76
76
|
/**
|
|
77
77
|
* We group these by the two types we support. We do with an object because we can use default
|
|
78
78
|
* values of arrays to make sure we always have an array to manipulate further on if, for example,
|
|
@@ -107,6 +107,7 @@ const useContentManagerInitData = ()=>{
|
|
|
107
107
|
authorizedCollectionTypeLinks: ctLinks,
|
|
108
108
|
authorizedSingleTypeLinks: stLinks,
|
|
109
109
|
components,
|
|
110
|
+
contentStructure,
|
|
110
111
|
contentTypeSchemas: contentTypes,
|
|
111
112
|
fieldSizes
|
|
112
113
|
}));
|
|
@@ -117,7 +118,7 @@ const useContentManagerInitData = ()=>{
|
|
|
117
118
|
]);
|
|
118
119
|
React.useEffect(()=>{
|
|
119
120
|
if (initialDataQuery.data && contentTypeSettingsQuery.data) {
|
|
120
|
-
formatData(initialDataQuery.data.components, initialDataQuery.data.contentTypes, initialDataQuery.data.fieldSizes, contentTypeSettingsQuery.data).catch((error)=>{
|
|
121
|
+
formatData(initialDataQuery.data.components, initialDataQuery.data.contentTypes, initialDataQuery.data.fieldSizes, contentTypeSettingsQuery.data, initialDataQuery.data.contentStructure).catch((error)=>{
|
|
121
122
|
toggleNotification({
|
|
122
123
|
type: 'danger',
|
|
123
124
|
message: formatAPIError(error)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useContentManagerInitData.js","sources":["../../../admin/src/hooks/useContentManagerInitData.ts"],"sourcesContent":["import { useCallback, useEffect } from 'react';\n\nimport {\n useAuth,\n type Permission,\n useNotification,\n useStrapiApp,\n useAPIErrorHandler,\n} from '@strapi/admin/strapi-admin';\nimport { useNotifyAT } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../constants/collections';\nimport { HOOKS } from '../constants/hooks';\nimport { AppState, setInitialData } from '../modules/app';\nimport { useTypedDispatch, useTypedSelector } from '../modules/hooks';\nimport { useGetAllContentTypeSettingsQuery } from '../services/contentTypes';\nimport { useGetInitialDataQuery } from '../services/init';\nimport { getTranslation } from '../utils/translations';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type {\n ContentType,\n FindContentTypesSettings,\n} from '../../../shared/contracts/content-types';\nimport type { GetInitData } from '../../../shared/contracts/init';\n\nconst { MUTATE_COLLECTION_TYPES_LINKS, MUTATE_SINGLE_TYPES_LINKS } = HOOKS;\n\ninterface ContentManagerLink {\n permissions: Permission[];\n search: string | null;\n kind: string;\n title: string;\n to: string;\n uid: string;\n name: string;\n isDisplayed: boolean;\n}\n\nconst getPermissionKey = (permission: Pick<Permission, 'action' | 'subject'>) =>\n `${permission.action}::${permission.subject ?? ''}`;\n\nconst authorizeLinks = async (\n links: ContentManagerLink[],\n checkUserHasPermissions: (\n permissions?: Array<Pick<Permission, 'action'> & Partial<Omit<Permission, 'action'>>>\n ) => Promise<Permission[]>\n) => {\n const authorizedPermissions = await checkUserHasPermissions(\n links.flatMap(({ permissions }) => permissions)\n );\n\n const authorizedPermissionKeys = new Set(authorizedPermissions.map(getPermissionKey));\n\n return links.filter(({ permissions }) =>\n permissions.some((permission) => authorizedPermissionKeys.has(getPermissionKey(permission)))\n );\n};\n\nconst useContentManagerInitData = (): AppState => {\n const { toggleNotification } = useNotification();\n const dispatch = useTypedDispatch();\n const runHookWaterfall = useStrapiApp(\n 'useContentManagerInitData',\n (state) => state.runHookWaterfall\n );\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n const checkUserHasPermissions = useAuth(\n 'useContentManagerInitData',\n (state) => state.checkUserHasPermissions\n );\n\n const state = useTypedSelector((state) => state['content-manager'].app);\n\n const initialDataQuery = useGetInitialDataQuery(undefined, {\n /**\n * TODO: remove this when the CTB has been refactored to use redux-toolkit-query\n * and it can invalidate the cache on mutation\n */\n refetchOnMountOrArgChange: true,\n });\n\n useEffect(() => {\n if (initialDataQuery.data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('App.schemas.data-loaded'),\n defaultMessage: 'The schemas have been successfully loaded.',\n })\n );\n }\n }, [formatMessage, initialDataQuery.data, notifyStatus]);\n\n useEffect(() => {\n if (initialDataQuery.error) {\n toggleNotification({ type: 'danger', message: formatAPIError(initialDataQuery.error) });\n }\n }, [formatAPIError, initialDataQuery.error, toggleNotification]);\n\n const contentTypeSettingsQuery = useGetAllContentTypeSettingsQuery();\n\n useEffect(() => {\n if (contentTypeSettingsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentTypeSettingsQuery.error),\n });\n }\n }, [formatAPIError, contentTypeSettingsQuery.error, toggleNotification]);\n\n const formatData = useCallback(\n async (\n components: Component[],\n contentTypes: ContentType[],\n fieldSizes: GetInitData.Response['data']['fieldSizes'],\n contentTypeConfigurations: FindContentTypesSettings.Response['data']\n ) => {\n /**\n * We group these by the two types we support. We do with an object because we can use default\n * values of arrays to make sure we always have an array to manipulate further on if, for example,\n * a user has not made any single types.\n *\n * This means we have to manually add new content types to this hook if we add a new type – but\n * the safety is worth it.\n */\n const { collectionType: collectionTypeLinks, singleType: singleTypeLinks } =\n contentTypes.reduce<{\n collectionType: ContentType[];\n singleType: ContentType[];\n }>(\n (acc, model) => {\n acc[model.kind].push(model);\n return acc;\n },\n {\n collectionType: [],\n singleType: [],\n }\n );\n const collectionTypeSectionLinks = generateLinks(\n collectionTypeLinks,\n 'collectionTypes',\n contentTypeConfigurations\n );\n const singleTypeSectionLinks = generateLinks(singleTypeLinks, 'singleTypes');\n\n const authorizedLinks = await authorizeLinks(\n [...collectionTypeSectionLinks, ...singleTypeSectionLinks],\n checkUserHasPermissions\n );\n const authorizedCollectionTypeLinks = authorizedLinks.filter(\n (link) => link.kind === 'collectionType'\n );\n const authorizedSingleTypeLinks = authorizedLinks.filter(\n (link) => link.kind === 'singleType'\n );\n const { ctLinks } = runHookWaterfall(MUTATE_COLLECTION_TYPES_LINKS, {\n ctLinks: authorizedCollectionTypeLinks,\n models: contentTypes,\n });\n const { stLinks } = runHookWaterfall(MUTATE_SINGLE_TYPES_LINKS, {\n stLinks: authorizedSingleTypeLinks,\n models: contentTypes,\n });\n\n dispatch(\n setInitialData({\n authorizedCollectionTypeLinks: ctLinks,\n authorizedSingleTypeLinks: stLinks,\n components,\n contentTypeSchemas: contentTypes,\n fieldSizes,\n })\n );\n },\n [checkUserHasPermissions, dispatch, runHookWaterfall]\n );\n\n useEffect(() => {\n if (initialDataQuery.data && contentTypeSettingsQuery.data) {\n formatData(\n initialDataQuery.data.components,\n initialDataQuery.data.contentTypes,\n initialDataQuery.data.fieldSizes,\n contentTypeSettingsQuery.data\n ).catch((error) => {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n });\n }\n }, [\n formatAPIError,\n formatData,\n initialDataQuery.data,\n contentTypeSettingsQuery.data,\n toggleNotification,\n ]);\n\n return { ...state };\n};\n\nconst generateLinks = (\n links: ContentType[],\n type: 'collectionTypes' | 'singleTypes',\n configurations: FindContentTypesSettings.Response['data'] = []\n) => {\n return links\n .filter((link) => link.isDisplayed)\n .map((link) => {\n const collectionTypesPermissions = [\n { action: 'plugin::content-manager.explorer.create', subject: link.uid },\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const singleTypesPermissions = [\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const permissions =\n type === 'collectionTypes' ? collectionTypesPermissions : singleTypesPermissions;\n\n const currentContentTypeConfig = configurations.find(({ uid }) => uid === link.uid);\n\n let search = null;\n\n if (currentContentTypeConfig) {\n const searchParams = {\n page: 1,\n pageSize: currentContentTypeConfig.settings.pageSize,\n sort: `${currentContentTypeConfig.settings.defaultSortBy}:${currentContentTypeConfig.settings.defaultSortOrder}`,\n };\n\n search = stringify(searchParams, { encode: false });\n }\n\n return {\n permissions,\n search,\n kind: link.kind,\n title: link.info.displayName,\n to: `/content-manager/${link.kind === 'collectionType' ? COLLECTION_TYPES : SINGLE_TYPES}/${\n link.uid\n }`,\n uid: link.uid,\n // Used for the list item key in the helper plugin\n name: link.uid,\n isDisplayed: link.isDisplayed,\n } satisfies ContentManagerLink;\n });\n};\n\nexport { useContentManagerInitData };\nexport type { ContentManagerLink };\n"],"names":["MUTATE_COLLECTION_TYPES_LINKS","MUTATE_SINGLE_TYPES_LINKS","HOOKS","getPermissionKey","permission","action","subject","authorizeLinks","links","checkUserHasPermissions","authorizedPermissions","flatMap","permissions","authorizedPermissionKeys","Set","map","filter","some","has","useContentManagerInitData","toggleNotification","useNotification","dispatch","useTypedDispatch","runHookWaterfall","useStrapiApp","state","notifyStatus","useNotifyAT","formatMessage","useIntl","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","getTranslation","useAuth","useTypedSelector","app","initialDataQuery","useGetInitialDataQuery","undefined","refetchOnMountOrArgChange","useEffect","data","id","defaultMessage","error","type","message","contentTypeSettingsQuery","useGetAllContentTypeSettingsQuery","formatData","useCallback","components","contentTypes","fieldSizes","contentTypeConfigurations","collectionType","collectionTypeLinks","singleType","singleTypeLinks","reduce","acc","model","kind","push","collectionTypeSectionLinks","generateLinks","singleTypeSectionLinks","authorizedLinks","authorizedCollectionTypeLinks","link","authorizedSingleTypeLinks","ctLinks","models","stLinks","setInitialData","contentTypeSchemas","catch","configurations","isDisplayed","collectionTypesPermissions","uid","singleTypesPermissions","currentContentTypeConfig","find","search","searchParams","page","pageSize","settings","sort","defaultSortBy","defaultSortOrder","stringify","encode","title","info","displayName","to","COLLECTION_TYPES","SINGLE_TYPES","name"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useContentManagerInitData.js","sources":["../../../admin/src/hooks/useContentManagerInitData.ts"],"sourcesContent":["import { useCallback, useEffect } from 'react';\n\nimport {\n useAuth,\n type Permission,\n useNotification,\n useStrapiApp,\n useAPIErrorHandler,\n} from '@strapi/admin/strapi-admin';\nimport { useNotifyAT } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../constants/collections';\nimport { HOOKS } from '../constants/hooks';\nimport { AppState, setInitialData } from '../modules/app';\nimport { useTypedDispatch, useTypedSelector } from '../modules/hooks';\nimport { useGetAllContentTypeSettingsQuery } from '../services/contentTypes';\nimport { useGetInitialDataQuery } from '../services/init';\nimport { getTranslation } from '../utils/translations';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type {\n ContentType,\n FindContentTypesSettings,\n} from '../../../shared/contracts/content-types';\nimport type { GetInitData } from '../../../shared/contracts/init';\n\nconst { MUTATE_COLLECTION_TYPES_LINKS, MUTATE_SINGLE_TYPES_LINKS } = HOOKS;\n\ninterface ContentManagerLink {\n permissions: Permission[];\n search: string | null;\n kind: string;\n title: string;\n to: string;\n uid: string;\n name: string;\n isDisplayed: boolean;\n}\n\nconst getPermissionKey = (permission: Pick<Permission, 'action' | 'subject'>) =>\n `${permission.action}::${permission.subject ?? ''}`;\n\nconst authorizeLinks = async (\n links: ContentManagerLink[],\n checkUserHasPermissions: (\n permissions?: Array<Pick<Permission, 'action'> & Partial<Omit<Permission, 'action'>>>\n ) => Promise<Permission[]>\n) => {\n const authorizedPermissions = await checkUserHasPermissions(\n links.flatMap(({ permissions }) => permissions)\n );\n\n const authorizedPermissionKeys = new Set(authorizedPermissions.map(getPermissionKey));\n\n return links.filter(({ permissions }) =>\n permissions.some((permission) => authorizedPermissionKeys.has(getPermissionKey(permission)))\n );\n};\n\nconst useContentManagerInitData = (): AppState => {\n const { toggleNotification } = useNotification();\n const dispatch = useTypedDispatch();\n const runHookWaterfall = useStrapiApp(\n 'useContentManagerInitData',\n (state) => state.runHookWaterfall\n );\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n const checkUserHasPermissions = useAuth(\n 'useContentManagerInitData',\n (state) => state.checkUserHasPermissions\n );\n\n const state = useTypedSelector((state) => state['content-manager'].app);\n\n const initialDataQuery = useGetInitialDataQuery(undefined, {\n /**\n * TODO: remove this when the CTB has been refactored to use redux-toolkit-query\n * and it can invalidate the cache on mutation\n */\n refetchOnMountOrArgChange: true,\n });\n\n useEffect(() => {\n if (initialDataQuery.data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('App.schemas.data-loaded'),\n defaultMessage: 'The schemas have been successfully loaded.',\n })\n );\n }\n }, [formatMessage, initialDataQuery.data, notifyStatus]);\n\n useEffect(() => {\n if (initialDataQuery.error) {\n toggleNotification({ type: 'danger', message: formatAPIError(initialDataQuery.error) });\n }\n }, [formatAPIError, initialDataQuery.error, toggleNotification]);\n\n const contentTypeSettingsQuery = useGetAllContentTypeSettingsQuery();\n\n useEffect(() => {\n if (contentTypeSettingsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentTypeSettingsQuery.error),\n });\n }\n }, [formatAPIError, contentTypeSettingsQuery.error, toggleNotification]);\n\n const formatData = useCallback(\n async (\n components: Component[],\n contentTypes: ContentType[],\n fieldSizes: GetInitData.Response['data']['fieldSizes'],\n contentTypeConfigurations: FindContentTypesSettings.Response['data'],\n contentStructure: GetInitData.Response['data']['contentStructure']\n ) => {\n /**\n * We group these by the two types we support. We do with an object because we can use default\n * values of arrays to make sure we always have an array to manipulate further on if, for example,\n * a user has not made any single types.\n *\n * This means we have to manually add new content types to this hook if we add a new type – but\n * the safety is worth it.\n */\n const { collectionType: collectionTypeLinks, singleType: singleTypeLinks } =\n contentTypes.reduce<{\n collectionType: ContentType[];\n singleType: ContentType[];\n }>(\n (acc, model) => {\n acc[model.kind].push(model);\n return acc;\n },\n {\n collectionType: [],\n singleType: [],\n }\n );\n const collectionTypeSectionLinks = generateLinks(\n collectionTypeLinks,\n 'collectionTypes',\n contentTypeConfigurations\n );\n const singleTypeSectionLinks = generateLinks(singleTypeLinks, 'singleTypes');\n\n const authorizedLinks = await authorizeLinks(\n [...collectionTypeSectionLinks, ...singleTypeSectionLinks],\n checkUserHasPermissions\n );\n const authorizedCollectionTypeLinks = authorizedLinks.filter(\n (link) => link.kind === 'collectionType'\n );\n const authorizedSingleTypeLinks = authorizedLinks.filter(\n (link) => link.kind === 'singleType'\n );\n const { ctLinks } = runHookWaterfall(MUTATE_COLLECTION_TYPES_LINKS, {\n ctLinks: authorizedCollectionTypeLinks,\n models: contentTypes,\n });\n const { stLinks } = runHookWaterfall(MUTATE_SINGLE_TYPES_LINKS, {\n stLinks: authorizedSingleTypeLinks,\n models: contentTypes,\n });\n\n dispatch(\n setInitialData({\n authorizedCollectionTypeLinks: ctLinks,\n authorizedSingleTypeLinks: stLinks,\n components,\n contentStructure,\n contentTypeSchemas: contentTypes,\n fieldSizes,\n })\n );\n },\n [checkUserHasPermissions, dispatch, runHookWaterfall]\n );\n\n useEffect(() => {\n if (initialDataQuery.data && contentTypeSettingsQuery.data) {\n formatData(\n initialDataQuery.data.components,\n initialDataQuery.data.contentTypes,\n initialDataQuery.data.fieldSizes,\n contentTypeSettingsQuery.data,\n initialDataQuery.data.contentStructure\n ).catch((error) => {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n });\n }\n }, [\n formatAPIError,\n formatData,\n initialDataQuery.data,\n contentTypeSettingsQuery.data,\n toggleNotification,\n ]);\n\n return { ...state };\n};\n\nconst generateLinks = (\n links: ContentType[],\n type: 'collectionTypes' | 'singleTypes',\n configurations: FindContentTypesSettings.Response['data'] = []\n) => {\n return links\n .filter((link) => link.isDisplayed)\n .map((link) => {\n const collectionTypesPermissions = [\n { action: 'plugin::content-manager.explorer.create', subject: link.uid },\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const singleTypesPermissions = [\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const permissions =\n type === 'collectionTypes' ? collectionTypesPermissions : singleTypesPermissions;\n\n const currentContentTypeConfig = configurations.find(({ uid }) => uid === link.uid);\n\n let search = null;\n\n if (currentContentTypeConfig) {\n const searchParams = {\n page: 1,\n pageSize: currentContentTypeConfig.settings.pageSize,\n sort: `${currentContentTypeConfig.settings.defaultSortBy}:${currentContentTypeConfig.settings.defaultSortOrder}`,\n };\n\n search = stringify(searchParams, { encode: false });\n }\n\n return {\n permissions,\n search,\n kind: link.kind,\n title: link.info.displayName,\n to: `/content-manager/${link.kind === 'collectionType' ? COLLECTION_TYPES : SINGLE_TYPES}/${\n link.uid\n }`,\n uid: link.uid,\n // Used for the list item key in the helper plugin\n name: link.uid,\n isDisplayed: link.isDisplayed,\n } satisfies ContentManagerLink;\n });\n};\n\nexport { useContentManagerInitData };\nexport type { ContentManagerLink };\n"],"names":["MUTATE_COLLECTION_TYPES_LINKS","MUTATE_SINGLE_TYPES_LINKS","HOOKS","getPermissionKey","permission","action","subject","authorizeLinks","links","checkUserHasPermissions","authorizedPermissions","flatMap","permissions","authorizedPermissionKeys","Set","map","filter","some","has","useContentManagerInitData","toggleNotification","useNotification","dispatch","useTypedDispatch","runHookWaterfall","useStrapiApp","state","notifyStatus","useNotifyAT","formatMessage","useIntl","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","getTranslation","useAuth","useTypedSelector","app","initialDataQuery","useGetInitialDataQuery","undefined","refetchOnMountOrArgChange","useEffect","data","id","defaultMessage","error","type","message","contentTypeSettingsQuery","useGetAllContentTypeSettingsQuery","formatData","useCallback","components","contentTypes","fieldSizes","contentTypeConfigurations","contentStructure","collectionType","collectionTypeLinks","singleType","singleTypeLinks","reduce","acc","model","kind","push","collectionTypeSectionLinks","generateLinks","singleTypeSectionLinks","authorizedLinks","authorizedCollectionTypeLinks","link","authorizedSingleTypeLinks","ctLinks","models","stLinks","setInitialData","contentTypeSchemas","catch","configurations","isDisplayed","collectionTypesPermissions","uid","singleTypesPermissions","currentContentTypeConfig","find","search","searchParams","page","pageSize","settings","sort","defaultSortBy","defaultSortOrder","stringify","encode","title","info","displayName","to","COLLECTION_TYPES","SINGLE_TYPES","name"],"mappings":"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"}
|
|
@@ -70,7 +70,7 @@ const useContentManagerInitData = ()=>{
|
|
|
70
70
|
contentTypeSettingsQuery.error,
|
|
71
71
|
toggleNotification
|
|
72
72
|
]);
|
|
73
|
-
const formatData = useCallback(async (components, contentTypes, fieldSizes, contentTypeConfigurations)=>{
|
|
73
|
+
const formatData = useCallback(async (components, contentTypes, fieldSizes, contentTypeConfigurations, contentStructure)=>{
|
|
74
74
|
/**
|
|
75
75
|
* We group these by the two types we support. We do with an object because we can use default
|
|
76
76
|
* values of arrays to make sure we always have an array to manipulate further on if, for example,
|
|
@@ -105,6 +105,7 @@ const useContentManagerInitData = ()=>{
|
|
|
105
105
|
authorizedCollectionTypeLinks: ctLinks,
|
|
106
106
|
authorizedSingleTypeLinks: stLinks,
|
|
107
107
|
components,
|
|
108
|
+
contentStructure,
|
|
108
109
|
contentTypeSchemas: contentTypes,
|
|
109
110
|
fieldSizes
|
|
110
111
|
}));
|
|
@@ -115,7 +116,7 @@ const useContentManagerInitData = ()=>{
|
|
|
115
116
|
]);
|
|
116
117
|
useEffect(()=>{
|
|
117
118
|
if (initialDataQuery.data && contentTypeSettingsQuery.data) {
|
|
118
|
-
formatData(initialDataQuery.data.components, initialDataQuery.data.contentTypes, initialDataQuery.data.fieldSizes, contentTypeSettingsQuery.data).catch((error)=>{
|
|
119
|
+
formatData(initialDataQuery.data.components, initialDataQuery.data.contentTypes, initialDataQuery.data.fieldSizes, contentTypeSettingsQuery.data, initialDataQuery.data.contentStructure).catch((error)=>{
|
|
119
120
|
toggleNotification({
|
|
120
121
|
type: 'danger',
|
|
121
122
|
message: formatAPIError(error)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useContentManagerInitData.mjs","sources":["../../../admin/src/hooks/useContentManagerInitData.ts"],"sourcesContent":["import { useCallback, useEffect } from 'react';\n\nimport {\n useAuth,\n type Permission,\n useNotification,\n useStrapiApp,\n useAPIErrorHandler,\n} from '@strapi/admin/strapi-admin';\nimport { useNotifyAT } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../constants/collections';\nimport { HOOKS } from '../constants/hooks';\nimport { AppState, setInitialData } from '../modules/app';\nimport { useTypedDispatch, useTypedSelector } from '../modules/hooks';\nimport { useGetAllContentTypeSettingsQuery } from '../services/contentTypes';\nimport { useGetInitialDataQuery } from '../services/init';\nimport { getTranslation } from '../utils/translations';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type {\n ContentType,\n FindContentTypesSettings,\n} from '../../../shared/contracts/content-types';\nimport type { GetInitData } from '../../../shared/contracts/init';\n\nconst { MUTATE_COLLECTION_TYPES_LINKS, MUTATE_SINGLE_TYPES_LINKS } = HOOKS;\n\ninterface ContentManagerLink {\n permissions: Permission[];\n search: string | null;\n kind: string;\n title: string;\n to: string;\n uid: string;\n name: string;\n isDisplayed: boolean;\n}\n\nconst getPermissionKey = (permission: Pick<Permission, 'action' | 'subject'>) =>\n `${permission.action}::${permission.subject ?? ''}`;\n\nconst authorizeLinks = async (\n links: ContentManagerLink[],\n checkUserHasPermissions: (\n permissions?: Array<Pick<Permission, 'action'> & Partial<Omit<Permission, 'action'>>>\n ) => Promise<Permission[]>\n) => {\n const authorizedPermissions = await checkUserHasPermissions(\n links.flatMap(({ permissions }) => permissions)\n );\n\n const authorizedPermissionKeys = new Set(authorizedPermissions.map(getPermissionKey));\n\n return links.filter(({ permissions }) =>\n permissions.some((permission) => authorizedPermissionKeys.has(getPermissionKey(permission)))\n );\n};\n\nconst useContentManagerInitData = (): AppState => {\n const { toggleNotification } = useNotification();\n const dispatch = useTypedDispatch();\n const runHookWaterfall = useStrapiApp(\n 'useContentManagerInitData',\n (state) => state.runHookWaterfall\n );\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n const checkUserHasPermissions = useAuth(\n 'useContentManagerInitData',\n (state) => state.checkUserHasPermissions\n );\n\n const state = useTypedSelector((state) => state['content-manager'].app);\n\n const initialDataQuery = useGetInitialDataQuery(undefined, {\n /**\n * TODO: remove this when the CTB has been refactored to use redux-toolkit-query\n * and it can invalidate the cache on mutation\n */\n refetchOnMountOrArgChange: true,\n });\n\n useEffect(() => {\n if (initialDataQuery.data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('App.schemas.data-loaded'),\n defaultMessage: 'The schemas have been successfully loaded.',\n })\n );\n }\n }, [formatMessage, initialDataQuery.data, notifyStatus]);\n\n useEffect(() => {\n if (initialDataQuery.error) {\n toggleNotification({ type: 'danger', message: formatAPIError(initialDataQuery.error) });\n }\n }, [formatAPIError, initialDataQuery.error, toggleNotification]);\n\n const contentTypeSettingsQuery = useGetAllContentTypeSettingsQuery();\n\n useEffect(() => {\n if (contentTypeSettingsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentTypeSettingsQuery.error),\n });\n }\n }, [formatAPIError, contentTypeSettingsQuery.error, toggleNotification]);\n\n const formatData = useCallback(\n async (\n components: Component[],\n contentTypes: ContentType[],\n fieldSizes: GetInitData.Response['data']['fieldSizes'],\n contentTypeConfigurations: FindContentTypesSettings.Response['data']\n ) => {\n /**\n * We group these by the two types we support. We do with an object because we can use default\n * values of arrays to make sure we always have an array to manipulate further on if, for example,\n * a user has not made any single types.\n *\n * This means we have to manually add new content types to this hook if we add a new type – but\n * the safety is worth it.\n */\n const { collectionType: collectionTypeLinks, singleType: singleTypeLinks } =\n contentTypes.reduce<{\n collectionType: ContentType[];\n singleType: ContentType[];\n }>(\n (acc, model) => {\n acc[model.kind].push(model);\n return acc;\n },\n {\n collectionType: [],\n singleType: [],\n }\n );\n const collectionTypeSectionLinks = generateLinks(\n collectionTypeLinks,\n 'collectionTypes',\n contentTypeConfigurations\n );\n const singleTypeSectionLinks = generateLinks(singleTypeLinks, 'singleTypes');\n\n const authorizedLinks = await authorizeLinks(\n [...collectionTypeSectionLinks, ...singleTypeSectionLinks],\n checkUserHasPermissions\n );\n const authorizedCollectionTypeLinks = authorizedLinks.filter(\n (link) => link.kind === 'collectionType'\n );\n const authorizedSingleTypeLinks = authorizedLinks.filter(\n (link) => link.kind === 'singleType'\n );\n const { ctLinks } = runHookWaterfall(MUTATE_COLLECTION_TYPES_LINKS, {\n ctLinks: authorizedCollectionTypeLinks,\n models: contentTypes,\n });\n const { stLinks } = runHookWaterfall(MUTATE_SINGLE_TYPES_LINKS, {\n stLinks: authorizedSingleTypeLinks,\n models: contentTypes,\n });\n\n dispatch(\n setInitialData({\n authorizedCollectionTypeLinks: ctLinks,\n authorizedSingleTypeLinks: stLinks,\n components,\n contentTypeSchemas: contentTypes,\n fieldSizes,\n })\n );\n },\n [checkUserHasPermissions, dispatch, runHookWaterfall]\n );\n\n useEffect(() => {\n if (initialDataQuery.data && contentTypeSettingsQuery.data) {\n formatData(\n initialDataQuery.data.components,\n initialDataQuery.data.contentTypes,\n initialDataQuery.data.fieldSizes,\n contentTypeSettingsQuery.data\n ).catch((error) => {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n });\n }\n }, [\n formatAPIError,\n formatData,\n initialDataQuery.data,\n contentTypeSettingsQuery.data,\n toggleNotification,\n ]);\n\n return { ...state };\n};\n\nconst generateLinks = (\n links: ContentType[],\n type: 'collectionTypes' | 'singleTypes',\n configurations: FindContentTypesSettings.Response['data'] = []\n) => {\n return links\n .filter((link) => link.isDisplayed)\n .map((link) => {\n const collectionTypesPermissions = [\n { action: 'plugin::content-manager.explorer.create', subject: link.uid },\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const singleTypesPermissions = [\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const permissions =\n type === 'collectionTypes' ? collectionTypesPermissions : singleTypesPermissions;\n\n const currentContentTypeConfig = configurations.find(({ uid }) => uid === link.uid);\n\n let search = null;\n\n if (currentContentTypeConfig) {\n const searchParams = {\n page: 1,\n pageSize: currentContentTypeConfig.settings.pageSize,\n sort: `${currentContentTypeConfig.settings.defaultSortBy}:${currentContentTypeConfig.settings.defaultSortOrder}`,\n };\n\n search = stringify(searchParams, { encode: false });\n }\n\n return {\n permissions,\n search,\n kind: link.kind,\n title: link.info.displayName,\n to: `/content-manager/${link.kind === 'collectionType' ? COLLECTION_TYPES : SINGLE_TYPES}/${\n link.uid\n }`,\n uid: link.uid,\n // Used for the list item key in the helper plugin\n name: link.uid,\n isDisplayed: link.isDisplayed,\n } satisfies ContentManagerLink;\n });\n};\n\nexport { useContentManagerInitData };\nexport type { ContentManagerLink };\n"],"names":["MUTATE_COLLECTION_TYPES_LINKS","MUTATE_SINGLE_TYPES_LINKS","HOOKS","getPermissionKey","permission","action","subject","authorizeLinks","links","checkUserHasPermissions","authorizedPermissions","flatMap","permissions","authorizedPermissionKeys","Set","map","filter","some","has","useContentManagerInitData","toggleNotification","useNotification","dispatch","useTypedDispatch","runHookWaterfall","useStrapiApp","state","notifyStatus","useNotifyAT","formatMessage","useIntl","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","getTranslation","useAuth","useTypedSelector","app","initialDataQuery","useGetInitialDataQuery","undefined","refetchOnMountOrArgChange","useEffect","data","id","defaultMessage","error","type","message","contentTypeSettingsQuery","useGetAllContentTypeSettingsQuery","formatData","useCallback","components","contentTypes","fieldSizes","contentTypeConfigurations","collectionType","collectionTypeLinks","singleType","singleTypeLinks","reduce","acc","model","kind","push","collectionTypeSectionLinks","generateLinks","singleTypeSectionLinks","authorizedLinks","authorizedCollectionTypeLinks","link","authorizedSingleTypeLinks","ctLinks","models","stLinks","setInitialData","contentTypeSchemas","catch","configurations","isDisplayed","collectionTypesPermissions","uid","singleTypesPermissions","currentContentTypeConfig","find","search","searchParams","page","pageSize","settings","sort","defaultSortBy","defaultSortOrder","stringify","encode","title","info","displayName","to","COLLECTION_TYPES","SINGLE_TYPES","name"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useContentManagerInitData.mjs","sources":["../../../admin/src/hooks/useContentManagerInitData.ts"],"sourcesContent":["import { useCallback, useEffect } from 'react';\n\nimport {\n useAuth,\n type Permission,\n useNotification,\n useStrapiApp,\n useAPIErrorHandler,\n} from '@strapi/admin/strapi-admin';\nimport { useNotifyAT } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../constants/collections';\nimport { HOOKS } from '../constants/hooks';\nimport { AppState, setInitialData } from '../modules/app';\nimport { useTypedDispatch, useTypedSelector } from '../modules/hooks';\nimport { useGetAllContentTypeSettingsQuery } from '../services/contentTypes';\nimport { useGetInitialDataQuery } from '../services/init';\nimport { getTranslation } from '../utils/translations';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type {\n ContentType,\n FindContentTypesSettings,\n} from '../../../shared/contracts/content-types';\nimport type { GetInitData } from '../../../shared/contracts/init';\n\nconst { MUTATE_COLLECTION_TYPES_LINKS, MUTATE_SINGLE_TYPES_LINKS } = HOOKS;\n\ninterface ContentManagerLink {\n permissions: Permission[];\n search: string | null;\n kind: string;\n title: string;\n to: string;\n uid: string;\n name: string;\n isDisplayed: boolean;\n}\n\nconst getPermissionKey = (permission: Pick<Permission, 'action' | 'subject'>) =>\n `${permission.action}::${permission.subject ?? ''}`;\n\nconst authorizeLinks = async (\n links: ContentManagerLink[],\n checkUserHasPermissions: (\n permissions?: Array<Pick<Permission, 'action'> & Partial<Omit<Permission, 'action'>>>\n ) => Promise<Permission[]>\n) => {\n const authorizedPermissions = await checkUserHasPermissions(\n links.flatMap(({ permissions }) => permissions)\n );\n\n const authorizedPermissionKeys = new Set(authorizedPermissions.map(getPermissionKey));\n\n return links.filter(({ permissions }) =>\n permissions.some((permission) => authorizedPermissionKeys.has(getPermissionKey(permission)))\n );\n};\n\nconst useContentManagerInitData = (): AppState => {\n const { toggleNotification } = useNotification();\n const dispatch = useTypedDispatch();\n const runHookWaterfall = useStrapiApp(\n 'useContentManagerInitData',\n (state) => state.runHookWaterfall\n );\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n const checkUserHasPermissions = useAuth(\n 'useContentManagerInitData',\n (state) => state.checkUserHasPermissions\n );\n\n const state = useTypedSelector((state) => state['content-manager'].app);\n\n const initialDataQuery = useGetInitialDataQuery(undefined, {\n /**\n * TODO: remove this when the CTB has been refactored to use redux-toolkit-query\n * and it can invalidate the cache on mutation\n */\n refetchOnMountOrArgChange: true,\n });\n\n useEffect(() => {\n if (initialDataQuery.data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('App.schemas.data-loaded'),\n defaultMessage: 'The schemas have been successfully loaded.',\n })\n );\n }\n }, [formatMessage, initialDataQuery.data, notifyStatus]);\n\n useEffect(() => {\n if (initialDataQuery.error) {\n toggleNotification({ type: 'danger', message: formatAPIError(initialDataQuery.error) });\n }\n }, [formatAPIError, initialDataQuery.error, toggleNotification]);\n\n const contentTypeSettingsQuery = useGetAllContentTypeSettingsQuery();\n\n useEffect(() => {\n if (contentTypeSettingsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentTypeSettingsQuery.error),\n });\n }\n }, [formatAPIError, contentTypeSettingsQuery.error, toggleNotification]);\n\n const formatData = useCallback(\n async (\n components: Component[],\n contentTypes: ContentType[],\n fieldSizes: GetInitData.Response['data']['fieldSizes'],\n contentTypeConfigurations: FindContentTypesSettings.Response['data'],\n contentStructure: GetInitData.Response['data']['contentStructure']\n ) => {\n /**\n * We group these by the two types we support. We do with an object because we can use default\n * values of arrays to make sure we always have an array to manipulate further on if, for example,\n * a user has not made any single types.\n *\n * This means we have to manually add new content types to this hook if we add a new type – but\n * the safety is worth it.\n */\n const { collectionType: collectionTypeLinks, singleType: singleTypeLinks } =\n contentTypes.reduce<{\n collectionType: ContentType[];\n singleType: ContentType[];\n }>(\n (acc, model) => {\n acc[model.kind].push(model);\n return acc;\n },\n {\n collectionType: [],\n singleType: [],\n }\n );\n const collectionTypeSectionLinks = generateLinks(\n collectionTypeLinks,\n 'collectionTypes',\n contentTypeConfigurations\n );\n const singleTypeSectionLinks = generateLinks(singleTypeLinks, 'singleTypes');\n\n const authorizedLinks = await authorizeLinks(\n [...collectionTypeSectionLinks, ...singleTypeSectionLinks],\n checkUserHasPermissions\n );\n const authorizedCollectionTypeLinks = authorizedLinks.filter(\n (link) => link.kind === 'collectionType'\n );\n const authorizedSingleTypeLinks = authorizedLinks.filter(\n (link) => link.kind === 'singleType'\n );\n const { ctLinks } = runHookWaterfall(MUTATE_COLLECTION_TYPES_LINKS, {\n ctLinks: authorizedCollectionTypeLinks,\n models: contentTypes,\n });\n const { stLinks } = runHookWaterfall(MUTATE_SINGLE_TYPES_LINKS, {\n stLinks: authorizedSingleTypeLinks,\n models: contentTypes,\n });\n\n dispatch(\n setInitialData({\n authorizedCollectionTypeLinks: ctLinks,\n authorizedSingleTypeLinks: stLinks,\n components,\n contentStructure,\n contentTypeSchemas: contentTypes,\n fieldSizes,\n })\n );\n },\n [checkUserHasPermissions, dispatch, runHookWaterfall]\n );\n\n useEffect(() => {\n if (initialDataQuery.data && contentTypeSettingsQuery.data) {\n formatData(\n initialDataQuery.data.components,\n initialDataQuery.data.contentTypes,\n initialDataQuery.data.fieldSizes,\n contentTypeSettingsQuery.data,\n initialDataQuery.data.contentStructure\n ).catch((error) => {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n });\n }\n }, [\n formatAPIError,\n formatData,\n initialDataQuery.data,\n contentTypeSettingsQuery.data,\n toggleNotification,\n ]);\n\n return { ...state };\n};\n\nconst generateLinks = (\n links: ContentType[],\n type: 'collectionTypes' | 'singleTypes',\n configurations: FindContentTypesSettings.Response['data'] = []\n) => {\n return links\n .filter((link) => link.isDisplayed)\n .map((link) => {\n const collectionTypesPermissions = [\n { action: 'plugin::content-manager.explorer.create', subject: link.uid },\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const singleTypesPermissions = [\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const permissions =\n type === 'collectionTypes' ? collectionTypesPermissions : singleTypesPermissions;\n\n const currentContentTypeConfig = configurations.find(({ uid }) => uid === link.uid);\n\n let search = null;\n\n if (currentContentTypeConfig) {\n const searchParams = {\n page: 1,\n pageSize: currentContentTypeConfig.settings.pageSize,\n sort: `${currentContentTypeConfig.settings.defaultSortBy}:${currentContentTypeConfig.settings.defaultSortOrder}`,\n };\n\n search = stringify(searchParams, { encode: false });\n }\n\n return {\n permissions,\n search,\n kind: link.kind,\n title: link.info.displayName,\n to: `/content-manager/${link.kind === 'collectionType' ? COLLECTION_TYPES : SINGLE_TYPES}/${\n link.uid\n }`,\n uid: link.uid,\n // Used for the list item key in the helper plugin\n name: link.uid,\n isDisplayed: link.isDisplayed,\n } satisfies ContentManagerLink;\n });\n};\n\nexport { useContentManagerInitData };\nexport type { ContentManagerLink };\n"],"names":["MUTATE_COLLECTION_TYPES_LINKS","MUTATE_SINGLE_TYPES_LINKS","HOOKS","getPermissionKey","permission","action","subject","authorizeLinks","links","checkUserHasPermissions","authorizedPermissions","flatMap","permissions","authorizedPermissionKeys","Set","map","filter","some","has","useContentManagerInitData","toggleNotification","useNotification","dispatch","useTypedDispatch","runHookWaterfall","useStrapiApp","state","notifyStatus","useNotifyAT","formatMessage","useIntl","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","getTranslation","useAuth","useTypedSelector","app","initialDataQuery","useGetInitialDataQuery","undefined","refetchOnMountOrArgChange","useEffect","data","id","defaultMessage","error","type","message","contentTypeSettingsQuery","useGetAllContentTypeSettingsQuery","formatData","useCallback","components","contentTypes","fieldSizes","contentTypeConfigurations","contentStructure","collectionType","collectionTypeLinks","singleType","singleTypeLinks","reduce","acc","model","kind","push","collectionTypeSectionLinks","generateLinks","singleTypeSectionLinks","authorizedLinks","authorizedCollectionTypeLinks","link","authorizedSingleTypeLinks","ctLinks","models","stLinks","setInitialData","contentTypeSchemas","catch","configurations","isDisplayed","collectionTypesPermissions","uid","singleTypesPermissions","currentContentTypeConfig","find","search","searchParams","page","pageSize","settings","sort","defaultSortBy","defaultSortOrder","stringify","encode","title","info","displayName","to","COLLECTION_TYPES","SINGLE_TYPES","name"],"mappings":"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"}
|
|
@@ -61,8 +61,10 @@ const DEFAULT_UNEXPECTED_ERROR_MSG = {
|
|
|
61
61
|
const { trackUsage } = strapiAdmin.useTracking();
|
|
62
62
|
const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
|
63
63
|
const navigate = reactRouterDom.useNavigate();
|
|
64
|
-
const { data: aiFeatureConfig } = ee.useGetAiFeatureConfigQuery();
|
|
65
64
|
const isAiAvailable = ee.useAIAvailability();
|
|
65
|
+
const { data: aiFeatureConfig } = ee.useGetAiFeatureConfigQuery(undefined, {
|
|
66
|
+
skip: !isAiAvailable
|
|
67
|
+
});
|
|
66
68
|
const isAiI18nConfigured = Boolean(aiFeatureConfig?.isAiI18nConfigured);
|
|
67
69
|
// Get metadata from context providers for tracking purposes
|
|
68
70
|
const previewContext = Preview.usePreviewContext('useDocumentActions', ()=>true, false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDocumentActions.js","sources":["../../../admin/src/hooks/useDocumentActions.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { SerializedError } from '@reduxjs/toolkit';\nimport {\n useNotification,\n useTracking,\n type TrackingEvent,\n useAPIErrorHandler,\n} from '@strapi/admin/strapi-admin';\nimport { useGetAiFeatureConfigQuery, useAIAvailability } from '@strapi/admin/strapi-admin/ee';\nimport { useIntl, type MessageDescriptor } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\n\nimport { useRelationModal } from '../pages/EditView/components/FormInputs/Relations/RelationModal';\nimport { usePreviewContext } from '../preview/pages/Preview';\nimport {\n useAutoCloneDocumentMutation,\n useCloneDocumentMutation,\n useCreateDocumentMutation,\n useDeleteDocumentMutation,\n useDeleteManyDocumentsMutation,\n useDiscardDocumentMutation,\n useLazyGetDocumentQuery,\n usePublishDocumentMutation,\n usePublishManyDocumentsMutation,\n useUnpublishDocumentMutation,\n useUnpublishManyDocumentsMutation,\n useUpdateDocumentMutation,\n} from '../services/documents';\nimport { BaseQueryError } from '../utils/api';\nimport { getTranslation } from '../utils/translations';\n\nimport type { Document } from './useDocument';\nimport type {\n AutoClone,\n Clone,\n Create,\n Delete,\n BulkDelete,\n Discard,\n FindOne,\n Publish,\n BulkPublish,\n Update,\n Unpublish,\n BulkUnpublish,\n} from '../../../shared/contracts/collection-types';\n\nconst DEFAULT_UNEXPECTED_ERROR_MSG = {\n id: 'notification.error',\n defaultMessage: 'An error occurred, please try again',\n} satisfies MessageDescriptor;\n\ntype OperationResponse<TResponse extends { data: unknown; meta?: unknown; error?: unknown }> =\n | Pick<TResponse, 'data'>\n | Pick<TResponse, 'data' | 'meta'>\n | { error: BaseQueryError | SerializedError };\n\ntype BulkOperationResponse<TResponse extends { data: unknown; error?: unknown }> =\n | Pick<TResponse, 'data'>\n | { error: BaseQueryError | SerializedError };\n\ntype QueryParams = Record<string, unknown>;\n\ntype UseDocumentActions = (\n fromPreview?: boolean,\n fromRelationModal?: boolean\n) => {\n /**\n * @description Attempts to clone a document based on the provided sourceId.\n * This will return a list of the fields as an error if it's unable to clone.\n * You most likely want to use the `clone` action instead.\n */\n isLoading: boolean;\n autoClone: (args: {\n model: string;\n sourceId: string;\n locale?: string;\n }) => Promise<OperationResponse<AutoClone.Response>>;\n clone: (\n args: {\n model: string;\n documentId: string;\n params?: QueryParams;\n },\n document: Omit<Document, 'id'>,\n trackerProperty?: Extract<\n TrackingEvent,\n { name: 'willCreateEntry' | 'didCreateEntry' | 'didNotCreateEntry' }\n >['properties']\n ) => Promise<OperationResponse<Clone.Response>>;\n create: (\n args: {\n model: string;\n params?: QueryParams;\n },\n document: Omit<Document, 'id'>,\n trackerProperty?: Extract<\n TrackingEvent,\n { name: 'willCreateEntry' | 'didCreateEntry' | 'didNotCreateEntry' }\n >['properties']\n ) => Promise<OperationResponse<Create.Response>>;\n delete: (\n args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n },\n trackerProperty?: Extract<\n TrackingEvent,\n { name: 'willDeleteEntry' | 'didDeleteEntry' | 'didNotDeleteEntry' }\n >['properties']\n ) => Promise<OperationResponse<Delete.Response>>;\n deleteMany: (args: {\n model: string;\n documentIds: string[];\n params?: QueryParams;\n }) => Promise<BulkOperationResponse<BulkDelete.Response>>;\n discard: (args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n }) => Promise<OperationResponse<Discard.Response>>;\n getDocument: (args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n }) => Promise<FindOne.Response | undefined>;\n publish: (\n args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n },\n document: Partial<Document>\n ) => Promise<OperationResponse<Publish.Response>>;\n publishMany: (args: {\n model: string;\n documentIds: string[];\n params?: QueryParams;\n }) => Promise<BulkOperationResponse<BulkPublish.Response>>;\n update: (\n args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n },\n document: Partial<Document>,\n trackerProperty?: Extract<\n TrackingEvent,\n { name: 'willEditEntry' | 'didEditEntry' | 'didNotEditEntry' }\n >['properties']\n ) => Promise<OperationResponse<Update.Response>>;\n unpublish: (\n args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n },\n discardDraft?: boolean\n ) => Promise<OperationResponse<Unpublish.Response>>;\n unpublishMany: (args: {\n model: string;\n documentIds: string[];\n params?: QueryParams;\n }) => Promise<BulkOperationResponse<BulkUnpublish.Response>>;\n};\n\ntype IUseDocumentActs = ReturnType<UseDocumentActions>;\n\n/**\n * @alpha\n * @public\n * @description Contains all the operations that can be performed on a single document.\n * Designed to be able to be used anywhere within a Strapi app. The hooks will handle\n * notifications should the operation fail, however the response is always returned incase\n * the user needs to handle side-effects.\n * @example\n * ```tsx\n * import { Form } from '@strapi/admin/admin';\n *\n * const { id, model, collectionType } = useParams<{ id: string; model: string; collectionType: string }>();\n * const { update } = useDocumentActions();\n *\n * const handleSubmit = async (data) => {\n * await update({ collectionType, model, documentId: id }, data);\n * }\n *\n * return <Form method=\"PUT\" onSubmit={handleSubmit} />\n * ```\n *\n */\nconst useDocumentActions: UseDocumentActions = () => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const navigate = useNavigate();\n const { data: aiFeatureConfig } = useGetAiFeatureConfigQuery();\n const isAiAvailable = useAIAvailability();\n const isAiI18nConfigured = Boolean(aiFeatureConfig?.isAiI18nConfigured);\n\n // Get metadata from context providers for tracking purposes\n const previewContext = usePreviewContext('useDocumentActions', () => true, false);\n const relationContext = useRelationModal('useDocumentActions', () => true, false);\n const fromPreview = previewContext != undefined;\n const fromRelationModal = relationContext != undefined;\n\n const [deleteDocument, { isLoading: isDeleting }] = useDeleteDocumentMutation();\n const _delete: IUseDocumentActs['delete'] = React.useCallback(\n async ({ collectionType, model, documentId, params }, trackerProperty) => {\n try {\n trackUsage('willDeleteEntry', trackerProperty);\n\n const res = await deleteDocument({\n collectionType,\n model,\n documentId,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.delete'),\n defaultMessage: 'Deleted document',\n }),\n });\n\n trackUsage('didDeleteEntry', trackerProperty);\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotDeleteEntry', { error: err, ...trackerProperty });\n\n throw err;\n }\n },\n [trackUsage, deleteDocument, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [deleteManyDocuments, { isLoading: isDeletingMany }] = useDeleteManyDocumentsMutation();\n\n const deleteMany: IUseDocumentActs['deleteMany'] = React.useCallback(\n async ({ model, documentIds, params }) => {\n try {\n trackUsage('willBulkDeleteEntries');\n\n const res = await deleteManyDocuments({\n model,\n documentIds,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: getTranslation('success.records.delete'),\n defaultMessage: 'Successfully deleted.',\n }),\n message: '',\n });\n\n trackUsage('didBulkDeleteEntries');\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotBulkDeleteEntries');\n\n throw err;\n }\n },\n [trackUsage, deleteManyDocuments, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [discardDocument, { isLoading: isDiscardingDocument }] = useDiscardDocumentMutation();\n const discard: IUseDocumentActs['discard'] = React.useCallback(\n async ({ collectionType, model, documentId, params }) => {\n try {\n const res = await discardDocument({\n collectionType,\n model,\n documentId,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-manager.success.record.discard',\n defaultMessage: 'Changes discarded',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [discardDocument, formatAPIError, formatMessage, toggleNotification]\n );\n\n const [publishDocument, { isLoading: isPublishing }] = usePublishDocumentMutation();\n\n const publish: IUseDocumentActs['publish'] = React.useCallback(\n async ({ collectionType, model, documentId, params }, data) => {\n try {\n trackUsage('willPublishEntry', { documentId });\n\n const res = await publishDocument({\n collectionType,\n model,\n documentId,\n data,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n return { error: res.error };\n }\n\n trackUsage('didPublishEntry', {\n documentId,\n fromPreview,\n fromRelationModal,\n ...(isAiAvailable ? { isAiI18nConfigured } : {}),\n });\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.publish'),\n defaultMessage: 'Published document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [\n trackUsage,\n publishDocument,\n fromPreview,\n fromRelationModal,\n toggleNotification,\n formatMessage,\n formatAPIError,\n isAiAvailable,\n isAiI18nConfigured,\n ]\n );\n\n const [publishManyDocuments, { isLoading: isPublishingMany }] = usePublishManyDocumentsMutation();\n const publishMany: IUseDocumentActs['publishMany'] = React.useCallback(\n async ({ model, documentIds, params }) => {\n try {\n // TODO Confirm tracking events for bulk publish?\n\n const res = await publishManyDocuments({\n model,\n documentIds,\n params,\n });\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.publish'),\n defaultMessage: 'Published document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n throw err;\n }\n },\n [\n // trackUsage,\n publishManyDocuments,\n toggleNotification,\n formatMessage,\n formatAPIError,\n ]\n );\n\n const [updateDocument, { isLoading: isUpdating }] = useUpdateDocumentMutation();\n const update: IUseDocumentActs['update'] = React.useCallback(\n async ({ collectionType, model, documentId, params }, data, trackerProperty) => {\n try {\n trackUsage('willEditEntry', trackerProperty);\n\n const res = await updateDocument({\n collectionType,\n model,\n documentId,\n data,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n trackUsage('didNotEditEntry', { error: res.error, ...trackerProperty });\n\n return { error: res.error };\n }\n\n trackUsage('didEditEntry', {\n ...trackerProperty,\n documentId: res.data.data.documentId,\n fromPreview,\n fromRelationModal,\n ...(isAiAvailable ? { isAiI18nConfigured } : {}),\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.save'),\n defaultMessage: 'Saved document',\n }),\n });\n\n return res.data;\n } catch (err) {\n trackUsage('didNotEditEntry', { error: err, ...trackerProperty });\n\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [\n trackUsage,\n updateDocument,\n fromPreview,\n fromRelationModal,\n toggleNotification,\n formatMessage,\n formatAPIError,\n isAiAvailable,\n isAiI18nConfigured,\n ]\n );\n\n const [unpublishDocument] = useUnpublishDocumentMutation();\n const unpublish: IUseDocumentActs['unpublish'] = React.useCallback(\n async ({ collectionType, model, documentId, params }, discardDraft = false) => {\n try {\n trackUsage('willUnpublishEntry');\n\n const res = await unpublishDocument({\n collectionType,\n model,\n documentId,\n params,\n data: {\n discardDraft,\n },\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n return { error: res.error };\n }\n\n trackUsage('didUnpublishEntry');\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.unpublish'),\n defaultMessage: 'Unpublished document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [trackUsage, unpublishDocument, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [unpublishManyDocuments, { isLoading: isUnpublishingMany }] =\n useUnpublishManyDocumentsMutation();\n const unpublishMany: IUseDocumentActs['unpublishMany'] = React.useCallback(\n async ({ model, documentIds, params }) => {\n try {\n trackUsage('willBulkUnpublishEntries');\n\n const res = await unpublishManyDocuments({\n model,\n documentIds,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n return { error: res.error };\n }\n\n trackUsage('didBulkUnpublishEntries');\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: getTranslation('success.records.unpublish'),\n defaultMessage: 'Successfully unpublished.',\n }),\n message: '',\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotBulkUnpublishEntries');\n\n throw err;\n }\n },\n [trackUsage, unpublishManyDocuments, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [createDocument] = useCreateDocumentMutation();\n const create: IUseDocumentActs['create'] = React.useCallback(\n async ({ model, params }, data, trackerProperty) => {\n try {\n const res = await createDocument({\n model,\n data,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n trackUsage('didNotCreateEntry', { error: res.error, ...trackerProperty });\n\n return { error: res.error };\n }\n trackUsage('didCreateEntry', {\n ...trackerProperty,\n documentId: res.data.data.documentId,\n fromPreview,\n fromRelationModal,\n ...(isAiAvailable ? { isAiI18nConfigured } : {}),\n });\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.save'),\n defaultMessage: 'Saved document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotCreateEntry', { error: err, ...trackerProperty });\n\n throw err;\n }\n },\n [\n createDocument,\n formatAPIError,\n formatMessage,\n fromPreview,\n fromRelationModal,\n toggleNotification,\n trackUsage,\n isAiAvailable,\n isAiI18nConfigured,\n ]\n );\n\n const [autoCloneDocument] = useAutoCloneDocumentMutation();\n const autoClone: IUseDocumentActs['autoClone'] = React.useCallback(\n async ({ model, sourceId, locale }) => {\n try {\n const res = await autoCloneDocument({\n model,\n sourceId,\n params: locale ? { locale } : undefined,\n });\n\n if ('error' in res) {\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.clone'),\n defaultMessage: 'Cloned document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [autoCloneDocument, formatMessage, toggleNotification]\n );\n\n const [cloneDocument] = useCloneDocumentMutation();\n const clone: IUseDocumentActs['clone'] = React.useCallback(\n async ({ model, documentId, params }, body, trackerProperty) => {\n try {\n // Omit id and documentId so they are not copied to the clone\n const { id: _id, documentId: _documentId, ...restBody } = body;\n\n /**\n * If we're cloning we want to post directly to this endpoint\n * so that the relations even if they're not listed in the EditView\n * are correctly attached to the entry.\n */\n const res = await cloneDocument({\n model,\n sourceId: documentId,\n data: restBody,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n trackUsage('didNotCreateEntry', { error: res.error, ...trackerProperty });\n\n return { error: res.error };\n }\n\n trackUsage('didCreateEntry', {\n ...trackerProperty,\n ...(isAiAvailable ? { isAiI18nConfigured } : {}),\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.clone'),\n defaultMessage: 'Cloned document',\n }),\n });\n\n // Redirect to normal edit view\n navigate(`../../${res.data.data.documentId}`, { relative: 'path' });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotCreateEntry', { error: err, ...trackerProperty });\n\n throw err;\n }\n },\n [\n cloneDocument,\n trackUsage,\n toggleNotification,\n formatMessage,\n formatAPIError,\n navigate,\n isAiAvailable,\n isAiI18nConfigured,\n ]\n );\n\n const [getDoc] = useLazyGetDocumentQuery();\n const getDocument: IUseDocumentActs['getDocument'] = React.useCallback(\n async (args) => {\n const { data } = await getDoc(args);\n\n return data;\n },\n [getDoc]\n );\n\n return {\n isLoading:\n isPublishing ||\n isUpdating ||\n isDiscardingDocument ||\n isDeleting ||\n isDeletingMany ||\n isUnpublishingMany ||\n isPublishingMany,\n autoClone,\n clone,\n create,\n delete: _delete,\n deleteMany,\n discard,\n getDocument,\n publish,\n publishMany,\n unpublish,\n unpublishMany,\n update,\n } satisfies IUseDocumentActs;\n};\n\nexport { useDocumentActions };\nexport type { UseDocumentActions, OperationResponse };\n"],"names":["DEFAULT_UNEXPECTED_ERROR_MSG","id","defaultMessage","useDocumentActions","toggleNotification","useNotification","formatMessage","useIntl","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","navigate","useNavigate","data","aiFeatureConfig","useGetAiFeatureConfigQuery","isAiAvailable","useAIAvailability","isAiI18nConfigured","Boolean","previewContext","usePreviewContext","relationContext","useRelationModal","fromPreview","undefined","fromRelationModal","deleteDocument","isLoading","isDeleting","useDeleteDocumentMutation","_delete","React","useCallback","collectionType","model","documentId","params","trackerProperty","res","type","message","error","getTranslation","err","deleteManyDocuments","isDeletingMany","useDeleteManyDocumentsMutation","deleteMany","documentIds","title","discardDocument","isDiscardingDocument","useDiscardDocumentMutation","discard","publishDocument","isPublishing","usePublishDocumentMutation","publish","publishManyDocuments","isPublishingMany","usePublishManyDocumentsMutation","publishMany","updateDocument","isUpdating","useUpdateDocumentMutation","update","unpublishDocument","useUnpublishDocumentMutation","unpublish","discardDraft","unpublishManyDocuments","isUnpublishingMany","useUnpublishManyDocumentsMutation","unpublishMany","createDocument","useCreateDocumentMutation","create","autoCloneDocument","useAutoCloneDocumentMutation","autoClone","sourceId","locale","cloneDocument","useCloneDocumentMutation","clone","body","_id","_documentId","restBody","relative","getDoc","useLazyGetDocumentQuery","getDocument","args","delete"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useDocumentActions.js","sources":["../../../admin/src/hooks/useDocumentActions.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { SerializedError } from '@reduxjs/toolkit';\nimport {\n useNotification,\n useTracking,\n type TrackingEvent,\n useAPIErrorHandler,\n} from '@strapi/admin/strapi-admin';\nimport { useGetAiFeatureConfigQuery, useAIAvailability } from '@strapi/admin/strapi-admin/ee';\nimport { useIntl, type MessageDescriptor } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\n\nimport { useRelationModal } from '../pages/EditView/components/FormInputs/Relations/RelationModal';\nimport { usePreviewContext } from '../preview/pages/Preview';\nimport {\n useAutoCloneDocumentMutation,\n useCloneDocumentMutation,\n useCreateDocumentMutation,\n useDeleteDocumentMutation,\n useDeleteManyDocumentsMutation,\n useDiscardDocumentMutation,\n useLazyGetDocumentQuery,\n usePublishDocumentMutation,\n usePublishManyDocumentsMutation,\n useUnpublishDocumentMutation,\n useUnpublishManyDocumentsMutation,\n useUpdateDocumentMutation,\n} from '../services/documents';\nimport { BaseQueryError } from '../utils/api';\nimport { getTranslation } from '../utils/translations';\n\nimport type { Document } from './useDocument';\nimport type {\n AutoClone,\n Clone,\n Create,\n Delete,\n BulkDelete,\n Discard,\n FindOne,\n Publish,\n BulkPublish,\n Update,\n Unpublish,\n BulkUnpublish,\n} from '../../../shared/contracts/collection-types';\n\nconst DEFAULT_UNEXPECTED_ERROR_MSG = {\n id: 'notification.error',\n defaultMessage: 'An error occurred, please try again',\n} satisfies MessageDescriptor;\n\ntype OperationResponse<TResponse extends { data: unknown; meta?: unknown; error?: unknown }> =\n | Pick<TResponse, 'data'>\n | Pick<TResponse, 'data' | 'meta'>\n | { error: BaseQueryError | SerializedError };\n\ntype BulkOperationResponse<TResponse extends { data: unknown; error?: unknown }> =\n | Pick<TResponse, 'data'>\n | { error: BaseQueryError | SerializedError };\n\ntype QueryParams = Record<string, unknown>;\n\ntype UseDocumentActions = (\n fromPreview?: boolean,\n fromRelationModal?: boolean\n) => {\n /**\n * @description Attempts to clone a document based on the provided sourceId.\n * This will return a list of the fields as an error if it's unable to clone.\n * You most likely want to use the `clone` action instead.\n */\n isLoading: boolean;\n autoClone: (args: {\n model: string;\n sourceId: string;\n locale?: string;\n }) => Promise<OperationResponse<AutoClone.Response>>;\n clone: (\n args: {\n model: string;\n documentId: string;\n params?: QueryParams;\n },\n document: Omit<Document, 'id'>,\n trackerProperty?: Extract<\n TrackingEvent,\n { name: 'willCreateEntry' | 'didCreateEntry' | 'didNotCreateEntry' }\n >['properties']\n ) => Promise<OperationResponse<Clone.Response>>;\n create: (\n args: {\n model: string;\n params?: QueryParams;\n },\n document: Omit<Document, 'id'>,\n trackerProperty?: Extract<\n TrackingEvent,\n { name: 'willCreateEntry' | 'didCreateEntry' | 'didNotCreateEntry' }\n >['properties']\n ) => Promise<OperationResponse<Create.Response>>;\n delete: (\n args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n },\n trackerProperty?: Extract<\n TrackingEvent,\n { name: 'willDeleteEntry' | 'didDeleteEntry' | 'didNotDeleteEntry' }\n >['properties']\n ) => Promise<OperationResponse<Delete.Response>>;\n deleteMany: (args: {\n model: string;\n documentIds: string[];\n params?: QueryParams;\n }) => Promise<BulkOperationResponse<BulkDelete.Response>>;\n discard: (args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n }) => Promise<OperationResponse<Discard.Response>>;\n getDocument: (args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n }) => Promise<FindOne.Response | undefined>;\n publish: (\n args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n },\n document: Partial<Document>\n ) => Promise<OperationResponse<Publish.Response>>;\n publishMany: (args: {\n model: string;\n documentIds: string[];\n params?: QueryParams;\n }) => Promise<BulkOperationResponse<BulkPublish.Response>>;\n update: (\n args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n },\n document: Partial<Document>,\n trackerProperty?: Extract<\n TrackingEvent,\n { name: 'willEditEntry' | 'didEditEntry' | 'didNotEditEntry' }\n >['properties']\n ) => Promise<OperationResponse<Update.Response>>;\n unpublish: (\n args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n },\n discardDraft?: boolean\n ) => Promise<OperationResponse<Unpublish.Response>>;\n unpublishMany: (args: {\n model: string;\n documentIds: string[];\n params?: QueryParams;\n }) => Promise<BulkOperationResponse<BulkUnpublish.Response>>;\n};\n\ntype IUseDocumentActs = ReturnType<UseDocumentActions>;\n\n/**\n * @alpha\n * @public\n * @description Contains all the operations that can be performed on a single document.\n * Designed to be able to be used anywhere within a Strapi app. The hooks will handle\n * notifications should the operation fail, however the response is always returned incase\n * the user needs to handle side-effects.\n * @example\n * ```tsx\n * import { Form } from '@strapi/admin/admin';\n *\n * const { id, model, collectionType } = useParams<{ id: string; model: string; collectionType: string }>();\n * const { update } = useDocumentActions();\n *\n * const handleSubmit = async (data) => {\n * await update({ collectionType, model, documentId: id }, data);\n * }\n *\n * return <Form method=\"PUT\" onSubmit={handleSubmit} />\n * ```\n *\n */\nconst useDocumentActions: UseDocumentActions = () => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const navigate = useNavigate();\n const isAiAvailable = useAIAvailability();\n const { data: aiFeatureConfig } = useGetAiFeatureConfigQuery(undefined, {\n skip: !isAiAvailable,\n });\n const isAiI18nConfigured = Boolean(aiFeatureConfig?.isAiI18nConfigured);\n\n // Get metadata from context providers for tracking purposes\n const previewContext = usePreviewContext('useDocumentActions', () => true, false);\n const relationContext = useRelationModal('useDocumentActions', () => true, false);\n const fromPreview = previewContext != undefined;\n const fromRelationModal = relationContext != undefined;\n\n const [deleteDocument, { isLoading: isDeleting }] = useDeleteDocumentMutation();\n const _delete: IUseDocumentActs['delete'] = React.useCallback(\n async ({ collectionType, model, documentId, params }, trackerProperty) => {\n try {\n trackUsage('willDeleteEntry', trackerProperty);\n\n const res = await deleteDocument({\n collectionType,\n model,\n documentId,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.delete'),\n defaultMessage: 'Deleted document',\n }),\n });\n\n trackUsage('didDeleteEntry', trackerProperty);\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotDeleteEntry', { error: err, ...trackerProperty });\n\n throw err;\n }\n },\n [trackUsage, deleteDocument, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [deleteManyDocuments, { isLoading: isDeletingMany }] = useDeleteManyDocumentsMutation();\n\n const deleteMany: IUseDocumentActs['deleteMany'] = React.useCallback(\n async ({ model, documentIds, params }) => {\n try {\n trackUsage('willBulkDeleteEntries');\n\n const res = await deleteManyDocuments({\n model,\n documentIds,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: getTranslation('success.records.delete'),\n defaultMessage: 'Successfully deleted.',\n }),\n message: '',\n });\n\n trackUsage('didBulkDeleteEntries');\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotBulkDeleteEntries');\n\n throw err;\n }\n },\n [trackUsage, deleteManyDocuments, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [discardDocument, { isLoading: isDiscardingDocument }] = useDiscardDocumentMutation();\n const discard: IUseDocumentActs['discard'] = React.useCallback(\n async ({ collectionType, model, documentId, params }) => {\n try {\n const res = await discardDocument({\n collectionType,\n model,\n documentId,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-manager.success.record.discard',\n defaultMessage: 'Changes discarded',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [discardDocument, formatAPIError, formatMessage, toggleNotification]\n );\n\n const [publishDocument, { isLoading: isPublishing }] = usePublishDocumentMutation();\n\n const publish: IUseDocumentActs['publish'] = React.useCallback(\n async ({ collectionType, model, documentId, params }, data) => {\n try {\n trackUsage('willPublishEntry', { documentId });\n\n const res = await publishDocument({\n collectionType,\n model,\n documentId,\n data,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n return { error: res.error };\n }\n\n trackUsage('didPublishEntry', {\n documentId,\n fromPreview,\n fromRelationModal,\n ...(isAiAvailable ? { isAiI18nConfigured } : {}),\n });\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.publish'),\n defaultMessage: 'Published document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [\n trackUsage,\n publishDocument,\n fromPreview,\n fromRelationModal,\n toggleNotification,\n formatMessage,\n formatAPIError,\n isAiAvailable,\n isAiI18nConfigured,\n ]\n );\n\n const [publishManyDocuments, { isLoading: isPublishingMany }] = usePublishManyDocumentsMutation();\n const publishMany: IUseDocumentActs['publishMany'] = React.useCallback(\n async ({ model, documentIds, params }) => {\n try {\n // TODO Confirm tracking events for bulk publish?\n\n const res = await publishManyDocuments({\n model,\n documentIds,\n params,\n });\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.publish'),\n defaultMessage: 'Published document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n throw err;\n }\n },\n [\n // trackUsage,\n publishManyDocuments,\n toggleNotification,\n formatMessage,\n formatAPIError,\n ]\n );\n\n const [updateDocument, { isLoading: isUpdating }] = useUpdateDocumentMutation();\n const update: IUseDocumentActs['update'] = React.useCallback(\n async ({ collectionType, model, documentId, params }, data, trackerProperty) => {\n try {\n trackUsage('willEditEntry', trackerProperty);\n\n const res = await updateDocument({\n collectionType,\n model,\n documentId,\n data,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n trackUsage('didNotEditEntry', { error: res.error, ...trackerProperty });\n\n return { error: res.error };\n }\n\n trackUsage('didEditEntry', {\n ...trackerProperty,\n documentId: res.data.data.documentId,\n fromPreview,\n fromRelationModal,\n ...(isAiAvailable ? { isAiI18nConfigured } : {}),\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.save'),\n defaultMessage: 'Saved document',\n }),\n });\n\n return res.data;\n } catch (err) {\n trackUsage('didNotEditEntry', { error: err, ...trackerProperty });\n\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [\n trackUsage,\n updateDocument,\n fromPreview,\n fromRelationModal,\n toggleNotification,\n formatMessage,\n formatAPIError,\n isAiAvailable,\n isAiI18nConfigured,\n ]\n );\n\n const [unpublishDocument] = useUnpublishDocumentMutation();\n const unpublish: IUseDocumentActs['unpublish'] = React.useCallback(\n async ({ collectionType, model, documentId, params }, discardDraft = false) => {\n try {\n trackUsage('willUnpublishEntry');\n\n const res = await unpublishDocument({\n collectionType,\n model,\n documentId,\n params,\n data: {\n discardDraft,\n },\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n return { error: res.error };\n }\n\n trackUsage('didUnpublishEntry');\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.unpublish'),\n defaultMessage: 'Unpublished document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [trackUsage, unpublishDocument, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [unpublishManyDocuments, { isLoading: isUnpublishingMany }] =\n useUnpublishManyDocumentsMutation();\n const unpublishMany: IUseDocumentActs['unpublishMany'] = React.useCallback(\n async ({ model, documentIds, params }) => {\n try {\n trackUsage('willBulkUnpublishEntries');\n\n const res = await unpublishManyDocuments({\n model,\n documentIds,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n return { error: res.error };\n }\n\n trackUsage('didBulkUnpublishEntries');\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: getTranslation('success.records.unpublish'),\n defaultMessage: 'Successfully unpublished.',\n }),\n message: '',\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotBulkUnpublishEntries');\n\n throw err;\n }\n },\n [trackUsage, unpublishManyDocuments, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [createDocument] = useCreateDocumentMutation();\n const create: IUseDocumentActs['create'] = React.useCallback(\n async ({ model, params }, data, trackerProperty) => {\n try {\n const res = await createDocument({\n model,\n data,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n trackUsage('didNotCreateEntry', { error: res.error, ...trackerProperty });\n\n return { error: res.error };\n }\n trackUsage('didCreateEntry', {\n ...trackerProperty,\n documentId: res.data.data.documentId,\n fromPreview,\n fromRelationModal,\n ...(isAiAvailable ? { isAiI18nConfigured } : {}),\n });\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.save'),\n defaultMessage: 'Saved document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotCreateEntry', { error: err, ...trackerProperty });\n\n throw err;\n }\n },\n [\n createDocument,\n formatAPIError,\n formatMessage,\n fromPreview,\n fromRelationModal,\n toggleNotification,\n trackUsage,\n isAiAvailable,\n isAiI18nConfigured,\n ]\n );\n\n const [autoCloneDocument] = useAutoCloneDocumentMutation();\n const autoClone: IUseDocumentActs['autoClone'] = React.useCallback(\n async ({ model, sourceId, locale }) => {\n try {\n const res = await autoCloneDocument({\n model,\n sourceId,\n params: locale ? { locale } : undefined,\n });\n\n if ('error' in res) {\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.clone'),\n defaultMessage: 'Cloned document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [autoCloneDocument, formatMessage, toggleNotification]\n );\n\n const [cloneDocument] = useCloneDocumentMutation();\n const clone: IUseDocumentActs['clone'] = React.useCallback(\n async ({ model, documentId, params }, body, trackerProperty) => {\n try {\n // Omit id and documentId so they are not copied to the clone\n const { id: _id, documentId: _documentId, ...restBody } = body;\n\n /**\n * If we're cloning we want to post directly to this endpoint\n * so that the relations even if they're not listed in the EditView\n * are correctly attached to the entry.\n */\n const res = await cloneDocument({\n model,\n sourceId: documentId,\n data: restBody,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n trackUsage('didNotCreateEntry', { error: res.error, ...trackerProperty });\n\n return { error: res.error };\n }\n\n trackUsage('didCreateEntry', {\n ...trackerProperty,\n ...(isAiAvailable ? { isAiI18nConfigured } : {}),\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.clone'),\n defaultMessage: 'Cloned document',\n }),\n });\n\n // Redirect to normal edit view\n navigate(`../../${res.data.data.documentId}`, { relative: 'path' });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotCreateEntry', { error: err, ...trackerProperty });\n\n throw err;\n }\n },\n [\n cloneDocument,\n trackUsage,\n toggleNotification,\n formatMessage,\n formatAPIError,\n navigate,\n isAiAvailable,\n isAiI18nConfigured,\n ]\n );\n\n const [getDoc] = useLazyGetDocumentQuery();\n const getDocument: IUseDocumentActs['getDocument'] = React.useCallback(\n async (args) => {\n const { data } = await getDoc(args);\n\n return data;\n },\n [getDoc]\n );\n\n return {\n isLoading:\n isPublishing ||\n isUpdating ||\n isDiscardingDocument ||\n isDeleting ||\n isDeletingMany ||\n isUnpublishingMany ||\n isPublishingMany,\n autoClone,\n clone,\n create,\n delete: _delete,\n deleteMany,\n discard,\n getDocument,\n publish,\n publishMany,\n unpublish,\n unpublishMany,\n update,\n } satisfies IUseDocumentActs;\n};\n\nexport { useDocumentActions };\nexport type { UseDocumentActions, OperationResponse };\n"],"names":["DEFAULT_UNEXPECTED_ERROR_MSG","id","defaultMessage","useDocumentActions","toggleNotification","useNotification","formatMessage","useIntl","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","navigate","useNavigate","isAiAvailable","useAIAvailability","data","aiFeatureConfig","useGetAiFeatureConfigQuery","undefined","skip","isAiI18nConfigured","Boolean","previewContext","usePreviewContext","relationContext","useRelationModal","fromPreview","fromRelationModal","deleteDocument","isLoading","isDeleting","useDeleteDocumentMutation","_delete","React","useCallback","collectionType","model","documentId","params","trackerProperty","res","type","message","error","getTranslation","err","deleteManyDocuments","isDeletingMany","useDeleteManyDocumentsMutation","deleteMany","documentIds","title","discardDocument","isDiscardingDocument","useDiscardDocumentMutation","discard","publishDocument","isPublishing","usePublishDocumentMutation","publish","publishManyDocuments","isPublishingMany","usePublishManyDocumentsMutation","publishMany","updateDocument","isUpdating","useUpdateDocumentMutation","update","unpublishDocument","useUnpublishDocumentMutation","unpublish","discardDraft","unpublishManyDocuments","isUnpublishingMany","useUnpublishManyDocumentsMutation","unpublishMany","createDocument","useCreateDocumentMutation","create","autoCloneDocument","useAutoCloneDocumentMutation","autoClone","sourceId","locale","cloneDocument","useCloneDocumentMutation","clone","body","_id","_documentId","restBody","relative","getDoc","useLazyGetDocumentQuery","getDocument","args","delete"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { useNotification, useTracking, useAPIErrorHandler } from '@strapi/admin/strapi-admin';
|
|
3
|
-
import {
|
|
3
|
+
import { useAIAvailability, useGetAiFeatureConfigQuery } from '@strapi/admin/strapi-admin/ee';
|
|
4
4
|
import { useIntl } from 'react-intl';
|
|
5
5
|
import { useNavigate } from 'react-router-dom';
|
|
6
6
|
import { useRelationModal } from '../pages/EditView/components/FormInputs/Relations/RelationModal.mjs';
|
|
@@ -39,8 +39,10 @@ const DEFAULT_UNEXPECTED_ERROR_MSG = {
|
|
|
39
39
|
const { trackUsage } = useTracking();
|
|
40
40
|
const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
|
|
41
41
|
const navigate = useNavigate();
|
|
42
|
-
const { data: aiFeatureConfig } = useGetAiFeatureConfigQuery();
|
|
43
42
|
const isAiAvailable = useAIAvailability();
|
|
43
|
+
const { data: aiFeatureConfig } = useGetAiFeatureConfigQuery(undefined, {
|
|
44
|
+
skip: !isAiAvailable
|
|
45
|
+
});
|
|
44
46
|
const isAiI18nConfigured = Boolean(aiFeatureConfig?.isAiI18nConfigured);
|
|
45
47
|
// Get metadata from context providers for tracking purposes
|
|
46
48
|
const previewContext = usePreviewContext('useDocumentActions', ()=>true, false);
|