@mattisvensson/strapi-plugin-webatlas 0.8.2 → 0.9.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 -5
- package/dist/_chunks/{SettingTitle-DDZxIqee.js → SettingTitle-BWOWVBLk.js} +2 -2
- package/dist/_chunks/SettingTitle-BWOWVBLk.js.map +1 -0
- package/dist/_chunks/{SettingTitle-BaaQ_99D.mjs → SettingTitle-BeOTuTTQ.mjs} +2 -2
- package/dist/_chunks/SettingTitle-BeOTuTTQ.mjs.map +1 -0
- package/dist/_chunks/{SettingTitle-IwvX4Kb5.mjs → SettingTitle-C3sFAnSq.mjs} +1 -1
- package/dist/_chunks/{SettingTitle-D5oNwpzC.js → SettingTitle-CzqQvoLC.js} +1 -1
- package/dist/_chunks/{de-B9pq-AJZ.mjs → de-B0MLvmHX.mjs} +2 -1
- package/dist/_chunks/{de-B9pq-AJZ.mjs.map → de-B0MLvmHX.mjs.map} +1 -1
- package/dist/_chunks/{de-DlQxM8Tg.js → de-C9WypUHO.js} +2 -1
- package/dist/_chunks/{de-DlQxM8Tg.js.map → de-C9WypUHO.js.map} +1 -1
- package/dist/_chunks/{en-DrhxIwOr.js → en-Bh58A3xT.js} +2 -1
- package/dist/_chunks/{en-DrhxIwOr.js.map → en-Bh58A3xT.js.map} +1 -1
- package/dist/_chunks/{en-Dmbcf7gp.mjs → en-CAe0Ugdu.mjs} +2 -1
- package/dist/_chunks/{en-Dmbcf7gp.mjs.map → en-CAe0Ugdu.mjs.map} +1 -1
- package/dist/_chunks/{index-Df365kgY.js → index-BOX4NO67.js} +5 -5
- package/dist/_chunks/index-BOX4NO67.js.map +1 -0
- package/dist/_chunks/{index--XAogZgv.js → index-BRyMTy-A.js} +3 -4
- package/dist/_chunks/{index-aAKsnALd.mjs → index-Bct4XuQR.mjs} +4 -3
- package/dist/_chunks/index-Bct4XuQR.mjs.map +1 -0
- package/dist/_chunks/{index-DOMrViWi.js → index-BfUMDWOu.js} +106 -98
- package/dist/_chunks/{index-QFbHwlyj.mjs → index-C3b9I82g.mjs} +6 -6
- package/dist/_chunks/index-C3b9I82g.mjs.map +1 -0
- package/dist/_chunks/{index-B1mbYb2_.js → index-Cljh2WvW.js} +4 -4
- package/dist/_chunks/{index-B1dEY-gs.js → index-CtB23bUM.js} +4 -3
- package/dist/_chunks/index-CtB23bUM.js.map +1 -0
- package/dist/_chunks/{index-g8wz2qoC.js → index-DNTPIHiU.js} +108 -98
- package/dist/_chunks/index-DNTPIHiU.js.map +1 -0
- package/dist/_chunks/{index-BFuwbmZy.js → index-DQNSkUQ4.js} +251 -4172
- package/dist/_chunks/index-DQNSkUQ4.js.map +1 -0
- package/dist/_chunks/{index-_49Fvwqq.mjs → index-DQrOEGKw.mjs} +252 -4173
- package/dist/_chunks/index-DQrOEGKw.mjs.map +1 -0
- package/dist/_chunks/{index-DH0mFrgH.js → index-DYTddEwL.js} +4 -5
- package/dist/_chunks/{index-QU9SZ_H9.mjs → index-DYkDXyXl.mjs} +5 -5
- package/dist/_chunks/{index-DKtlnMlv.js → index-Db1YZUh_.js} +250 -4173
- package/dist/_chunks/{index-Dm_GIRd4.mjs → index-DskHc4Qo.mjs} +6 -5
- package/dist/_chunks/index-DskHc4Qo.mjs.map +1 -0
- package/dist/_chunks/{index-B2tjc_lG.mjs → index-Hc9EaNaQ.mjs} +3 -4
- package/dist/_chunks/{index-DXRtXlZW.mjs → index-MbtAyF71.mjs} +5 -6
- package/dist/_chunks/{index-D2SIGcj3.mjs → index-k3FZ4Km2.mjs} +251 -4174
- package/dist/_chunks/{index-2lVgPz4a.js → index-lhI5MPlJ.js} +5 -4
- package/dist/_chunks/index-lhI5MPlJ.js.map +1 -0
- package/dist/_chunks/{index-D2Meknib.mjs → index-m4NBXtx2.mjs} +111 -101
- package/dist/_chunks/index-m4NBXtx2.mjs.map +1 -0
- package/dist/_chunks/{index-Dt-mlR1F.mjs → index-unPFF-85.mjs} +109 -101
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/components/modals/NavModal.d.ts +2 -1
- package/dist/admin/src/hooks/useApi.d.ts +1 -1
- package/dist/admin/src/permissions.d.ts +23 -0
- package/dist/admin/src/utils/duplicateCheck.d.ts +4 -3
- package/dist/server/index.js +2094 -1911
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +2094 -1911
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/config/index.d.ts +6 -1
- package/dist/server/src/index.d.ts +16 -5
- package/dist/server/src/policies/has-permissions.d.ts +2 -0
- package/dist/server/src/policies/index.d.ts +3 -1
- package/dist/server/src/routes/admin.d.ts +6 -2
- package/dist/server/src/routes/index.d.ts +6 -2
- package/dist/server/src/services/admin.d.ts +1 -1
- package/dist/server/src/services/index.d.ts +1 -1
- package/dist/{utils → server/src/utils}/buildStructuredNavigation.d.ts +1 -1
- package/dist/{utils → server/src/utils}/extractRouteAndItems.d.ts +1 -1
- package/dist/server/src/utils/index.d.ts +7 -2
- package/dist/server/src/utils/pluginHelpers.d.ts +0 -3
- package/dist/utils/index.d.ts +3 -7
- package/dist/utils/pluginConstants.d.ts +3 -0
- package/package.json +1 -1
- package/dist/_chunks/SettingTitle-BaaQ_99D.mjs.map +0 -1
- package/dist/_chunks/SettingTitle-DDZxIqee.js.map +0 -1
- package/dist/_chunks/index--XAogZgv.js.map +0 -1
- package/dist/_chunks/index-B2tjc_lG.mjs.map +0 -1
- package/dist/_chunks/index-D2SIGcj3.mjs.map +0 -1
- package/dist/_chunks/index-DH0mFrgH.js.map +0 -1
- package/dist/_chunks/index-DKtlnMlv.js.map +0 -1
- package/dist/_chunks/index-DOMrViWi.js.map +0 -1
- package/dist/_chunks/index-DXRtXlZW.mjs.map +0 -1
- package/dist/_chunks/index-Df365kgY.js.map +0 -1
- package/dist/_chunks/index-Dt-mlR1F.mjs.map +0 -1
- package/dist/_chunks/index-QFbHwlyj.mjs.map +0 -1
- /package/dist/{utils → server/src/utils}/cleanRootKeys.d.ts +0 -0
- /package/dist/{utils → server/src/utils}/populateDeep.d.ts +0 -0
- /package/dist/{utils → server/src/utils}/removeWaFields.d.ts +0 -0
- /package/dist/{pluginId.d.ts → utils/pluginId.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -128,18 +128,15 @@ Optional parameters:
|
|
|
128
128
|
|
|
129
129
|
## 🧩 Roadmap
|
|
130
130
|
|
|
131
|
-
- RBAC
|
|
132
|
-
- User action feedback
|
|
131
|
+
- More fine-grained RBAC
|
|
133
132
|
- Internationalization
|
|
134
133
|
- Route page
|
|
135
|
-
- Filters
|
|
136
134
|
- Nested url structure
|
|
137
135
|
- Entity page
|
|
138
136
|
- Add to navigation from entity
|
|
139
137
|
- Settings
|
|
140
138
|
- Navigation settings
|
|
141
|
-
-
|
|
142
|
-
- Prevent navigation deletion
|
|
139
|
+
- Prevent navigation deletion option
|
|
143
140
|
- Navigation page
|
|
144
141
|
- Custom fields for nav items
|
|
145
142
|
- Nested paths through wrapper/external item
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const jsxRuntime = require("react/jsx-runtime");
|
|
3
3
|
const designSystem = require("@strapi/design-system");
|
|
4
4
|
const admin = require("@strapi/strapi/admin");
|
|
5
|
-
const index = require("./index-
|
|
5
|
+
const index = require("./index-DNTPIHiU.js");
|
|
6
6
|
const reactIntl = require("react-intl");
|
|
7
7
|
const icons = require("@strapi/icons");
|
|
8
8
|
function PageWrapper({
|
|
@@ -65,4 +65,4 @@ function SettingTitle({ children }) {
|
|
|
65
65
|
exports.ContentBox = ContentBox;
|
|
66
66
|
exports.PageWrapper = PageWrapper;
|
|
67
67
|
exports.SettingTitle = SettingTitle;
|
|
68
|
-
//# sourceMappingURL=SettingTitle-
|
|
68
|
+
//# sourceMappingURL=SettingTitle-BWOWVBLk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingTitle-BWOWVBLk.js","sources":["../../admin/src/pages/Settings/PageWrapper.tsx","../../admin/src/pages/Settings/ContentBox.tsx","../../admin/src/pages/Settings/SettingTitle.tsx"],"sourcesContent":["import { Button, Flex } from '@strapi/design-system';\nimport { Page, Layouts} from '@strapi/strapi/admin'\nimport { PLUGIN_NAME } from '../../../../utils/pluginId';\nimport { getTranslation } from '../../utils';\nimport { useIntl } from 'react-intl';\nimport { Check } from '@strapi/icons';\n\nexport default function PageWrapper({ \n save, \n isSaving,\n disabledCondition,\n subtitle,\n children\n}: {\n save?: () => void, \n isSaving: boolean,\n disabledCondition: boolean,\n subtitle: string,\n children: React.ReactNode \n}) {\n\n const { formatMessage } = useIntl();\n \n return (\n <Page.Main>\n <Layouts.Header\n title={PLUGIN_NAME}\n subtitle={subtitle}\n primaryAction={ disabledCondition !== undefined && save &&\n <Button\n type=\"submit\"\n onClick={() => save()}\n loading={isSaving}\n disabled={disabledCondition || isSaving}\n startIcon={<Check />}\n >\n {/* <Check /> */}\n {formatMessage({\n id: getTranslation('save'),\n defaultMessage: 'Save',\n })}\n </Button>\n }\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {children}\n </Flex>\n </Layouts.Content>\n </Page.Main>\n )\n}","import { Typography, Flex, Box } from '@strapi/design-system';\n\nexport default function ContentBox({ title, children }: { title: string, children: React.ReactNode }) {\n return <Flex\n background='neutral0'\n hasRadius\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n shadow=\"tableShadow\"\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n >\n <Typography variant=\"delta\" as=\"h3\">\n {title}\n </Typography>\n <Box>\n {children}\n </Box>\n </Flex>\n}","import { Typography } from '@strapi/design-system'\n\nexport default function SettingTitle({ children }: { children: React.ReactNode }) {\n return (\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {children}\n </Typography>\n )\n}"],"names":["useIntl","jsxs","Page","jsx","Layouts","PLUGIN_NAME","Button","Check","getTranslation","Flex","Typography","Box"],"mappings":";;;;;;;AAOA,SAAwB,YAAY;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AAEK,QAAA,EAAE,cAAc,IAAIA,kBAAQ;AAGhC,SAAAC,gCAACC,MAAAA,KAAK,MAAL,EACC,UAAA;AAAA,IAAAC,2BAAA;AAAA,MAACC,MAAAA,QAAQ;AAAA,MAAR;AAAA,QACC,OAAOC,MAAA;AAAA,QACP;AAAA,QACA,eAAgB,sBAAsB,UAAa,QACjDF,2BAAA;AAAA,UAACG,aAAA;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS,MAAM,KAAK;AAAA,YACpB,SAAS;AAAA,YACT,UAAU,qBAAqB;AAAA,YAC/B,0CAAYC,MAAM,OAAA,EAAA;AAAA,YAGjB,UAAc,cAAA;AAAA,cACb,IAAIC,qBAAe,MAAM;AAAA,cACzB,gBAAgB;AAAA,YACjB,CAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAEJ;AAAA,IACCL,2BAAA,IAAAC,MAAA,QAAQ,SAAR,EACC,UAACD,2BAAAA,IAAAM,aAAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GAChD,UACH,EACF,CAAA;AAAA,EAAA,GACF;AAEJ;ACjDA,SAAwB,WAAW,EAAE,OAAO,YAA0D;AAC7F,SAAAR,2BAAA;AAAA,IAACQ,aAAA;AAAA,IAAA;AAAA,MACN,YAAW;AAAA,MACX,WAAS;AAAA,MACT,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,aAAa;AAAA,MACb,cAAc;AAAA,MACd,QAAO;AAAA,MACP,WAAU;AAAA,MACV,YAAW;AAAA,MACX,KAAK;AAAA,MAEL,UAAA;AAAA,QAAAN,+BAACO,aAAAA,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UACH,OAAA;AAAA,QACAP,+BAACQ,aAAAA,OACE,SACH,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF;AACF;ACpBwB,SAAA,aAAa,EAAE,YAA2C;AAChF,wCACGD,aAAW,YAAA,EAAA,SAAQ,SAAQ,WAAU,cACnC,UACH;AAEJ;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Button, Flex, Typography, Box } from "@strapi/design-system";
|
|
3
3
|
import { Page, Layouts } from "@strapi/strapi/admin";
|
|
4
|
-
import {
|
|
4
|
+
import { e as PLUGIN_NAME, g as getTranslation } from "./index-m4NBXtx2.mjs";
|
|
5
5
|
import { useIntl } from "react-intl";
|
|
6
6
|
import { Check } from "@strapi/icons";
|
|
7
7
|
function PageWrapper({
|
|
@@ -66,4 +66,4 @@ export {
|
|
|
66
66
|
PageWrapper as P,
|
|
67
67
|
SettingTitle as S
|
|
68
68
|
};
|
|
69
|
-
//# sourceMappingURL=SettingTitle-
|
|
69
|
+
//# sourceMappingURL=SettingTitle-BeOTuTTQ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingTitle-BeOTuTTQ.mjs","sources":["../../admin/src/pages/Settings/PageWrapper.tsx","../../admin/src/pages/Settings/ContentBox.tsx","../../admin/src/pages/Settings/SettingTitle.tsx"],"sourcesContent":["import { Button, Flex } from '@strapi/design-system';\nimport { Page, Layouts} from '@strapi/strapi/admin'\nimport { PLUGIN_NAME } from '../../../../utils/pluginId';\nimport { getTranslation } from '../../utils';\nimport { useIntl } from 'react-intl';\nimport { Check } from '@strapi/icons';\n\nexport default function PageWrapper({ \n save, \n isSaving,\n disabledCondition,\n subtitle,\n children\n}: {\n save?: () => void, \n isSaving: boolean,\n disabledCondition: boolean,\n subtitle: string,\n children: React.ReactNode \n}) {\n\n const { formatMessage } = useIntl();\n \n return (\n <Page.Main>\n <Layouts.Header\n title={PLUGIN_NAME}\n subtitle={subtitle}\n primaryAction={ disabledCondition !== undefined && save &&\n <Button\n type=\"submit\"\n onClick={() => save()}\n loading={isSaving}\n disabled={disabledCondition || isSaving}\n startIcon={<Check />}\n >\n {/* <Check /> */}\n {formatMessage({\n id: getTranslation('save'),\n defaultMessage: 'Save',\n })}\n </Button>\n }\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {children}\n </Flex>\n </Layouts.Content>\n </Page.Main>\n )\n}","import { Typography, Flex, Box } from '@strapi/design-system';\n\nexport default function ContentBox({ title, children }: { title: string, children: React.ReactNode }) {\n return <Flex\n background='neutral0'\n hasRadius\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n shadow=\"tableShadow\"\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n >\n <Typography variant=\"delta\" as=\"h3\">\n {title}\n </Typography>\n <Box>\n {children}\n </Box>\n </Flex>\n}","import { Typography } from '@strapi/design-system'\n\nexport default function SettingTitle({ children }: { children: React.ReactNode }) {\n return (\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {children}\n </Typography>\n )\n}"],"names":[],"mappings":";;;;;;AAOA,SAAwB,YAAY;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AAEK,QAAA,EAAE,cAAc,IAAI,QAAQ;AAGhC,SAAA,qBAAC,KAAK,MAAL,EACC,UAAA;AAAA,IAAA;AAAA,MAAC,QAAQ;AAAA,MAAR;AAAA,QACC,OAAO;AAAA,QACP;AAAA,QACA,eAAgB,sBAAsB,UAAa,QACjD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS,MAAM,KAAK;AAAA,YACpB,SAAS;AAAA,YACT,UAAU,qBAAqB;AAAA,YAC/B,+BAAY,OAAM,EAAA;AAAA,YAGjB,UAAc,cAAA;AAAA,cACb,IAAI,eAAe,MAAM;AAAA,cACzB,gBAAgB;AAAA,YACjB,CAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAEJ;AAAA,IACC,oBAAA,QAAQ,SAAR,EACC,UAAC,oBAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GAChD,UACH,EACF,CAAA;AAAA,EAAA,GACF;AAEJ;ACjDA,SAAwB,WAAW,EAAE,OAAO,YAA0D;AAC7F,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACN,YAAW;AAAA,MACX,WAAS;AAAA,MACT,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,aAAa;AAAA,MACb,cAAc;AAAA,MACd,QAAO;AAAA,MACP,WAAU;AAAA,MACV,YAAW;AAAA,MACX,KAAK;AAAA,MAEL,UAAA;AAAA,QAAA,oBAAC,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UACH,OAAA;AAAA,QACA,oBAAC,OACE,SACH,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF;AACF;ACpBwB,SAAA,aAAa,EAAE,YAA2C;AAChF,6BACG,YAAW,EAAA,SAAQ,SAAQ,WAAU,cACnC,UACH;AAEJ;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Button, Flex, Typography, Box } from "@strapi/design-system";
|
|
3
3
|
import { Page, Layouts } from "@strapi/strapi/admin";
|
|
4
|
-
import {
|
|
4
|
+
import { e as PLUGIN_NAME, g as getTranslation } from "./index-unPFF-85.mjs";
|
|
5
5
|
import { useIntl } from "react-intl";
|
|
6
6
|
import { Check } from "@strapi/icons";
|
|
7
7
|
function PageWrapper({
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const jsxRuntime = require("react/jsx-runtime");
|
|
3
3
|
const designSystem = require("@strapi/design-system");
|
|
4
4
|
const admin = require("@strapi/strapi/admin");
|
|
5
|
-
const index = require("./index-
|
|
5
|
+
const index = require("./index-BfUMDWOu.js");
|
|
6
6
|
const reactIntl = require("react-intl");
|
|
7
7
|
const icons = require("@strapi/icons");
|
|
8
8
|
function PageWrapper({
|
|
@@ -76,6 +76,7 @@ const de = {
|
|
|
76
76
|
"webatlas.components.URLInfo.checking": "Überprüfe, ob die URL verfügbar ist...",
|
|
77
77
|
"webatlas.components.URLInfo.available": "URL ist verfügbar",
|
|
78
78
|
"webatlas.components.URLInfo.notAvailable": "URL ist nicht verfügbar. Ersetzt durch",
|
|
79
|
+
"webatlas.components.CMEditViewAside.noPermission": "Sie haben nicht die erforderlichen Berechtigungen, um auf dieses Panel zuzugreifen.",
|
|
79
80
|
"webatlas.components.CMEditViewAside.notAllowed.start": "Dieser Inhaltstyp ist nicht erlaubt für",
|
|
80
81
|
"webatlas.components.CMEditViewAside.notAllowed.end": "Wenn Sie ihn verwenden möchten, wenden Sie sich bitte an Ihren Administrator",
|
|
81
82
|
"webatlas.components.CMEditViewAside.notConfigured.start": "Dieser Inhaltstyp ist nicht konfiguriert für",
|
|
@@ -128,4 +129,4 @@ const de = {
|
|
|
128
129
|
export {
|
|
129
130
|
de as default
|
|
130
131
|
};
|
|
131
|
-
//# sourceMappingURL=de-
|
|
132
|
+
//# sourceMappingURL=de-B0MLvmHX.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"de-
|
|
1
|
+
{"version":3,"file":"de-B0MLvmHX.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -78,6 +78,7 @@ const de = {
|
|
|
78
78
|
"webatlas.components.URLInfo.checking": "Überprüfe, ob die URL verfügbar ist...",
|
|
79
79
|
"webatlas.components.URLInfo.available": "URL ist verfügbar",
|
|
80
80
|
"webatlas.components.URLInfo.notAvailable": "URL ist nicht verfügbar. Ersetzt durch",
|
|
81
|
+
"webatlas.components.CMEditViewAside.noPermission": "Sie haben nicht die erforderlichen Berechtigungen, um auf dieses Panel zuzugreifen.",
|
|
81
82
|
"webatlas.components.CMEditViewAside.notAllowed.start": "Dieser Inhaltstyp ist nicht erlaubt für",
|
|
82
83
|
"webatlas.components.CMEditViewAside.notAllowed.end": "Wenn Sie ihn verwenden möchten, wenden Sie sich bitte an Ihren Administrator",
|
|
83
84
|
"webatlas.components.CMEditViewAside.notConfigured.start": "Dieser Inhaltstyp ist nicht konfiguriert für",
|
|
@@ -128,4 +129,4 @@ const de = {
|
|
|
128
129
|
"webatlas.settings.section.navigation": "Navigation"
|
|
129
130
|
};
|
|
130
131
|
exports.default = de;
|
|
131
|
-
//# sourceMappingURL=de-
|
|
132
|
+
//# sourceMappingURL=de-C9WypUHO.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"de-
|
|
1
|
+
{"version":3,"file":"de-C9WypUHO.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -78,6 +78,7 @@ const en = {
|
|
|
78
78
|
"webatlas.components.URLInfo.checking": "Checking if URL is available...",
|
|
79
79
|
"webatlas.components.URLInfo.available": "URL is available",
|
|
80
80
|
"webatlas.components.URLInfo.notAvailable": "URL is not available. Replaced with",
|
|
81
|
+
"webatlas.components.CMEditViewAside.noPermission": "You do not have the required permissions to access this panel.",
|
|
81
82
|
"webatlas.components.CMEditViewAside.notAllowed.start": "This content type is not allowed for",
|
|
82
83
|
"webatlas.components.CMEditViewAside.notAllowed.end": "If you wish to use it, please contact your administrator",
|
|
83
84
|
"webatlas.components.CMEditViewAside.notConfigured.start": "This content type is not configured for",
|
|
@@ -128,4 +129,4 @@ const en = {
|
|
|
128
129
|
"webatlas.settings.section.navigation": "Navigation"
|
|
129
130
|
};
|
|
130
131
|
exports.default = en;
|
|
131
|
-
//# sourceMappingURL=en-
|
|
132
|
+
//# sourceMappingURL=en-Bh58A3xT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en-
|
|
1
|
+
{"version":3,"file":"en-Bh58A3xT.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -76,6 +76,7 @@ const en = {
|
|
|
76
76
|
"webatlas.components.URLInfo.checking": "Checking if URL is available...",
|
|
77
77
|
"webatlas.components.URLInfo.available": "URL is available",
|
|
78
78
|
"webatlas.components.URLInfo.notAvailable": "URL is not available. Replaced with",
|
|
79
|
+
"webatlas.components.CMEditViewAside.noPermission": "You do not have the required permissions to access this panel.",
|
|
79
80
|
"webatlas.components.CMEditViewAside.notAllowed.start": "This content type is not allowed for",
|
|
80
81
|
"webatlas.components.CMEditViewAside.notAllowed.end": "If you wish to use it, please contact your administrator",
|
|
81
82
|
"webatlas.components.CMEditViewAside.notConfigured.start": "This content type is not configured for",
|
|
@@ -128,4 +129,4 @@ const en = {
|
|
|
128
129
|
export {
|
|
129
130
|
en as default
|
|
130
131
|
};
|
|
131
|
-
//# sourceMappingURL=en-
|
|
132
|
+
//# sourceMappingURL=en-CAe0Ugdu.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en-
|
|
1
|
+
{"version":3,"file":"en-CAe0Ugdu.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -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-DNTPIHiU.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-BWOWVBLk.js");
|
|
12
12
|
const icons = require("@strapi/icons");
|
|
13
13
|
function ContentTypeAccordion({
|
|
14
14
|
contentType,
|
|
@@ -193,7 +193,7 @@ const Settings = () => {
|
|
|
193
193
|
}
|
|
194
194
|
);
|
|
195
195
|
}
|
|
196
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
196
|
+
return /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Protect, { permissions: index.pluginPermissions["settings.general"], children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
197
197
|
SettingTitle.PageWrapper,
|
|
198
198
|
{
|
|
199
199
|
save,
|
|
@@ -288,7 +288,7 @@ const Settings = () => {
|
|
|
288
288
|
] }) })
|
|
289
289
|
]
|
|
290
290
|
}
|
|
291
|
-
);
|
|
291
|
+
) });
|
|
292
292
|
};
|
|
293
293
|
exports.default = Settings;
|
|
294
|
-
//# sourceMappingURL=index-
|
|
294
|
+
//# sourceMappingURL=index-BOX4NO67.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-BOX4NO67.js","sources":["../../admin/src/pages/Settings/General/ContentTypeAccordion.tsx","../../admin/src/pages/Settings/General/index.tsx"],"sourcesContent":["import { SingleSelect, SingleSelectOption } from '@strapi/design-system';\nimport Tooltip from '../../../components/Tooltip'\nimport { Box, Accordion, Field } from '@strapi/design-system';\nimport { getTranslation } from '../../../utils';\nimport { useIntl } from 'react-intl';\nimport type { ContentType, ConfigContentType } from '../../../../../types';\n\nexport default function ContentTypeAccordion({ \n contentType,\n contentTypeSettings,\n dispatch\n}: { \n contentType: ContentType | undefined, \n contentTypeSettings: ConfigContentType, \n dispatch: React.Dispatch<any>\n}) {\n \n const { formatMessage } = useIntl();\n\n if (!contentType) return null\n\n return (\n <Box\n borderColor={!contentTypeSettings.default && 'danger500'}\n key={contentType.uid}\n >\n <Accordion.Item key={contentType.uid} value={contentType.uid} size=\"S\">\n <Accordion.Header>\n <Accordion.Trigger>\n {contentType?.info.displayName}\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Content>\n <Box padding={3}>\n <Field.Root\n name=\"selectedContentTypes\"\n hint={formatMessage({\n id: getTranslation('settings.page.defaultField.hint'),\n defaultMessage: 'The selected field from the content type will be used to generate the URL alias. Use a field that is unique and descriptive, such as a \"title\" or \"name\".',\n })}\n error={!contentTypeSettings.default && formatMessage({\n id: getTranslation('settings.page.defaultField.error'),\n defaultMessage: 'Please select a default field',\n })}\n required\n >\n <Field.Label>\n {formatMessage({\n id: getTranslation('settings.page.defaultField'),\n defaultMessage: 'Default URL Alias field',\n })}\n </Field.Label>\n <SingleSelect\n name={`defaultField-${contentType.uid}`}\n onClear={() => dispatch({ type: 'SET_DEFAULT_FIELD', payload: { ctUid: contentType.uid, field: '' } })}\n value={contentTypeSettings?.default || ''}\n onChange={(value: string) => dispatch({ type: 'SET_DEFAULT_FIELD', payload: { ctUid: contentType.uid, field: value } })}\n >\n {Object.entries(contentType.attributes).map(([key], index) => {\n if (\n key === 'id' || \n key === 'documentId' ||\n key === 'createdAt' || \n key === 'updatedAt' || \n key === 'createdBy' || \n key === 'updatedBy' ||\n key === 'webatlas_path' ||\n key === 'webatlas_override'\n ) return null\n return <SingleSelectOption key={index} value={key}>{key}</SingleSelectOption>\n })}\n </SingleSelect>\n <Field.Hint/>\n </Field.Root>\n <Box paddingTop={4}>\n <Field.Root\n name=\"urlAliasPattern\"\n hint={formatMessage({\n id: getTranslation('settings.page.urlAliasPattern.hint'),\n defaultMessage: 'The pattern to prepend to the generated URL alias. For example, if you enter \"blog\" and the value of default field is \"My First Post\", the generated URL alias will be \"blog/my-first-post\". Leave empty for no prefix.',\n })}\n >\n <Field.Label>\n {formatMessage({\n id: getTranslation('settings.page.urlAliasPattern'),\n defaultMessage: 'URL Alias Pattern',\n })}\n <Tooltip description={formatMessage({\n id: getTranslation('settings.page.urlAliasPattern.tooltip'),\n defaultMessage: 'Leading and trailing slashes will be removed. Spaces will be replaced with hyphens. Special characters will be encoded.',\n })} />\n </Field.Label>\n <Field.Input\n value={contentTypeSettings.pattern}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => dispatch({ type: 'SET_PATTERN', payload: { ctUid: contentType.uid, pattern: e.target.value } })}\n disabled={!contentTypeSettings.default}\n type=\"text\"\n placeholder={formatMessage({\n id: getTranslation('settings.page.urlAliasPattern.placeholder'),\n defaultMessage: 'e.g. blog',\n })}\n />\n <Field.Hint />\n </Field.Root>\n </Box>\n </Box>\n </Accordion.Content>\n </Accordion.Item>\n </Box>\n \n )\n}","/*\n *\n * Settings\n * This file contains the general settings page for the Webatlas plugin.\n * It allows users to configure which content types are enabled for URL aliases and navigations,\n * as well as setting default fields and the URL alias patterns for each content type. \n *\n*/\n\nimport type { ContentType, ConfigContentType, PluginConfig } from '../../../../../types';\nimport { useEffect, useState, useReducer, useRef } from 'react';\nimport { Box, Accordion, Field } from '@strapi/design-system';\nimport { useNotification, Page } from '@strapi/strapi/admin'\nimport { MultiSelect, MultiSelectOption } from '@strapi/design-system';\nimport usePluginConfig from '../../../hooks/usePluginConfig';\nimport transformToUrl from '../../../../../utils/transformToUrl';\nimport useAllContentTypes from '../../../hooks/useAllContentTypes';\nimport { getTranslation } from '../../../utils';\nimport { useIntl } from 'react-intl';\nimport { FullLoader } from '../../../components/UI';\nimport { PageWrapper, ContentBox, SettingTitle } from '..';\nimport ContentTypeAccordion from './ContentTypeAccordion';\nimport { PLUGIN_VERSION, PLUGIN_NAME } from '../../../../../utils/pluginId';\nimport { Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/design-system';\nimport { ExternalLink } from '@strapi/icons';\nimport pluginPermissions from '../../../permissions';\n\ntype Action =\n | { type: 'SET_SELECTED_CONTENT_TYPES'; payload: ConfigContentType[] }\n | { type: 'SET_DEFAULT_FIELD'; payload: { ctUid: string; field: string } }\n | { type: 'SET_PATTERN'; payload: { ctUid: string; pattern: string } }\n | { type: 'SET_CONFIG'; payload: PluginConfig }\n\nfunction reducer(newConfig: PluginConfig | null, action: Action): PluginConfig | null {\n let updatedContentTypes\n\n switch (action.type) {\n case 'SET_SELECTED_CONTENT_TYPES':\n if (!newConfig) return null;\n updatedContentTypes = action.payload.map(ct => {\n return newConfig?.selectedContentTypes.find((cta: ConfigContentType) => cta.uid === ct.uid) || ct\n })\n return { ...newConfig, selectedContentTypes: updatedContentTypes || [] };\n case 'SET_DEFAULT_FIELD':\n if (!newConfig) return null;\n updatedContentTypes = newConfig?.selectedContentTypes.map(ct =>\n ct.uid === action.payload.ctUid ? { ...ct, default: action.payload.field } : ct\n );\n return { ...newConfig, selectedContentTypes: updatedContentTypes || [] };\n case 'SET_PATTERN':\n if (!newConfig) return null;\n updatedContentTypes = newConfig?.selectedContentTypes.map(ct =>\n ct.uid === action.payload.ctUid ? { ...ct, pattern: transformToUrl(action.payload.pattern) } : ct\n );\n return { ...newConfig, selectedContentTypes: updatedContentTypes || [] };\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 { contentTypes: allContentTypesData } = useAllContentTypes();\n const allContentTypes = allContentTypesData?.filter((ct: ContentType) => ct.pluginOptions?.webatlas?.active === true);\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 (\n !config \n || config.selectedContentTypes.find((cta: ConfigContentType) => !cta.default) !== undefined\n ) return\n\n setIsSaving(true);\n try {\n await setConfig({selectedContentTypes: config.selectedContentTypes })\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 console.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.general']}> \n <PageWrapper\n save={save}\n isSaving={isSaving}\n subtitle={formatMessage({\n id: getTranslation('settings.page.general.subtitle'),\n defaultMessage: 'Configure general settings',\n })}\n disabledCondition={JSON.stringify(config) === JSON.stringify(initialConfig.current)}\n >\n <ContentBox title={formatMessage({\n id: getTranslation('settings.page.general.contentTypes'),\n defaultMessage: 'Content Types',\n })}>\n <Field.Root\n name=\"selectedContentTypes\"\n hint={formatMessage({\n id: getTranslation('settings.page.enabledContentTypes.hint'),\n defaultMessage: 'Select the content types for which you want to enable URL aliases',\n })}\n >\n <Field.Label>\n <SettingTitle>\n {formatMessage({\n id: getTranslation('settings.page.enabledContentTypes'),\n defaultMessage: 'Enabled Content Types',\n })}\n </SettingTitle>\n </Field.Label>\n <MultiSelect\n placeholder={formatMessage({\n id: getTranslation('settings.page.enabledContentTypes.placeholder'),\n defaultMessage: 'Select content types...',\n })}\n onClear={() => dispatch({ type: 'SET_SELECTED_CONTENT_TYPES', payload: [] })}\n value={[...config?.selectedContentTypes.map((ct: ConfigContentType) => ct.uid) || []]}\n onChange={(value: string[]) =>\n dispatch({\n type: 'SET_SELECTED_CONTENT_TYPES',\n payload: value.map(v => ({\n uid: v,\n default: '',\n pattern: '',\n })),\n })\n }\n withTags\n >\n {allContentTypes && allContentTypes.map(item => \n <MultiSelectOption key={item.uid} value={item.uid}>{item.info.displayName}</MultiSelectOption>\n )}\n </MultiSelect>\n <Field.Hint/>\n </Field.Root>\n {config?.selectedContentTypes && config.selectedContentTypes.length > 0 && \n <Box paddingTop={4}>\n <Field.Root name=\"selectedContentTypesAccordion\">\n <Field.Label>\n <SettingTitle>\n {formatMessage({\n id: getTranslation('settings.page.contentTypeSettings'),\n defaultMessage: 'Content Type settings',\n })}\n </SettingTitle> \n </Field.Label>\n <Accordion.Root>\n {config.selectedContentTypes?.map((contentTypeSettings: ConfigContentType) => {\n const ct: ContentType | undefined = allContentTypes?.find((item) => item.uid === contentTypeSettings.uid)\n return <ContentTypeAccordion key={contentTypeSettings.uid} contentType={ct} contentTypeSettings={contentTypeSettings} dispatch={dispatch} />\n })}\n </Accordion.Root>\n </Field.Root>\n </Box>\n }\n </ContentBox>\n <ContentBox title={formatMessage({\n id: getTranslation('settings.page.general.details'),\n defaultMessage: 'Details',\n })}>\n <Field.Root name=\"selectedContentTypesAccordion\">\n <Field.Label>\n <SettingTitle>\n { PLUGIN_NAME }{' '}\n {formatMessage({\n id: getTranslation('version'),\n defaultMessage: 'Version',\n })}\n </SettingTitle>\n </Field.Label>\n <Typography>\n v{PLUGIN_VERSION}\n <Link\n href={`https://github.com/mattisvensson/strapi-plugin-webatlas/releases/tag/v${PLUGIN_VERSION}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ marginLeft: 4 }}>\n <ExternalLink />\n </Link>\n </Typography>\n </Field.Root>\n </ContentBox>\n </PageWrapper>\n </Page.Protect>\n );\n};\n\nexport default Settings;\n"],"names":["useIntl","jsx","Box","jsxs","Accordion","Field","getTranslation","SingleSelect","index","SingleSelectOption","Tooltip","transformToUrl","usePluginConfig","useReducer","useAllContentTypes","useNotification","useState","useRef","useEffect","PageWrapper","FullLoader","Page","pluginPermissions","ContentBox","SettingTitle","MultiSelect","MultiSelectOption","PLUGIN_NAME","Typography","PLUGIN_VERSION","Link","ExternalLink"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ const jsxRuntime = require("react/jsx-runtime");
|
|
|
4
4
|
const React = require("react");
|
|
5
5
|
const designSystem = require("@strapi/design-system");
|
|
6
6
|
const icons = require("@strapi/icons");
|
|
7
|
-
const index = require("./index-
|
|
7
|
+
const index = require("./index-BfUMDWOu.js");
|
|
8
8
|
const admin = require("@strapi/strapi/admin");
|
|
9
9
|
require("@strapi/icons/symbols");
|
|
10
10
|
const FullLoader = require("./FullLoader-Cmsf8xS6.js");
|
|
@@ -225,7 +225,7 @@ const Routes = () => {
|
|
|
225
225
|
if (loading) {
|
|
226
226
|
return /* @__PURE__ */ jsxRuntime.jsx(PageWrapper, { children: /* @__PURE__ */ jsxRuntime.jsx(FullLoader.FullLoader, {}) });
|
|
227
227
|
}
|
|
228
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(PageWrapper, { children: [
|
|
228
|
+
return /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Protect, { permissions: index.pluginPermissions["page.routes"], children: /* @__PURE__ */ jsxRuntime.jsxs(PageWrapper, { children: [
|
|
229
229
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
230
230
|
SearchInput,
|
|
231
231
|
{
|
|
@@ -241,7 +241,6 @@ const Routes = () => {
|
|
|
241
241
|
handleSort
|
|
242
242
|
}
|
|
243
243
|
)
|
|
244
|
-
] });
|
|
244
|
+
] }) });
|
|
245
245
|
};
|
|
246
246
|
exports.default = Routes;
|
|
247
|
-
//# sourceMappingURL=index--XAogZgv.js.map
|
|
@@ -2,7 +2,7 @@ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
|
2
2
|
import { useState, useEffect, useMemo } from "react";
|
|
3
3
|
import { Thead, Tr, Th, Typography, VisuallyHidden, Td, Flex, LinkButton, Grid, Box, Field, Table, Tbody, EmptyStateLayout } from "@strapi/design-system";
|
|
4
4
|
import { ChevronDown, Pencil, Cross } from "@strapi/icons";
|
|
5
|
-
import { g as getTranslation, u as useApi, d as debounce } from "./index-
|
|
5
|
+
import { g as getTranslation, u as useApi, d as debounce, p as pluginPermissions } from "./index-m4NBXtx2.mjs";
|
|
6
6
|
import { Page, Layouts, useNotification } from "@strapi/strapi/admin";
|
|
7
7
|
import "@strapi/icons/symbols";
|
|
8
8
|
import { F as FullLoader } from "./FullLoader-CrPED_dY.mjs";
|
|
@@ -223,7 +223,7 @@ const Routes = () => {
|
|
|
223
223
|
if (loading) {
|
|
224
224
|
return /* @__PURE__ */ jsx(PageWrapper, { children: /* @__PURE__ */ jsx(FullLoader, {}) });
|
|
225
225
|
}
|
|
226
|
-
return /* @__PURE__ */ jsxs(PageWrapper, { children: [
|
|
226
|
+
return /* @__PURE__ */ jsx(Page.Protect, { permissions: pluginPermissions["page.routes"], children: /* @__PURE__ */ jsxs(PageWrapper, { children: [
|
|
227
227
|
/* @__PURE__ */ jsx(
|
|
228
228
|
SearchInput,
|
|
229
229
|
{
|
|
@@ -239,8 +239,9 @@ const Routes = () => {
|
|
|
239
239
|
handleSort
|
|
240
240
|
}
|
|
241
241
|
)
|
|
242
|
-
] });
|
|
242
|
+
] }) });
|
|
243
243
|
};
|
|
244
244
|
export {
|
|
245
245
|
Routes as default
|
|
246
246
|
};
|
|
247
|
+
//# sourceMappingURL=index-Bct4XuQR.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-Bct4XuQR.mjs","sources":["../../admin/src/utils/getRouteType.ts","../../admin/src/pages/Routes/TableHeader.tsx","../../admin/src/pages/Routes/TableRow.tsx","../../admin/src/pages/Routes/PageWrapper.tsx","../../admin/src/pages/Routes/compareBy.ts","../../admin/src/pages/Routes/index.tsx"],"sourcesContent":["import type { Route } from \"../../../types\";\n\nexport default function getRouteType(route: Route): 'internal' | 'external' | 'wrapper' {\n if (route.wrapper) {\n return 'wrapper';\n } else if (!route.internal) {\n return 'external';\n } else {\n return 'internal';\n }\n}","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('fullPath')} cursor=\"pointer\">\n <Typography variant=\"sigma\">\n {formatMessage({\n id: getTranslation('route'),\n defaultMessage: 'Route',\n })}\n </Typography>\n {sortKey === 'fullPath' && <ChevronDown />}\n </Th>\n <Th onClick={() => handleSort('type')} cursor=\"pointer\">\n <Typography variant=\"sigma\">\n {formatMessage({\n id: getTranslation('routes.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, getRouteType } 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 <Td>\n <Typography textColor=\"neutral800\">{route.title}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{route.fullPath}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">\n {formatMessage({\n id: getTranslation(`route.type.${getRouteType(route)}`),\n defaultMessage: '-',\n })}\n </Typography>\n </Td>\n <Td>\n <Flex gap={2} justifyContent=\"end\">\n {route.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 { 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('routes.page.title'),\n defaultMessage: 'Routes',\n })}\n subtitle={formatMessage({\n id: getTranslation('routes.page.subtitle'),\n defaultMessage: 'Overview of all existing routes',\n })}\n />\n <Layouts.Content>\n <>\n {children}\n </>\n </Layouts.Content>\n </Page.Main>\n );\n}","import type { Route, 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 const typeA = a.internal ? 'internal' : 'external';\n const typeB = b.internal ? 'internal' : 'external';\n return direction === 'asc'\n ? typeA.localeCompare(typeB)\n : typeB.localeCompare(typeA);\n };\n }\n return (a: Route, b: Route) => {\n const aValue = a[field];\n const bValue = b[field];\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}","/*\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, RouteSortKey } from '../../../../types';\nimport { useState, useEffect } from 'react';\nimport { Table, Tbody, Box, Grid, Field, EmptyStateLayout, Tr, Td } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { useApi } from '../../hooks';\nimport { FullLoader } from '../../components/UI';\nimport { getTranslation } from '../../utils';\nimport { useIntl } from 'react-intl';\nimport TableHeader from './TableHeader';\nimport TableRow from './TableRow';\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';\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('routes.page.searchPlaceholder'),\n defaultMessage: 'Search routes',\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\nfunction RouteTable({\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 return (\n <Table colCount={4} rowCount={routes.length}>\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={4}>\n <EmptyStateLayout \n content={\n formatMessage({\n id: getTranslation('routes.page.emptyRoutes'),\n defaultMessage: 'No routes found',\n })\n } \n shadow={false}\n />\n </Td>\n </Tr>\n }\n </Tbody>\n </Table>\n )\n}\n\nconst Routes = () => {\n const { getRoutes } = 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>(undefined);\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.fullPath.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 getRoutes();\n setAllRoutes(data);\n setRoutes(data);\n } catch (err) {\n console.error('Failed to fetch routes:', err);\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: getTranslation('notification.routes.fetchFailed'),\n defaultMessage: 'Failed to fetch routes',\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 useEffect(() => {\n const sortedRoutes = sortKey\n ? [...routes].sort(compareBy(sortKey, sortDirection))\n : routes; \n setRoutes(sortedRoutes);\n }, [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 <RouteTable\n routes={routes} \n sortKey={sortKey}\n handleSort={handleSort}\n />\n </PageWrapper>\n </Page.Protect>\n );\n};\n\nexport default Routes;"],"names":[],"mappings":"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"}
|