@mattisvensson/strapi-plugin-webatlas 0.8.1 → 0.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/SettingTitle-BaaQ_99D.mjs +69 -0
- package/dist/_chunks/SettingTitle-BaaQ_99D.mjs.map +1 -0
- package/dist/_chunks/SettingTitle-D5oNwpzC.js +67 -0
- package/dist/_chunks/SettingTitle-DDZxIqee.js +68 -0
- package/dist/_chunks/SettingTitle-DDZxIqee.js.map +1 -0
- package/dist/_chunks/SettingTitle-IwvX4Kb5.mjs +68 -0
- package/dist/_chunks/{de-Dt80IqMG.mjs → de-B9pq-AJZ.mjs} +10 -3
- package/dist/_chunks/{de-Dt80IqMG.mjs.map → de-B9pq-AJZ.mjs.map} +1 -1
- package/dist/_chunks/{de-CDBoUBzw.js → de-DlQxM8Tg.js} +10 -3
- package/dist/_chunks/{de-CDBoUBzw.js.map → de-DlQxM8Tg.js.map} +1 -1
- package/dist/_chunks/{en-BHxDiueo.mjs → en-Dmbcf7gp.mjs} +10 -3
- package/dist/_chunks/{en-BHxDiueo.mjs.map → en-Dmbcf7gp.mjs.map} +1 -1
- package/dist/_chunks/{en-DfvURaup.js → en-DrhxIwOr.js} +10 -3
- package/dist/_chunks/{en-DfvURaup.js.map → en-DrhxIwOr.js.map} +1 -1
- package/dist/_chunks/{index--oj1eNcM.js → index--XAogZgv.js} +2 -2
- package/dist/_chunks/{index--oj1eNcM.js.map → index--XAogZgv.js.map} +1 -1
- package/dist/_chunks/{index-BCPgfhBx.js → index-2lVgPz4a.js} +37 -33
- package/dist/_chunks/{index-BKdvSgDB.js → index-B1dEY-gs.js} +1 -1
- package/dist/_chunks/{index-DUgh4AJb.js → index-B1mbYb2_.js} +94 -53
- package/dist/_chunks/{index-CAged_xE.mjs → index-B2tjc_lG.mjs} +2 -2
- package/dist/_chunks/{index-CAged_xE.mjs.map → index-B2tjc_lG.mjs.map} +1 -1
- package/dist/_chunks/{index-YzPuPn68.js → index-BFuwbmZy.js} +22 -9
- package/dist/_chunks/{index-CTA8agp7.mjs → index-D2Meknib.mjs} +10 -8
- package/dist/_chunks/{index-D29zBs5w.mjs → index-D2SIGcj3.mjs} +23 -9
- package/dist/_chunks/{index-D29zBs5w.mjs.map → index-D2SIGcj3.mjs.map} +1 -1
- package/dist/_chunks/{index-D72CZ5b7.js → index-DH0mFrgH.js} +38 -32
- package/dist/_chunks/index-DH0mFrgH.js.map +1 -0
- package/dist/_chunks/{index-DTPDMxs_.js → index-DKtlnMlv.js} +23 -8
- package/dist/_chunks/{index-YzPuPn68.js.map → index-DKtlnMlv.js.map} +1 -1
- package/dist/_chunks/{index-Dxn0NT06.js → index-DOMrViWi.js} +11 -8
- package/dist/_chunks/index-DOMrViWi.js.map +1 -0
- package/dist/_chunks/{index-BBn1ZvsE.mjs → index-DXRtXlZW.mjs} +36 -30
- package/dist/_chunks/index-DXRtXlZW.mjs.map +1 -0
- package/dist/_chunks/{index-CtFERXkl.js → index-Df365kgY.js} +95 -54
- package/dist/_chunks/index-Df365kgY.js.map +1 -0
- package/dist/_chunks/{index-CHRBu9Xy.mjs → index-Dm_GIRd4.mjs} +35 -31
- package/dist/_chunks/{index-DMpiX4hP.mjs → index-Dt-mlR1F.mjs} +11 -9
- package/dist/_chunks/index-Dt-mlR1F.mjs.map +1 -0
- package/dist/_chunks/{index-DJBXRNlE.mjs → index-QFbHwlyj.mjs} +94 -53
- package/dist/_chunks/index-QFbHwlyj.mjs.map +1 -0
- package/dist/_chunks/{index-Nx4IRYIK.mjs → index-QU9SZ_H9.mjs} +93 -52
- package/dist/_chunks/{index-CUlRMqGG.mjs → index-_49Fvwqq.mjs} +22 -8
- package/dist/_chunks/{index-Rfm9O167.mjs → index-aAKsnALd.mjs} +1 -1
- package/dist/_chunks/{index-CbW6k4FH.js → index-g8wz2qoC.js} +9 -8
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/pages/Navigation/RouteItem.d.ts +1 -0
- package/dist/admin/src/pages/Settings/ContentBox.d.ts +5 -0
- package/dist/admin/src/pages/Settings/PageWrapper.d.ts +2 -1
- package/dist/admin/src/pages/Settings/SettingTitle.d.ts +4 -0
- package/dist/admin/src/pages/Settings/index.d.ts +4 -0
- package/dist/pluginId.d.ts +2 -1
- package/dist/server/index.js +61 -52
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +61 -52
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/utils/index.d.ts +6 -0
- package/dist/server/src/utils/navItemHandler.d.ts +1 -1
- package/dist/server/src/utils/reduceDepthOfOrphanedItems.d.ts +2 -0
- package/package.json +1 -1
- package/dist/_chunks/PageWrapper-Bp9vGwpG.js +0 -54
- package/dist/_chunks/PageWrapper-BvOY7VCN.mjs +0 -55
- package/dist/_chunks/PageWrapper-BzDrMm2d.js +0 -55
- package/dist/_chunks/PageWrapper-BzDrMm2d.js.map +0 -1
- package/dist/_chunks/PageWrapper-oLhcg9BA.mjs +0 -56
- package/dist/_chunks/PageWrapper-oLhcg9BA.mjs.map +0 -1
- package/dist/_chunks/index-BCPgfhBx.js.map +0 -1
- package/dist/_chunks/index-CHRBu9Xy.mjs.map +0 -1
- package/dist/_chunks/index-CbW6k4FH.js.map +0 -1
- package/dist/_chunks/index-CtFERXkl.js.map +0 -1
- package/dist/_chunks/index-DJBXRNlE.mjs.map +0 -1
- package/dist/_chunks/index-DMpiX4hP.mjs.map +0 -1
- package/dist/admin/src/components/modals/fields/Visibility.d.ts +0 -5
- package/dist/admin/src/components/modals/fields/index.d.ts +0 -2
|
@@ -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-g8wz2qoC.js");
|
|
8
8
|
const reactIntl = require("react-intl");
|
|
9
9
|
require("@strapi/icons/symbols");
|
|
10
10
|
const FullLoader = require("./FullLoader-Cmsf8xS6.js");
|
|
11
|
-
const
|
|
11
|
+
const SettingTitle = require("./SettingTitle-D5oNwpzC.js");
|
|
12
12
|
function reducer(newConfig, action) {
|
|
13
13
|
switch (action.type) {
|
|
14
14
|
case "SET_MAX_DEPTH":
|
|
@@ -75,50 +75,54 @@ const Settings = () => {
|
|
|
75
75
|
}
|
|
76
76
|
if (loading) {
|
|
77
77
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
78
|
-
|
|
78
|
+
SettingTitle.PageWrapper,
|
|
79
79
|
{
|
|
80
80
|
isSaving,
|
|
81
|
+
subtitle: formatMessage({
|
|
82
|
+
id: index.getTranslation("loading"),
|
|
83
|
+
defaultMessage: "Loading..."
|
|
84
|
+
}),
|
|
81
85
|
disabledCondition: true,
|
|
82
86
|
children: /* @__PURE__ */ jsxRuntime.jsx(FullLoader.FullLoader, { height: 200 })
|
|
83
87
|
}
|
|
84
88
|
);
|
|
85
89
|
}
|
|
86
90
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
87
|
-
|
|
91
|
+
SettingTitle.PageWrapper,
|
|
88
92
|
{
|
|
89
93
|
save,
|
|
90
94
|
isSaving,
|
|
95
|
+
subtitle: formatMessage({
|
|
96
|
+
id: index.getTranslation("settings.page.navigation.subtitle"),
|
|
97
|
+
defaultMessage: "Configure navigation settings"
|
|
98
|
+
}),
|
|
91
99
|
disabledCondition: JSON.stringify(config) === JSON.stringify(initialConfig.current),
|
|
92
|
-
children: /* @__PURE__ */ jsxRuntime.
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
]
|
|
118
|
-
}
|
|
119
|
-
)
|
|
100
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(SettingTitle.ContentBox, { title: formatMessage({
|
|
101
|
+
id: index.getTranslation("settings.page.navigation.navigation"),
|
|
102
|
+
defaultMessage: "Navigation"
|
|
103
|
+
}), children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Root, { name: "maxNavDepth", children: [
|
|
104
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: /* @__PURE__ */ jsxRuntime.jsx(SettingTitle.SettingTitle, { children: formatMessage({
|
|
105
|
+
id: index.getTranslation("settings.page.navigation.maxNavDepth.label"),
|
|
106
|
+
defaultMessage: "Max depth of navigation tree"
|
|
107
|
+
}) }) }),
|
|
108
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
109
|
+
designSystem.Field.Input,
|
|
110
|
+
{
|
|
111
|
+
id: "maxNavDepth",
|
|
112
|
+
type: "number",
|
|
113
|
+
min: 0,
|
|
114
|
+
step: 1,
|
|
115
|
+
value: config?.navigation?.maxDepth !== void 0 ? config.navigation.maxDepth + 1 : "",
|
|
116
|
+
onChange: (e) => dispatch({ type: "SET_MAX_DEPTH", payload: Number(e.target.value) - 1 }),
|
|
117
|
+
onBlur: (e) => {
|
|
118
|
+
if (e.target.value === "") return;
|
|
119
|
+
dispatch({ type: "SET_MAX_DEPTH", payload: Number(e.target.value) - 1 });
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
),
|
|
123
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Hint, {})
|
|
124
|
+
] }) })
|
|
120
125
|
}
|
|
121
126
|
);
|
|
122
127
|
};
|
|
123
128
|
exports.default = Settings;
|
|
124
|
-
//# sourceMappingURL=index-BCPgfhBx.js.map
|
|
@@ -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-g8wz2qoC.js");
|
|
8
8
|
const admin = require("@strapi/strapi/admin");
|
|
9
9
|
require("@strapi/icons/symbols");
|
|
10
10
|
const FullLoader = require("./FullLoader-Cmsf8xS6.js");
|
|
@@ -4,11 +4,12 @@ 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-g8wz2qoC.js");
|
|
8
8
|
const reactIntl = require("react-intl");
|
|
9
9
|
require("@strapi/icons/symbols");
|
|
10
10
|
const FullLoader = require("./FullLoader-Cmsf8xS6.js");
|
|
11
|
-
const
|
|
11
|
+
const SettingTitle = require("./SettingTitle-D5oNwpzC.js");
|
|
12
|
+
const icons = require("@strapi/icons");
|
|
12
13
|
function ContentTypeAccordion({
|
|
13
14
|
contentType,
|
|
14
15
|
contentTypeSettings,
|
|
@@ -180,70 +181,110 @@ const Settings = () => {
|
|
|
180
181
|
}
|
|
181
182
|
if (loading) {
|
|
182
183
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
183
|
-
|
|
184
|
+
SettingTitle.PageWrapper,
|
|
184
185
|
{
|
|
185
186
|
isSaving,
|
|
187
|
+
subtitle: formatMessage({
|
|
188
|
+
id: index.getTranslation("loading"),
|
|
189
|
+
defaultMessage: "Loading..."
|
|
190
|
+
}),
|
|
186
191
|
disabledCondition: true,
|
|
187
192
|
children: /* @__PURE__ */ jsxRuntime.jsx(FullLoader.FullLoader, { height: 200 })
|
|
188
193
|
}
|
|
189
194
|
);
|
|
190
195
|
}
|
|
191
196
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
192
|
-
|
|
197
|
+
SettingTitle.PageWrapper,
|
|
193
198
|
{
|
|
194
199
|
save,
|
|
195
200
|
isSaving,
|
|
201
|
+
subtitle: formatMessage({
|
|
202
|
+
id: index.getTranslation("settings.page.general.subtitle"),
|
|
203
|
+
defaultMessage: "Configure general settings"
|
|
204
|
+
}),
|
|
196
205
|
disabledCondition: JSON.stringify(config) === JSON.stringify(initialConfig.current),
|
|
197
206
|
children: [
|
|
198
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
207
|
+
/* @__PURE__ */ jsxRuntime.jsxs(SettingTitle.ContentBox, { title: formatMessage({
|
|
208
|
+
id: index.getTranslation("settings.page.general.contentTypes"),
|
|
209
|
+
defaultMessage: "Content Types"
|
|
210
|
+
}), children: [
|
|
211
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
212
|
+
designSystem.Field.Root,
|
|
213
|
+
{
|
|
214
|
+
name: "selectedContentTypes",
|
|
215
|
+
hint: formatMessage({
|
|
216
|
+
id: index.getTranslation("settings.page.enabledContentTypes.hint"),
|
|
217
|
+
defaultMessage: "Select the content types for which you want to enable URL aliases"
|
|
218
|
+
}),
|
|
219
|
+
children: [
|
|
220
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: /* @__PURE__ */ jsxRuntime.jsx(SettingTitle.SettingTitle, { children: formatMessage({
|
|
221
|
+
id: index.getTranslation("settings.page.enabledContentTypes"),
|
|
222
|
+
defaultMessage: "Enabled Content Types"
|
|
223
|
+
}) }) }),
|
|
224
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
225
|
+
designSystem.MultiSelect,
|
|
226
|
+
{
|
|
227
|
+
placeholder: formatMessage({
|
|
228
|
+
id: index.getTranslation("settings.page.enabledContentTypes.placeholder"),
|
|
229
|
+
defaultMessage: "Select content types..."
|
|
230
|
+
}),
|
|
231
|
+
onClear: () => dispatch({ type: "SET_SELECTED_CONTENT_TYPES", payload: [] }),
|
|
232
|
+
value: [...config?.selectedContentTypes.map((ct) => ct.uid) || []],
|
|
233
|
+
onChange: (value) => dispatch({
|
|
234
|
+
type: "SET_SELECTED_CONTENT_TYPES",
|
|
235
|
+
payload: value.map((v) => ({
|
|
236
|
+
uid: v,
|
|
237
|
+
default: "",
|
|
238
|
+
pattern: ""
|
|
239
|
+
}))
|
|
240
|
+
}),
|
|
241
|
+
withTags: true,
|
|
242
|
+
children: allContentTypes && allContentTypes.map(
|
|
243
|
+
(item) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.MultiSelectOption, { value: item.uid, children: item.info.displayName }, item.uid)
|
|
244
|
+
)
|
|
245
|
+
}
|
|
246
|
+
),
|
|
247
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Hint, {})
|
|
248
|
+
]
|
|
249
|
+
}
|
|
250
|
+
),
|
|
251
|
+
config?.selectedContentTypes && config.selectedContentTypes.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingTop: 4, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Root, { name: "selectedContentTypesAccordion", children: [
|
|
252
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: /* @__PURE__ */ jsxRuntime.jsx(SettingTitle.SettingTitle, { children: formatMessage({
|
|
253
|
+
id: index.getTranslation("settings.page.contentTypeSettings"),
|
|
254
|
+
defaultMessage: "Content Type settings"
|
|
255
|
+
}) }) }),
|
|
256
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Root, { children: config.selectedContentTypes?.map((contentTypeSettings) => {
|
|
257
|
+
const ct = allContentTypes?.find((item) => item.uid === contentTypeSettings.uid);
|
|
258
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ContentTypeAccordion, { contentType: ct, contentTypeSettings, dispatch }, contentTypeSettings.uid);
|
|
259
|
+
}) })
|
|
260
|
+
] }) })
|
|
261
|
+
] }),
|
|
262
|
+
/* @__PURE__ */ jsxRuntime.jsx(SettingTitle.ContentBox, { title: formatMessage({
|
|
263
|
+
id: index.getTranslation("settings.page.general.details"),
|
|
264
|
+
defaultMessage: "Details"
|
|
265
|
+
}), children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Root, { name: "selectedContentTypesAccordion", children: [
|
|
266
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: /* @__PURE__ */ jsxRuntime.jsxs(SettingTitle.SettingTitle, { children: [
|
|
267
|
+
index.PLUGIN_NAME,
|
|
268
|
+
" ",
|
|
269
|
+
formatMessage({
|
|
270
|
+
id: index.getTranslation("version"),
|
|
271
|
+
defaultMessage: "Version"
|
|
272
|
+
})
|
|
273
|
+
] }) }),
|
|
274
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { children: [
|
|
275
|
+
"v",
|
|
276
|
+
index.PLUGIN_VERSION,
|
|
277
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
278
|
+
designSystem.Link,
|
|
279
|
+
{
|
|
280
|
+
href: `https://github.com/mattisvensson/strapi-plugin-webatlas/releases/tag/v${index.PLUGIN_VERSION}`,
|
|
281
|
+
target: "_blank",
|
|
282
|
+
rel: "noopener noreferrer",
|
|
283
|
+
style: { marginLeft: 4 },
|
|
284
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(icons.ExternalLink, {})
|
|
285
|
+
}
|
|
286
|
+
)
|
|
287
|
+
] })
|
|
247
288
|
] }) })
|
|
248
289
|
]
|
|
249
290
|
}
|
|
@@ -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 } from "./index-Dt-mlR1F.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";
|
|
@@ -244,4 +244,4 @@ const Routes = () => {
|
|
|
244
244
|
export {
|
|
245
245
|
Routes as default
|
|
246
246
|
};
|
|
247
|
-
//# sourceMappingURL=index-
|
|
247
|
+
//# sourceMappingURL=index-B2tjc_lG.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-CAged_xE.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 } 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';\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 <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 );\n};\n\nexport default Routes;"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-B2tjc_lG.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 } 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';\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 <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 );\n};\n\nexport default Routes;"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ const designSystem = require("@strapi/design-system");
|
|
|
7
7
|
const React = require("react");
|
|
8
8
|
const ReactDOM = require("react-dom");
|
|
9
9
|
const reactIntl = require("react-intl");
|
|
10
|
-
const index = require("./index-
|
|
10
|
+
const index = require("./index-g8wz2qoC.js");
|
|
11
11
|
const admin = require("@strapi/strapi/admin");
|
|
12
12
|
const FullLoader = require("./FullLoader-Cmsf8xS6.js");
|
|
13
13
|
const symbols = require("@strapi/icons/symbols");
|
|
@@ -10603,7 +10603,7 @@ function getProjection(items, activeId, overId, dragOffset, maxDepthValue) {
|
|
|
10603
10603
|
}
|
|
10604
10604
|
function getMaxDepth({ previousItem, maxDepthValue }) {
|
|
10605
10605
|
if (previousItem && typeof previousItem.depth === "number") {
|
|
10606
|
-
return Math.min(previousItem.depth + 1, maxDepthValue
|
|
10606
|
+
return Math.min(previousItem.depth + 1, maxDepthValue);
|
|
10607
10607
|
}
|
|
10608
10608
|
return 0;
|
|
10609
10609
|
}
|
|
@@ -10622,7 +10622,18 @@ function RouteIcon({ type, color = "neutral800" }) {
|
|
|
10622
10622
|
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { width: "16px", height: "16px" });
|
|
10623
10623
|
}
|
|
10624
10624
|
}
|
|
10625
|
-
const RouteItem = React.forwardRef(({
|
|
10625
|
+
const RouteItem = React.forwardRef(({
|
|
10626
|
+
item,
|
|
10627
|
+
setParentId,
|
|
10628
|
+
setActionItem,
|
|
10629
|
+
setNavigationItems,
|
|
10630
|
+
ghost,
|
|
10631
|
+
depth,
|
|
10632
|
+
maxDepth,
|
|
10633
|
+
style,
|
|
10634
|
+
wrapperRef,
|
|
10635
|
+
handleProps
|
|
10636
|
+
}, ref) => {
|
|
10626
10637
|
if (!item || !item.route) return null;
|
|
10627
10638
|
const { setModalType } = React.useContext(ModalContext);
|
|
10628
10639
|
const { formatMessage } = reactIntl.useIntl();
|
|
@@ -10747,7 +10758,7 @@ const RouteItem = React.forwardRef(({ item, setParentId, setActionItem, setNavig
|
|
|
10747
10758
|
id: index.getTranslation("edit"),
|
|
10748
10759
|
defaultMessage: "Edit"
|
|
10749
10760
|
}) }),
|
|
10750
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.MenuItem, { onClick: () => handleAddChildren(), children: formatMessage({
|
|
10761
|
+
depth !== void 0 && depth < maxDepth && /* @__PURE__ */ jsxRuntime.jsx(designSystem.MenuItem, { onClick: () => handleAddChildren(), children: formatMessage({
|
|
10751
10762
|
id: index.getTranslation("navigation.page.navItem.addChildren"),
|
|
10752
10763
|
defaultMessage: "Add children"
|
|
10753
10764
|
}) }),
|
|
@@ -12045,6 +12056,7 @@ const Navigation = () => {
|
|
|
12045
12056
|
onClick: () => saveNavigation(),
|
|
12046
12057
|
loading: isSavingNavigation,
|
|
12047
12058
|
variant: "primary",
|
|
12059
|
+
startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Check, {}),
|
|
12048
12060
|
disabled: JSON.stringify(navigationItems) === JSON.stringify(initialNavigationItemsRef.current),
|
|
12049
12061
|
children: formatMessage({
|
|
12050
12062
|
id: index.getTranslation("save"),
|
|
@@ -12064,7 +12076,7 @@ const Navigation = () => {
|
|
|
12064
12076
|
onDragCancel: () => handleDragCancel(),
|
|
12065
12077
|
measuring,
|
|
12066
12078
|
children: /* @__PURE__ */ jsxRuntime.jsxs(sortable.SortableContext, { items: navigationItems, strategy: sortable.verticalListSortingStrategy, children: [
|
|
12067
|
-
navigationItems.map((item, index2) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
12079
|
+
navigationItems.map((item, index2) => config?.navigation.maxDepth && /* @__PURE__ */ jsxRuntime.jsx(
|
|
12068
12080
|
SortableRouteItem,
|
|
12069
12081
|
{
|
|
12070
12082
|
item,
|
|
@@ -12072,18 +12084,20 @@ const Navigation = () => {
|
|
|
12072
12084
|
setActionItem,
|
|
12073
12085
|
setNavigationItems,
|
|
12074
12086
|
indentationWidth,
|
|
12075
|
-
depth: item.id === activeId && projected ? projected.depth : item.depth
|
|
12087
|
+
depth: item.id === activeId && projected ? projected.depth : item.depth,
|
|
12088
|
+
maxDepth: config.navigation.maxDepth
|
|
12076
12089
|
},
|
|
12077
12090
|
item.documentId || index2
|
|
12078
12091
|
)),
|
|
12079
12092
|
ReactDOM.createPortal(
|
|
12080
|
-
/* @__PURE__ */ jsxRuntime.jsx(core.DragOverlay, { children: activeId && activeItem ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
12093
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.DragOverlay, { children: activeId && activeItem ? config?.navigation.maxDepth && /* @__PURE__ */ jsxRuntime.jsx(
|
|
12081
12094
|
SortableRouteItem,
|
|
12082
12095
|
{
|
|
12083
12096
|
item: activeItem,
|
|
12084
12097
|
setParentId,
|
|
12085
12098
|
setActionItem,
|
|
12086
|
-
setNavigationItems
|
|
12099
|
+
setNavigationItems,
|
|
12100
|
+
maxDepth: config.navigation.maxDepth
|
|
12087
12101
|
}
|
|
12088
12102
|
) : null }),
|
|
12089
12103
|
document.body
|
|
@@ -12225,4 +12239,3 @@ const App = () => {
|
|
|
12225
12239
|
] });
|
|
12226
12240
|
};
|
|
12227
12241
|
exports.default = App;
|
|
12228
|
-
//# sourceMappingURL=index-YzPuPn68.js.map
|
|
@@ -23,7 +23,7 @@ const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
|
|
|
23
23
|
);
|
|
24
24
|
});
|
|
25
25
|
};
|
|
26
|
-
const version = "0.8.
|
|
26
|
+
const version = "0.8.1";
|
|
27
27
|
const keywords = [];
|
|
28
28
|
const type = "commonjs";
|
|
29
29
|
const exports = {
|
|
@@ -148,6 +148,7 @@ const pluginPkg = {
|
|
|
148
148
|
};
|
|
149
149
|
const PLUGIN_ID = pluginPkg.strapi.name.replace(/^(@[^-,.][\w,-]+\/|strapi-)plugin-/i, "") || "webatlas";
|
|
150
150
|
const PLUGIN_NAME = pluginPkg.strapi.displayName;
|
|
151
|
+
const PLUGIN_VERSION = pluginPkg.version;
|
|
151
152
|
const Initializer = ({ setPlugin }) => {
|
|
152
153
|
const ref = useRef(setPlugin);
|
|
153
154
|
useEffect(() => {
|
|
@@ -3831,7 +3832,7 @@ const Alias = ({ config }) => {
|
|
|
3831
3832
|
}
|
|
3832
3833
|
}
|
|
3833
3834
|
if (!initialLoadComplete) return /* @__PURE__ */ jsx(Typography, { textColor: "neutral600", children: formatMessage({
|
|
3834
|
-
id: getTranslation("
|
|
3835
|
+
id: getTranslation("loading"),
|
|
3835
3836
|
defaultMessage: "Loading..."
|
|
3836
3837
|
}) });
|
|
3837
3838
|
return /* @__PURE__ */ jsx(
|
|
@@ -4013,7 +4014,7 @@ const CMEditViewAside = () => {
|
|
|
4013
4014
|
});
|
|
4014
4015
|
}, []);
|
|
4015
4016
|
if (isLoading || !config) return /* @__PURE__ */ jsx(Typography, { textColor: "neutral600", children: formatMessage({
|
|
4016
|
-
id: getTranslation("
|
|
4017
|
+
id: getTranslation("loading"),
|
|
4017
4018
|
defaultMessage: "Loading..."
|
|
4018
4019
|
}) });
|
|
4019
4020
|
if (!isAllowedContentType) return /* @__PURE__ */ jsxs(Typography, { textColor: "neutral600", children: [
|
|
@@ -4063,7 +4064,7 @@ const index = {
|
|
|
4063
4064
|
defaultMessage: "Routes"
|
|
4064
4065
|
},
|
|
4065
4066
|
Component: async () => {
|
|
4066
|
-
const component = await import("./index-
|
|
4067
|
+
const component = await import("./index-aAKsnALd.mjs");
|
|
4067
4068
|
return { default: component.default };
|
|
4068
4069
|
},
|
|
4069
4070
|
permissions: [
|
|
@@ -4082,7 +4083,7 @@ const index = {
|
|
|
4082
4083
|
defaultMessage: "Navigation"
|
|
4083
4084
|
},
|
|
4084
4085
|
Component: async () => {
|
|
4085
|
-
const component = await import("./index-
|
|
4086
|
+
const component = await import("./index-_49Fvwqq.mjs");
|
|
4086
4087
|
return { default: component.default };
|
|
4087
4088
|
},
|
|
4088
4089
|
permissions: [
|
|
@@ -4111,7 +4112,7 @@ const index = {
|
|
|
4111
4112
|
Component: async () => {
|
|
4112
4113
|
return await import(
|
|
4113
4114
|
/* webpackChunkName: "webatlas-settings-general-page" */
|
|
4114
|
-
"./index-
|
|
4115
|
+
"./index-QU9SZ_H9.mjs"
|
|
4115
4116
|
);
|
|
4116
4117
|
},
|
|
4117
4118
|
permissions: [
|
|
@@ -4135,7 +4136,7 @@ const index = {
|
|
|
4135
4136
|
Component: async () => {
|
|
4136
4137
|
return await import(
|
|
4137
4138
|
/* webpackChunkName: "webatlas-settings-navigation-page" */
|
|
4138
|
-
"./index-
|
|
4139
|
+
"./index-Dm_GIRd4.mjs"
|
|
4139
4140
|
);
|
|
4140
4141
|
},
|
|
4141
4142
|
permissions: [
|
|
@@ -4164,7 +4165,7 @@ const index = {
|
|
|
4164
4165
|
return Promise.all(
|
|
4165
4166
|
locales.map(async (locale) => {
|
|
4166
4167
|
try {
|
|
4167
|
-
const { default: data } = await __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/de.json": () => import("./de-
|
|
4168
|
+
const { default: data } = await __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/de.json": () => import("./de-B9pq-AJZ.mjs"), "./translations/en.json": () => import("./en-Dmbcf7gp.mjs") }), `./translations/${locale}.json`, 3);
|
|
4168
4169
|
return { data, locale };
|
|
4169
4170
|
} catch {
|
|
4170
4171
|
return { data: {}, locale };
|
|
@@ -4181,6 +4182,7 @@ export {
|
|
|
4181
4182
|
usePluginConfig as b,
|
|
4182
4183
|
useAllContentTypes as c,
|
|
4183
4184
|
debounce as d,
|
|
4185
|
+
PLUGIN_VERSION as e,
|
|
4184
4186
|
getTranslation as g,
|
|
4185
4187
|
index as i,
|
|
4186
4188
|
transformToUrl as t,
|