@mattisvensson/strapi-plugin-webatlas 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +9 -16
  2. package/dist/_chunks/_commonjsHelpers-BxmBWJD2.mjs +1 -0
  3. package/dist/_chunks/_commonjsHelpers-BxmBWJD2.mjs.map +1 -0
  4. package/dist/_chunks/_commonjsHelpers-Cq6wktVC.js +1 -0
  5. package/dist/_chunks/_commonjsHelpers-Cq6wktVC.js.map +1 -0
  6. package/dist/_chunks/en-B4KWt_jN.js +1 -0
  7. package/dist/_chunks/en-B4KWt_jN.js.map +1 -0
  8. package/dist/_chunks/en-Byx4XI2L.mjs +1 -0
  9. package/dist/_chunks/en-Byx4XI2L.mjs.map +1 -0
  10. package/dist/_chunks/index-BN88Lgzs.mjs +48 -0
  11. package/dist/_chunks/index-BN88Lgzs.mjs.map +1 -0
  12. package/dist/_chunks/index-BO-x2JqR.js +773 -0
  13. package/dist/_chunks/index-BO-x2JqR.js.map +1 -0
  14. package/dist/_chunks/index-BlgOvhoB.js +48 -0
  15. package/dist/_chunks/index-BlgOvhoB.js.map +1 -0
  16. package/dist/_chunks/index-BxpNGM75.js +6815 -0
  17. package/dist/_chunks/index-BxpNGM75.js.map +1 -0
  18. package/dist/_chunks/index-C9WMC_E4.mjs +18006 -0
  19. package/dist/_chunks/index-C9WMC_E4.mjs.map +1 -0
  20. package/dist/_chunks/index-CMR1MRav.js +773 -0
  21. package/dist/_chunks/index-CMR1MRav.js.map +1 -0
  22. package/dist/_chunks/index-CWKVE-jr.mjs +18006 -0
  23. package/dist/_chunks/index-CWKVE-jr.mjs.map +1 -0
  24. package/dist/_chunks/index-CX7sNP82.mjs +6815 -0
  25. package/dist/_chunks/index-CX7sNP82.mjs.map +1 -0
  26. package/dist/_chunks/index-CZ17y-Jh.mjs +6815 -0
  27. package/dist/_chunks/index-CZ17y-Jh.mjs.map +1 -0
  28. package/dist/_chunks/index-CoLyO2LL.js +774 -0
  29. package/dist/_chunks/index-CoLyO2LL.js.map +1 -0
  30. package/dist/_chunks/index-D-Td1Ois.mjs +774 -0
  31. package/dist/_chunks/index-D-Td1Ois.mjs.map +1 -0
  32. package/dist/_chunks/index-D-XQl47E.mjs +48 -0
  33. package/dist/_chunks/index-D-XQl47E.mjs.map +1 -0
  34. package/dist/_chunks/index-D2uQoUmx.js +18011 -0
  35. package/dist/_chunks/index-D2uQoUmx.js.map +1 -0
  36. package/dist/_chunks/index-D6j3Fzy1.js +48 -0
  37. package/dist/_chunks/index-D6j3Fzy1.js.map +1 -0
  38. package/dist/_chunks/index-D7gp-xV4.js +6815 -0
  39. package/dist/_chunks/index-D7gp-xV4.js.map +1 -0
  40. package/dist/_chunks/index-DDqPnM_n.js +18018 -0
  41. package/dist/_chunks/index-DDqPnM_n.js.map +1 -0
  42. package/dist/_chunks/index-DjiYUIHu.mjs +775 -0
  43. package/dist/_chunks/index-DjiYUIHu.mjs.map +1 -0
  44. package/dist/_chunks/index-Dswi-nB-.js +6815 -0
  45. package/dist/_chunks/index-Dswi-nB-.js.map +1 -0
  46. package/dist/_chunks/index-_NyTpRNV.js +48 -0
  47. package/dist/_chunks/index-_NyTpRNV.js.map +1 -0
  48. package/dist/_chunks/index-kDu0Msv9.js +18025 -0
  49. package/dist/_chunks/index-kDu0Msv9.js.map +1 -0
  50. package/dist/admin/index.js +2 -1
  51. package/dist/admin/index.js.map +1 -0
  52. package/dist/admin/index.mjs +2 -1
  53. package/dist/admin/index.mjs.map +1 -0
  54. package/dist/server/index.js +11 -10
  55. package/dist/server/index.js.map +1 -0
  56. package/dist/server/index.mjs +11 -10
  57. package/dist/server/index.mjs.map +1 -0
  58. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DjiYUIHu.mjs","sources":["../../pluginId.ts","../../admin/src/components/Initializer.tsx","../../admin/src/components/PluginIcon.tsx","../../admin/src/hooks/useApi.ts","../../admin/src/hooks/useAllContentTypes.ts","../../admin/src/hooks/usePluginConfig.ts","../../utils/transformToUrl.ts","../../admin/src/components/Tooltip.tsx","../../admin/src/utils/debounce.ts","../../admin/src/components/URLInfo.tsx","../../admin/src/utils/duplicateCheck.ts","../../admin/src/components/CMEditViewAside/Alias.tsx","../../admin/src/components/CMEditViewAside/index.tsx","../../admin/src/index.tsx"],"sourcesContent":["import pluginPkg from './package.json';\n\nconst PLUGIN_ID = pluginPkg.strapi.name.replace(/^(@[^-,.][\\w,-]+\\/|strapi-)plugin-/i, '') || 'webatlas';\nconst PLUGIN_NAME = pluginPkg.strapi.displayName || PLUGIN_ID;\n\nexport { PLUGIN_ID, PLUGIN_NAME };\n","import { useEffect, useRef } from 'react';\n\nimport { PLUGIN_ID } from '../../../pluginId';\n\ntype InitializerProps = {\n setPlugin: (id: string) => void;\n};\n\nconst Initializer = ({ setPlugin }: InitializerProps) => {\n const ref = useRef(setPlugin);\n\n useEffect(() => {\n ref.current(PLUGIN_ID);\n }, []);\n\n return null;\n};\n\nexport { Initializer };\n","import { Link, List } from '@strapi/icons';\n\nconst RouteIcon = () => <Link />;\nconst NavigationIcon = () => <List />;\n\nexport { RouteIcon, NavigationIcon };\n","import { ContentType, GroupedEntities, RouteSettings, NavItemSettings, ConfigContentType, NavOverviewState, StructuredNavigationVariant, NavigationInput } from '../../../types';\nimport { useFetchClient } from '@strapi/strapi/admin';\n\nexport default function useApi() {\n const { get, post, put, del } = useFetchClient();\n\n const fetchAllContentTypes = async () => {\n const { data } = await get('/content-manager/content-types');\n return data.data\n }\n\n const fetchAllEntities = async (contentTypes?: ConfigContentType[]) => {\n try {\n if (!contentTypes) {\n const { data } = await get('/webatlas/config')\n contentTypes = data?.selectedContentTypes || []\n }\n\n const allContentTypes = await fetchAllContentTypes();\n\n let entities: GroupedEntities[] = [];\n if (contentTypes && contentTypes.length > 0) {\n entities = await Promise.all(\n contentTypes.map(async (contentType: ConfigContentType) => {\n const { data } = await get(`/content-manager/collection-types/${contentType.uid}`);\n const entity = allContentTypes.find((ct: ContentType) => ct.uid === contentType.uid);\n if (!entity) {\n throw new Error(`Content type ${contentType} not found`);\n }\n return {\n entities: data.results,\n label: entity.info.displayName,\n contentType\n }\n })\n );\n }\n return entities;\n } catch (err) {\n console.error(err);\n throw err;\n }\n }\n\n const getRouteByRelated = async (relatedDocumentId: string, populate?: string) => {\n const { data } = await get(`/content-manager/collection-types/plugin::webatlas.route?filters[relatedDocumentId][$eq]=${relatedDocumentId}${populate ? '&populate' + populate : ''}`);\n if (data?.results) return data.results[0];\n \n return null;\n };\n\n const createExternalRoute = async (body: RouteSettings) => {\n const { data } = await post('/webatlas/route/external', {\n data: {\n ...body,\n },\n });\n return data\n };\n\n const getRoutes = async () => {\n const { data } = await get('/webatlas/route');\n return data\n };\n \n const updateRoute = async (body: RouteSettings, documentId: string) => {\n const { data } = await put(`/webatlas/route?documentId=${documentId}`, {\n data: {\n ...body,\n },\n });\n return data\n };\n\n const createNavItem = async (body: NavItemSettings) => {\n const { data } = await post('/webatlas/navitem', {\n data: {\n ...body,\n },\n });\n return data\n };\n\n const updateNavItem = async (documentId: string, body: NavItemSettings) => {\n const { data } = await put(`/webatlas/navitem?documentId=${documentId}`, {\n data: {\n ...body,\n },\n });\n return data\n };\n\n const deleteNavItem = async (documentId: string) => {\n const { data } = await del(`/webatlas/navitem?documentId=${documentId}`);\n return data\n };\n\n const getStructuredNavigation = async (documentId: string, variant: StructuredNavigationVariant = 'nested') => {\n const { data } = await get(`/webatlas/navigation?documentId=${documentId}&variant=${variant}`);\n return data\n }\n\n const deleteNavigation = async (documentId: string) => {\n const { data } = await del(`/webatlas/navigation?documentId=${documentId}`);\n return data\n }\n\n const updateNavigation = async (documentId: string, body: NavigationInput) => {\n const { data } = await put(`/webatlas/navigation?documentId=${documentId}`, {\n data: body,\n });\n return data\n };\n\n return { fetchAllContentTypes, fetchAllEntities, getRouteByRelated, createExternalRoute, getRoutes, updateRoute, createNavItem, updateNavItem, deleteNavItem, getStructuredNavigation, deleteNavigation, updateNavigation }\n}\n","import { useState, useEffect } from 'react';\nimport useApi from './useApi';\nimport { ContentType } from '../../../types';\n\nconst useAllContentTypes = () => {\n const { fetchAllContentTypes } = useApi();\n const [contentTypes, setContentTypes] = useState<ContentType[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n\n useEffect(() => {\n const fetchEntities = async () => {\n try {\n const result = await fetchAllContentTypes();\n\n setContentTypes(result);\n setLoading(false);\n } catch (err: any) {\n setError(err);\n setLoading(false);\n }\n };\n\n fetchEntities();\n }, []);\n return { contentTypes, loading, error };\n};\n\nexport default useAllContentTypes;\n\n","import { useState, useEffect } from 'react';\nimport { PluginConfig } from '../../../types';\nimport { useFetchClient } from '@strapi/strapi/admin';\n\ntype UsePluginConfigResponse = {\n data: PluginConfig | null;\n loading: boolean;\n error: string | null;\n setConfig: (body: PluginConfig) => Promise<boolean | void>;\n};\n\nexport default function usePluginConfig(): UsePluginConfigResponse {\n const { put, get } = useFetchClient();\n\n const [data, setData] = useState<PluginConfig | null>(null);\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const fetchData = async () => {\n setLoading(true);\n try {\n const { data: { data: contentTypesArray} } = await get('/content-manager/content-types');\n let { data: config } = await get('/webatlas/config');\n\n if (!config || !config.selectedContentTypes) {\n throw new Error(`HTTP error! Couldn't fetch plugin config`);\n }\n\n // Only use content types that have webatlas enabled in plugin options\n const allowedContentTypes = contentTypesArray.filter((type: any) => \n type.pluginOptions?.webatlas?.active === true\n );\n\n const contentTypeUids = new Set(allowedContentTypes.map((type: any) => type.uid));\n const activeContentTypes = config.selectedContentTypes.filter((type: any) => contentTypeUids.has(type.uid));\n\n if (JSON.stringify(activeContentTypes) !== JSON.stringify(config.selectedContentTypes)) {\n config = { ...config, selectedContentTypes: activeContentTypes}\n setConfig(config);\n }\n\n setData(config);\n setLoading(false);\n } catch (error) {\n setError((error as Error).message);\n setLoading(false);\n }\n };\n\n fetchData();\n }, []);\n\n async function setConfig(body: PluginConfig) {\n try {\n await put('/webatlas/config', {\n ...body,\n }); \n } catch (error) {\n setError((error as Error).message);\n }\n }\n\n return { data, loading, error, setConfig };\n}","export default function transformToUrl(input: string): string {\n const specialCharMap: { [key: string]: string } = {\n 'ü': 'ue',\n 'ä': 'ae',\n 'ö': 'oe',\n };\n\n if (!input || typeof input !== 'string') return '';\n\n input = input.toLowerCase();\n\n // Reduce multiple slashes to a single slash and remove leading/trailing slashes\n input = input.replace(/\\/+/g, '/');\n input = input.startsWith('/') ? input.slice(1) : input;\n input = input.endsWith('/') ? input.slice(0, -1) : input;\n \n // Replace special characters\n for (const char in specialCharMap) {\n const regex = new RegExp(char, 'g');\n input = input.replace(regex, specialCharMap[char]);\n }\n\n // Remove leading and trailing spaces\n input = input.trim();\n \n // Replace spaces with hyphens\n input = input.replace(/\\s+/g, '-');\n\n // Encode special characters\n // input = encodeURIComponent(input);\n \n // Remove any characters that are not alphanumeric, hyphens, underscores, or slashes\n input = input.replace(/[^A-Za-z0-9$\\-_.+!*'()/]/g, '');\n\n // Replace multiple consecutive dashes with a single dash\n input = input.replace(/-+/g, '-');\n\n return input;\n }","import { Information } from '@strapi/icons';\nimport { Tooltip as StrapiTooltip, Box } from '@strapi/design-system';\n\nexport default function Tooltip({ description }: { description: string }) {\n return <Box paddingLeft={1} paddingRight={1}>\n <StrapiTooltip description={description}>\n <Information aria-hidden=\"true\"/>\n </StrapiTooltip>\n </Box>\n}","export default function debounce<T extends any[]>(func: (...args: T) => void, wait: number) {\n let timeout: NodeJS.Timeout;\n return function executedFunction(...args: T) {\n const later = () => {\n clearTimeout(timeout);\n func(...args);\n };\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n };\n}","import { Box, Typography } from '@strapi/design-system';\n\ninterface URLInfoProps {\n validationState: 'initial' | 'checking' | 'done';\n\treplacement: string;\n}\n\nexport default function URLInfo({validationState, replacement}: URLInfoProps) {\n\tif (validationState === 'initial') return null\n\tlet color = 'neutral800'\n\tlet text = 'Checking if URL is available...'\n\n\tif (validationState === 'checking') {\n\t\tcolor = 'neutral800'\n\t\ttext = 'Checking if URL is available...'\n\t} else if (validationState === 'done') {\n\t\tcolor = replacement ? 'danger500' : 'success500'\n\t\ttext = replacement ? `URL is not available. Replaced with \"${replacement}\".` : 'URL is available'\n\t}\n\n\treturn (\n\t\t<Box paddingTop={2}>\n\t\t\t<Typography textColor={color}>{text}</Typography>\n\t\t</Box>\n\t)\n}","import transformToUrl from \"../../../utils/transformToUrl\";\n\n/**\n * Checks if a URL is unique by making a POST request.\n * @param url The URL to check.\n * @param routeId The ID of the route to exclude from the check.\n * @returns A promise that resolves to the response text if the request is successful.\n * @throws {Error} Throws an error if the request fails or the network response is not ok.\n */\n\nexport default async function duplicateCheck(url: string, routeDocumentId?: string | null): Promise<string> {\n if (!url) throw new Error(\"URL is required\");\n \n try {\n const res = await fetch(`/webatlas/checkUniquePath?path=${transformToUrl(url)}${routeDocumentId ? `&targetRouteDocumentId=${routeDocumentId}` : ''}`);\n\n if (!res.ok) throw new Error(`Network response was not ok: ${res.status} ${res.statusText}`);\n \n return await res.text();\n } catch (err) {\n console.error(\"Error in duplicateCheck:\", err);\n throw new Error(\"Failed to check URL uniqueness\");\n }\n}","import { Checkbox, Box, Flex, Typography, Field, Divider } from '@strapi/design-system';\nimport { useState, useEffect, useRef, useCallback, useReducer, useMemo } from 'react';\nimport transformToUrl from '../../../../utils/transformToUrl';\nimport { unstable_useContentManagerContext as useContentManagerContext } from '@strapi/strapi/admin';\nimport { ConfigContentType } from '../../../../types';\nimport Tooltip from '../Tooltip';\nimport debounce from '../../utils/debounce';\nimport URLInfo from '../URLInfo';\nimport duplicateCheck from '../../utils/duplicateCheck';\nimport { useApi } from '../../hooks'\n\ntype Action = \n | { type: 'DEFAULT'; payload: string }\n | { type: 'NO_URL_CHECK'; payload: string }\n | { type: 'NO_TRANSFORM_AND_CHECK'; payload: string }\n | { type: 'RESET_URL_CHECK_FLAG'; }\n | { type: 'SET_UIDPATH'; payload: string }\n | { type: 'SET_DOCUMENTIDPATH'; payload: string }\n\ntype PathState = {\n\tvalue?: string;\n\tprevValue?: string,\n\tuIdPath?: string,\n\tdocumentIdPath?: string,\n\tneedsUrlCheck: boolean;\n};\n\nfunction reducer(state: PathState, action: Action): PathState {\n\tswitch (action.type) {\n\t\tcase 'DEFAULT':\n return { \n\t\t\t\t...state,\n\t\t\t\tvalue: transformToUrl(action.payload), \n\t\t\t\tprevValue: state.value,\n\t\t\t\tneedsUrlCheck: true \n\t\t\t};\n\t\tcase 'NO_URL_CHECK':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tvalue: transformToUrl(action.payload), \n\t\t\t\tprevValue: state.value,\n\t\t\t\tneedsUrlCheck: false \n\t\t\t};\n\t\tcase 'NO_TRANSFORM_AND_CHECK':\n\t\t\treturn { \n\t\t\t\t...state,\n\t\t\t\tvalue: action.payload, \n\t\t\t\tprevValue: state.value,\n\t\t\t\tneedsUrlCheck: false \n\t\t\t};\n\t\tcase 'RESET_URL_CHECK_FLAG':\n\t\t\treturn { ...state, needsUrlCheck: false };\n\t\tcase 'SET_UIDPATH':\n\t\t\treturn { ...state, uIdPath: action.payload };\n\t\tcase 'SET_DOCUMENTIDPATH':\n\t\t\treturn { ...state, documentIdPath: action.payload };\n\t\tdefault:\n\t\t\tthrow new Error();\n\t}\n}\n\nconst Alias = ({ config }: { config: ConfigContentType }) => {\n\tconst { layout, form } = useContentManagerContext()\n\tconst { initialValues, values, onChange } = form;\n\tconst { getRouteByRelated } = useApi()\n\n\tconst [routeId, setRouteId] = useState<number | null>()\n\tconst [isOverride, setIsOverride] = useState(false);\n\tconst [validationState, setValidationState] = useState<'initial' | 'checking' | 'done'>('initial');\n\tconst [replacement, setReplacement] = useState<string>('');\n\tconst [initialLoadComplete, setInitialLoadComplete] = useState(false);\n\tconst [path, dispatchPath] = useReducer(reducer, {\n\t\tneedsUrlCheck: false,\n\t\tvalue: '',\n\t\tprevValue: '',\n\t\tuIdPath: ''\n\t});\n const hasUserChangedField = useRef(false);\n\tconst initialPath = useRef('')\n\tconst prevValueRef = useRef<string | null>(null);\n\n\tif (!config) return null\n\n\tconst debouncedCheckUrl = useCallback(debounce(checkUrl, 500), []);\n\n\tuseEffect(() => {\n\t\t// TODO: How to handle in Strapi v5?\n\t\t// if (config.apiField)\n\t\t// \tonChange(config.apiField, path.value);\n\n\t\tonChange('webatlas_path', path.value);\n\t\tonChange('webatlas_override', isOverride);\n\t}, [path.value, routeId, isOverride])\n\n const debouncedValueEffect = useMemo(\n () => debounce((currentValues: any) => {\n const key = config?.default;\n if (!key) return;\n\n const currentValue = currentValues[key];\n \n if (!currentValue) {\n dispatchPath({ type: 'NO_URL_CHECK', payload: '' });\n return;\n }\n\n // Only run automatic path generation if:\n // 1. Initial load is complete\n // 2. User has manually changed the field OR no route exists\n // 3. Not in override mode\n if (initialLoadComplete && \n (hasUserChangedField.current || !routeId) && \n prevValueRef.current !== currentValue && \n !isOverride) {\n \n const path = config.pattern ? `${config.pattern}/${currentValue}` : `${currentValue}`;\n if (currentValue === initialValues[key]) {\n dispatchPath({ type: 'NO_URL_CHECK', payload: path });\n } else {\n dispatchPath({ type: 'DEFAULT', payload: path });\n }\n prevValueRef.current = currentValue;\n }\n }, 500),\n [config?.default, config?.pattern, initialValues, isOverride, initialLoadComplete, routeId]\n );\n\n // Track when user changes the source field\n useEffect(() => {\n if (!initialLoadComplete) return;\n \n const key = config?.default;\n if (!key) return;\n \n const currentValue = values[key];\n const initialValue = initialValues[key];\n \n // Mark as user-changed if current value differs from initial value\n if (currentValue !== initialValue) {\n hasUserChangedField.current = true;\n }\n \n debouncedValueEffect(values);\n }, [values, debouncedValueEffect, initialLoadComplete]);\n\n\n useEffect(() => {\n\t\tif (path.needsUrlCheck && path.value) {\n\t\t\tif (path.uIdPath === path.value || initialPath.current === path.value) return\n\t\t\tdebouncedCheckUrl(path.value);\n\t\t\tdispatchPath({ type: 'RESET_URL_CHECK_FLAG' });\n }\n }, [path.needsUrlCheck]);\n\n\tuseEffect(() => {\n\n\t\tasync function getTypes() {\n\t\t\tif (!initialValues.documentId) {\n setInitialLoadComplete(true); // Mark as complete even if no route\n return;\n }\t\t\t\n\t\t\t\n\t\t\ttry {\n\t\t\t\tconst route = await getRouteByRelated(initialValues.documentId)\n\n\t\t\t\tif (!route) return\n\n\t\t\t\tinitialPath.current = initialValues.webatlas_path || route.uIdPath\n\t\t\t\tsetRouteId(route.id)\n\t\t\t\tsetIsOverride(route.isOverride || false)\n\t\t\t\t\n\t\t\t\tdispatchPath({ type: 'NO_TRANSFORM_AND_CHECK', payload: route.fullPath || '' });\n\t\t\t\tdispatchPath({ type: 'SET_UIDPATH', payload: route.uidPath || '' });\n\t\t\t\tdispatchPath({ type: 'SET_DOCUMENTIDPATH', payload: route.documentIdPath || '' });\n\t\t\t\n\t\t\t\t// Set the prevValueRef to prevent immediate override\n\t\t\t\tconst key = config?.default;\n if (key) {\n prevValueRef.current = values[key];\n }\n\t\t\t} catch (err) {\n\t\t\t\tsetRouteId(null)\n\t\t\t\tconsole.log(err)\n\t\t\t}\n\t\t\tsetInitialLoadComplete(true); // Mark initial load as complete\n\t\t}\n\t\tgetTypes()\n\t}, [config])\n\n\tuseEffect(() => {\n\t\tif (initialValues.webatlas_path) dispatchPath({ type: 'NO_URL_CHECK', payload: initialValues.webatlas_path });\n\t\tif (initialValues.webatlas_override) setIsOverride(initialValues.webatlas_override);\n\t}, [])\n\n\tasync function checkUrl(url: string) {\n\t\tif (!url) return\n\t\tsetValidationState('checking')\n\t\tsetReplacement('')\n\t\t\n\t\ttry {\n\t\t\tconst data = await duplicateCheck(url)\n\n\t\t\tif (!data || data === url) return \n\t\t\t\n\t\t\tdispatchPath({ type: 'NO_URL_CHECK', payload: data });\n\t\t\tsetReplacement(data)\n\t\t} catch (err) {\n\t\t\tconsole.log(err)\n\t\t} finally {\n\t\t\tsetValidationState('done')\n\t\t}\n\t}\n\n\treturn (\n\t\t<Box\n\t\t\tas=\"aside\"\n\t\t\taria-labelledby=\"URL Route\"\n\t\t\twidth=\"100%\"\n\t\t>\n\t\t\t<Flex\n\t\t\t\tdirection='column'\n\t\t\t\talignItems='stretch'\n\t\t\t\tgap={4}\n\t\t\t>\n\t\t\t\t<Box>\n\t\t\t\t\t<Field.Root hint={!initialValues.id && !config.default ? '[id] will be replaced with the entry ID' : ''}>\n\t\t\t\t\t\t<Field.Label>\n\t\t\t\t\t\t\tURL\n\t\t\t\t\t\t\t<Tooltip description=\"The following characters are valid: A-Z, a-z, 0-9, /, -, _, $, ., +, !, *, ', (, )\" />\n\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t<Field.Input\n\t\t\t\t\t\t\tid=\"url-input\"\n\t\t\t\t\t\t\tvalue={path.value}\n\t\t\t\t\t\t\tplaceholder={config.default ? `Edit the \"${config.default}\" field to generate a URL` : `${layout.list.settings.displayName?.toLowerCase()}/[id]`}\n\t\t\t\t\t\t\tonChange={(e: React.ChangeEvent<HTMLInputElement>) => dispatchPath({ type: 'NO_TRANSFORM_AND_CHECK', payload: e.target.value })}\n\t\t\t\t\t\t\tdisabled={!isOverride}\n\t\t\t\t\t\t\tonBlur={(e: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\t\t\t\t\t\tif (e.target.value === path.prevValue) return\n\t\t\t\t\t\t\t\tdispatchPath({ type: 'DEFAULT', payload: e.target.value })}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Field.Hint/>\n\t\t\t\t\t</Field.Root>\n\t\t\t\t\t<URLInfo validationState={validationState} replacement={replacement} />\n\t\t\t\t\t<Flex\n\t\t\t\t\t\tgap={2}\n\t\t\t\t\t\tpaddingTop={2}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\tid=\"override-url\"\n\t\t\t\t\t\t\tchecked={isOverride}\n\t\t\t\t\t\t\tonCheckedChange={() => setIsOverride(prev => !prev)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Typography textColor=\"neutral600\">\n\t\t\t\t\t\t\t\tOverride generated URL\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</Checkbox>\n\t\t\t\t\t</Flex>\n\t\t\t\t</Box>\n\t\t\t\t{path.uIdPath && path.documentIdPath && (\n\t\t\t\t\t<>\t\n\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t<Divider/>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t<Field.Root\n\t\t\t\t\t\t\t\thint=\"Permanent UID path, cannot be changed.\"\n\t\t\t\t\t\t\t\tlabel=\"UID path\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Field.Label/>\n\t\t\t\t\t\t\t\t<Field.Input\n\t\t\t\t\t\t\t\t\tvalue={path.uIdPath}\n\t\t\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<Field.Hint/>\n\t\t\t\t\t\t\t</Field.Root>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t<Field.Root\n\t\t\t\t\t\t\t\thint=\"Permanent DocumentID path, cannot be changed.\"\n\t\t\t\t\t\t\t\tlabel=\"DocumentID path\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Field.Label/>\n\t\t\t\t\t\t\t\t<Field.Input\n\t\t\t\t\t\t\t\t\tvalue={path.documentIdPath}\n\t\t\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<Field.Hint/>\n\t\t\t\t\t\t\t</Field.Root>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</Flex>\n\t\t</Box>\n\t)\n};\n\nexport default Alias;","import { useState, useEffect } from 'react';\nimport { unstable_useContentManagerContext as useContentManagerContext, } from '@strapi/strapi/admin';\nimport { Typography, Link } from '@strapi/design-system';\nimport { ConfigContentType } from '../../../../types';\nimport { usePluginConfig, useAllContentTypes } from '../../hooks';\nimport Alias from './Alias';\n// import Navigation from './Navigation';\n\nconst CMEditViewAside = () => {\n const { model } = useContentManagerContext()\n const { contentTypes } = useAllContentTypes()\n const { data: config } = usePluginConfig()\n\n const [contentTypeConfig, setContentTypeConfig] = useState<ConfigContentType | null>(null);\n const [isAllowedContentType, setIsAllowedContentType] = useState(false);\n const [isActiveContentType, setIsActiveContentType] = useState(true);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n if (!config) return\n \n const modelConfig = contentTypes?.find((ct) => ct.uid === model)\n if (modelConfig?.pluginOptions?.webatlas?.active) setIsAllowedContentType(true)\n \n config?.selectedContentTypes?.map((type) => {\n if (type.uid === model) {\n setIsActiveContentType(true);\n setContentTypeConfig(type);\n }\n })\n setIsLoading(false);\n }, [config])\n\n useEffect(() => {\n const label = Array.from(document.querySelectorAll('label')).find((l) => l.textContent?.startsWith('webatlas_path'));\n if (label) {\n let parentDiv = label.closest('div');\n for (let i = 0; i < 2; i++) {\n if (parentDiv) {\n // @ts-expect-error\n parentDiv = parentDiv.parentElement;\n }\n }\n if (parentDiv) {\n const grandParentDiv = parentDiv.parentElement;\n if (grandParentDiv && grandParentDiv.children.length === 1) {\n grandParentDiv.parentElement?.remove();\n return;\n } else {\n parentDiv.remove();\n }\n }\n }\n }, []);\n\n if (!isLoading) return (\n <Typography textColor=\"neutral600\">\n Loading...\n </Typography>\n )\n\n if (!isAllowedContentType) return (\n <Typography textColor=\"neutral600\">\n This content type is not allowed for <strong>WebAtlas</strong>. \n If you wish to use it, please contact your administrator. \n </Typography>\n )\n\n if (isActiveContentType || !contentTypeConfig) return (\n <Typography textColor=\"neutral600\">\n This content type is not configured for <strong>WebAtlas</strong>. \n If you wish to use it, please configure it in the \n <Link href=\"/admin/settings/webatlas/configuration\" marginLeft={1}>\n settings\n </Link>.\n </Typography>\n )\n\n return (\n <>\n <Alias config={contentTypeConfig}/>\n {/* <Navigation/> */}\n </>\n )\n};\n\nexport default CMEditViewAside;","import { StrapiApp } from '@strapi/admin/strapi-admin';\nimport { PLUGIN_ID, PLUGIN_NAME } from '../../pluginId';\nimport { Initializer } from './components/Initializer';\nimport { RouteIcon, NavigationIcon } from './components/PluginIcon';\nimport CMEditViewAside from './components/CMEditViewAside';\n\nexport default {\n register(app: StrapiApp) {\n app.addMenuLink({\n to: `/plugins/${PLUGIN_ID}/routes`,\n icon: RouteIcon,\n intlLabel: {\n id: `${PLUGIN_ID}.link.routes`,\n defaultMessage: 'Routes',\n },\n Component: async () => {\n const component = await import('./pages/Routes');\n return { default: component.default };\n },\n permissions: [\n // Uncomment to set the permissions of the plugin here\n // {\n // action: '', // the action name should be plugin::plugin-name.actionType\n // subject: null,\n // },\n ],\n });\n app.addMenuLink({\n to: `/plugins/${PLUGIN_ID}/navigation`,\n icon: NavigationIcon,\n intlLabel: {\n id: `${PLUGIN_ID}.link.navigation`,\n defaultMessage: 'Navigation',\n },\n Component: async () => {\n const component = await import('./pages/Navigation');\n return { default: component.default };\n },\n permissions: [\n // Uncomment to set the permissions of the plugin here\n // {\n // action: '', // the action name should be plugin::plugin-name.actionType\n // subject: null,\n // },\n ],\n });\n app.addSettingsLink(\n {\n id: PLUGIN_ID,\n intlLabel: {\n id: `${PLUGIN_ID}.settings.section`,\n defaultMessage: 'Webatlas',\n },\n },\n {\n intlLabel: {\n id: `${PLUGIN_ID}.settings.section`,\n defaultMessage: 'Configuration',\n },\n id: PLUGIN_ID,\n to: `/settings/${PLUGIN_ID}/configuration`,\n Component: async () => {\n return await import(\n /* webpackChunkName: \"webatlas-settings-page\" */ './pages/Settings'\n );\n },\n permissions: [\n // Uncomment to set the permissions of the plugin here\n // {\n // action: '', // the action name should be plugin::plugin-name.actionType\n // subject: null,\n // },\n ],\n }\n )\n\n app.registerPlugin({\n id: PLUGIN_ID,\n initializer: Initializer,\n isReady: false,\n name: PLUGIN_NAME,\n });\n },\n\n bootstrap(app: StrapiApp) {\n // @ts-expect-error\n app.getPlugin('content-manager').apis.addEditViewSidePanel([() => ({\n title: 'URL Alias',\n content: <CMEditViewAside />,\n })]);\n },\n\n async registerTrads({ locales }: { locales: string[] }) {\n return Promise.all(\n locales.map(async (locale) => {\n try {\n const { default: data } = await import(`./translations/${locale}.json`);\n\n return { data, locale };\n } catch {\n return { data: {}, locale };\n }\n })\n );\n },\n};"],"names":["type","error","description","StrapiTooltip","useContentManagerContext","path","Link"],"mappings":"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"}