@strapi/content-manager 5.11.1 → 5.12.0-beta.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/chunks/{ComponentConfigurationPage-BGBNQxFJ.js → ComponentConfigurationPage-CBvwLnAK.js} +5 -6
- package/dist/admin/chunks/{ComponentConfigurationPage-BGBNQxFJ.js.map → ComponentConfigurationPage-CBvwLnAK.js.map} +1 -1
- package/dist/admin/chunks/{ComponentConfigurationPage-DKtL-tec.mjs → ComponentConfigurationPage-w_ss7xEy.mjs} +5 -6
- package/dist/admin/chunks/{ComponentConfigurationPage-DKtL-tec.mjs.map → ComponentConfigurationPage-w_ss7xEy.mjs.map} +1 -1
- package/dist/admin/chunks/{EditConfigurationPage-yliOxLUv.js → EditConfigurationPage-CbAhYSyH.js} +5 -6
- package/dist/admin/chunks/{EditConfigurationPage-yliOxLUv.js.map → EditConfigurationPage-CbAhYSyH.js.map} +1 -1
- package/dist/admin/chunks/{EditConfigurationPage-KDwSFRyn.mjs → EditConfigurationPage-D1iHIzSR.mjs} +5 -6
- package/dist/admin/chunks/{EditConfigurationPage-KDwSFRyn.mjs.map → EditConfigurationPage-D1iHIzSR.mjs.map} +1 -1
- package/dist/admin/chunks/{EditViewPage-BAI2r49P.mjs → EditViewPage-BtunY0ZP.mjs} +102 -95
- package/dist/admin/chunks/EditViewPage-BtunY0ZP.mjs.map +1 -0
- package/dist/admin/chunks/{EditViewPage-DpvonssD.js → EditViewPage-Cf_TPJZd.js} +102 -95
- package/dist/admin/chunks/EditViewPage-Cf_TPJZd.js.map +1 -0
- package/dist/admin/chunks/{Form-BrzQyDxU.mjs → Form-DsvK3WTh.mjs} +3 -3
- package/dist/admin/chunks/{Form-BrzQyDxU.mjs.map → Form-DsvK3WTh.mjs.map} +1 -1
- package/dist/admin/chunks/{Form-XD_sf25E.js → Form-UMrizqJP.js} +5 -5
- package/dist/admin/chunks/{Form-XD_sf25E.js.map → Form-UMrizqJP.js.map} +1 -1
- package/dist/admin/chunks/{History-C-_o7tz8.js → History-Crvb_hzd.js} +17 -13
- package/dist/admin/chunks/History-Crvb_hzd.js.map +1 -0
- package/dist/admin/chunks/{History-DClLuGIg.mjs → History-DsRVSUF7.mjs} +16 -12
- package/dist/admin/chunks/History-DsRVSUF7.mjs.map +1 -0
- package/dist/admin/chunks/{Input-Bv-rqfYH.js → Input-C2r54bIL.js} +1327 -64
- package/dist/admin/chunks/Input-C2r54bIL.js.map +1 -0
- package/dist/admin/chunks/{Input-BMLRZBE3.mjs → Input-D6obstp0.mjs} +1315 -55
- package/dist/admin/chunks/Input-D6obstp0.mjs.map +1 -0
- package/dist/admin/chunks/{ListConfigurationPage-Do3UDres.mjs → ListConfigurationPage-DW-wAwmW.mjs} +4 -5
- package/dist/admin/chunks/{ListConfigurationPage-Do3UDres.mjs.map → ListConfigurationPage-DW-wAwmW.mjs.map} +1 -1
- package/dist/admin/chunks/{ListConfigurationPage-D66hgG4-.js → ListConfigurationPage-DlQ2pLyr.js} +6 -7
- package/dist/admin/chunks/{ListConfigurationPage-D66hgG4-.js.map → ListConfigurationPage-DlQ2pLyr.js.map} +1 -1
- package/dist/admin/chunks/{ListViewPage-Q0auz5lE.mjs → ListViewPage-DcUhPA9a.mjs} +3 -4
- package/dist/admin/chunks/{ListViewPage-Q0auz5lE.mjs.map → ListViewPage-DcUhPA9a.mjs.map} +1 -1
- package/dist/admin/chunks/{ListViewPage-DNvysJaJ.js → ListViewPage-nJJ227Fo.js} +7 -8
- package/dist/admin/chunks/{ListViewPage-DNvysJaJ.js.map → ListViewPage-nJJ227Fo.js.map} +1 -1
- package/dist/admin/chunks/{NoContentTypePage-C5qFFfgn.js → NoContentTypePage-Cxt-uFq7.js} +2 -2
- package/dist/admin/chunks/{NoContentTypePage-C5qFFfgn.js.map → NoContentTypePage-Cxt-uFq7.js.map} +1 -1
- package/dist/admin/chunks/{NoContentTypePage-B_oOeOQb.mjs → NoContentTypePage-DbRXR2cr.mjs} +2 -2
- package/dist/admin/chunks/{NoContentTypePage-B_oOeOQb.mjs.map → NoContentTypePage-DbRXR2cr.mjs.map} +1 -1
- package/dist/admin/chunks/{NoPermissionsPage-C9sDJXRu.js → NoPermissionsPage-BeMTv_SG.js} +2 -2
- package/dist/admin/chunks/{NoPermissionsPage-C9sDJXRu.js.map → NoPermissionsPage-BeMTv_SG.js.map} +1 -1
- package/dist/admin/chunks/{NoPermissionsPage-BAW7WY-M.mjs → NoPermissionsPage-RWPwNESA.mjs} +2 -2
- package/dist/admin/chunks/{NoPermissionsPage-BAW7WY-M.mjs.map → NoPermissionsPage-RWPwNESA.mjs.map} +1 -1
- package/dist/admin/chunks/{Preview-B6ThL2SA.js → Preview-CCjSV5Iu.js} +118 -200
- package/dist/admin/chunks/Preview-CCjSV5Iu.js.map +1 -0
- package/dist/admin/chunks/{Preview-05BZGpV2.mjs → Preview-aVLT3LM_.mjs} +121 -203
- package/dist/admin/chunks/Preview-aVLT3LM_.mjs.map +1 -0
- package/dist/admin/chunks/{en-CImiNxXE.mjs → en-C2zEwS3-.mjs} +4 -1
- package/dist/admin/chunks/{en-CImiNxXE.mjs.map → en-C2zEwS3-.mjs.map} +1 -1
- package/dist/admin/chunks/{en-CLf4SuMQ.js → en-G976DLsg.js} +4 -1
- package/dist/admin/chunks/{en-CLf4SuMQ.js.map → en-G976DLsg.js.map} +1 -1
- package/dist/admin/chunks/{index-SQ88CePz.js → index-BA_JLxKS.js} +171 -117
- package/dist/admin/chunks/index-BA_JLxKS.js.map +1 -0
- package/dist/admin/chunks/{index-CcJLBLNf.mjs → index-CIOT3ggy.mjs} +170 -119
- package/dist/admin/chunks/index-CIOT3ggy.mjs.map +1 -0
- package/dist/admin/chunks/{layout-xxDnIsHG.js → layout-C510xcd6.js} +86 -13
- package/dist/admin/chunks/layout-C510xcd6.js.map +1 -0
- package/dist/admin/chunks/{layout-4nCaNnTs.mjs → layout-DjT9cccU.mjs} +78 -5
- package/dist/admin/chunks/layout-DjT9cccU.mjs.map +1 -0
- package/dist/admin/chunks/{useDragAndDrop-gcqEJMnO.js → objects-BJTP843m.js} +73 -1
- package/dist/admin/chunks/objects-BJTP843m.js.map +1 -0
- package/dist/admin/chunks/{useDragAndDrop-HYwNDExe.mjs → objects-D2z-IJgu.mjs} +72 -2
- package/dist/admin/chunks/objects-D2z-IJgu.mjs.map +1 -0
- package/dist/admin/chunks/{relations-VlsO9KQZ.js → usePrev-BglKW7a4.js} +18 -2
- package/dist/admin/chunks/usePrev-BglKW7a4.js.map +1 -0
- package/dist/admin/chunks/{relations-D1R7vM_e.mjs → usePrev-DAWUYIPh.mjs} +18 -4
- package/dist/admin/chunks/usePrev-DAWUYIPh.mjs.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/features/DocumentContext.d.ts +53 -0
- package/dist/admin/src/features/DocumentRBAC.d.ts +3 -2
- package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +8 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/{Relations.d.ts → Relations/Relations.d.ts} +9 -4
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +8 -3
- package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +7 -4
- package/dist/admin/src/preview/components/PreviewHeader.d.ts +1 -2
- package/dist/admin/src/preview/pages/Preview.d.ts +0 -2
- package/package.json +5 -5
- package/dist/admin/chunks/EditViewPage-BAI2r49P.mjs.map +0 -1
- package/dist/admin/chunks/EditViewPage-DpvonssD.js.map +0 -1
- package/dist/admin/chunks/History-C-_o7tz8.js.map +0 -1
- package/dist/admin/chunks/History-DClLuGIg.mjs.map +0 -1
- package/dist/admin/chunks/Input-BMLRZBE3.mjs.map +0 -1
- package/dist/admin/chunks/Input-Bv-rqfYH.js.map +0 -1
- package/dist/admin/chunks/Preview-05BZGpV2.mjs.map +0 -1
- package/dist/admin/chunks/Preview-B6ThL2SA.js.map +0 -1
- package/dist/admin/chunks/Relations-CJ0GWuqq.js +0 -1318
- package/dist/admin/chunks/Relations-CJ0GWuqq.js.map +0 -1
- package/dist/admin/chunks/Relations-CiOfFNxW.mjs +0 -1291
- package/dist/admin/chunks/Relations-CiOfFNxW.mjs.map +0 -1
- package/dist/admin/chunks/index-CcJLBLNf.mjs.map +0 -1
- package/dist/admin/chunks/index-SQ88CePz.js.map +0 -1
- package/dist/admin/chunks/layout-4nCaNnTs.mjs.map +0 -1
- package/dist/admin/chunks/layout-xxDnIsHG.js.map +0 -1
- package/dist/admin/chunks/objects-C3EebVVe.js +0 -76
- package/dist/admin/chunks/objects-C3EebVVe.js.map +0 -1
- package/dist/admin/chunks/objects-wl73iEma.mjs +0 -73
- package/dist/admin/chunks/objects-wl73iEma.mjs.map +0 -1
- package/dist/admin/chunks/relations-D1R7vM_e.mjs.map +0 -1
- package/dist/admin/chunks/relations-VlsO9KQZ.js.map +0 -1
- package/dist/admin/chunks/useDragAndDrop-HYwNDExe.mjs.map +0 -1
- package/dist/admin/chunks/useDragAndDrop-gcqEJMnO.js.map +0 -1
- package/dist/admin/chunks/usePrev-Bjw2dhmq.mjs +0 -18
- package/dist/admin/chunks/usePrev-Bjw2dhmq.mjs.map +0 -1
- package/dist/admin/chunks/usePrev-DIYl-IAL.js +0 -21
- package/dist/admin/chunks/usePrev-DIYl-IAL.js.map +0 -1
- package/dist/admin/src/preview/components/PreviewContent.d.ts +0 -2
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"layout-4nCaNnTs.mjs","sources":["../../../admin/src/components/DragLayer.tsx","../../../admin/src/components/DragPreviews/ComponentDragPreview.tsx","../../../admin/src/components/DragPreviews/RelationDragPreview.tsx","../../../admin/src/components/LeftMenu.tsx","../../../admin/src/hooks/useContentManagerInitData.ts","../../../admin/src/layout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { DragLayerMonitor, XYCoord, useDragLayer } from 'react-dnd';\n\nfunction getStyle(\n initialOffset: XYCoord | null,\n currentOffset: XYCoord | null,\n mouseOffset: XYCoord | null\n) {\n if (!initialOffset || !currentOffset || !mouseOffset) {\n return { display: 'none' };\n }\n\n const { x, y } = mouseOffset;\n\n return {\n transform: `translate(${x}px, ${y}px)`,\n };\n}\n\nexport interface DragLayerProps {\n renderItem: (item: {\n /**\n * TODO: it'd be great if we could make this a union where the type infers the item.\n */\n item: any;\n type: ReturnType<DragLayerMonitor['getItemType']>;\n }) => React.ReactNode;\n}\n\nconst DragLayer = ({ renderItem }: DragLayerProps) => {\n const { itemType, isDragging, item, initialOffset, currentOffset, mouseOffset } = useDragLayer(\n (monitor) => ({\n item: monitor.getItem(),\n itemType: monitor.getItemType(),\n initialOffset: monitor.getInitialSourceClientOffset(),\n currentOffset: monitor.getSourceClientOffset(),\n isDragging: monitor.isDragging(),\n mouseOffset: monitor.getClientOffset(),\n })\n );\n\n if (!isDragging) {\n return null;\n }\n\n return (\n <Box\n height=\"100%\"\n left={0}\n position=\"fixed\"\n pointerEvents=\"none\"\n top={0}\n zIndex={100}\n width=\"100%\"\n >\n <Box style={getStyle(initialOffset, currentOffset, mouseOffset)}>\n {renderItem({ type: itemType, item })}\n </Box>\n </Box>\n );\n};\n\nexport { DragLayer };\n","import { Flex, FlexComponent, IconButton, Typography } from '@strapi/design-system';\nimport { CaretDown, Drag, Trash } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\ninterface ComponentDragPreviewProps {\n displayedValue: string;\n}\n\nconst ComponentDragPreview = ({ displayedValue }: ComponentDragPreviewProps) => {\n return (\n <Flex\n background=\"neutral0\"\n borderColor=\"neutral200\"\n justifyContent=\"space-between\"\n gap={3}\n padding={3}\n width=\"30rem\"\n >\n <ToggleButton type=\"button\">\n <Flex gap={6}>\n <DropdownIconWrapper\n alignItems=\"center\"\n justifyContent=\"center\"\n background=\"neutral200\"\n height=\"3.2rem\"\n width=\"3.2rem\"\n >\n <CaretDown />\n </DropdownIconWrapper>\n\n <Flex maxWidth=\"15rem\">\n <Typography textColor=\"neutral700\" ellipsis>\n {displayedValue}\n </Typography>\n </Flex>\n </Flex>\n </ToggleButton>\n\n <Flex gap={2}>\n <IconButton withTooltip={false} label=\"\" variant=\"ghost\">\n <Trash />\n </IconButton>\n\n <IconButton withTooltip={false} label=\"\" variant=\"ghost\">\n <Drag />\n </IconButton>\n </Flex>\n </Flex>\n );\n};\n\nconst DropdownIconWrapper = styled<FlexComponent>(Flex)`\n border-radius: 50%;\n\n svg {\n height: 0.6rem;\n width: 1.1rem;\n > path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n`;\n\n// TODO: we shouldn't have to reset a whole button\nconst ToggleButton = styled.button`\n border: none;\n background: transparent;\n display: block;\n width: 100%;\n text-align: unset;\n padding: 0;\n`;\n\nexport { ComponentDragPreview };\nexport type { ComponentDragPreviewProps };\n","import { Box, Flex, IconButton, Typography } from '@strapi/design-system';\nimport { Cross, Drag } from '@strapi/icons';\n\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport {\n DisconnectButton,\n LinkEllipsis,\n FlexWrapper,\n} from '../../pages/EditView/components/FormInputs/Relations';\n\nimport type { Data } from '@strapi/types';\n\ninterface RelationDragPreviewProps {\n status?: string;\n displayedValue: string;\n id: Data.ID;\n index: number;\n width: number;\n}\n\nconst RelationDragPreview = ({ status, displayedValue, width }: RelationDragPreviewProps) => {\n return (\n <Box style={{ width }}>\n <Flex\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={2}\n paddingRight={4}\n hasRadius\n borderWidth={1}\n background=\"neutral0\"\n borderColor=\"neutral200\"\n justifyContent=\"space-between\"\n gap={4}\n >\n <FlexWrapper gap={1}>\n <IconButton withTooltip={false} label=\"\" variant=\"ghost\">\n <Drag />\n </IconButton>\n <Flex width=\"100%\" minWidth={0} justifyContent=\"space-between\">\n <Box minWidth={0} paddingTop={1} paddingBottom={1} paddingRight={4}>\n <LinkEllipsis href=\"\">\n <Typography textColor=\"primary600\" ellipsis>\n {displayedValue}\n </Typography>\n </LinkEllipsis>\n </Box>\n {status ? <DocumentStatus status={status} /> : null}\n </Flex>\n </FlexWrapper>\n <DisconnectButton type=\"button\">\n <Cross width=\"12px\" />\n </DisconnectButton>\n </Flex>\n </Box>\n );\n};\n\nexport { RelationDragPreview };\nexport type { RelationDragPreviewProps };\n","import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/admin/strapi-admin';\nimport {\n useCollator,\n useFilter,\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useContentTypeSchema } from '../hooks/useContentTypeSchema';\nimport { useTypedSelector } from '../modules/hooks';\nimport { getTranslation } from '../utils/translations';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\nconst SubNavLinkCustom = styled(SubNavLink)`\n div {\n width: inherit;\n span:nth-child(2) {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: inherit;\n }\n }\n`;\n\nconst LeftMenu = () => {\n const [search, setSearch] = React.useState('');\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n const { formatMessage, locale } = useIntl();\n\n const collectionTypeLinks = useTypedSelector(\n (state) => state['content-manager'].app.collectionTypeLinks\n );\n\n const singleTypeLinks = useTypedSelector((state) => state['content-manager'].app.singleTypeLinks);\n const { schemas } = useContentTypeSchema();\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const menu = React.useMemo(\n () =>\n [\n {\n id: 'collectionTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.collection-types'),\n defaultMessage: 'Collection Types',\n }),\n searchable: true,\n links: collectionTypeLinks,\n },\n {\n id: 'singleTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.single-types'),\n defaultMessage: 'Single Types',\n }),\n searchable: true,\n links: singleTypeLinks,\n },\n ].map((section) => ({\n ...section,\n links: section.links\n /**\n * Filter by the search value\n */\n .filter((link) => startsWith(link.title, search))\n /**\n * Sort correctly using the language\n */\n .sort((a, b) => formatter.compare(a.title, b.title))\n /**\n * Apply the formated strings to the links from react-intl\n */\n .map((link) => {\n return {\n ...link,\n title: formatMessage({ id: link.title, defaultMessage: link.title }),\n };\n }),\n })),\n [collectionTypeLinks, search, singleTypeLinks, startsWith, formatMessage, formatter]\n );\n\n const handleClear = () => {\n setSearch('');\n };\n\n const handleChangeSearch = ({ target: { value } }: { target: { value: string } }) => {\n setSearch(value);\n };\n\n const label = formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content Manager',\n });\n\n const getPluginsParamsForLink = (link: ContentManagerLink) => {\n const schema = schemas.find((schema) => schema.uid === link.uid);\n const isI18nEnabled = Boolean((schema?.pluginOptions?.i18n as any)?.localized);\n\n // The search params have the i18n plugin\n if (query.plugins && 'i18n' in query.plugins) {\n // Prepare removal of i18n from the plugins search params\n const { i18n, ...restPlugins } = query.plugins;\n\n // i18n is not enabled, remove it from the plugins search params\n if (!isI18nEnabled) {\n return restPlugins;\n }\n\n // i18n is enabled, put the plugins search params back together\n return { i18n, ...restPlugins };\n }\n\n return query.plugins;\n };\n\n return (\n <SubNav aria-label={label}>\n <SubNavHeader\n label={label}\n searchable\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n searchLabel={formatMessage({\n id: 'content-manager.components.LeftMenu.Search.label',\n defaultMessage: 'Search for a content type',\n })}\n />\n <SubNavSections>\n {menu.map((section) => {\n return (\n <SubNavSection\n key={section.id}\n label={section.title}\n badgeLabel={section.links.length.toString()}\n >\n {section.links.map((link) => {\n return (\n <SubNavLinkCustom\n tag={NavLink}\n key={link.uid}\n to={{\n pathname: link.to,\n search: stringify({\n ...parse(link.search ?? ''),\n plugins: getPluginsParamsForLink(link),\n }),\n }}\n width=\"100%\"\n >\n {link.title}\n </SubNavLinkCustom>\n );\n })}\n </SubNavSection>\n );\n })}\n </SubNavSections>\n </SubNav>\n );\n};\n\nexport { LeftMenu };\n","import { 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 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 = 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 // Collection Types verifications\n const collectionTypeLinksPermissions = await Promise.all(\n collectionTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n\n const authorizedCollectionTypeLinks = collectionTypeSectionLinks.filter(\n (_, index) => collectionTypeLinksPermissions[index].length > 0\n );\n\n // Single Types verifications\n const singleTypeLinksPermissions = await Promise.all(\n singleTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n const authorizedSingleTypeLinks = singleTypeSectionLinks.filter(\n (_, index) => singleTypeLinksPermissions[index].length > 0\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\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 );\n }\n }, [initialDataQuery.data, contentTypeSettingsQuery.data]);\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","/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { Page, useGuidedTour, Layouts } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { Navigate, Outlet, useLocation, useMatch } from 'react-router-dom';\n\nimport { DragLayer, DragLayerProps } from './components/DragLayer';\nimport { CardDragPreview } from './components/DragPreviews/CardDragPreview';\nimport { ComponentDragPreview } from './components/DragPreviews/ComponentDragPreview';\nimport { RelationDragPreview } from './components/DragPreviews/RelationDragPreview';\nimport { LeftMenu } from './components/LeftMenu';\nimport { ItemTypes } from './constants/dragAndDrop';\nimport { useContentManagerInitData } from './hooks/useContentManagerInitData';\nimport { getTranslation } from './utils/translations';\n\n/* -------------------------------------------------------------------------------------------------\n * Layout\n * -----------------------------------------------------------------------------------------------*/\n\nconst Layout = () => {\n const contentTypeMatch = useMatch('/content-manager/:kind/:uid/*');\n\n const { isLoading, collectionTypeLinks, models, singleTypeLinks } = useContentManagerInitData();\n const authorisedModels = [...collectionTypeLinks, ...singleTypeLinks].sort((a, b) =>\n a.title.localeCompare(b.title)\n );\n\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n const startSection = useGuidedTour('Layout', (state) => state.startSection);\n const startSectionRef = React.useRef(startSection);\n\n React.useEffect(() => {\n if (startSectionRef.current) {\n startSectionRef.current('contentManager');\n }\n }, []);\n\n if (isLoading) {\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Page.Loading />\n </>\n );\n }\n\n // Array of models that are displayed in the content manager\n const supportedModelsToDisplay = models.filter(({ isDisplayed }) => isDisplayed);\n\n // Redirect the user to the 403 page\n if (\n authorisedModels.length === 0 &&\n supportedModelsToDisplay.length > 0 &&\n pathname !== '/content-manager/403'\n ) {\n return <Navigate to=\"/403\" />;\n }\n\n // Redirect the user to the create content type page\n if (supportedModelsToDisplay.length === 0 && pathname !== '/no-content-types') {\n return <Navigate to=\"/no-content-types\" />;\n }\n\n if (!contentTypeMatch && authorisedModels.length > 0) {\n return (\n <Navigate\n to={{\n pathname: authorisedModels[0].to,\n search: authorisedModels[0].search ?? '',\n }}\n replace\n />\n );\n }\n\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Layouts.Root sideNav={<LeftMenu />}>\n <DragLayer renderItem={renderDraglayerItem} />\n <Outlet />\n </Layouts.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * renderDraglayerItem\n * -----------------------------------------------------------------------------------------------*/\n\nfunction renderDraglayerItem({ type, item }: Parameters<DragLayerProps['renderItem']>[0]) {\n if (!type || (type && typeof type !== 'string')) {\n return null;\n }\n\n /**\n * Because a user may have multiple relations / dynamic zones / repeable fields in the same content type,\n * we append the fieldName for the item type to make them unique, however, we then want to extract that\n * first type to apply the correct preview.\n */\n const [actualType] = type.split('_');\n\n switch (actualType) {\n case ItemTypes.EDIT_FIELD:\n case ItemTypes.FIELD:\n return <CardDragPreview label={item.label} />;\n case ItemTypes.COMPONENT:\n case ItemTypes.DYNAMIC_ZONE:\n return <ComponentDragPreview displayedValue={item.displayedValue} />;\n\n case ItemTypes.RELATION:\n return <RelationDragPreview {...item} />;\n\n default:\n return null;\n }\n}\n\nexport { Layout };\n"],"names":["getStyle","initialOffset","currentOffset","mouseOffset","display","x","y","transform","DragLayer","renderItem","itemType","isDragging","item","useDragLayer","monitor","getItem","getItemType","getInitialSourceClientOffset","getSourceClientOffset","getClientOffset","_jsx","Box","height","left","position","pointerEvents","top","zIndex","width","style","type","ComponentDragPreview","displayedValue","_jsxs","Flex","background","borderColor","justifyContent","gap","padding","ToggleButton","DropdownIconWrapper","alignItems","CaretDown","maxWidth","Typography","textColor","ellipsis","IconButton","withTooltip","label","variant","Trash","Drag","styled","theme","colors","neutral600","button","RelationDragPreview","status","paddingTop","paddingBottom","paddingLeft","paddingRight","hasRadius","borderWidth","FlexWrapper","minWidth","LinkEllipsis","href","DocumentStatus","DisconnectButton","Cross","SubNavLinkCustom","SubNavLink","LeftMenu","search","setSearch","React","useState","query","useQueryParams","formatMessage","locale","useIntl","collectionTypeLinks","useTypedSelector","state","app","singleTypeLinks","schemas","useContentTypeSchema","startsWith","useFilter","sensitivity","formatter","useCollator","menu","useMemo","id","title","getTranslation","defaultMessage","searchable","links","map","section","filter","link","sort","a","b","compare","handleClear","handleChangeSearch","target","value","getPluginsParamsForLink","schema","find","uid","isI18nEnabled","Boolean","pluginOptions","i18n","localized","plugins","restPlugins","SubNav","aria-label","SubNavHeader","onChange","onClear","searchLabel","SubNavSections","SubNavSection","badgeLabel","length","toString","tag","NavLink","to","pathname","stringify","parse","MUTATE_COLLECTION_TYPES_LINKS","MUTATE_SINGLE_TYPES_LINKS","HOOKS","useContentManagerInitData","toggleNotification","useNotification","dispatch","useTypedDispatch","runHookWaterfall","useStrapiApp","notifyStatus","useNotifyAT","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","checkUserHasPermissions","useAuth","initialDataQuery","useGetInitialDataQuery","undefined","refetchOnMountOrArgChange","useEffect","data","error","message","contentTypeSettingsQuery","useGetAllContentTypeSettingsQuery","formatData","components","contentTypes","fieldSizes","contentTypeConfigurations","collectionType","singleType","reduce","acc","model","kind","push","collectionTypeSectionLinks","generateLinks","singleTypeSectionLinks","collectionTypeLinksPermissions","Promise","all","permissions","authorizedCollectionTypeLinks","_","index","singleTypeLinksPermissions","authorizedSingleTypeLinks","ctLinks","models","stLinks","setInitialData","contentTypeSchemas","configurations","isDisplayed","collectionTypesPermissions","action","subject","singleTypesPermissions","currentContentTypeConfig","searchParams","page","pageSize","settings","defaultSortBy","defaultSortOrder","encode","info","displayName","COLLECTION_TYPES","SINGLE_TYPES","name","Layout","contentTypeMatch","useMatch","isLoading","authorisedModels","localeCompare","useLocation","startSection","useGuidedTour","startSectionRef","useRef","current","_Fragment","Page","Title","Loading","supportedModelsToDisplay","Navigate","replace","Layouts","Root","sideNav","renderDraglayerItem","Outlet","actualType","split","ItemTypes","EDIT_FIELD","FIELD","CardDragPreview","COMPONENT","DYNAMIC_ZONE","RELATION"],"mappings":"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"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"layout-xxDnIsHG.js","sources":["../../../admin/src/components/DragLayer.tsx","../../../admin/src/components/DragPreviews/ComponentDragPreview.tsx","../../../admin/src/components/DragPreviews/RelationDragPreview.tsx","../../../admin/src/components/LeftMenu.tsx","../../../admin/src/hooks/useContentManagerInitData.ts","../../../admin/src/layout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { DragLayerMonitor, XYCoord, useDragLayer } from 'react-dnd';\n\nfunction getStyle(\n initialOffset: XYCoord | null,\n currentOffset: XYCoord | null,\n mouseOffset: XYCoord | null\n) {\n if (!initialOffset || !currentOffset || !mouseOffset) {\n return { display: 'none' };\n }\n\n const { x, y } = mouseOffset;\n\n return {\n transform: `translate(${x}px, ${y}px)`,\n };\n}\n\nexport interface DragLayerProps {\n renderItem: (item: {\n /**\n * TODO: it'd be great if we could make this a union where the type infers the item.\n */\n item: any;\n type: ReturnType<DragLayerMonitor['getItemType']>;\n }) => React.ReactNode;\n}\n\nconst DragLayer = ({ renderItem }: DragLayerProps) => {\n const { itemType, isDragging, item, initialOffset, currentOffset, mouseOffset } = useDragLayer(\n (monitor) => ({\n item: monitor.getItem(),\n itemType: monitor.getItemType(),\n initialOffset: monitor.getInitialSourceClientOffset(),\n currentOffset: monitor.getSourceClientOffset(),\n isDragging: monitor.isDragging(),\n mouseOffset: monitor.getClientOffset(),\n })\n );\n\n if (!isDragging) {\n return null;\n }\n\n return (\n <Box\n height=\"100%\"\n left={0}\n position=\"fixed\"\n pointerEvents=\"none\"\n top={0}\n zIndex={100}\n width=\"100%\"\n >\n <Box style={getStyle(initialOffset, currentOffset, mouseOffset)}>\n {renderItem({ type: itemType, item })}\n </Box>\n </Box>\n );\n};\n\nexport { DragLayer };\n","import { Flex, FlexComponent, IconButton, Typography } from '@strapi/design-system';\nimport { CaretDown, Drag, Trash } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\ninterface ComponentDragPreviewProps {\n displayedValue: string;\n}\n\nconst ComponentDragPreview = ({ displayedValue }: ComponentDragPreviewProps) => {\n return (\n <Flex\n background=\"neutral0\"\n borderColor=\"neutral200\"\n justifyContent=\"space-between\"\n gap={3}\n padding={3}\n width=\"30rem\"\n >\n <ToggleButton type=\"button\">\n <Flex gap={6}>\n <DropdownIconWrapper\n alignItems=\"center\"\n justifyContent=\"center\"\n background=\"neutral200\"\n height=\"3.2rem\"\n width=\"3.2rem\"\n >\n <CaretDown />\n </DropdownIconWrapper>\n\n <Flex maxWidth=\"15rem\">\n <Typography textColor=\"neutral700\" ellipsis>\n {displayedValue}\n </Typography>\n </Flex>\n </Flex>\n </ToggleButton>\n\n <Flex gap={2}>\n <IconButton withTooltip={false} label=\"\" variant=\"ghost\">\n <Trash />\n </IconButton>\n\n <IconButton withTooltip={false} label=\"\" variant=\"ghost\">\n <Drag />\n </IconButton>\n </Flex>\n </Flex>\n );\n};\n\nconst DropdownIconWrapper = styled<FlexComponent>(Flex)`\n border-radius: 50%;\n\n svg {\n height: 0.6rem;\n width: 1.1rem;\n > path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n`;\n\n// TODO: we shouldn't have to reset a whole button\nconst ToggleButton = styled.button`\n border: none;\n background: transparent;\n display: block;\n width: 100%;\n text-align: unset;\n padding: 0;\n`;\n\nexport { ComponentDragPreview };\nexport type { ComponentDragPreviewProps };\n","import { Box, Flex, IconButton, Typography } from '@strapi/design-system';\nimport { Cross, Drag } from '@strapi/icons';\n\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport {\n DisconnectButton,\n LinkEllipsis,\n FlexWrapper,\n} from '../../pages/EditView/components/FormInputs/Relations';\n\nimport type { Data } from '@strapi/types';\n\ninterface RelationDragPreviewProps {\n status?: string;\n displayedValue: string;\n id: Data.ID;\n index: number;\n width: number;\n}\n\nconst RelationDragPreview = ({ status, displayedValue, width }: RelationDragPreviewProps) => {\n return (\n <Box style={{ width }}>\n <Flex\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={2}\n paddingRight={4}\n hasRadius\n borderWidth={1}\n background=\"neutral0\"\n borderColor=\"neutral200\"\n justifyContent=\"space-between\"\n gap={4}\n >\n <FlexWrapper gap={1}>\n <IconButton withTooltip={false} label=\"\" variant=\"ghost\">\n <Drag />\n </IconButton>\n <Flex width=\"100%\" minWidth={0} justifyContent=\"space-between\">\n <Box minWidth={0} paddingTop={1} paddingBottom={1} paddingRight={4}>\n <LinkEllipsis href=\"\">\n <Typography textColor=\"primary600\" ellipsis>\n {displayedValue}\n </Typography>\n </LinkEllipsis>\n </Box>\n {status ? <DocumentStatus status={status} /> : null}\n </Flex>\n </FlexWrapper>\n <DisconnectButton type=\"button\">\n <Cross width=\"12px\" />\n </DisconnectButton>\n </Flex>\n </Box>\n );\n};\n\nexport { RelationDragPreview };\nexport type { RelationDragPreviewProps };\n","import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/admin/strapi-admin';\nimport {\n useCollator,\n useFilter,\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useContentTypeSchema } from '../hooks/useContentTypeSchema';\nimport { useTypedSelector } from '../modules/hooks';\nimport { getTranslation } from '../utils/translations';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\nconst SubNavLinkCustom = styled(SubNavLink)`\n div {\n width: inherit;\n span:nth-child(2) {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: inherit;\n }\n }\n`;\n\nconst LeftMenu = () => {\n const [search, setSearch] = React.useState('');\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n const { formatMessage, locale } = useIntl();\n\n const collectionTypeLinks = useTypedSelector(\n (state) => state['content-manager'].app.collectionTypeLinks\n );\n\n const singleTypeLinks = useTypedSelector((state) => state['content-manager'].app.singleTypeLinks);\n const { schemas } = useContentTypeSchema();\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const menu = React.useMemo(\n () =>\n [\n {\n id: 'collectionTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.collection-types'),\n defaultMessage: 'Collection Types',\n }),\n searchable: true,\n links: collectionTypeLinks,\n },\n {\n id: 'singleTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.single-types'),\n defaultMessage: 'Single Types',\n }),\n searchable: true,\n links: singleTypeLinks,\n },\n ].map((section) => ({\n ...section,\n links: section.links\n /**\n * Filter by the search value\n */\n .filter((link) => startsWith(link.title, search))\n /**\n * Sort correctly using the language\n */\n .sort((a, b) => formatter.compare(a.title, b.title))\n /**\n * Apply the formated strings to the links from react-intl\n */\n .map((link) => {\n return {\n ...link,\n title: formatMessage({ id: link.title, defaultMessage: link.title }),\n };\n }),\n })),\n [collectionTypeLinks, search, singleTypeLinks, startsWith, formatMessage, formatter]\n );\n\n const handleClear = () => {\n setSearch('');\n };\n\n const handleChangeSearch = ({ target: { value } }: { target: { value: string } }) => {\n setSearch(value);\n };\n\n const label = formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content Manager',\n });\n\n const getPluginsParamsForLink = (link: ContentManagerLink) => {\n const schema = schemas.find((schema) => schema.uid === link.uid);\n const isI18nEnabled = Boolean((schema?.pluginOptions?.i18n as any)?.localized);\n\n // The search params have the i18n plugin\n if (query.plugins && 'i18n' in query.plugins) {\n // Prepare removal of i18n from the plugins search params\n const { i18n, ...restPlugins } = query.plugins;\n\n // i18n is not enabled, remove it from the plugins search params\n if (!isI18nEnabled) {\n return restPlugins;\n }\n\n // i18n is enabled, put the plugins search params back together\n return { i18n, ...restPlugins };\n }\n\n return query.plugins;\n };\n\n return (\n <SubNav aria-label={label}>\n <SubNavHeader\n label={label}\n searchable\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n searchLabel={formatMessage({\n id: 'content-manager.components.LeftMenu.Search.label',\n defaultMessage: 'Search for a content type',\n })}\n />\n <SubNavSections>\n {menu.map((section) => {\n return (\n <SubNavSection\n key={section.id}\n label={section.title}\n badgeLabel={section.links.length.toString()}\n >\n {section.links.map((link) => {\n return (\n <SubNavLinkCustom\n tag={NavLink}\n key={link.uid}\n to={{\n pathname: link.to,\n search: stringify({\n ...parse(link.search ?? ''),\n plugins: getPluginsParamsForLink(link),\n }),\n }}\n width=\"100%\"\n >\n {link.title}\n </SubNavLinkCustom>\n );\n })}\n </SubNavSection>\n );\n })}\n </SubNavSections>\n </SubNav>\n );\n};\n\nexport { LeftMenu };\n","import { 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 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 = 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 // Collection Types verifications\n const collectionTypeLinksPermissions = await Promise.all(\n collectionTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n\n const authorizedCollectionTypeLinks = collectionTypeSectionLinks.filter(\n (_, index) => collectionTypeLinksPermissions[index].length > 0\n );\n\n // Single Types verifications\n const singleTypeLinksPermissions = await Promise.all(\n singleTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n const authorizedSingleTypeLinks = singleTypeSectionLinks.filter(\n (_, index) => singleTypeLinksPermissions[index].length > 0\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\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 );\n }\n }, [initialDataQuery.data, contentTypeSettingsQuery.data]);\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","/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { Page, useGuidedTour, Layouts } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { Navigate, Outlet, useLocation, useMatch } from 'react-router-dom';\n\nimport { DragLayer, DragLayerProps } from './components/DragLayer';\nimport { CardDragPreview } from './components/DragPreviews/CardDragPreview';\nimport { ComponentDragPreview } from './components/DragPreviews/ComponentDragPreview';\nimport { RelationDragPreview } from './components/DragPreviews/RelationDragPreview';\nimport { LeftMenu } from './components/LeftMenu';\nimport { ItemTypes } from './constants/dragAndDrop';\nimport { useContentManagerInitData } from './hooks/useContentManagerInitData';\nimport { getTranslation } from './utils/translations';\n\n/* -------------------------------------------------------------------------------------------------\n * Layout\n * -----------------------------------------------------------------------------------------------*/\n\nconst Layout = () => {\n const contentTypeMatch = useMatch('/content-manager/:kind/:uid/*');\n\n const { isLoading, collectionTypeLinks, models, singleTypeLinks } = useContentManagerInitData();\n const authorisedModels = [...collectionTypeLinks, ...singleTypeLinks].sort((a, b) =>\n a.title.localeCompare(b.title)\n );\n\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n const startSection = useGuidedTour('Layout', (state) => state.startSection);\n const startSectionRef = React.useRef(startSection);\n\n React.useEffect(() => {\n if (startSectionRef.current) {\n startSectionRef.current('contentManager');\n }\n }, []);\n\n if (isLoading) {\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Page.Loading />\n </>\n );\n }\n\n // Array of models that are displayed in the content manager\n const supportedModelsToDisplay = models.filter(({ isDisplayed }) => isDisplayed);\n\n // Redirect the user to the 403 page\n if (\n authorisedModels.length === 0 &&\n supportedModelsToDisplay.length > 0 &&\n pathname !== '/content-manager/403'\n ) {\n return <Navigate to=\"/403\" />;\n }\n\n // Redirect the user to the create content type page\n if (supportedModelsToDisplay.length === 0 && pathname !== '/no-content-types') {\n return <Navigate to=\"/no-content-types\" />;\n }\n\n if (!contentTypeMatch && authorisedModels.length > 0) {\n return (\n <Navigate\n to={{\n pathname: authorisedModels[0].to,\n search: authorisedModels[0].search ?? '',\n }}\n replace\n />\n );\n }\n\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Layouts.Root sideNav={<LeftMenu />}>\n <DragLayer renderItem={renderDraglayerItem} />\n <Outlet />\n </Layouts.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * renderDraglayerItem\n * -----------------------------------------------------------------------------------------------*/\n\nfunction renderDraglayerItem({ type, item }: Parameters<DragLayerProps['renderItem']>[0]) {\n if (!type || (type && typeof type !== 'string')) {\n return null;\n }\n\n /**\n * Because a user may have multiple relations / dynamic zones / repeable fields in the same content type,\n * we append the fieldName for the item type to make them unique, however, we then want to extract that\n * first type to apply the correct preview.\n */\n const [actualType] = type.split('_');\n\n switch (actualType) {\n case ItemTypes.EDIT_FIELD:\n case ItemTypes.FIELD:\n return <CardDragPreview label={item.label} />;\n case ItemTypes.COMPONENT:\n case ItemTypes.DYNAMIC_ZONE:\n return <ComponentDragPreview displayedValue={item.displayedValue} />;\n\n case ItemTypes.RELATION:\n return <RelationDragPreview {...item} />;\n\n default:\n return null;\n }\n}\n\nexport { Layout };\n"],"names":["getStyle","initialOffset","currentOffset","mouseOffset","display","x","y","transform","DragLayer","renderItem","itemType","isDragging","item","useDragLayer","monitor","getItem","getItemType","getInitialSourceClientOffset","getSourceClientOffset","getClientOffset","_jsx","Box","height","left","position","pointerEvents","top","zIndex","width","style","type","ComponentDragPreview","displayedValue","_jsxs","Flex","background","borderColor","justifyContent","gap","padding","ToggleButton","DropdownIconWrapper","alignItems","CaretDown","maxWidth","Typography","textColor","ellipsis","IconButton","withTooltip","label","variant","Trash","Drag","styled","theme","colors","neutral600","button","RelationDragPreview","status","paddingTop","paddingBottom","paddingLeft","paddingRight","hasRadius","borderWidth","FlexWrapper","minWidth","LinkEllipsis","href","DocumentStatus","DisconnectButton","Cross","SubNavLinkCustom","SubNavLink","LeftMenu","search","setSearch","React","useState","query","useQueryParams","formatMessage","locale","useIntl","collectionTypeLinks","useTypedSelector","state","app","singleTypeLinks","schemas","useContentTypeSchema","startsWith","useFilter","sensitivity","formatter","useCollator","menu","useMemo","id","title","getTranslation","defaultMessage","searchable","links","map","section","filter","link","sort","a","b","compare","handleClear","handleChangeSearch","target","value","getPluginsParamsForLink","schema","find","uid","isI18nEnabled","Boolean","pluginOptions","i18n","localized","plugins","restPlugins","SubNav","aria-label","SubNavHeader","onChange","onClear","searchLabel","SubNavSections","SubNavSection","badgeLabel","length","toString","tag","NavLink","to","pathname","stringify","parse","MUTATE_COLLECTION_TYPES_LINKS","MUTATE_SINGLE_TYPES_LINKS","HOOKS","useContentManagerInitData","toggleNotification","useNotification","dispatch","useTypedDispatch","runHookWaterfall","useStrapiApp","notifyStatus","useNotifyAT","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","checkUserHasPermissions","useAuth","initialDataQuery","useGetInitialDataQuery","undefined","refetchOnMountOrArgChange","useEffect","data","error","message","contentTypeSettingsQuery","useGetAllContentTypeSettingsQuery","formatData","components","contentTypes","fieldSizes","contentTypeConfigurations","collectionType","singleType","reduce","acc","model","kind","push","collectionTypeSectionLinks","generateLinks","singleTypeSectionLinks","collectionTypeLinksPermissions","Promise","all","permissions","authorizedCollectionTypeLinks","_","index","singleTypeLinksPermissions","authorizedSingleTypeLinks","ctLinks","models","stLinks","setInitialData","contentTypeSchemas","configurations","isDisplayed","collectionTypesPermissions","action","subject","singleTypesPermissions","currentContentTypeConfig","searchParams","page","pageSize","settings","defaultSortBy","defaultSortOrder","encode","info","displayName","COLLECTION_TYPES","SINGLE_TYPES","name","Layout","contentTypeMatch","useMatch","isLoading","authorisedModels","localeCompare","useLocation","startSection","useGuidedTour","startSectionRef","useRef","current","_Fragment","Page","Title","Loading","supportedModelsToDisplay","Navigate","replace","Layouts","Root","sideNav","renderDraglayerItem","Outlet","actualType","split","ItemTypes","EDIT_FIELD","FIELD","CardDragPreview","COMPONENT","DYNAMIC_ZONE","RELATION"],"mappings":"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"}
|
@@ -1,76 +0,0 @@
|
|
1
|
-
'use strict';
|
2
|
-
|
3
|
-
var clone = require('lodash/clone');
|
4
|
-
var toPath = require('lodash/toPath');
|
5
|
-
|
6
|
-
/**
|
7
|
-
* Deeply get a value from an object via its path.
|
8
|
-
*/ function getIn(obj, key, def, pathStartIndex = 0) {
|
9
|
-
const path = toPath(key);
|
10
|
-
while(obj && pathStartIndex < path.length){
|
11
|
-
obj = obj[path[pathStartIndex++]];
|
12
|
-
}
|
13
|
-
// check if path is not in the end
|
14
|
-
if (pathStartIndex !== path.length && !obj) {
|
15
|
-
return def;
|
16
|
-
}
|
17
|
-
return obj === undefined ? def : obj;
|
18
|
-
}
|
19
|
-
/** @internal is the given object an Object? */ const isObject = (obj)=>obj !== null && typeof obj === 'object' && !Array.isArray(obj);
|
20
|
-
/** @internal is the given object an integer? */ const isInteger = (obj)=>String(Math.floor(Number(obj))) === obj;
|
21
|
-
/**
|
22
|
-
* Deeply set a value from in object via its path. If the value at `path`
|
23
|
-
* has changed, return a shallow copy of obj with `value` set at `path`.
|
24
|
-
* If `value` has not changed, return the original `obj`.
|
25
|
-
*
|
26
|
-
* Existing objects / arrays along `path` are also shallow copied. Sibling
|
27
|
-
* objects along path retain the same internal js reference. Since new
|
28
|
-
* objects / arrays are only created along `path`, we can test if anything
|
29
|
-
* changed in a nested structure by comparing the object's reference in
|
30
|
-
* the old and new object, similar to how russian doll cache invalidation
|
31
|
-
* works.
|
32
|
-
*
|
33
|
-
* In earlier versions of this function, which used cloneDeep, there were
|
34
|
-
* issues whereby settings a nested value would mutate the parent
|
35
|
-
* instead of creating a new object. `clone` avoids that bug making a
|
36
|
-
* shallow copy of the objects along the update path
|
37
|
-
* so no object is mutated in place.
|
38
|
-
*
|
39
|
-
* Before changing this function, please read through the following
|
40
|
-
* discussions.
|
41
|
-
*
|
42
|
-
* @see https://github.com/developit/linkstate
|
43
|
-
* @see https://github.com/jaredpalmer/formik/pull/123
|
44
|
-
*/ function setIn(obj, path, value) {
|
45
|
-
const res = clone(obj); // this keeps inheritance when obj is a class
|
46
|
-
let resVal = res;
|
47
|
-
let i = 0;
|
48
|
-
const pathArray = toPath(path);
|
49
|
-
for(; i < pathArray.length - 1; i++){
|
50
|
-
const currentPath = pathArray[i];
|
51
|
-
const currentObj = getIn(obj, pathArray.slice(0, i + 1));
|
52
|
-
if (currentObj && (isObject(currentObj) || Array.isArray(currentObj))) {
|
53
|
-
resVal = resVal[currentPath] = clone(currentObj);
|
54
|
-
} else {
|
55
|
-
const nextPath = pathArray[i + 1];
|
56
|
-
resVal = resVal[currentPath] = isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};
|
57
|
-
}
|
58
|
-
}
|
59
|
-
// Return original object if new value is the same as current
|
60
|
-
if ((i === 0 ? obj : resVal)[pathArray[i]] === value) {
|
61
|
-
return obj;
|
62
|
-
}
|
63
|
-
{
|
64
|
-
delete resVal[pathArray[i]];
|
65
|
-
}
|
66
|
-
// If the path array has a single element, the loop did not run.
|
67
|
-
// Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.
|
68
|
-
if (i === 0 && value === undefined) {
|
69
|
-
delete res[pathArray[i]];
|
70
|
-
}
|
71
|
-
return res;
|
72
|
-
}
|
73
|
-
|
74
|
-
exports.getIn = getIn;
|
75
|
-
exports.setIn = setIn;
|
76
|
-
//# sourceMappingURL=objects-C3EebVVe.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"objects-C3EebVVe.js","sources":["../../../admin/src/utils/objects.ts"],"sourcesContent":["import clone from 'lodash/clone';\nimport toPath from 'lodash/toPath';\n\n/**\n * Deeply get a value from an object via its path.\n */\nexport function getIn(obj: any, key: string | string[], def?: any, pathStartIndex: number = 0) {\n const path = toPath(key);\n while (obj && pathStartIndex < path.length) {\n obj = obj[path[pathStartIndex++]];\n }\n\n // check if path is not in the end\n if (pathStartIndex !== path.length && !obj) {\n return def;\n }\n\n return obj === undefined ? def : obj;\n}\n\n/** @internal is the given object an Object? */\nexport const isObject = (obj: any): obj is object =>\n obj !== null && typeof obj === 'object' && !Array.isArray(obj);\n\n/** @internal is the given object an integer? */\nexport const isInteger = (obj: any): boolean => String(Math.floor(Number(obj))) === obj;\n\n/**\n * Deeply set a value from in object via its path. If the value at `path`\n * has changed, return a shallow copy of obj with `value` set at `path`.\n * If `value` has not changed, return the original `obj`.\n *\n * Existing objects / arrays along `path` are also shallow copied. Sibling\n * objects along path retain the same internal js reference. Since new\n * objects / arrays are only created along `path`, we can test if anything\n * changed in a nested structure by comparing the object's reference in\n * the old and new object, similar to how russian doll cache invalidation\n * works.\n *\n * In earlier versions of this function, which used cloneDeep, there were\n * issues whereby settings a nested value would mutate the parent\n * instead of creating a new object. `clone` avoids that bug making a\n * shallow copy of the objects along the update path\n * so no object is mutated in place.\n *\n * Before changing this function, please read through the following\n * discussions.\n *\n * @see https://github.com/developit/linkstate\n * @see https://github.com/jaredpalmer/formik/pull/123\n */\nexport function setIn(obj: any, path: string, value: any): any {\n const res: any = clone(obj); // this keeps inheritance when obj is a class\n let resVal: any = res;\n let i = 0;\n const pathArray = toPath(path);\n\n for (; i < pathArray.length - 1; i++) {\n const currentPath: string = pathArray[i];\n const currentObj: any = getIn(obj, pathArray.slice(0, i + 1));\n\n if (currentObj && (isObject(currentObj) || Array.isArray(currentObj))) {\n resVal = resVal[currentPath] = clone(currentObj);\n } else {\n const nextPath: string = pathArray[i + 1];\n resVal = resVal[currentPath] = isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};\n }\n }\n\n // Return original object if new value is the same as current\n if ((i === 0 ? obj : resVal)[pathArray[i]] === value) {\n return obj;\n }\n\n if (value === undefined) {\n delete resVal[pathArray[i]];\n } else {\n resVal[pathArray[i]] = value;\n }\n\n // If the path array has a single element, the loop did not run.\n // Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.\n if (i === 0 && value === undefined) {\n delete res[pathArray[i]];\n }\n\n return res;\n}\n"],"names":["getIn","obj","key","def","pathStartIndex","path","toPath","length","undefined","isObject","Array","isArray","isInteger","String","Math","floor","Number","setIn","value","res","clone","resVal","i","pathArray","currentPath","currentObj","slice","nextPath"],"mappings":";;;;;AAGA;;IAGO,SAASA,KAAAA,CAAMC,GAAQ,EAAEC,GAAsB,EAAEC,GAAS,EAAEC,cAAAA,GAAyB,CAAC,EAAA;AAC3F,IAAA,MAAMC,OAAOC,MAAOJ,CAAAA,GAAAA,CAAAA;AACpB,IAAA,MAAOD,GAAOG,IAAAA,cAAAA,GAAiBC,IAAKE,CAAAA,MAAM,CAAE;AAC1CN,QAAAA,GAAAA,GAAMA,GAAG,CAACI,IAAI,CAACD,iBAAiB,CAAC;AACnC;;AAGA,IAAA,IAAIA,cAAmBC,KAAAA,IAAAA,CAAKE,MAAM,IAAI,CAACN,GAAK,EAAA;QAC1C,OAAOE,GAAAA;AACT;IAEA,OAAOF,GAAAA,KAAQO,YAAYL,GAAMF,GAAAA,GAAAA;AACnC;AAEA,gDACO,MAAMQ,QAAAA,GAAW,CAACR,GACvBA,GAAAA,GAAAA,KAAQ,IAAQ,IAAA,OAAOA,QAAQ,QAAY,IAAA,CAACS,KAAMC,CAAAA,OAAO,CAACV,GAAK,CAAA;AAEjE,iDACO,MAAMW,SAAAA,GAAY,CAACX,GAAAA,GAAsBY,MAAOC,CAAAA,IAAAA,CAAKC,KAAK,CAACC,MAAOf,CAAAA,GAAAA,CAAAA,CAAAA,CAAAA,KAAWA,GAAI;AAExF;;;;;;;;;;;;;;;;;;;;;;;AAuBC,IACM,SAASgB,KAAAA,CAAMhB,GAAQ,EAAEI,IAAY,EAAEa,KAAU,EAAA;IACtD,MAAMC,GAAAA,GAAWC,KAAMnB,CAAAA,GAAAA,CAAAA,CAAAA;AACvB,IAAA,IAAIoB,MAAcF,GAAAA,GAAAA;AAClB,IAAA,IAAIG,CAAI,GAAA,CAAA;AACR,IAAA,MAAMC,YAAYjB,MAAOD,CAAAA,IAAAA,CAAAA;AAEzB,IAAA,MAAOiB,CAAIC,GAAAA,SAAAA,CAAUhB,MAAM,GAAG,GAAGe,CAAK,EAAA,CAAA;QACpC,MAAME,WAAAA,GAAsBD,SAAS,CAACD,CAAE,CAAA;AACxC,QAAA,MAAMG,aAAkBzB,KAAMC,CAAAA,GAAAA,EAAKsB,UAAUG,KAAK,CAAC,GAAGJ,CAAI,GAAA,CAAA,CAAA,CAAA;QAE1D,IAAIG,UAAAA,KAAehB,QAASgB,CAAAA,UAAAA,CAAAA,IAAef,MAAMC,OAAO,CAACc,WAAU,CAAI,EAAA;AACrEJ,YAAAA,MAAAA,GAASA,MAAM,CAACG,WAAY,CAAA,GAAGJ,KAAMK,CAAAA,UAAAA,CAAAA;SAChC,MAAA;AACL,YAAA,MAAME,QAAmBJ,GAAAA,SAAS,CAACD,CAAAA,GAAI,CAAE,CAAA;YACzCD,MAASA,GAAAA,MAAM,CAACG,WAAAA,CAAY,GAAGZ,SAAAA,CAAUe,QAAaX,CAAAA,IAAAA,MAAAA,CAAOW,QAAa,CAAA,IAAA,CAAA,GAAI,EAAE,GAAG,EAAC;AACtF;AACF;;AAGA,IAAA,IAAI,CAACL,CAAM,KAAA,CAAA,GAAIrB,GAAMoB,GAAAA,MAAK,EAAGE,SAAS,CAACD,CAAE,CAAA,CAAC,KAAKJ,KAAO,EAAA;QACpD,OAAOjB,GAAAA;AACT;AAEA,IAAyB;AACvB,QAAA,OAAOoB,MAAM,CAACE,SAAS,CAACD,EAAE,CAAC;;;;IAO7B,IAAIA,CAAAA,KAAM,CAAKJ,IAAAA,KAAAA,KAAUV,SAAW,EAAA;AAClC,QAAA,OAAOW,GAAG,CAACI,SAAS,CAACD,EAAE,CAAC;AAC1B;IAEA,OAAOH,GAAAA;AACT;;;;;"}
|
@@ -1,73 +0,0 @@
|
|
1
|
-
import clone from 'lodash/clone';
|
2
|
-
import toPath from 'lodash/toPath';
|
3
|
-
|
4
|
-
/**
|
5
|
-
* Deeply get a value from an object via its path.
|
6
|
-
*/ function getIn(obj, key, def, pathStartIndex = 0) {
|
7
|
-
const path = toPath(key);
|
8
|
-
while(obj && pathStartIndex < path.length){
|
9
|
-
obj = obj[path[pathStartIndex++]];
|
10
|
-
}
|
11
|
-
// check if path is not in the end
|
12
|
-
if (pathStartIndex !== path.length && !obj) {
|
13
|
-
return def;
|
14
|
-
}
|
15
|
-
return obj === undefined ? def : obj;
|
16
|
-
}
|
17
|
-
/** @internal is the given object an Object? */ const isObject = (obj)=>obj !== null && typeof obj === 'object' && !Array.isArray(obj);
|
18
|
-
/** @internal is the given object an integer? */ const isInteger = (obj)=>String(Math.floor(Number(obj))) === obj;
|
19
|
-
/**
|
20
|
-
* Deeply set a value from in object via its path. If the value at `path`
|
21
|
-
* has changed, return a shallow copy of obj with `value` set at `path`.
|
22
|
-
* If `value` has not changed, return the original `obj`.
|
23
|
-
*
|
24
|
-
* Existing objects / arrays along `path` are also shallow copied. Sibling
|
25
|
-
* objects along path retain the same internal js reference. Since new
|
26
|
-
* objects / arrays are only created along `path`, we can test if anything
|
27
|
-
* changed in a nested structure by comparing the object's reference in
|
28
|
-
* the old and new object, similar to how russian doll cache invalidation
|
29
|
-
* works.
|
30
|
-
*
|
31
|
-
* In earlier versions of this function, which used cloneDeep, there were
|
32
|
-
* issues whereby settings a nested value would mutate the parent
|
33
|
-
* instead of creating a new object. `clone` avoids that bug making a
|
34
|
-
* shallow copy of the objects along the update path
|
35
|
-
* so no object is mutated in place.
|
36
|
-
*
|
37
|
-
* Before changing this function, please read through the following
|
38
|
-
* discussions.
|
39
|
-
*
|
40
|
-
* @see https://github.com/developit/linkstate
|
41
|
-
* @see https://github.com/jaredpalmer/formik/pull/123
|
42
|
-
*/ function setIn(obj, path, value) {
|
43
|
-
const res = clone(obj); // this keeps inheritance when obj is a class
|
44
|
-
let resVal = res;
|
45
|
-
let i = 0;
|
46
|
-
const pathArray = toPath(path);
|
47
|
-
for(; i < pathArray.length - 1; i++){
|
48
|
-
const currentPath = pathArray[i];
|
49
|
-
const currentObj = getIn(obj, pathArray.slice(0, i + 1));
|
50
|
-
if (currentObj && (isObject(currentObj) || Array.isArray(currentObj))) {
|
51
|
-
resVal = resVal[currentPath] = clone(currentObj);
|
52
|
-
} else {
|
53
|
-
const nextPath = pathArray[i + 1];
|
54
|
-
resVal = resVal[currentPath] = isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};
|
55
|
-
}
|
56
|
-
}
|
57
|
-
// Return original object if new value is the same as current
|
58
|
-
if ((i === 0 ? obj : resVal)[pathArray[i]] === value) {
|
59
|
-
return obj;
|
60
|
-
}
|
61
|
-
{
|
62
|
-
delete resVal[pathArray[i]];
|
63
|
-
}
|
64
|
-
// If the path array has a single element, the loop did not run.
|
65
|
-
// Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.
|
66
|
-
if (i === 0 && value === undefined) {
|
67
|
-
delete res[pathArray[i]];
|
68
|
-
}
|
69
|
-
return res;
|
70
|
-
}
|
71
|
-
|
72
|
-
export { getIn as g, setIn as s };
|
73
|
-
//# sourceMappingURL=objects-wl73iEma.mjs.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"objects-wl73iEma.mjs","sources":["../../../admin/src/utils/objects.ts"],"sourcesContent":["import clone from 'lodash/clone';\nimport toPath from 'lodash/toPath';\n\n/**\n * Deeply get a value from an object via its path.\n */\nexport function getIn(obj: any, key: string | string[], def?: any, pathStartIndex: number = 0) {\n const path = toPath(key);\n while (obj && pathStartIndex < path.length) {\n obj = obj[path[pathStartIndex++]];\n }\n\n // check if path is not in the end\n if (pathStartIndex !== path.length && !obj) {\n return def;\n }\n\n return obj === undefined ? def : obj;\n}\n\n/** @internal is the given object an Object? */\nexport const isObject = (obj: any): obj is object =>\n obj !== null && typeof obj === 'object' && !Array.isArray(obj);\n\n/** @internal is the given object an integer? */\nexport const isInteger = (obj: any): boolean => String(Math.floor(Number(obj))) === obj;\n\n/**\n * Deeply set a value from in object via its path. If the value at `path`\n * has changed, return a shallow copy of obj with `value` set at `path`.\n * If `value` has not changed, return the original `obj`.\n *\n * Existing objects / arrays along `path` are also shallow copied. Sibling\n * objects along path retain the same internal js reference. Since new\n * objects / arrays are only created along `path`, we can test if anything\n * changed in a nested structure by comparing the object's reference in\n * the old and new object, similar to how russian doll cache invalidation\n * works.\n *\n * In earlier versions of this function, which used cloneDeep, there were\n * issues whereby settings a nested value would mutate the parent\n * instead of creating a new object. `clone` avoids that bug making a\n * shallow copy of the objects along the update path\n * so no object is mutated in place.\n *\n * Before changing this function, please read through the following\n * discussions.\n *\n * @see https://github.com/developit/linkstate\n * @see https://github.com/jaredpalmer/formik/pull/123\n */\nexport function setIn(obj: any, path: string, value: any): any {\n const res: any = clone(obj); // this keeps inheritance when obj is a class\n let resVal: any = res;\n let i = 0;\n const pathArray = toPath(path);\n\n for (; i < pathArray.length - 1; i++) {\n const currentPath: string = pathArray[i];\n const currentObj: any = getIn(obj, pathArray.slice(0, i + 1));\n\n if (currentObj && (isObject(currentObj) || Array.isArray(currentObj))) {\n resVal = resVal[currentPath] = clone(currentObj);\n } else {\n const nextPath: string = pathArray[i + 1];\n resVal = resVal[currentPath] = isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};\n }\n }\n\n // Return original object if new value is the same as current\n if ((i === 0 ? obj : resVal)[pathArray[i]] === value) {\n return obj;\n }\n\n if (value === undefined) {\n delete resVal[pathArray[i]];\n } else {\n resVal[pathArray[i]] = value;\n }\n\n // If the path array has a single element, the loop did not run.\n // Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.\n if (i === 0 && value === undefined) {\n delete res[pathArray[i]];\n }\n\n return res;\n}\n"],"names":["getIn","obj","key","def","pathStartIndex","path","toPath","length","undefined","isObject","Array","isArray","isInteger","String","Math","floor","Number","setIn","value","res","clone","resVal","i","pathArray","currentPath","currentObj","slice","nextPath"],"mappings":";;;AAGA;;IAGO,SAASA,KAAAA,CAAMC,GAAQ,EAAEC,GAAsB,EAAEC,GAAS,EAAEC,cAAAA,GAAyB,CAAC,EAAA;AAC3F,IAAA,MAAMC,OAAOC,MAAOJ,CAAAA,GAAAA,CAAAA;AACpB,IAAA,MAAOD,GAAOG,IAAAA,cAAAA,GAAiBC,IAAKE,CAAAA,MAAM,CAAE;AAC1CN,QAAAA,GAAAA,GAAMA,GAAG,CAACI,IAAI,CAACD,iBAAiB,CAAC;AACnC;;AAGA,IAAA,IAAIA,cAAmBC,KAAAA,IAAAA,CAAKE,MAAM,IAAI,CAACN,GAAK,EAAA;QAC1C,OAAOE,GAAAA;AACT;IAEA,OAAOF,GAAAA,KAAQO,YAAYL,GAAMF,GAAAA,GAAAA;AACnC;AAEA,gDACO,MAAMQ,QAAAA,GAAW,CAACR,GACvBA,GAAAA,GAAAA,KAAQ,IAAQ,IAAA,OAAOA,QAAQ,QAAY,IAAA,CAACS,KAAMC,CAAAA,OAAO,CAACV,GAAK,CAAA;AAEjE,iDACO,MAAMW,SAAAA,GAAY,CAACX,GAAAA,GAAsBY,MAAOC,CAAAA,IAAAA,CAAKC,KAAK,CAACC,MAAOf,CAAAA,GAAAA,CAAAA,CAAAA,CAAAA,KAAWA,GAAI;AAExF;;;;;;;;;;;;;;;;;;;;;;;AAuBC,IACM,SAASgB,KAAAA,CAAMhB,GAAQ,EAAEI,IAAY,EAAEa,KAAU,EAAA;IACtD,MAAMC,GAAAA,GAAWC,KAAMnB,CAAAA,GAAAA,CAAAA,CAAAA;AACvB,IAAA,IAAIoB,MAAcF,GAAAA,GAAAA;AAClB,IAAA,IAAIG,CAAI,GAAA,CAAA;AACR,IAAA,MAAMC,YAAYjB,MAAOD,CAAAA,IAAAA,CAAAA;AAEzB,IAAA,MAAOiB,CAAIC,GAAAA,SAAAA,CAAUhB,MAAM,GAAG,GAAGe,CAAK,EAAA,CAAA;QACpC,MAAME,WAAAA,GAAsBD,SAAS,CAACD,CAAE,CAAA;AACxC,QAAA,MAAMG,aAAkBzB,KAAMC,CAAAA,GAAAA,EAAKsB,UAAUG,KAAK,CAAC,GAAGJ,CAAI,GAAA,CAAA,CAAA,CAAA;QAE1D,IAAIG,UAAAA,KAAehB,QAASgB,CAAAA,UAAAA,CAAAA,IAAef,MAAMC,OAAO,CAACc,WAAU,CAAI,EAAA;AACrEJ,YAAAA,MAAAA,GAASA,MAAM,CAACG,WAAY,CAAA,GAAGJ,KAAMK,CAAAA,UAAAA,CAAAA;SAChC,MAAA;AACL,YAAA,MAAME,QAAmBJ,GAAAA,SAAS,CAACD,CAAAA,GAAI,CAAE,CAAA;YACzCD,MAASA,GAAAA,MAAM,CAACG,WAAAA,CAAY,GAAGZ,SAAAA,CAAUe,QAAaX,CAAAA,IAAAA,MAAAA,CAAOW,QAAa,CAAA,IAAA,CAAA,GAAI,EAAE,GAAG,EAAC;AACtF;AACF;;AAGA,IAAA,IAAI,CAACL,CAAM,KAAA,CAAA,GAAIrB,GAAMoB,GAAAA,MAAK,EAAGE,SAAS,CAACD,CAAE,CAAA,CAAC,KAAKJ,KAAO,EAAA;QACpD,OAAOjB,GAAAA;AACT;AAEA,IAAyB;AACvB,QAAA,OAAOoB,MAAM,CAACE,SAAS,CAACD,EAAE,CAAC;;;;IAO7B,IAAIA,CAAAA,KAAM,CAAKJ,IAAAA,KAAAA,KAAUV,SAAW,EAAA;AAClC,QAAA,OAAOW,GAAG,CAACI,SAAS,CAACD,EAAE,CAAC;AAC1B;IAEA,OAAOH,GAAAA;AACT;;;;"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"relations-D1R7vM_e.mjs","sources":["../../../admin/src/hooks/useDebounce.ts","../../../admin/src/services/relations.ts","../../../admin/src/utils/relations.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport function useDebounce<TValue>(value: TValue, delay: number): TValue {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n","import { generateNKeysBetween } from 'fractional-indexing';\n\nimport {\n RelationResult as RelResult,\n FindAvailable,\n FindExisting,\n} from '../../../shared/contracts/relations';\n\nimport { contentManagerApi } from './api';\n\nimport type { Modules } from '@strapi/types';\nimport type { errors } from '@strapi/utils';\n\ninterface RelationResult extends RelResult {\n __temp_key__: string;\n}\n\ntype GetRelationsResponse =\n | {\n results: Array<RelationResult>;\n pagination: {\n page: NonNullable<Modules.EntityService.Params.Pagination.PageNotation['page']>;\n pageSize: NonNullable<Modules.EntityService.Params.Pagination.PageNotation['pageSize']>;\n pageCount: number;\n total: number;\n } | null;\n error?: never;\n }\n | {\n results?: never;\n pagination?: never;\n error: errors.ApplicationError | errors.YupValidationError;\n };\n\nconst relationsApi = contentManagerApi.injectEndpoints({\n endpoints: (build) => ({\n getRelations: build.query<\n GetRelationsResponse,\n FindExisting.Params & {\n params?: FindExisting.Request['query'];\n }\n >({\n query: ({ model, id, targetField, params }) => {\n return {\n url: `/content-manager/relations/${model}/${id}/${targetField}`,\n method: 'GET',\n config: {\n params,\n },\n };\n },\n serializeQueryArgs: (args) => {\n const { endpointName, queryArgs } = args;\n return {\n endpointName,\n model: queryArgs.model,\n id: queryArgs.id,\n targetField: queryArgs.targetField,\n locale: queryArgs.params?.locale,\n status: queryArgs.params?.status,\n };\n },\n merge: (currentCache, newItems) => {\n if (currentCache.pagination && newItems.pagination) {\n if (currentCache.pagination.page < newItems.pagination.page) {\n /**\n * Relations will always have unique IDs, so we can therefore assume\n * that we only need to push the new items to the cache.\n *\n * Push new items at the beginning as latest items are shown first\n */\n currentCache.results = [\n ...prepareTempKeys(newItems.results, currentCache.results),\n ...currentCache.results,\n ];\n currentCache.pagination = newItems.pagination;\n } else if (newItems.pagination.page === 1) {\n /**\n * We're resetting the relations\n */\n currentCache.results = prepareTempKeys(newItems.results);\n currentCache.pagination = newItems.pagination;\n }\n }\n },\n forceRefetch({ currentArg, previousArg }) {\n if (!currentArg?.params && !previousArg?.params) {\n return false;\n }\n\n return (\n currentArg?.params?.page !== previousArg?.params?.page ||\n currentArg?.params?.pageSize !== previousArg?.params?.pageSize\n );\n },\n transformResponse: (response: FindExisting.Response) => {\n if ('results' in response && response.results) {\n return {\n ...response,\n results: prepareTempKeys(response.results.toReversed()),\n };\n } else {\n return response;\n }\n },\n providesTags: ['Relations'],\n }),\n searchRelations: build.query<\n FindAvailable.Response,\n FindAvailable.Params & {\n params?: FindAvailable.Request['query'];\n }\n >({\n query: ({ model, targetField, params }) => {\n return {\n url: `/content-manager/relations/${model}/${targetField}`,\n method: 'GET',\n config: {\n params,\n },\n };\n },\n serializeQueryArgs: (args) => {\n const { endpointName, queryArgs } = args;\n return {\n endpointName,\n model: queryArgs.model,\n targetField: queryArgs.targetField,\n _q: queryArgs.params?._q,\n idsToOmit: queryArgs.params?.idsToOmit,\n idsToInclude: queryArgs.params?.idsToInclude,\n };\n },\n merge: (currentCache, newItems) => {\n if (currentCache.pagination && newItems.pagination) {\n if (currentCache.pagination.page < newItems.pagination.page) {\n /**\n * Relations will always have unique IDs, so we can therefore assume\n * that we only need to push the new items to the cache.\n */\n const existingIds = currentCache.results.map((item) => item.documentId);\n const uniqueNewItems = newItems.results.filter(\n (item) => !existingIds.includes(item.documentId)\n );\n currentCache.results.push(...uniqueNewItems);\n currentCache.pagination = newItems.pagination;\n } else if (newItems.pagination.page === 1) {\n /**\n * We're resetting the relations\n */\n currentCache.results = newItems.results;\n currentCache.pagination = newItems.pagination;\n }\n }\n },\n forceRefetch({ currentArg, previousArg }) {\n if (!currentArg?.params && !previousArg?.params) {\n return false;\n }\n\n return (\n currentArg?.params?.page !== previousArg?.params?.page ||\n currentArg?.params?.pageSize !== previousArg?.params?.pageSize\n );\n },\n transformResponse: (response: FindAvailable.Response) => {\n if (response.results) {\n return {\n ...response,\n results: response.results,\n };\n } else {\n return response;\n }\n },\n }),\n }),\n});\n\n/**\n * @internal\n * @description Adds a `__temp_key__` to each relation item. This gives us\n * a stable identifier regardless of it's ids etc. that we can then use for drag and drop.\n */\nconst prepareTempKeys = (relations: RelResult[], existingRelations: RelationResult[] = []) => {\n const [firstItem] = existingRelations.slice(0);\n const keys = generateNKeysBetween(null, firstItem?.__temp_key__ ?? null, relations.length);\n\n return relations.map((datum, index) => ({\n ...datum,\n __temp_key__: keys[index],\n }));\n};\n\nconst { useGetRelationsQuery, useLazySearchRelationsQuery } = relationsApi;\n\nexport { useGetRelationsQuery, useLazySearchRelationsQuery };\nexport type { RelationResult };\n","import type { MainField } from './attributes';\nimport type { RelationResult } from '../../../shared/contracts/relations';\n\n/**\n * @internal\n * @description Get the label of a relation, the contract has [key: string]: unknown,\n * so we need to check if the mainFieldKey is defined and if the relation has a value\n * under that property. If it does, we then verify it's type of string and return it.\n *\n * We fallback to the documentId.\n */\nconst getRelationLabel = (relation: RelationResult, mainField?: MainField): string => {\n const label = mainField && relation[mainField.name] ? relation[mainField.name] : null;\n\n if (typeof label === 'string') {\n return label;\n }\n\n return relation.documentId;\n};\n\nexport { getRelationLabel };\n"],"names":["useDebounce","value","delay","debouncedValue","setDebouncedValue","useState","useEffect","handler","setTimeout","clearTimeout","relationsApi","contentManagerApi","injectEndpoints","endpoints","build","getRelations","query","model","id","targetField","params","url","method","config","serializeQueryArgs","args","endpointName","queryArgs","locale","status","merge","currentCache","newItems","pagination","page","results","prepareTempKeys","forceRefetch","currentArg","previousArg","pageSize","transformResponse","response","toReversed","providesTags","searchRelations","_q","idsToOmit","idsToInclude","existingIds","map","item","documentId","uniqueNewItems","filter","includes","push","relations","existingRelations","firstItem","slice","keys","generateNKeysBetween","__temp_key__","length","datum","index","useGetRelationsQuery","useLazySearchRelationsQuery","getRelationLabel","relation","mainField","label","name"],"mappings":"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"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"relations-VlsO9KQZ.js","sources":["../../../admin/src/hooks/useDebounce.ts","../../../admin/src/services/relations.ts","../../../admin/src/utils/relations.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport function useDebounce<TValue>(value: TValue, delay: number): TValue {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n","import { generateNKeysBetween } from 'fractional-indexing';\n\nimport {\n RelationResult as RelResult,\n FindAvailable,\n FindExisting,\n} from '../../../shared/contracts/relations';\n\nimport { contentManagerApi } from './api';\n\nimport type { Modules } from '@strapi/types';\nimport type { errors } from '@strapi/utils';\n\ninterface RelationResult extends RelResult {\n __temp_key__: string;\n}\n\ntype GetRelationsResponse =\n | {\n results: Array<RelationResult>;\n pagination: {\n page: NonNullable<Modules.EntityService.Params.Pagination.PageNotation['page']>;\n pageSize: NonNullable<Modules.EntityService.Params.Pagination.PageNotation['pageSize']>;\n pageCount: number;\n total: number;\n } | null;\n error?: never;\n }\n | {\n results?: never;\n pagination?: never;\n error: errors.ApplicationError | errors.YupValidationError;\n };\n\nconst relationsApi = contentManagerApi.injectEndpoints({\n endpoints: (build) => ({\n getRelations: build.query<\n GetRelationsResponse,\n FindExisting.Params & {\n params?: FindExisting.Request['query'];\n }\n >({\n query: ({ model, id, targetField, params }) => {\n return {\n url: `/content-manager/relations/${model}/${id}/${targetField}`,\n method: 'GET',\n config: {\n params,\n },\n };\n },\n serializeQueryArgs: (args) => {\n const { endpointName, queryArgs } = args;\n return {\n endpointName,\n model: queryArgs.model,\n id: queryArgs.id,\n targetField: queryArgs.targetField,\n locale: queryArgs.params?.locale,\n status: queryArgs.params?.status,\n };\n },\n merge: (currentCache, newItems) => {\n if (currentCache.pagination && newItems.pagination) {\n if (currentCache.pagination.page < newItems.pagination.page) {\n /**\n * Relations will always have unique IDs, so we can therefore assume\n * that we only need to push the new items to the cache.\n *\n * Push new items at the beginning as latest items are shown first\n */\n currentCache.results = [\n ...prepareTempKeys(newItems.results, currentCache.results),\n ...currentCache.results,\n ];\n currentCache.pagination = newItems.pagination;\n } else if (newItems.pagination.page === 1) {\n /**\n * We're resetting the relations\n */\n currentCache.results = prepareTempKeys(newItems.results);\n currentCache.pagination = newItems.pagination;\n }\n }\n },\n forceRefetch({ currentArg, previousArg }) {\n if (!currentArg?.params && !previousArg?.params) {\n return false;\n }\n\n return (\n currentArg?.params?.page !== previousArg?.params?.page ||\n currentArg?.params?.pageSize !== previousArg?.params?.pageSize\n );\n },\n transformResponse: (response: FindExisting.Response) => {\n if ('results' in response && response.results) {\n return {\n ...response,\n results: prepareTempKeys(response.results.toReversed()),\n };\n } else {\n return response;\n }\n },\n providesTags: ['Relations'],\n }),\n searchRelations: build.query<\n FindAvailable.Response,\n FindAvailable.Params & {\n params?: FindAvailable.Request['query'];\n }\n >({\n query: ({ model, targetField, params }) => {\n return {\n url: `/content-manager/relations/${model}/${targetField}`,\n method: 'GET',\n config: {\n params,\n },\n };\n },\n serializeQueryArgs: (args) => {\n const { endpointName, queryArgs } = args;\n return {\n endpointName,\n model: queryArgs.model,\n targetField: queryArgs.targetField,\n _q: queryArgs.params?._q,\n idsToOmit: queryArgs.params?.idsToOmit,\n idsToInclude: queryArgs.params?.idsToInclude,\n };\n },\n merge: (currentCache, newItems) => {\n if (currentCache.pagination && newItems.pagination) {\n if (currentCache.pagination.page < newItems.pagination.page) {\n /**\n * Relations will always have unique IDs, so we can therefore assume\n * that we only need to push the new items to the cache.\n */\n const existingIds = currentCache.results.map((item) => item.documentId);\n const uniqueNewItems = newItems.results.filter(\n (item) => !existingIds.includes(item.documentId)\n );\n currentCache.results.push(...uniqueNewItems);\n currentCache.pagination = newItems.pagination;\n } else if (newItems.pagination.page === 1) {\n /**\n * We're resetting the relations\n */\n currentCache.results = newItems.results;\n currentCache.pagination = newItems.pagination;\n }\n }\n },\n forceRefetch({ currentArg, previousArg }) {\n if (!currentArg?.params && !previousArg?.params) {\n return false;\n }\n\n return (\n currentArg?.params?.page !== previousArg?.params?.page ||\n currentArg?.params?.pageSize !== previousArg?.params?.pageSize\n );\n },\n transformResponse: (response: FindAvailable.Response) => {\n if (response.results) {\n return {\n ...response,\n results: response.results,\n };\n } else {\n return response;\n }\n },\n }),\n }),\n});\n\n/**\n * @internal\n * @description Adds a `__temp_key__` to each relation item. This gives us\n * a stable identifier regardless of it's ids etc. that we can then use for drag and drop.\n */\nconst prepareTempKeys = (relations: RelResult[], existingRelations: RelationResult[] = []) => {\n const [firstItem] = existingRelations.slice(0);\n const keys = generateNKeysBetween(null, firstItem?.__temp_key__ ?? null, relations.length);\n\n return relations.map((datum, index) => ({\n ...datum,\n __temp_key__: keys[index],\n }));\n};\n\nconst { useGetRelationsQuery, useLazySearchRelationsQuery } = relationsApi;\n\nexport { useGetRelationsQuery, useLazySearchRelationsQuery };\nexport type { RelationResult };\n","import type { MainField } from './attributes';\nimport type { RelationResult } from '../../../shared/contracts/relations';\n\n/**\n * @internal\n * @description Get the label of a relation, the contract has [key: string]: unknown,\n * so we need to check if the mainFieldKey is defined and if the relation has a value\n * under that property. If it does, we then verify it's type of string and return it.\n *\n * We fallback to the documentId.\n */\nconst getRelationLabel = (relation: RelationResult, mainField?: MainField): string => {\n const label = mainField && relation[mainField.name] ? relation[mainField.name] : null;\n\n if (typeof label === 'string') {\n return label;\n }\n\n return relation.documentId;\n};\n\nexport { getRelationLabel };\n"],"names":["useDebounce","value","delay","debouncedValue","setDebouncedValue","useState","useEffect","handler","setTimeout","clearTimeout","relationsApi","contentManagerApi","injectEndpoints","endpoints","build","getRelations","query","model","id","targetField","params","url","method","config","serializeQueryArgs","args","endpointName","queryArgs","locale","status","merge","currentCache","newItems","pagination","page","results","prepareTempKeys","forceRefetch","currentArg","previousArg","pageSize","transformResponse","response","toReversed","providesTags","searchRelations","_q","idsToOmit","idsToInclude","existingIds","map","item","documentId","uniqueNewItems","filter","includes","push","relations","existingRelations","firstItem","slice","keys","generateNKeysBetween","__temp_key__","length","datum","index","useGetRelationsQuery","useLazySearchRelationsQuery","getRelationLabel","relation","mainField","label","name"],"mappings":"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"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"useDragAndDrop-HYwNDExe.mjs","sources":["../../../admin/src/constants/dragAndDrop.ts","../../../admin/src/hooks/useKeyboardDragAndDrop.ts","../../../admin/src/hooks/useDragAndDrop.ts"],"sourcesContent":["export const ItemTypes = {\n COMPONENT: 'component',\n EDIT_FIELD: 'editField',\n FIELD: 'field',\n DYNAMIC_ZONE: 'dynamicZone',\n RELATION: 'relation',\n BLOCKS: 'blocks',\n} as const;\n","import * as React from 'react';\n\nexport type UseKeyboardDragAndDropCallbacks<TIndex extends number | Array<number> = number> = {\n onCancel?: (index: TIndex) => void;\n onDropItem?: (currentIndex: TIndex, newIndex?: TIndex) => void;\n onGrabItem?: (index: TIndex) => void;\n onMoveItem?: (newIndex: TIndex, currentIndex: TIndex) => void;\n};\n\n/**\n * Utility hook designed to implement keyboard accessibile drag and drop by\n * returning an onKeyDown handler to be passed to the drag icon button.\n *\n * @internal - You should use `useDragAndDrop` instead.\n */\nexport const useKeyboardDragAndDrop = <TIndex extends number | Array<number> = number>(\n active: boolean,\n index: TIndex,\n { onCancel, onDropItem, onGrabItem, onMoveItem }: UseKeyboardDragAndDropCallbacks<TIndex>\n) => {\n const [isSelected, setIsSelected] = React.useState(false);\n\n const handleMove = (movement: 'UP' | 'DOWN') => {\n if (!isSelected) {\n return;\n }\n if (typeof index === 'number' && onMoveItem) {\n if (movement === 'UP') {\n onMoveItem((index - 1) as TIndex, index);\n } else if (movement === 'DOWN') {\n onMoveItem((index + 1) as TIndex, index);\n }\n }\n };\n\n const handleDragClick = () => {\n if (isSelected) {\n if (onDropItem) {\n onDropItem(index);\n }\n setIsSelected(false);\n } else {\n if (onGrabItem) {\n onGrabItem(index);\n }\n setIsSelected(true);\n }\n };\n\n const handleCancel = () => {\n if (isSelected) {\n setIsSelected(false);\n\n if (onCancel) {\n onCancel(index);\n }\n }\n };\n\n const handleKeyDown = <E extends Element>(e: React.KeyboardEvent<E>) => {\n if (!active) {\n return;\n }\n\n if (e.key === 'Tab' && !isSelected) {\n return;\n }\n\n e.preventDefault();\n\n switch (e.key) {\n case ' ':\n case 'Enter':\n handleDragClick();\n break;\n\n case 'Escape':\n handleCancel();\n break;\n\n case 'ArrowDown':\n case 'ArrowRight':\n handleMove('DOWN');\n break;\n\n case 'ArrowUp':\n case 'ArrowLeft':\n handleMove('UP');\n break;\n\n default:\n }\n };\n\n return handleKeyDown;\n};\n","import * as React from 'react';\n\nimport {\n useDrag,\n useDrop,\n type HandlerManager,\n type ConnectDragSource,\n type ConnectDropTarget,\n type ConnectDragPreview,\n type DragSourceMonitor,\n} from 'react-dnd';\n\nimport {\n useKeyboardDragAndDrop,\n type UseKeyboardDragAndDropCallbacks,\n} from './useKeyboardDragAndDrop';\n\nimport type { Data } from '@strapi/types';\n\nconst DIRECTIONS = {\n UPWARD: 'upward',\n DOWNWARD: 'downward',\n} as const;\n\nconst DROP_SENSITIVITY = {\n REGULAR: 'regular',\n IMMEDIATE: 'immediate',\n} as const;\n\ninterface UseDragAndDropOptions<\n TIndex extends number | Array<number> = number,\n TItem extends { index: TIndex } = { index: TIndex },\n> extends UseKeyboardDragAndDropCallbacks<TIndex> {\n type?: string;\n index: TIndex;\n item?: TItem;\n onStart?: () => void;\n onEnd?: () => void;\n dropSensitivity?: (typeof DROP_SENSITIVITY)[keyof typeof DROP_SENSITIVITY];\n}\n\ntype Identifier = ReturnType<HandlerManager['getHandlerId']>;\n\ntype UseDragAndDropReturn<E extends Element = HTMLElement> = [\n props: {\n handlerId: Identifier;\n isDragging: boolean;\n handleKeyDown: <E extends Element>(event: React.KeyboardEvent<E>) => void;\n isOverDropTarget: boolean;\n direction: (typeof DIRECTIONS)[keyof typeof DIRECTIONS] | null;\n },\n objectRef: React.RefObject<E>,\n dropRef: ConnectDropTarget,\n dragRef: ConnectDragSource,\n dragPreviewRef: ConnectDragPreview,\n];\n\ntype DropCollectedProps = {\n handlerId: Identifier;\n isOver: boolean;\n};\n\n/**\n * A utility hook abstracting the general drag and drop hooks from react-dnd.\n * Centralising the same behaviours and by default offering keyboard support.\n */\nconst useDragAndDrop = <\n TIndex extends number | Array<number>,\n TItem extends { index: TIndex; id?: Data.ID; [key: string]: unknown } = {\n index: TIndex;\n [key: string]: unknown;\n },\n E extends Element = HTMLElement,\n>(\n active: boolean,\n {\n type = 'STRAPI_DND',\n index,\n item,\n onStart,\n onEnd,\n onGrabItem,\n onDropItem,\n onCancel,\n onMoveItem,\n dropSensitivity = DROP_SENSITIVITY.REGULAR,\n }: UseDragAndDropOptions<TIndex, TItem>\n): UseDragAndDropReturn<E> => {\n const objectRef = React.useRef<E>(null);\n\n const [{ handlerId, isOver }, dropRef] = useDrop<TItem, void, DropCollectedProps>({\n accept: type,\n collect(monitor) {\n return {\n handlerId: monitor.getHandlerId(),\n isOver: monitor.isOver({ shallow: true }),\n };\n },\n drop(item) {\n const draggedIndex = item.index;\n const newIndex = index;\n\n if (isOver && onDropItem) {\n onDropItem(draggedIndex, newIndex);\n }\n },\n hover(item, monitor) {\n if (!objectRef.current || !onMoveItem) {\n return;\n }\n\n const dragIndex = item.index;\n const newIndex = index;\n\n const hoverBoundingRect = objectRef.current?.getBoundingClientRect();\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n const clientOffset = monitor.getClientOffset();\n if (!clientOffset) return;\n\n const hoverClientY = clientOffset && clientOffset.y - hoverBoundingRect.top;\n if (typeof dragIndex === 'number' && typeof newIndex === 'number') {\n if (dragIndex === newIndex) {\n // Don't replace items with themselves\n return;\n }\n\n if (dropSensitivity === DROP_SENSITIVITY.REGULAR) {\n // Dragging downwards\n if (dragIndex < newIndex && hoverClientY < hoverMiddleY) {\n return;\n }\n\n // Dragging upwards\n if (dragIndex > newIndex && hoverClientY > hoverMiddleY) {\n return;\n }\n }\n\n // Time to actually perform the action\n onMoveItem(newIndex, dragIndex);\n item.index = newIndex;\n } else {\n // Using numbers as indices doesn't work for nested list items with path like [1, 1, 0]\n if (Array.isArray(dragIndex) && Array.isArray(newIndex)) {\n // Indices comparison to find item position in nested list\n const minLength = Math.min(dragIndex.length, newIndex.length);\n let areEqual = true;\n let isLessThan = false;\n let isGreaterThan = false;\n\n for (let i = 0; i < minLength; i++) {\n if (dragIndex[i] < newIndex[i]) {\n isLessThan = true;\n areEqual = false;\n break;\n } else if (dragIndex[i] > newIndex[i]) {\n isGreaterThan = true;\n areEqual = false;\n break;\n }\n }\n\n // Don't replace items with themselves\n if (areEqual && dragIndex.length === newIndex.length) {\n return;\n }\n\n if (dropSensitivity === DROP_SENSITIVITY.REGULAR) {\n // Dragging downwards\n if (isLessThan && !isGreaterThan && hoverClientY < hoverMiddleY) {\n return;\n }\n\n // Dragging upwards\n if (isGreaterThan && !isLessThan && hoverClientY > hoverMiddleY) {\n return;\n }\n }\n }\n\n onMoveItem(newIndex, dragIndex);\n item.index = newIndex;\n }\n },\n });\n\n const getDragDirection = (monitor: DragSourceMonitor<TItem, void>) => {\n if (\n monitor &&\n monitor.isDragging() &&\n !monitor.didDrop() &&\n monitor.getInitialClientOffset() &&\n monitor.getClientOffset()\n ) {\n const deltaY = monitor.getInitialClientOffset()!.y - monitor.getClientOffset()!.y;\n\n if (deltaY > 0) return DIRECTIONS.UPWARD;\n\n if (deltaY < 0) return DIRECTIONS.DOWNWARD;\n\n return null;\n }\n\n return null;\n };\n\n const [{ isDragging, direction }, dragRef, dragPreviewRef] = useDrag({\n type,\n item() {\n if (onStart) {\n onStart();\n }\n\n /**\n * This will be attached and it helps define the preview sizes\n * when a component is flexy e.g. Relations\n */\n const { width } = objectRef.current?.getBoundingClientRect() ?? {};\n\n return { index, width, ...item };\n },\n end() {\n if (onEnd) {\n onEnd();\n }\n },\n canDrag: active,\n /**\n * This is useful when the item is in a virtualized list.\n * However, if we don't have an ID then we want the libraries\n * defaults to take care of this.\n */\n isDragging: item?.id\n ? (monitor) => {\n return item.id === monitor.getItem().id;\n }\n : undefined,\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n initialOffset: monitor.getInitialClientOffset(),\n currentOffset: monitor.getClientOffset(),\n direction: getDragDirection(monitor),\n }),\n });\n\n const handleKeyDown = useKeyboardDragAndDrop(active, index, {\n onGrabItem,\n onDropItem,\n onCancel,\n onMoveItem,\n });\n\n return [\n { handlerId, isDragging, handleKeyDown, isOverDropTarget: isOver, direction },\n objectRef,\n dropRef,\n dragRef,\n dragPreviewRef,\n ];\n};\n\nexport {\n useDragAndDrop,\n UseDragAndDropReturn,\n UseDragAndDropOptions,\n DIRECTIONS,\n DROP_SENSITIVITY,\n};\n"],"names":["ItemTypes","COMPONENT","EDIT_FIELD","FIELD","DYNAMIC_ZONE","RELATION","BLOCKS","useKeyboardDragAndDrop","active","index","onCancel","onDropItem","onGrabItem","onMoveItem","isSelected","setIsSelected","React","useState","handleMove","movement","handleDragClick","handleCancel","handleKeyDown","e","key","preventDefault","DIRECTIONS","UPWARD","DOWNWARD","DROP_SENSITIVITY","REGULAR","IMMEDIATE","useDragAndDrop","type","item","onStart","onEnd","dropSensitivity","objectRef","useRef","handlerId","isOver","dropRef","useDrop","accept","collect","monitor","getHandlerId","shallow","drop","draggedIndex","newIndex","hover","current","dragIndex","hoverBoundingRect","getBoundingClientRect","hoverMiddleY","bottom","top","clientOffset","getClientOffset","hoverClientY","y","Array","isArray","minLength","Math","min","length","areEqual","isLessThan","isGreaterThan","i","getDragDirection","isDragging","didDrop","getInitialClientOffset","deltaY","direction","dragRef","dragPreviewRef","useDrag","width","end","canDrag","id","getItem","undefined","initialOffset","currentOffset","isOverDropTarget"],"mappings":"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"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"useDragAndDrop-gcqEJMnO.js","sources":["../../../admin/src/constants/dragAndDrop.ts","../../../admin/src/hooks/useKeyboardDragAndDrop.ts","../../../admin/src/hooks/useDragAndDrop.ts"],"sourcesContent":["export const ItemTypes = {\n COMPONENT: 'component',\n EDIT_FIELD: 'editField',\n FIELD: 'field',\n DYNAMIC_ZONE: 'dynamicZone',\n RELATION: 'relation',\n BLOCKS: 'blocks',\n} as const;\n","import * as React from 'react';\n\nexport type UseKeyboardDragAndDropCallbacks<TIndex extends number | Array<number> = number> = {\n onCancel?: (index: TIndex) => void;\n onDropItem?: (currentIndex: TIndex, newIndex?: TIndex) => void;\n onGrabItem?: (index: TIndex) => void;\n onMoveItem?: (newIndex: TIndex, currentIndex: TIndex) => void;\n};\n\n/**\n * Utility hook designed to implement keyboard accessibile drag and drop by\n * returning an onKeyDown handler to be passed to the drag icon button.\n *\n * @internal - You should use `useDragAndDrop` instead.\n */\nexport const useKeyboardDragAndDrop = <TIndex extends number | Array<number> = number>(\n active: boolean,\n index: TIndex,\n { onCancel, onDropItem, onGrabItem, onMoveItem }: UseKeyboardDragAndDropCallbacks<TIndex>\n) => {\n const [isSelected, setIsSelected] = React.useState(false);\n\n const handleMove = (movement: 'UP' | 'DOWN') => {\n if (!isSelected) {\n return;\n }\n if (typeof index === 'number' && onMoveItem) {\n if (movement === 'UP') {\n onMoveItem((index - 1) as TIndex, index);\n } else if (movement === 'DOWN') {\n onMoveItem((index + 1) as TIndex, index);\n }\n }\n };\n\n const handleDragClick = () => {\n if (isSelected) {\n if (onDropItem) {\n onDropItem(index);\n }\n setIsSelected(false);\n } else {\n if (onGrabItem) {\n onGrabItem(index);\n }\n setIsSelected(true);\n }\n };\n\n const handleCancel = () => {\n if (isSelected) {\n setIsSelected(false);\n\n if (onCancel) {\n onCancel(index);\n }\n }\n };\n\n const handleKeyDown = <E extends Element>(e: React.KeyboardEvent<E>) => {\n if (!active) {\n return;\n }\n\n if (e.key === 'Tab' && !isSelected) {\n return;\n }\n\n e.preventDefault();\n\n switch (e.key) {\n case ' ':\n case 'Enter':\n handleDragClick();\n break;\n\n case 'Escape':\n handleCancel();\n break;\n\n case 'ArrowDown':\n case 'ArrowRight':\n handleMove('DOWN');\n break;\n\n case 'ArrowUp':\n case 'ArrowLeft':\n handleMove('UP');\n break;\n\n default:\n }\n };\n\n return handleKeyDown;\n};\n","import * as React from 'react';\n\nimport {\n useDrag,\n useDrop,\n type HandlerManager,\n type ConnectDragSource,\n type ConnectDropTarget,\n type ConnectDragPreview,\n type DragSourceMonitor,\n} from 'react-dnd';\n\nimport {\n useKeyboardDragAndDrop,\n type UseKeyboardDragAndDropCallbacks,\n} from './useKeyboardDragAndDrop';\n\nimport type { Data } from '@strapi/types';\n\nconst DIRECTIONS = {\n UPWARD: 'upward',\n DOWNWARD: 'downward',\n} as const;\n\nconst DROP_SENSITIVITY = {\n REGULAR: 'regular',\n IMMEDIATE: 'immediate',\n} as const;\n\ninterface UseDragAndDropOptions<\n TIndex extends number | Array<number> = number,\n TItem extends { index: TIndex } = { index: TIndex },\n> extends UseKeyboardDragAndDropCallbacks<TIndex> {\n type?: string;\n index: TIndex;\n item?: TItem;\n onStart?: () => void;\n onEnd?: () => void;\n dropSensitivity?: (typeof DROP_SENSITIVITY)[keyof typeof DROP_SENSITIVITY];\n}\n\ntype Identifier = ReturnType<HandlerManager['getHandlerId']>;\n\ntype UseDragAndDropReturn<E extends Element = HTMLElement> = [\n props: {\n handlerId: Identifier;\n isDragging: boolean;\n handleKeyDown: <E extends Element>(event: React.KeyboardEvent<E>) => void;\n isOverDropTarget: boolean;\n direction: (typeof DIRECTIONS)[keyof typeof DIRECTIONS] | null;\n },\n objectRef: React.RefObject<E>,\n dropRef: ConnectDropTarget,\n dragRef: ConnectDragSource,\n dragPreviewRef: ConnectDragPreview,\n];\n\ntype DropCollectedProps = {\n handlerId: Identifier;\n isOver: boolean;\n};\n\n/**\n * A utility hook abstracting the general drag and drop hooks from react-dnd.\n * Centralising the same behaviours and by default offering keyboard support.\n */\nconst useDragAndDrop = <\n TIndex extends number | Array<number>,\n TItem extends { index: TIndex; id?: Data.ID; [key: string]: unknown } = {\n index: TIndex;\n [key: string]: unknown;\n },\n E extends Element = HTMLElement,\n>(\n active: boolean,\n {\n type = 'STRAPI_DND',\n index,\n item,\n onStart,\n onEnd,\n onGrabItem,\n onDropItem,\n onCancel,\n onMoveItem,\n dropSensitivity = DROP_SENSITIVITY.REGULAR,\n }: UseDragAndDropOptions<TIndex, TItem>\n): UseDragAndDropReturn<E> => {\n const objectRef = React.useRef<E>(null);\n\n const [{ handlerId, isOver }, dropRef] = useDrop<TItem, void, DropCollectedProps>({\n accept: type,\n collect(monitor) {\n return {\n handlerId: monitor.getHandlerId(),\n isOver: monitor.isOver({ shallow: true }),\n };\n },\n drop(item) {\n const draggedIndex = item.index;\n const newIndex = index;\n\n if (isOver && onDropItem) {\n onDropItem(draggedIndex, newIndex);\n }\n },\n hover(item, monitor) {\n if (!objectRef.current || !onMoveItem) {\n return;\n }\n\n const dragIndex = item.index;\n const newIndex = index;\n\n const hoverBoundingRect = objectRef.current?.getBoundingClientRect();\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n const clientOffset = monitor.getClientOffset();\n if (!clientOffset) return;\n\n const hoverClientY = clientOffset && clientOffset.y - hoverBoundingRect.top;\n if (typeof dragIndex === 'number' && typeof newIndex === 'number') {\n if (dragIndex === newIndex) {\n // Don't replace items with themselves\n return;\n }\n\n if (dropSensitivity === DROP_SENSITIVITY.REGULAR) {\n // Dragging downwards\n if (dragIndex < newIndex && hoverClientY < hoverMiddleY) {\n return;\n }\n\n // Dragging upwards\n if (dragIndex > newIndex && hoverClientY > hoverMiddleY) {\n return;\n }\n }\n\n // Time to actually perform the action\n onMoveItem(newIndex, dragIndex);\n item.index = newIndex;\n } else {\n // Using numbers as indices doesn't work for nested list items with path like [1, 1, 0]\n if (Array.isArray(dragIndex) && Array.isArray(newIndex)) {\n // Indices comparison to find item position in nested list\n const minLength = Math.min(dragIndex.length, newIndex.length);\n let areEqual = true;\n let isLessThan = false;\n let isGreaterThan = false;\n\n for (let i = 0; i < minLength; i++) {\n if (dragIndex[i] < newIndex[i]) {\n isLessThan = true;\n areEqual = false;\n break;\n } else if (dragIndex[i] > newIndex[i]) {\n isGreaterThan = true;\n areEqual = false;\n break;\n }\n }\n\n // Don't replace items with themselves\n if (areEqual && dragIndex.length === newIndex.length) {\n return;\n }\n\n if (dropSensitivity === DROP_SENSITIVITY.REGULAR) {\n // Dragging downwards\n if (isLessThan && !isGreaterThan && hoverClientY < hoverMiddleY) {\n return;\n }\n\n // Dragging upwards\n if (isGreaterThan && !isLessThan && hoverClientY > hoverMiddleY) {\n return;\n }\n }\n }\n\n onMoveItem(newIndex, dragIndex);\n item.index = newIndex;\n }\n },\n });\n\n const getDragDirection = (monitor: DragSourceMonitor<TItem, void>) => {\n if (\n monitor &&\n monitor.isDragging() &&\n !monitor.didDrop() &&\n monitor.getInitialClientOffset() &&\n monitor.getClientOffset()\n ) {\n const deltaY = monitor.getInitialClientOffset()!.y - monitor.getClientOffset()!.y;\n\n if (deltaY > 0) return DIRECTIONS.UPWARD;\n\n if (deltaY < 0) return DIRECTIONS.DOWNWARD;\n\n return null;\n }\n\n return null;\n };\n\n const [{ isDragging, direction }, dragRef, dragPreviewRef] = useDrag({\n type,\n item() {\n if (onStart) {\n onStart();\n }\n\n /**\n * This will be attached and it helps define the preview sizes\n * when a component is flexy e.g. Relations\n */\n const { width } = objectRef.current?.getBoundingClientRect() ?? {};\n\n return { index, width, ...item };\n },\n end() {\n if (onEnd) {\n onEnd();\n }\n },\n canDrag: active,\n /**\n * This is useful when the item is in a virtualized list.\n * However, if we don't have an ID then we want the libraries\n * defaults to take care of this.\n */\n isDragging: item?.id\n ? (monitor) => {\n return item.id === monitor.getItem().id;\n }\n : undefined,\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n initialOffset: monitor.getInitialClientOffset(),\n currentOffset: monitor.getClientOffset(),\n direction: getDragDirection(monitor),\n }),\n });\n\n const handleKeyDown = useKeyboardDragAndDrop(active, index, {\n onGrabItem,\n onDropItem,\n onCancel,\n onMoveItem,\n });\n\n return [\n { handlerId, isDragging, handleKeyDown, isOverDropTarget: isOver, direction },\n objectRef,\n dropRef,\n dragRef,\n dragPreviewRef,\n ];\n};\n\nexport {\n useDragAndDrop,\n UseDragAndDropReturn,\n UseDragAndDropOptions,\n DIRECTIONS,\n DROP_SENSITIVITY,\n};\n"],"names":["ItemTypes","COMPONENT","EDIT_FIELD","FIELD","DYNAMIC_ZONE","RELATION","BLOCKS","useKeyboardDragAndDrop","active","index","onCancel","onDropItem","onGrabItem","onMoveItem","isSelected","setIsSelected","React","useState","handleMove","movement","handleDragClick","handleCancel","handleKeyDown","e","key","preventDefault","DIRECTIONS","UPWARD","DOWNWARD","DROP_SENSITIVITY","REGULAR","IMMEDIATE","useDragAndDrop","type","item","onStart","onEnd","dropSensitivity","objectRef","useRef","handlerId","isOver","dropRef","useDrop","accept","collect","monitor","getHandlerId","shallow","drop","draggedIndex","newIndex","hover","current","dragIndex","hoverBoundingRect","getBoundingClientRect","hoverMiddleY","bottom","top","clientOffset","getClientOffset","hoverClientY","y","Array","isArray","minLength","Math","min","length","areEqual","isLessThan","isGreaterThan","i","getDragDirection","isDragging","didDrop","getInitialClientOffset","deltaY","direction","dragRef","dragPreviewRef","useDrag","width","end","canDrag","id","getItem","undefined","initialOffset","currentOffset","isOverDropTarget"],"mappings":"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"}
|
@@ -1,18 +0,0 @@
|
|
1
|
-
import { useRef, useEffect } from 'react';
|
2
|
-
|
3
|
-
const prefixFileUrlWithBackendUrl = (fileURL)=>{
|
4
|
-
return !!fileURL && fileURL.startsWith('/') ? `${window.strapi.backendURL}${fileURL}` : fileURL;
|
5
|
-
};
|
6
|
-
|
7
|
-
const usePrev = (value)=>{
|
8
|
-
const ref = useRef();
|
9
|
-
useEffect(()=>{
|
10
|
-
ref.current = value;
|
11
|
-
}, [
|
12
|
-
value
|
13
|
-
]);
|
14
|
-
return ref.current;
|
15
|
-
};
|
16
|
-
|
17
|
-
export { prefixFileUrlWithBackendUrl as p, usePrev as u };
|
18
|
-
//# sourceMappingURL=usePrev-Bjw2dhmq.mjs.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"usePrev-Bjw2dhmq.mjs","sources":["../../../admin/src/utils/urls.ts","../../../admin/src/hooks/usePrev.ts"],"sourcesContent":["const prefixFileUrlWithBackendUrl = (fileURL?: string): string | undefined => {\n return !!fileURL && fileURL.startsWith('/') ? `${window.strapi.backendURL}${fileURL}` : fileURL;\n};\n\nexport { prefixFileUrlWithBackendUrl };\n","import { useEffect, useRef } from 'react';\n\nexport const usePrev = <T>(value: T): T | undefined => {\n const ref = useRef<T>();\n\n useEffect(() => {\n ref.current = value;\n }, [value]);\n\n return ref.current;\n};\n"],"names":["prefixFileUrlWithBackendUrl","fileURL","startsWith","window","strapi","backendURL","usePrev","value","ref","useRef","useEffect","current"],"mappings":";;AAAA,MAAMA,8BAA8B,CAACC,OAAAA,GAAAA;AACnC,IAAA,OAAO,CAAC,CAACA,OAAAA,IAAWA,OAAQC,CAAAA,UAAU,CAAC,GAAO,CAAA,GAAA,CAAC,EAAEC,MAAAA,CAAOC,MAAM,CAACC,UAAU,CAAC,EAAEJ,OAAAA,CAAQ,CAAC,GAAGA,OAAAA;AAC1F;;ACAO,MAAMK,UAAU,CAAIC,KAAAA,GAAAA;AACzB,IAAA,MAAMC,GAAMC,GAAAA,MAAAA,EAAAA;IAEZC,SAAU,CAAA,IAAA;AACRF,QAAAA,GAAAA,CAAIG,OAAO,GAAGJ,KAAAA;KACb,EAAA;AAACA,QAAAA;AAAM,KAAA,CAAA;AAEV,IAAA,OAAOC,IAAIG,OAAO;AACpB;;;;"}
|