@mattisvensson/strapi-plugin-webatlas 0.10.1 → 0.11.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/README.md +2 -1
- package/dist/admin/FullLoader-Cmsf8xS6.js +1 -0
- package/dist/admin/FullLoader-Cmsf8xS6.js.map +1 -0
- package/dist/admin/FullLoader-CrPED_dY.mjs +1 -0
- package/dist/admin/FullLoader-CrPED_dY.mjs.map +1 -0
- package/dist/admin/{SettingTitle-DbsxB1V9.mjs → SettingTitle-B1IaU3qs.mjs} +2 -1
- package/dist/admin/SettingTitle-B1IaU3qs.mjs.map +1 -0
- package/dist/admin/{SettingTitle-uw1S5OmC.js → SettingTitle-BjE_2u6R.js} +2 -1
- package/dist/admin/SettingTitle-BjE_2u6R.js.map +1 -0
- package/dist/admin/de-B5pRvs13.mjs +1 -0
- package/dist/admin/de-B5pRvs13.mjs.map +1 -0
- package/dist/admin/de-CqU1FU8C.js +1 -0
- package/dist/admin/de-CqU1FU8C.js.map +1 -0
- package/dist/admin/en-BE-zzIv8.mjs +1 -0
- package/dist/admin/en-BE-zzIv8.mjs.map +1 -0
- package/dist/admin/en-C7I90FwV.js +1 -0
- package/dist/admin/en-C7I90FwV.js.map +1 -0
- package/dist/admin/{index-BXt-QjKo.js → index-AVI3QJ0R.js} +2 -1
- package/dist/admin/index-AVI3QJ0R.js.map +1 -0
- package/dist/admin/{index-CGsC8P9P.js → index-B90eSO4a.js} +3 -2
- package/dist/admin/index-B90eSO4a.js.map +1 -0
- package/dist/admin/{index-tPrfjOIn.mjs → index-BIEUXWe7.mjs} +2 -1
- package/dist/admin/index-BIEUXWe7.mjs.map +1 -0
- package/dist/admin/{index-CUaBX_v-.mjs → index-BbnlyBrZ.mjs} +3 -2
- package/dist/admin/index-BbnlyBrZ.mjs.map +1 -0
- package/dist/admin/{index-BKWY9Ta-.mjs → index-Cf9j0bn2.mjs} +2 -1
- package/dist/admin/index-Cf9j0bn2.mjs.map +1 -0
- package/dist/admin/{index-BYlmJycd.js → index-D8bG0YFB.js} +3 -2
- package/dist/admin/index-D8bG0YFB.js.map +1 -0
- package/dist/admin/{index-CIr8o1RP.mjs → index-DCYCtKrj.mjs} +118 -106
- package/dist/admin/index-DCYCtKrj.mjs.map +1 -0
- package/dist/admin/{index-DkqiqVx2.js → index-JLpXBQVL.js} +2 -1
- package/dist/admin/index-JLpXBQVL.js.map +1 -0
- package/dist/admin/{index-B07KlG03.mjs → index-Y_PYIiRA.mjs} +3 -2
- package/dist/admin/index-Y_PYIiRA.mjs.map +1 -0
- package/dist/admin/{index-DC5WwNdi.js → index-Yq-QR8t0.js} +118 -106
- package/dist/admin/index-Yq-QR8t0.js.map +1 -0
- package/dist/admin/index.js +2 -1
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/index.mjs +2 -1
- package/dist/admin/index.mjs.map +1 -0
- package/dist/server/index.js +384 -259
- package/dist/server/index.js.map +1 -0
- package/dist/server/index.mjs +384 -259
- package/dist/server/index.mjs.map +1 -0
- package/package.json +1 -1
- package/dist/admin/src/index.d.ts +0 -12
- package/dist/server/src/index.d.ts +0 -301
|
@@ -2,11 +2,11 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { useReducer, useState, useRef, useEffect } from "react";
|
|
3
3
|
import { Field } from "@strapi/design-system";
|
|
4
4
|
import { useNotification, Page } from "@strapi/strapi/admin";
|
|
5
|
-
import { c as usePluginConfig, g as getTranslation, p as pluginPermissions } from "./index-
|
|
5
|
+
import { c as usePluginConfig, g as getTranslation, p as pluginPermissions } from "./index-DCYCtKrj.mjs";
|
|
6
6
|
import { useIntl } from "react-intl";
|
|
7
7
|
import "@strapi/icons/symbols";
|
|
8
8
|
import { F as FullLoader } from "./FullLoader-CrPED_dY.mjs";
|
|
9
|
-
import { P as PageWrapper, C as ContentBox, S as SettingTitle } from "./SettingTitle-
|
|
9
|
+
import { P as PageWrapper, C as ContentBox, S as SettingTitle } from "./SettingTitle-B1IaU3qs.mjs";
|
|
10
10
|
function reducer(newConfig, action) {
|
|
11
11
|
switch (action.type) {
|
|
12
12
|
case "SET_MAX_DEPTH":
|
|
@@ -126,3 +126,4 @@ const Settings = () => {
|
|
|
126
126
|
export {
|
|
127
127
|
Settings as default
|
|
128
128
|
};
|
|
129
|
+
//# sourceMappingURL=index-BbnlyBrZ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-BbnlyBrZ.mjs","sources":["../../admin/src/pages/Settings/Navigation/index.tsx"],"sourcesContent":["/*\n *\n * Settings\n * This file contains the navigation settings page for the Webatlas plugin.\n * It allows users to set the max depth of the navigation tree.\n *\n*/\n\nimport { useEffect, useState, useReducer, useRef } from 'react';\nimport { Field } from '@strapi/design-system';\nimport { useNotification, Page } from '@strapi/strapi/admin'\nimport usePluginConfig from '../../../hooks/usePluginConfig';\nimport type { PluginConfig } from '../../../../../types';\nimport { getTranslation } from '../../../utils';\nimport { useIntl } from 'react-intl';\nimport { FullLoader } from '../../../components/UI';\nimport { PageWrapper, ContentBox, SettingTitle } from '../';\nimport pluginPermissions from '../../../permissions';\n\ntype Action =\n | { type: 'SET_MAX_DEPTH'; payload: number }\n | { type: 'SET_CONFIG'; payload: PluginConfig }\n\nfunction reducer(newConfig: PluginConfig | null, action: Action): PluginConfig | null {\n switch (action.type) {\n case 'SET_MAX_DEPTH':\n if (!newConfig) return null;\n return {\n ...newConfig,\n navigation: { ...newConfig.navigation, maxDepth: action.payload },\n selectedContentTypes: newConfig.selectedContentTypes || []\n };\n case 'SET_CONFIG':\n return action.payload;\n default:\n throw new Error();\n }\n}\n\nconst Settings = () => {\n const { config: fetchedConfig, setConfig, loading, fetchError } = usePluginConfig();\n const [config, dispatch] = useReducer(reducer, fetchedConfig);\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const [isSaving, setIsSaving] = useState(false);\n const initialConfig = useRef<PluginConfig | null>(fetchedConfig);\n\n useEffect(() => {\n initialConfig.current = fetchedConfig;\n\n if (fetchedConfig)\n dispatch({ type: 'SET_CONFIG', payload: fetchedConfig });\n }, [fetchedConfig]);\n\n useEffect(() => {\n if (fetchError) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: getTranslation('notification.error'),\n defaultMessage: 'An error occurred',\n }) + ': ' + fetchError,\n });\n }\n }, [fetchError, toggleNotification, formatMessage]);\n\n async function save() {\n if (!config) return\n\n setIsSaving(true);\n try {\n await setConfig({ navigation: config.navigation })\n initialConfig.current = config;\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('notification.settings.saved'),\n defaultMessage: 'Settings saved successfully',\n }),\n });\n setIsSaving(false);\n } catch (err) {\n setIsSaving(false);\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: getTranslation('notification.error'),\n defaultMessage: 'An error occurred',\n }) + ': ' + err,\n });\n strapi.log.error(err);\n }\n }\n\n if (loading) {\n return <PageWrapper\n isSaving={isSaving}\n subtitle={formatMessage({\n id: getTranslation('loading'),\n defaultMessage: 'Loading...',\n })}\n disabledCondition={true}\n >\n <FullLoader height={200} />\n </PageWrapper>\n }\n\n return (\n <Page.Protect permissions={pluginPermissions['settings.navigation']}>\n <PageWrapper\n save={save}\n isSaving={isSaving}\n subtitle={formatMessage({\n id: getTranslation('settings.page.navigation.subtitle'),\n defaultMessage: 'Configure navigation settings',\n })}\n disabledCondition={JSON.stringify(config) === JSON.stringify(initialConfig.current)}\n >\n <ContentBox title={formatMessage({\n id: getTranslation('settings.page.navigation.navigation'),\n defaultMessage: 'Navigation',\n })}>\n <Field.Root name=\"maxNavDepth\">\n <Field.Label>\n <SettingTitle>\n {formatMessage({\n id: getTranslation('settings.page.navigation.maxNavDepth.label'),\n defaultMessage: 'Max depth of navigation tree',\n })}\n </SettingTitle>\n </Field.Label>\n <Field.Input\n id=\"maxNavDepth\"\n type=\"number\"\n min={0}\n step={1}\n value={config?.navigation?.maxDepth !== undefined ? config.navigation.maxDepth + 1 : ''}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => dispatch({ type: 'SET_MAX_DEPTH', payload: Number(e.target.value) - 1 })}\n onBlur={(e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.value === '') return\n dispatch({ type: 'SET_MAX_DEPTH', payload: Number(e.target.value) - 1 })}\n }\n />\n <Field.Hint/>\n </Field.Root>\n </ContentBox>\n </PageWrapper>\n </Page.Protect>\n );\n};\n\nexport default Settings;\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useState, useEffect, useMemo } from "react";
|
|
3
|
-
import { g as getTranslation, u as useApi, d as debounce, p as pluginPermissions } from "./index-
|
|
3
|
+
import { g as getTranslation, u as useApi, d as debounce, p as pluginPermissions } from "./index-DCYCtKrj.mjs";
|
|
4
4
|
import { Page, Layouts, useNotification } from "@strapi/strapi/admin";
|
|
5
5
|
import { Grid, Box, Field, Thead, Tr, Th, Typography, VisuallyHidden, Td, Flex, LinkButton, Table, Tbody, EmptyStateLayout } from "@strapi/design-system";
|
|
6
6
|
import "@strapi/icons/symbols";
|
|
@@ -269,3 +269,4 @@ const Paths = () => {
|
|
|
269
269
|
export {
|
|
270
270
|
Paths as default
|
|
271
271
|
};
|
|
272
|
+
//# sourceMappingURL=index-Cf9j0bn2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-Cf9j0bn2.mjs","sources":["../../admin/src/pages/Paths/PageWrapper.tsx","../../admin/src/pages/Paths/compareBy.ts","../../admin/src/pages/Paths/SearchInput.tsx","../../admin/src/pages/Paths/TableHeader.tsx","../../admin/src/pages/Paths/TableRow.tsx","../../admin/src/pages/Paths/PathTable.tsx","../../admin/src/pages/Paths/index.tsx"],"sourcesContent":["import { Layouts, Page } from '@strapi/strapi/admin';\nimport { getTranslation } from '../../utils';\nimport { useIntl } from 'react-intl';\n\nexport default function PageWrapper({ children }: { children: React.ReactNode }) {\n const { formatMessage } = useIntl();\n\n return (\n <Page.Main>\n <Layouts.Header\n title={formatMessage({\n id: getTranslation('paths.page.title'),\n defaultMessage: 'Paths',\n })}\n subtitle={formatMessage({\n id: getTranslation('paths.page.subtitle'),\n defaultMessage: 'Overview of all existing paths',\n })}\n />\n <Layouts.Content>\n <>\n {children}\n </>\n </Layouts.Content>\n </Page.Main>\n );\n}","import type { Route } from '../../../../types';\nimport type { RouteSortKey } from '../../types';\n\nexport default function compareBy(field: RouteSortKey, direction: 'asc' | 'desc') {\n if (!field) {\n return () => 0;\n }\n if (field === 'type') {\n return (a: Route, b: Route) => {\n return direction === 'asc'\n ? a.type.localeCompare(b.type)\n : b.type.localeCompare(a.type);\n };\n }\n return (a: Route, b: Route) => {\n const aValue = a[field];\n const bValue = b[field];\n \n if (aValue == null && bValue == null) {\n return 0;\n }\n if (aValue == null) {\n return direction === 'asc' ? 1 : -1;\n }\n if (bValue == null) {\n return direction === 'asc' ? -1 : 1;\n }\n \n if (typeof aValue === 'string' && typeof bValue === 'string') {\n return direction === 'asc'\n ? aValue.localeCompare(bValue)\n : bValue.localeCompare(aValue);\n }\n return 0;\n };\n}","import { Box, Grid, Field } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { getTranslation } from '../../utils';\n\nfunction SearchInput({\n searchQuery,\n handleSearchChange\n}: {\n searchQuery: string;\n handleSearchChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n}) {\n\n const { formatMessage } = useIntl();\n\n return (\n <Grid.Root style={{ marginBottom: '16px' }}>\n <Grid.Item col={4} s={12}>\n <Box width=\"100%\">\n <Field.Root>\n <Field.Input\n name=\"search\"\n placeholder={formatMessage({\n id: getTranslation('paths.page.searchPlaceholder'),\n defaultMessage: 'Search paths',\n })}\n value={searchQuery}\n onChange={handleSearchChange}\n endAction={\n searchQuery ? (\n <button\n type=\"button\"\n onClick={() => handleSearchChange({ target: { value: '' } } as React.ChangeEvent<HTMLInputElement>)}\n style={{ color: 'inherit', background: 'none', border: 'none', cursor: 'pointer' }}\n aria-label=\"Clear search\"\n >\n <Cross />\n </button>\n ) : null\n }\n />\n </Field.Root>\n </Box>\n </Grid.Item>\n </Grid.Root>\n );\n}\n\nexport default SearchInput;","import type { RouteSortKey } from '../../types';\nimport { Typography, Thead, Tr, Th, VisuallyHidden } from '@strapi/design-system';\nimport { getTranslation } from '../../utils';\nimport { useIntl } from 'react-intl';\nimport { ChevronDown } from '@strapi/icons';\n\nexport default function TableHeader({\n sortKey,\n handleSort\n}: {\n sortKey: RouteSortKey,\n handleSort: (key: RouteSortKey) => void\n}) {\n const { formatMessage } = useIntl();\n\n return (\n <Thead>\n <Tr>\n <Th onClick={() => handleSort('title')} cursor=\"pointer\">\n <Typography variant=\"sigma\">\n {formatMessage({\n id: getTranslation('title'),\n defaultMessage: 'Title',\n })}\n </Typography>\n {sortKey === 'title' && <ChevronDown />}\n </Th>\n <Th onClick={() => handleSort('canonicalPath')} cursor=\"pointer\">\n <Typography variant=\"sigma\">\n {formatMessage({\n id: getTranslation('canonicalPath'),\n defaultMessage: 'Canonical Path',\n })}\n </Typography>\n {sortKey === 'canonicalPath' && <ChevronDown />}\n </Th>\n <Th onClick={() => handleSort('path')} cursor=\"pointer\">\n <Typography variant=\"sigma\">\n {formatMessage({\n id: getTranslation('path'),\n defaultMessage: 'Path',\n })}\n </Typography>\n {sortKey === 'path' && <ChevronDown />}\n </Th>\n <Th onClick={() => handleSort('type')} cursor=\"pointer\">\n <Typography variant=\"sigma\">\n {formatMessage({\n id: getTranslation('paths.page.column.type'),\n defaultMessage: 'Type',\n })}\n </Typography>\n {sortKey === 'type' && <ChevronDown />}\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: getTranslation('actions'),\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n )\n}","import type { Route } from '../../../../types';\nimport { Typography, Tr, Td, Flex, LinkButton } from '@strapi/design-system';\nimport { getTranslation } from '../../utils';\nimport { useIntl } from 'react-intl';\nimport { Pencil } from '@strapi/icons';\n\nexport default function TableRow({ route }: { route: Route }) {\n const { formatMessage } = useIntl();\n \n return (\n <Tr>\n {[route.title, route.canonicalPath, route.path].map((field, index) => (\n <Td key={index}>\n <Typography\n title={field}\n textColor=\"neutral800\"\n >\n {field || '-'}\n </Typography>\n </Td>\n ))}\n <Td>\n <Typography\n title={route.type}\n textColor=\"neutral800\"\n >\n {formatMessage({\n id: getTranslation(`path.type.${route.type}`),\n defaultMessage: '-',\n })}\n </Typography>\n </Td>\n <Td>\n <Flex gap={2} justifyContent=\"end\">\n {route.type === \"internal\" && \n <LinkButton\n variant=\"secondary\"\n startIcon={<Pencil />} \n href={`/admin/content-manager/collection-types/${route.relatedContentType}/${route.relatedDocumentId}`}\n >\n {formatMessage({\n id: getTranslation('edit'),\n defaultMessage: 'Edit',\n })}\n </LinkButton>\n }\n </Flex>\n </Td>\n </Tr>\n )\n}","import type { Route } from '../../../../types';\nimport type { RouteSortKey } from '../../types';\nimport { Table, Tbody, EmptyStateLayout, Tr, Td } from '@strapi/design-system';\nimport TableHeader from './TableHeader';\nimport TableRow from './TableRow';\nimport { useIntl } from 'react-intl';\nimport { getTranslation } from '../../utils';\n\nfunction PathTable({\n routes,\n sortKey,\n handleSort\n}: {\n routes: Route[],\n sortKey: RouteSortKey,\n handleSort: (key: RouteSortKey) => void\n}) {\n\n const { formatMessage } = useIntl();\n\n const TABLE_COL_COUNT = 5;\n\n return (\n <Table\n colCount={TABLE_COL_COUNT}\n rowCount={routes.length}\n >\n <TableHeader sortKey={sortKey} handleSort={handleSort} />\n <Tbody>\n {routes.length > 0 ? routes.map((route: Route) => (\n <TableRow key={route.id} route={route} />\n )) :\n <Tr>\n <Td colSpan={TABLE_COL_COUNT}>\n <EmptyStateLayout\n shadow=\"none\"\n content={\n formatMessage({\n id: getTranslation('paths.page.emptyPaths'),\n defaultMessage: 'No paths found',\n })\n }\n />\n </Td>\n </Tr>\n }\n </Tbody>\n </Table>\n )\n}\n\nexport default PathTable;\n","/*\n *\n * Routes\n * This file contains the Routes page of the Webatlas plugin for Strapi.\n * It displays a table of all existing routes with their details and allows editing.\n *\n*/\n\nimport type { Route } from '../../../../types';\nimport type { RouteSortKey } from '../../types';\nimport { useState, useEffect } from 'react';\nimport { useApi } from '../../hooks';\nimport { FullLoader } from '../../components/UI';\nimport { getTranslation } from '../../utils';\nimport { useIntl } from 'react-intl';\nimport { useNotification, Page } from '@strapi/strapi/admin'\nimport PageWrapper from './PageWrapper';\nimport { useSearchParams } from 'react-router-dom';\nimport debounce from '../../utils/debounce';\nimport { useMemo } from 'react';\nimport compareBy from './compareBy';\nimport pluginPermissions from '../../permissions';\nimport SearchInput from './SearchInput';\nimport PathTable from './PathTable';\n\nconst Paths = () => {\n const { getAllRoutes } = useApi();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n\n const [allRoutes, setAllRoutes] = useState<Route[]>([]);\n const [routes, setRoutes] = useState<Route[]>([]);\n const [loading, setLoading] = useState(true);\n const [searchParams, setSearchParams] = useSearchParams();\n const initialQuery = searchParams.get('search') || '';\n const [searchQuery, setSearchQuery] = useState(initialQuery);\n const [sortKey, setSortKey] = useState<RouteSortKey>('canonicalPath');\n const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('asc');\n\n useEffect(() => {\n const query = searchQuery.toLowerCase()\n setRoutes(\n allRoutes.filter((route) =>\n JSON.stringify(route.id).toLowerCase().includes(query) ||\n route.title.toLowerCase().includes(query) ||\n route.path.toLowerCase().includes(query) ||\n route.relatedDocumentId.toLowerCase().includes(query) ||\n route.relatedContentType.toLowerCase().includes(query)\n )\n )\n }, [searchQuery, allRoutes]);\n\n const debouncedSetSearchParams = useMemo(() =>\n debounce((value: string) => {\n value\n ? setSearchParams({ search: value })\n : setSearchParams({});\n }, 300),\n [setSearchParams]);\n\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value\n setSearchQuery(value);\n debouncedSetSearchParams(value);\n }\n\n useEffect(() => {\n async function fetchRoutes() {\n try {\n const data = await getAllRoutes();\n setAllRoutes(data);\n setRoutes(data);\n } catch (err) {\n strapi.log.error('Failed to fetch paths:', err);\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: getTranslation('notification.paths.fetchFailed'),\n defaultMessage: 'Failed to fetch paths',\n }),\n });\n } finally {\n setLoading(false);\n }\n }\n fetchRoutes();\n }, [])\n\n const handleSort = (key: RouteSortKey) => {\n setSortDirection(prev => (prev === 'asc' ? 'desc' : 'asc'));\n setSortKey(key);\n };\n\n const sortedRoutes = useMemo(() => {\n return sortKey\n ? [...routes].sort(compareBy(sortKey, sortDirection))\n : routes;\n }, [routes, sortKey, sortDirection]);\n\n if (loading) {\n return <PageWrapper>\n <FullLoader />\n </PageWrapper>\n }\n\n return (\n <Page.Protect permissions={pluginPermissions['page.routes']}>\n <PageWrapper>\n <SearchInput\n handleSearchChange={handleSearchChange}\n searchQuery={searchQuery}\n />\n <PathTable\n routes={sortedRoutes}\n sortKey={sortKey}\n handleSort={handleSort}\n />\n </PageWrapper>\n </Page.Protect>\n );\n};\n\nexport default Paths;\n"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,11 @@ const jsxRuntime = require("react/jsx-runtime");
|
|
|
4
4
|
const React = require("react");
|
|
5
5
|
const designSystem = require("@strapi/design-system");
|
|
6
6
|
const admin = require("@strapi/strapi/admin");
|
|
7
|
-
const index = require("./index-
|
|
7
|
+
const index = require("./index-Yq-QR8t0.js");
|
|
8
8
|
const reactIntl = require("react-intl");
|
|
9
9
|
require("@strapi/icons/symbols");
|
|
10
10
|
const FullLoader = require("./FullLoader-Cmsf8xS6.js");
|
|
11
|
-
const SettingTitle = require("./SettingTitle-
|
|
11
|
+
const SettingTitle = require("./SettingTitle-BjE_2u6R.js");
|
|
12
12
|
function reducer(newConfig, action) {
|
|
13
13
|
switch (action.type) {
|
|
14
14
|
case "SET_MAX_DEPTH":
|
|
@@ -126,3 +126,4 @@ const Settings = () => {
|
|
|
126
126
|
) });
|
|
127
127
|
};
|
|
128
128
|
exports.default = Settings;
|
|
129
|
+
//# sourceMappingURL=index-D8bG0YFB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-D8bG0YFB.js","sources":["../../admin/src/pages/Settings/Navigation/index.tsx"],"sourcesContent":["/*\n *\n * Settings\n * This file contains the navigation settings page for the Webatlas plugin.\n * It allows users to set the max depth of the navigation tree.\n *\n*/\n\nimport { useEffect, useState, useReducer, useRef } from 'react';\nimport { Field } from '@strapi/design-system';\nimport { useNotification, Page } from '@strapi/strapi/admin'\nimport usePluginConfig from '../../../hooks/usePluginConfig';\nimport type { PluginConfig } from '../../../../../types';\nimport { getTranslation } from '../../../utils';\nimport { useIntl } from 'react-intl';\nimport { FullLoader } from '../../../components/UI';\nimport { PageWrapper, ContentBox, SettingTitle } from '../';\nimport pluginPermissions from '../../../permissions';\n\ntype Action =\n | { type: 'SET_MAX_DEPTH'; payload: number }\n | { type: 'SET_CONFIG'; payload: PluginConfig }\n\nfunction reducer(newConfig: PluginConfig | null, action: Action): PluginConfig | null {\n switch (action.type) {\n case 'SET_MAX_DEPTH':\n if (!newConfig) return null;\n return {\n ...newConfig,\n navigation: { ...newConfig.navigation, maxDepth: action.payload },\n selectedContentTypes: newConfig.selectedContentTypes || []\n };\n case 'SET_CONFIG':\n return action.payload;\n default:\n throw new Error();\n }\n}\n\nconst Settings = () => {\n const { config: fetchedConfig, setConfig, loading, fetchError } = usePluginConfig();\n const [config, dispatch] = useReducer(reducer, fetchedConfig);\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const [isSaving, setIsSaving] = useState(false);\n const initialConfig = useRef<PluginConfig | null>(fetchedConfig);\n\n useEffect(() => {\n initialConfig.current = fetchedConfig;\n\n if (fetchedConfig)\n dispatch({ type: 'SET_CONFIG', payload: fetchedConfig });\n }, [fetchedConfig]);\n\n useEffect(() => {\n if (fetchError) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: getTranslation('notification.error'),\n defaultMessage: 'An error occurred',\n }) + ': ' + fetchError,\n });\n }\n }, [fetchError, toggleNotification, formatMessage]);\n\n async function save() {\n if (!config) return\n\n setIsSaving(true);\n try {\n await setConfig({ navigation: config.navigation })\n initialConfig.current = config;\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('notification.settings.saved'),\n defaultMessage: 'Settings saved successfully',\n }),\n });\n setIsSaving(false);\n } catch (err) {\n setIsSaving(false);\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: getTranslation('notification.error'),\n defaultMessage: 'An error occurred',\n }) + ': ' + err,\n });\n strapi.log.error(err);\n }\n }\n\n if (loading) {\n return <PageWrapper\n isSaving={isSaving}\n subtitle={formatMessage({\n id: getTranslation('loading'),\n defaultMessage: 'Loading...',\n })}\n disabledCondition={true}\n >\n <FullLoader height={200} />\n </PageWrapper>\n }\n\n return (\n <Page.Protect permissions={pluginPermissions['settings.navigation']}>\n <PageWrapper\n save={save}\n isSaving={isSaving}\n subtitle={formatMessage({\n id: getTranslation('settings.page.navigation.subtitle'),\n defaultMessage: 'Configure navigation settings',\n })}\n disabledCondition={JSON.stringify(config) === JSON.stringify(initialConfig.current)}\n >\n <ContentBox title={formatMessage({\n id: getTranslation('settings.page.navigation.navigation'),\n defaultMessage: 'Navigation',\n })}>\n <Field.Root name=\"maxNavDepth\">\n <Field.Label>\n <SettingTitle>\n {formatMessage({\n id: getTranslation('settings.page.navigation.maxNavDepth.label'),\n defaultMessage: 'Max depth of navigation tree',\n })}\n </SettingTitle>\n </Field.Label>\n <Field.Input\n id=\"maxNavDepth\"\n type=\"number\"\n min={0}\n step={1}\n value={config?.navigation?.maxDepth !== undefined ? config.navigation.maxDepth + 1 : ''}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => dispatch({ type: 'SET_MAX_DEPTH', payload: Number(e.target.value) - 1 })}\n onBlur={(e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.value === '') return\n dispatch({ type: 'SET_MAX_DEPTH', payload: Number(e.target.value) - 1 })}\n }\n />\n <Field.Hint/>\n </Field.Root>\n </ContentBox>\n </PageWrapper>\n </Page.Protect>\n );\n};\n\nexport default Settings;\n"],"names":["usePluginConfig","useReducer","useNotification","useIntl","useState","useRef","useEffect","getTranslation","jsx","PageWrapper","FullLoader","Page","pluginPermissions","ContentBox","jsxs","Field","SettingTitle"],"mappings":"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"}
|
|
@@ -23,18 +23,25 @@ const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
|
|
|
23
23
|
);
|
|
24
24
|
});
|
|
25
25
|
};
|
|
26
|
-
function transformToUrl(input) {
|
|
26
|
+
function transformToUrl(input, replaceSlash = true) {
|
|
27
27
|
const specialCharMap = {
|
|
28
28
|
"ü": "ue",
|
|
29
29
|
"ä": "ae",
|
|
30
|
-
"ö": "oe"
|
|
30
|
+
"ö": "oe",
|
|
31
|
+
"ß": "ss"
|
|
31
32
|
};
|
|
32
33
|
if (!input || typeof input !== "string") return "";
|
|
33
34
|
input = input.toLowerCase();
|
|
34
35
|
input = input.replace(/\/+/g, "/");
|
|
35
36
|
input = input.startsWith("/") ? input.slice(1) : input;
|
|
36
37
|
input = input.endsWith("/") ? input.slice(0, -1) : input;
|
|
37
|
-
|
|
38
|
+
if (replaceSlash) {
|
|
39
|
+
input = input.replace(/\//g, "-");
|
|
40
|
+
} else {
|
|
41
|
+
input = input.replace(/\/+/g, "/");
|
|
42
|
+
input = input.startsWith("/") ? input.slice(1) : input;
|
|
43
|
+
input = input.endsWith("/") ? input.slice(0, -1) : input;
|
|
44
|
+
}
|
|
38
45
|
for (const char in specialCharMap) {
|
|
39
46
|
const regex = new RegExp(char, "g");
|
|
40
47
|
input = input.replace(regex, specialCharMap[char]);
|
|
@@ -45,7 +52,7 @@ function transformToUrl(input) {
|
|
|
45
52
|
input = input.replace(/-+/g, "-");
|
|
46
53
|
return input;
|
|
47
54
|
}
|
|
48
|
-
const version = "0.
|
|
55
|
+
const version = "0.11.0";
|
|
49
56
|
const strapi$1 = { "name": "webatlas", "displayName": "Webatlas" };
|
|
50
57
|
const pluginPkg = {
|
|
51
58
|
version,
|
|
@@ -3685,10 +3692,7 @@ function PathInput({ path, dispatchPath, isOverride, config }) {
|
|
|
3685
3692
|
value: displayedPath,
|
|
3686
3693
|
onChange: (e) => dispatchPath({ type: "SET_OVERRIDEPATH", payload: e.target.value }),
|
|
3687
3694
|
disabled: !isOverride,
|
|
3688
|
-
onBlur: (e) => {
|
|
3689
|
-
if (e.target.value === path.prevValue) return;
|
|
3690
|
-
dispatchPath({ type: "DEFAULT", payload: e.target.value });
|
|
3691
|
-
},
|
|
3695
|
+
onBlur: (e) => dispatchPath({ type: "SET_OVERRIDEPATH", payload: transformToUrl(e.target.value) }),
|
|
3692
3696
|
style: { outline: inputBorder }
|
|
3693
3697
|
}
|
|
3694
3698
|
),
|
|
@@ -3697,11 +3701,17 @@ function PathInput({ path, dispatchPath, isOverride, config }) {
|
|
|
3697
3701
|
}
|
|
3698
3702
|
);
|
|
3699
3703
|
}
|
|
3700
|
-
function RouteStructure({
|
|
3704
|
+
function RouteStructure({
|
|
3705
|
+
routes,
|
|
3706
|
+
selectedParent,
|
|
3707
|
+
setSelectedParent,
|
|
3708
|
+
canonicalPath,
|
|
3709
|
+
prohibitedRouteIds
|
|
3710
|
+
}) {
|
|
3701
3711
|
const { formatMessage } = useIntl();
|
|
3702
|
-
const
|
|
3703
|
-
return [...routes].sort((a, b) => a.title.localeCompare(b.title));
|
|
3704
|
-
}, [routes]);
|
|
3712
|
+
const filteredRoutes = useMemo(() => {
|
|
3713
|
+
return [...routes].sort((a, b) => a.title.localeCompare(b.title)).filter((route) => !prohibitedRouteIds?.includes(route.documentId) || route.documentId === selectedParent?.documentId);
|
|
3714
|
+
}, [routes, prohibitedRouteIds, selectedParent]);
|
|
3705
3715
|
const handleSelectParent = (value) => {
|
|
3706
3716
|
const parentRoute = routes.find((route) => route.documentId === value) || null;
|
|
3707
3717
|
setSelectedParent(parentRoute);
|
|
@@ -3722,16 +3732,14 @@ function RouteStructure({ routes, selectedParent, setSelectedParent, canonicalPa
|
|
|
3722
3732
|
id: getTranslation("components.CMEditViewAside.path.input.parentSelect.rootPath"),
|
|
3723
3733
|
defaultMessage: "None (root path)"
|
|
3724
3734
|
}) }),
|
|
3725
|
-
|
|
3726
|
-
|
|
3727
|
-
|
|
3728
|
-
|
|
3729
|
-
|
|
3730
|
-
|
|
3731
|
-
|
|
3732
|
-
|
|
3733
|
-
)
|
|
3734
|
-
)
|
|
3735
|
+
filteredRoutes.map((route) => /* @__PURE__ */ jsx(
|
|
3736
|
+
SingleSelectOption,
|
|
3737
|
+
{
|
|
3738
|
+
value: route.documentId,
|
|
3739
|
+
children: route.title
|
|
3740
|
+
},
|
|
3741
|
+
route.documentId
|
|
3742
|
+
))
|
|
3735
3743
|
]
|
|
3736
3744
|
}
|
|
3737
3745
|
)
|
|
@@ -3759,9 +3767,10 @@ function RouteStructure({ routes, selectedParent, setSelectedParent, canonicalPa
|
|
|
3759
3767
|
] })
|
|
3760
3768
|
] });
|
|
3761
3769
|
}
|
|
3762
|
-
function
|
|
3763
|
-
const
|
|
3764
|
-
|
|
3770
|
+
function buildPath(type, slug, parent) {
|
|
3771
|
+
const parentSlug = type === "canonical" ? parent?.canonicalPath : parent?.path;
|
|
3772
|
+
const parentPath = parentSlug ? `${parentSlug}/` : "";
|
|
3773
|
+
return `${parentPath}${transformToUrl(slug)}`;
|
|
3765
3774
|
}
|
|
3766
3775
|
function reducer(state, action) {
|
|
3767
3776
|
switch (action.type) {
|
|
@@ -3792,6 +3801,8 @@ function reducer(state, action) {
|
|
|
3792
3801
|
return { ...state, replacement: action.payload };
|
|
3793
3802
|
case "SET_UIDPATH":
|
|
3794
3803
|
return { ...state, uidPath: action.payload };
|
|
3804
|
+
case "SET_SLUG":
|
|
3805
|
+
return { ...state, slug: action.payload };
|
|
3795
3806
|
case "SET_CANONICALPATH":
|
|
3796
3807
|
return { ...state, canonicalPath: action.payload };
|
|
3797
3808
|
case "SET_OVERRIDEPATH":
|
|
@@ -3837,66 +3848,76 @@ const Panel = ({ config }) => {
|
|
|
3837
3848
|
replacement: null,
|
|
3838
3849
|
uidPath: "",
|
|
3839
3850
|
canonicalPath: "",
|
|
3851
|
+
slug: "",
|
|
3840
3852
|
overridePath: ""
|
|
3841
3853
|
});
|
|
3842
3854
|
const hasUserChangedField = useRef(false);
|
|
3855
|
+
const hasUserInteracted = useRef(false);
|
|
3843
3856
|
const initialPath = useRef("");
|
|
3844
3857
|
const prevSourceValueRef = useRef(null);
|
|
3845
|
-
const sourceFieldValue =
|
|
3846
|
-
|
|
3847
|
-
|
|
3848
|
-
|
|
3849
|
-
|
|
3850
|
-
|
|
3851
|
-
|
|
3852
|
-
const
|
|
3853
|
-
const debouncedCheckCanonicalPath = useCallback(debounce(checkCanonicalPath, 250), []);
|
|
3858
|
+
const sourceFieldValue = values[config?.default] || "";
|
|
3859
|
+
const initialSourceFieldValue = initialValues[config?.default] || "";
|
|
3860
|
+
const latestCheckPathRef = useRef(checkPath);
|
|
3861
|
+
latestCheckPathRef.current = checkPath;
|
|
3862
|
+
const debouncedCheckPath = useRef(debounce((p, id) => latestCheckPathRef.current(p, id), 250)).current;
|
|
3863
|
+
const latestCheckCanonicalRef = useRef(checkCanonicalPath);
|
|
3864
|
+
latestCheckCanonicalRef.current = checkCanonicalPath;
|
|
3865
|
+
const debouncedCheckCanonicalPath = useRef(debounce((p, id) => latestCheckCanonicalRef.current(p, id), 250)).current;
|
|
3854
3866
|
useEffect(() => {
|
|
3855
|
-
|
|
3856
|
-
|
|
3857
|
-
|
|
3858
|
-
}, [path.value, path.overridePath, isOverride, selectedParent]);
|
|
3859
|
-
const debouncedValueEffect = useMemo(() => debounce((currentValues) => {
|
|
3860
|
-
const key = config?.default;
|
|
3861
|
-
if (!key) return;
|
|
3862
|
-
const currentValue = currentValues[key];
|
|
3863
|
-
if (!currentValue) {
|
|
3864
|
-
dispatchPath({ type: "NO_URL_CHECK", payload: "" });
|
|
3865
|
-
return;
|
|
3866
|
-
}
|
|
3867
|
-
if (initialLoadComplete && (hasUserChangedField.current || !route) && prevSourceValueRef.current !== currentValue && !isOverride) {
|
|
3868
|
-
const path2 = getCanonicalPath(selectedParent, currentValue);
|
|
3869
|
-
if (currentValue === initialValues[key]) {
|
|
3870
|
-
dispatchPath({ type: "NO_URL_CHECK", payload: path2 });
|
|
3871
|
-
} else {
|
|
3872
|
-
dispatchPath({ type: "DEFAULT", payload: path2 });
|
|
3873
|
-
}
|
|
3874
|
-
prevSourceValueRef.current = currentValue;
|
|
3867
|
+
async function fetchAllRoutes() {
|
|
3868
|
+
const allRoutes = await getAllRoutes();
|
|
3869
|
+
setRoutes(allRoutes);
|
|
3875
3870
|
}
|
|
3876
|
-
|
|
3871
|
+
fetchAllRoutes();
|
|
3872
|
+
}, []);
|
|
3877
3873
|
useEffect(() => {
|
|
3878
|
-
const
|
|
3879
|
-
|
|
3880
|
-
const
|
|
3881
|
-
|
|
3882
|
-
|
|
3883
|
-
|
|
3874
|
+
const slug = transformToUrl(sourceFieldValue);
|
|
3875
|
+
const overridePath = transformToUrl(path.overridePath || "", false);
|
|
3876
|
+
const data = {
|
|
3877
|
+
path: isOverride ? overridePath : path.value,
|
|
3878
|
+
isOverride,
|
|
3879
|
+
parentDocumentId: selectedParent?.documentId || null,
|
|
3880
|
+
slug: isOverride ? overridePath : slug
|
|
3881
|
+
};
|
|
3882
|
+
if (hasUserChangedField.current || hasUserInteracted.current) {
|
|
3883
|
+
onChange("webatlas", data);
|
|
3884
3884
|
}
|
|
3885
|
+
}, [path.value, path.overridePath, isOverride, selectedParent, sourceFieldValue, hasUserChangedField, hasUserInteracted]);
|
|
3886
|
+
useEffect(() => {
|
|
3885
3887
|
if (!initialLoadComplete) return;
|
|
3886
|
-
if (
|
|
3888
|
+
if (sourceFieldValue !== initialSourceFieldValue) {
|
|
3887
3889
|
hasUserChangedField.current = true;
|
|
3888
3890
|
}
|
|
3889
|
-
|
|
3890
|
-
|
|
3891
|
+
if (!sourceFieldValue) {
|
|
3892
|
+
dispatchPath({ type: "NO_URL_CHECK", payload: "" });
|
|
3893
|
+
return;
|
|
3894
|
+
}
|
|
3895
|
+
if (initialLoadComplete && (hasUserChangedField.current || !route) && prevSourceValueRef.current !== sourceFieldValue && !isOverride) {
|
|
3896
|
+
const newPath = buildPath("path", sourceFieldValue, selectedParent);
|
|
3897
|
+
const type = sourceFieldValue === initialSourceFieldValue ? "NO_URL_CHECK" : "DEFAULT";
|
|
3898
|
+
const slug = transformToUrl(sourceFieldValue);
|
|
3899
|
+
dispatchPath({ type, payload: newPath });
|
|
3900
|
+
dispatchPath({ type: "SET_SLUG", payload: slug });
|
|
3901
|
+
dispatchPath({ type: "SET_OVERRIDEPATH", payload: slug });
|
|
3902
|
+
prevSourceValueRef.current = sourceFieldValue;
|
|
3903
|
+
}
|
|
3904
|
+
const canonicalPath = buildPath("canonical", sourceFieldValue, selectedParent);
|
|
3905
|
+
dispatchPath({ type: "SET_CANONICALPATH", payload: canonicalPath });
|
|
3906
|
+
debouncedCheckCanonicalPath(canonicalPath, route?.documentId || null);
|
|
3907
|
+
}, [sourceFieldValue, initialSourceFieldValue, initialLoadComplete, selectedParent, isOverride, route]);
|
|
3891
3908
|
useEffect(() => {
|
|
3909
|
+
if (!initialLoadComplete) return;
|
|
3892
3910
|
if (path.needsUrlCheck && path.value) {
|
|
3893
3911
|
if (path.uidPath === path.value || initialPath.current === path.value) return;
|
|
3894
3912
|
debouncedCheckPath(path.value, route?.documentId || null);
|
|
3895
3913
|
dispatchPath({ type: "RESET_URL_CHECK_FLAG" });
|
|
3914
|
+
} else {
|
|
3915
|
+
setValidationState("idle");
|
|
3916
|
+
dispatchPath({ type: "SET_REPLACEMENT", payload: null });
|
|
3896
3917
|
}
|
|
3897
|
-
}, [path.needsUrlCheck, path.value, path.uidPath, route]);
|
|
3918
|
+
}, [path.needsUrlCheck, path.value, path.uidPath, route, initialLoadComplete]);
|
|
3898
3919
|
useEffect(() => {
|
|
3899
|
-
async function
|
|
3920
|
+
async function fetchRelatedRute() {
|
|
3900
3921
|
if (!initialValues.documentId) {
|
|
3901
3922
|
setInitialLoadComplete(true);
|
|
3902
3923
|
return;
|
|
@@ -3907,12 +3928,11 @@ const Panel = ({ config }) => {
|
|
|
3907
3928
|
initialPath.current = initialValues.webatlas_path || route2.uidPath;
|
|
3908
3929
|
setRoute(route2);
|
|
3909
3930
|
setIsOverride(route2.isOverride || false);
|
|
3910
|
-
|
|
3911
|
-
|
|
3912
|
-
} else {
|
|
3913
|
-
dispatchPath({ type: "NO_TRANSFORM_AND_CHECK", payload: route2.path || "" });
|
|
3914
|
-
}
|
|
3931
|
+
dispatchPath({ type: "SET_OVERRIDEPATH", payload: route2.path || "" });
|
|
3932
|
+
dispatchPath({ type: "NO_TRANSFORM_AND_CHECK", payload: route2.path || "" });
|
|
3915
3933
|
dispatchPath({ type: "SET_UIDPATH", payload: route2.uidPath || "" });
|
|
3934
|
+
dispatchPath({ type: "SET_SLUG", payload: route2.slug || "" });
|
|
3935
|
+
dispatchPath({ type: "SET_CANONICALPATH", payload: route2.canonicalPath || "" });
|
|
3916
3936
|
const key = config?.default;
|
|
3917
3937
|
if (key) {
|
|
3918
3938
|
prevSourceValueRef.current = values[key];
|
|
@@ -3923,27 +3943,13 @@ const Panel = ({ config }) => {
|
|
|
3923
3943
|
}
|
|
3924
3944
|
setInitialLoadComplete(true);
|
|
3925
3945
|
}
|
|
3926
|
-
|
|
3946
|
+
fetchRelatedRute();
|
|
3927
3947
|
}, [config]);
|
|
3928
3948
|
useEffect(() => {
|
|
3929
|
-
if (
|
|
3930
|
-
|
|
3931
|
-
|
|
3932
|
-
|
|
3933
|
-
const canonicalPath = getCanonicalPath(parentRoute, sourceFieldValue);
|
|
3934
|
-
dispatchPath({ type: "DEFAULT", payload: canonicalPath });
|
|
3935
|
-
}
|
|
3936
|
-
}
|
|
3937
|
-
}, [initialValues, routes]);
|
|
3938
|
-
useEffect(() => {
|
|
3939
|
-
if (initialValues.webatlas_path) dispatchPath({ type: "NO_URL_CHECK", payload: initialValues.webatlas_path });
|
|
3940
|
-
if (initialValues.webatlas_override) setIsOverride(initialValues.webatlas_override);
|
|
3941
|
-
async function fetchAllRoutes() {
|
|
3942
|
-
const allRoutes = await getAllRoutes();
|
|
3943
|
-
setRoutes(allRoutes);
|
|
3944
|
-
}
|
|
3945
|
-
fetchAllRoutes();
|
|
3946
|
-
}, []);
|
|
3949
|
+
if (!route || !routes.length) return;
|
|
3950
|
+
const parentRoute = routes.find((singleRoute) => singleRoute.documentId === route.parent?.documentId);
|
|
3951
|
+
setSelectedParent(parentRoute || null);
|
|
3952
|
+
}, [route, routes]);
|
|
3947
3953
|
useEffect(() => {
|
|
3948
3954
|
async function fetchProhibitedRouteIds() {
|
|
3949
3955
|
const prohibitedIds = await getProhibitedRouteIds(route?.documentId);
|
|
@@ -3953,27 +3959,26 @@ const Panel = ({ config }) => {
|
|
|
3953
3959
|
}, [route]);
|
|
3954
3960
|
useEffect(() => {
|
|
3955
3961
|
if (!sourceFieldValue) return;
|
|
3956
|
-
|
|
3957
|
-
|
|
3958
|
-
|
|
3959
|
-
|
|
3960
|
-
dispatchPath({ type: "RESET_URL_CHECK_FLAG" });
|
|
3962
|
+
if (!isOverride) {
|
|
3963
|
+
const newPath = buildPath("path", sourceFieldValue, selectedParent);
|
|
3964
|
+
dispatchPath({ type: "DEFAULT", payload: newPath });
|
|
3965
|
+
}
|
|
3961
3966
|
}, [selectedParent, sourceFieldValue, route, isOverride]);
|
|
3962
|
-
async function checkCanonicalPath(path2,
|
|
3967
|
+
async function checkCanonicalPath(path2, routeDocumentId) {
|
|
3963
3968
|
if (!path2) return;
|
|
3964
3969
|
try {
|
|
3965
|
-
const result = await duplicateCheck({ fetchFunction: get, path: path2, routeDocumentId
|
|
3970
|
+
const result = await duplicateCheck({ fetchFunction: get, path: path2, routeDocumentId, withoutTransform: true });
|
|
3966
3971
|
dispatchPath({ type: "SET_CANONICALPATH", payload: result });
|
|
3967
3972
|
} catch (err) {
|
|
3968
3973
|
strapi.log.error(err);
|
|
3969
3974
|
}
|
|
3970
3975
|
}
|
|
3971
|
-
async function checkPath(path2,
|
|
3976
|
+
async function checkPath(path2, routeDocumentId) {
|
|
3972
3977
|
if (!path2) return;
|
|
3973
3978
|
setValidationState("checking");
|
|
3974
3979
|
dispatchPath({ type: "SET_REPLACEMENT", payload: "" });
|
|
3975
3980
|
try {
|
|
3976
|
-
const data = await duplicateCheck({ fetchFunction: get, path: path2, routeDocumentId
|
|
3981
|
+
const data = await duplicateCheck({ fetchFunction: get, path: path2, routeDocumentId, withoutTransform: true });
|
|
3977
3982
|
if (!data || data === path2) return;
|
|
3978
3983
|
dispatchPath({ type: "NO_URL_CHECK", payload: data });
|
|
3979
3984
|
dispatchPath({ type: "SET_REPLACEMENT", payload: data });
|
|
@@ -4010,7 +4015,10 @@ const Panel = ({ config }) => {
|
|
|
4010
4015
|
canonicalPath: path.canonicalPath,
|
|
4011
4016
|
routes,
|
|
4012
4017
|
selectedParent,
|
|
4013
|
-
setSelectedParent
|
|
4018
|
+
setSelectedParent: (val) => {
|
|
4019
|
+
hasUserInteracted.current = true;
|
|
4020
|
+
setSelectedParent(val);
|
|
4021
|
+
},
|
|
4014
4022
|
prohibitedRouteIds
|
|
4015
4023
|
}
|
|
4016
4024
|
),
|
|
@@ -4037,7 +4045,10 @@ const Panel = ({ config }) => {
|
|
|
4037
4045
|
OverrideCheckbox,
|
|
4038
4046
|
{
|
|
4039
4047
|
isOverride,
|
|
4040
|
-
setIsOverride
|
|
4048
|
+
setIsOverride: (val) => {
|
|
4049
|
+
hasUserInteracted.current = true;
|
|
4050
|
+
setIsOverride(val);
|
|
4051
|
+
},
|
|
4041
4052
|
disabledCondition: !canCreate && !canUpdate
|
|
4042
4053
|
}
|
|
4043
4054
|
),
|
|
@@ -4072,7 +4083,7 @@ const CMEditViewAside = ({ documentId, model }) => {
|
|
|
4072
4083
|
setIsAllowedContentType(!!contentType?.pluginOptions?.webatlas?.enabled);
|
|
4073
4084
|
}, [contentTypes, model]);
|
|
4074
4085
|
useEffect(() => {
|
|
4075
|
-
const isWebatlasLabel = (label) => label.textContent?.startsWith("
|
|
4086
|
+
const isWebatlasLabel = (label) => label.textContent?.startsWith("webatlas");
|
|
4076
4087
|
const cleanupLabels = () => {
|
|
4077
4088
|
const labels = document.querySelectorAll("label");
|
|
4078
4089
|
labels.forEach((label) => {
|
|
@@ -4142,7 +4153,7 @@ const index = {
|
|
|
4142
4153
|
id: `${PLUGIN_ID}.link.paths`,
|
|
4143
4154
|
defaultMessage: "Paths"
|
|
4144
4155
|
},
|
|
4145
|
-
Component: () => import("./index-
|
|
4156
|
+
Component: () => import("./index-Cf9j0bn2.mjs"),
|
|
4146
4157
|
permissions: [
|
|
4147
4158
|
pluginPermissions["page.routes"][0]
|
|
4148
4159
|
]
|
|
@@ -4154,7 +4165,7 @@ const index = {
|
|
|
4154
4165
|
id: `${PLUGIN_ID}.link.navigation`,
|
|
4155
4166
|
defaultMessage: "Navigation"
|
|
4156
4167
|
},
|
|
4157
|
-
Component: () => import("./index-
|
|
4168
|
+
Component: () => import("./index-BIEUXWe7.mjs"),
|
|
4158
4169
|
permissions: [
|
|
4159
4170
|
pluginPermissions["page.navigation"][0]
|
|
4160
4171
|
]
|
|
@@ -4174,7 +4185,7 @@ const index = {
|
|
|
4174
4185
|
},
|
|
4175
4186
|
id: `${PLUGIN_ID}-general`,
|
|
4176
4187
|
to: `${PLUGIN_ID}/general`,
|
|
4177
|
-
Component: () => import("./index-
|
|
4188
|
+
Component: () => import("./index-Y_PYIiRA.mjs"),
|
|
4178
4189
|
permissions: [
|
|
4179
4190
|
pluginPermissions["settings.general"][0]
|
|
4180
4191
|
]
|
|
@@ -4189,7 +4200,7 @@ const index = {
|
|
|
4189
4200
|
},
|
|
4190
4201
|
id: `${PLUGIN_ID}-navigation`,
|
|
4191
4202
|
to: `${PLUGIN_ID}/navigation`,
|
|
4192
|
-
Component: () => import("./index-
|
|
4203
|
+
Component: () => import("./index-BbnlyBrZ.mjs"),
|
|
4193
4204
|
permissions: [
|
|
4194
4205
|
pluginPermissions["settings.navigation"][0]
|
|
4195
4206
|
]
|
|
@@ -4233,3 +4244,4 @@ export {
|
|
|
4233
4244
|
pluginPermissions as p,
|
|
4234
4245
|
useApi as u
|
|
4235
4246
|
};
|
|
4247
|
+
//# sourceMappingURL=index-DCYCtKrj.mjs.map
|