@mattisvensson/strapi-plugin-webatlas 0.7.1 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/_chunks/PageWrapper-Bp9vGwpG.js +54 -0
  2. package/dist/_chunks/PageWrapper-BvOY7VCN.mjs +55 -0
  3. package/dist/_chunks/PageWrapper-BzDrMm2d.js +55 -0
  4. package/dist/_chunks/PageWrapper-BzDrMm2d.js.map +1 -0
  5. package/dist/_chunks/PageWrapper-oLhcg9BA.mjs +56 -0
  6. package/dist/_chunks/PageWrapper-oLhcg9BA.mjs.map +1 -0
  7. package/dist/_chunks/{de-BZc1BkzH.js → de-CDBoUBzw.js} +5 -2
  8. package/dist/_chunks/{en-Deg4n_IM.js.map → de-CDBoUBzw.js.map} +1 -1
  9. package/dist/_chunks/{de-oxxH8hft.mjs → de-Dt80IqMG.mjs} +5 -2
  10. package/dist/_chunks/{en-DqC5aDzA.mjs.map → de-Dt80IqMG.mjs.map} +1 -1
  11. package/dist/_chunks/{en-DqC5aDzA.mjs → en-BHxDiueo.mjs} +5 -2
  12. package/dist/_chunks/{de-oxxH8hft.mjs.map → en-BHxDiueo.mjs.map} +1 -1
  13. package/dist/_chunks/{en-Deg4n_IM.js → en-DfvURaup.js} +5 -2
  14. package/dist/_chunks/{de-BZc1BkzH.js.map → en-DfvURaup.js.map} +1 -1
  15. package/dist/_chunks/{index-dzRHjemo.js → index--oj1eNcM.js} +2 -2
  16. package/dist/_chunks/{index-CHB_8c7e.js.map → index--oj1eNcM.js.map} +1 -1
  17. package/dist/_chunks/index-BBn1ZvsE.mjs +123 -0
  18. package/dist/_chunks/index-BCPgfhBx.js +124 -0
  19. package/dist/_chunks/index-BCPgfhBx.js.map +1 -0
  20. package/dist/_chunks/{index-CHB_8c7e.js → index-BKdvSgDB.js} +1 -1
  21. package/dist/_chunks/{index-DzqTj_0f.mjs → index-CAged_xE.mjs} +2 -2
  22. package/dist/_chunks/{index-KC82xDAD.mjs.map → index-CAged_xE.mjs.map} +1 -1
  23. package/dist/_chunks/index-CHRBu9Xy.mjs +124 -0
  24. package/dist/_chunks/index-CHRBu9Xy.mjs.map +1 -0
  25. package/dist/_chunks/{index-C6Dorrjz.mjs → index-CTA8agp7.mjs} +40 -13
  26. package/dist/_chunks/{index-BFMLU2kR.mjs → index-CUlRMqGG.mjs} +57 -60
  27. package/dist/_chunks/{index-C6e9wLau.js → index-CbW6k4FH.js} +41 -12
  28. package/dist/_chunks/index-CbW6k4FH.js.map +1 -0
  29. package/dist/_chunks/{index-B79--vLg.js → index-CtFERXkl.js} +91 -119
  30. package/dist/_chunks/index-CtFERXkl.js.map +1 -0
  31. package/dist/_chunks/{index-D5Uc0GLu.mjs → index-D29zBs5w.mjs} +58 -59
  32. package/dist/_chunks/index-D29zBs5w.mjs.map +1 -0
  33. package/dist/_chunks/index-D72CZ5b7.js +123 -0
  34. package/dist/_chunks/{index-DcFYhqke.mjs → index-DJBXRNlE.mjs} +95 -123
  35. package/dist/_chunks/index-DJBXRNlE.mjs.map +1 -0
  36. package/dist/_chunks/{index-DY1ICa5c.mjs → index-DMpiX4hP.mjs} +41 -12
  37. package/dist/_chunks/index-DMpiX4hP.mjs.map +1 -0
  38. package/dist/_chunks/{index-DeCgextE.js → index-DTPDMxs_.js} +57 -59
  39. package/dist/_chunks/{index-NZpDoHIv.js → index-DUgh4AJb.js} +90 -120
  40. package/dist/_chunks/{index-2J9mPFyV.js → index-Dxn0NT06.js} +40 -13
  41. package/dist/_chunks/{index-DLZJ_sUK.mjs → index-Nx4IRYIK.mjs} +94 -124
  42. package/dist/_chunks/{index-KC82xDAD.mjs → index-Rfm9O167.mjs} +1 -1
  43. package/dist/_chunks/{index-DCejsR9X.js → index-YzPuPn68.js} +58 -60
  44. package/dist/_chunks/index-YzPuPn68.js.map +1 -0
  45. package/dist/admin/index.js +1 -1
  46. package/dist/admin/index.mjs +1 -1
  47. package/dist/admin/src/components/modals/NavEdit.d.ts +1 -1
  48. package/dist/admin/src/components/modals/fields/Visibility.d.ts +5 -0
  49. package/dist/admin/src/components/modals/fields/index.d.ts +2 -0
  50. package/dist/admin/src/hooks/usePluginConfig.d.ts +1 -1
  51. package/dist/admin/src/pages/Settings/{ContentTypeAccordion.d.ts → General/ContentTypeAccordion.d.ts} +1 -1
  52. package/dist/admin/src/pages/Settings/Navigation/index.d.ts +2 -0
  53. package/dist/admin/src/pages/Settings/PageWrapper.d.ts +3 -4
  54. package/dist/admin/src/utils/dnd.d.ts +1 -1
  55. package/dist/server/index.js +32 -14
  56. package/dist/server/index.js.map +1 -1
  57. package/dist/server/index.mjs +32 -14
  58. package/dist/server/index.mjs.map +1 -1
  59. package/dist/server/src/index.d.ts +1 -1
  60. package/dist/server/src/services/admin.d.ts +2 -2
  61. package/dist/server/src/services/index.d.ts +1 -1
  62. package/package.json +1 -1
  63. package/dist/_chunks/index-2J9mPFyV.js.map +0 -1
  64. package/dist/_chunks/index-B79--vLg.js.map +0 -1
  65. package/dist/_chunks/index-BFMLU2kR.mjs.map +0 -1
  66. package/dist/_chunks/index-C6Dorrjz.mjs.map +0 -1
  67. package/dist/_chunks/index-C6e9wLau.js.map +0 -1
  68. package/dist/_chunks/index-D5Uc0GLu.mjs.map +0 -1
  69. package/dist/_chunks/index-DCejsR9X.js.map +0 -1
  70. package/dist/_chunks/index-DLZJ_sUK.mjs.map +0 -1
  71. package/dist/_chunks/index-DY1ICa5c.mjs.map +0 -1
  72. package/dist/_chunks/index-DcFYhqke.mjs.map +0 -1
  73. package/dist/_chunks/index-DeCgextE.js.map +0 -1
  74. package/dist/_chunks/index-DzqTj_0f.mjs.map +0 -1
  75. package/dist/_chunks/index-NZpDoHIv.js.map +0 -1
  76. package/dist/_chunks/index-dzRHjemo.js.map +0 -1
  77. /package/dist/admin/src/pages/Settings/{index.d.ts → General/index.d.ts} +0 -0
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const React = require("react");
5
+ const designSystem = require("@strapi/design-system");
6
+ const admin = require("@strapi/strapi/admin");
7
+ const index = require("./index-Dxn0NT06.js");
8
+ const reactIntl = require("react-intl");
9
+ require("@strapi/icons/symbols");
10
+ const FullLoader = require("./FullLoader-Cmsf8xS6.js");
11
+ const PageWrapper = require("./PageWrapper-Bp9vGwpG.js");
12
+ function reducer(newConfig, action) {
13
+ switch (action.type) {
14
+ case "SET_MAX_DEPTH":
15
+ if (!newConfig) return null;
16
+ return {
17
+ ...newConfig,
18
+ navigation: { ...newConfig.navigation, maxDepth: action.payload },
19
+ selectedContentTypes: newConfig.selectedContentTypes || []
20
+ };
21
+ case "SET_CONFIG":
22
+ return action.payload;
23
+ default:
24
+ throw new Error();
25
+ }
26
+ }
27
+ const Settings = () => {
28
+ const { config: fetchedConfig, setConfig, loading, fetchError } = index.usePluginConfig();
29
+ const [config, dispatch] = React.useReducer(reducer, fetchedConfig);
30
+ const { toggleNotification } = admin.useNotification();
31
+ const { formatMessage } = reactIntl.useIntl();
32
+ const [isSaving, setIsSaving] = React.useState(false);
33
+ const initialConfig = React.useRef(fetchedConfig);
34
+ React.useEffect(() => {
35
+ initialConfig.current = fetchedConfig;
36
+ if (fetchedConfig)
37
+ dispatch({ type: "SET_CONFIG", payload: fetchedConfig });
38
+ }, [fetchedConfig]);
39
+ React.useEffect(() => {
40
+ if (fetchError) {
41
+ toggleNotification({
42
+ type: "danger",
43
+ message: formatMessage({
44
+ id: index.getTranslation("notification.error"),
45
+ defaultMessage: "An error occurred"
46
+ }) + ": " + fetchError
47
+ });
48
+ }
49
+ }, [fetchError, toggleNotification, formatMessage]);
50
+ async function save() {
51
+ if (!config) return;
52
+ setIsSaving(true);
53
+ try {
54
+ await setConfig({ navigation: config.navigation });
55
+ initialConfig.current = config;
56
+ toggleNotification({
57
+ type: "success",
58
+ message: formatMessage({
59
+ id: index.getTranslation("notification.settings.saved"),
60
+ defaultMessage: "Settings saved successfully"
61
+ })
62
+ });
63
+ setIsSaving(false);
64
+ } catch (err) {
65
+ setIsSaving(false);
66
+ toggleNotification({
67
+ type: "danger",
68
+ message: formatMessage({
69
+ id: index.getTranslation("notification.error"),
70
+ defaultMessage: "An error occurred"
71
+ }) + ": " + err
72
+ });
73
+ console.error(err);
74
+ }
75
+ }
76
+ if (loading) {
77
+ return /* @__PURE__ */ jsxRuntime.jsx(
78
+ PageWrapper.PageWrapper,
79
+ {
80
+ isSaving,
81
+ disabledCondition: true,
82
+ children: /* @__PURE__ */ jsxRuntime.jsx(FullLoader.FullLoader, { height: 200 })
83
+ }
84
+ );
85
+ }
86
+ return /* @__PURE__ */ jsxRuntime.jsx(
87
+ PageWrapper.PageWrapper,
88
+ {
89
+ save,
90
+ isSaving,
91
+ disabledCondition: JSON.stringify(config) === JSON.stringify(initialConfig.current),
92
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
93
+ designSystem.Field.Root,
94
+ {
95
+ name: "maxNavDepth",
96
+ children: [
97
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
98
+ id: index.getTranslation("settings.page.maxNavDepth.label"),
99
+ defaultMessage: "Max depth of navigation tree"
100
+ }) }),
101
+ /* @__PURE__ */ jsxRuntime.jsx(
102
+ designSystem.Field.Input,
103
+ {
104
+ id: "maxNavDepth",
105
+ type: "number",
106
+ min: 1,
107
+ step: 1,
108
+ value: config?.navigation?.maxDepth !== void 0 ? config.navigation.maxDepth : "",
109
+ onChange: (e) => dispatch({ type: "SET_MAX_DEPTH", payload: Number(e.target.value) }),
110
+ onBlur: (e) => {
111
+ if (e.target.value === "") return;
112
+ dispatch({ type: "SET_MAX_DEPTH", payload: Number(e.target.value) });
113
+ }
114
+ }
115
+ ),
116
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Hint, {})
117
+ ]
118
+ }
119
+ )
120
+ }
121
+ );
122
+ };
123
+ exports.default = Settings;
@@ -1,59 +1,12 @@
1
- import { jsxs, jsx } from "react/jsx-runtime";
2
- import { useReducer, useState, useEffect } from "react";
3
- import { Button, Box, Accordion, Field, SingleSelect, SingleSelectOption, MultiSelect, MultiSelectOption } from "@strapi/design-system";
4
- import { Page, Layouts, useNotification } from "@strapi/strapi/admin";
5
- import { P as PLUGIN_NAME, g as getTranslation, T as Tooltip, b as usePluginConfig, c as useAllContentTypes, t as transformToUrl } from "./index-DY1ICa5c.mjs";
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useReducer, useState, useRef, useEffect } from "react";
3
+ import { Box, Accordion, Field, SingleSelect, SingleSelectOption, MultiSelect, MultiSelectOption } from "@strapi/design-system";
4
+ import { useNotification } from "@strapi/strapi/admin";
5
+ import { g as getTranslation, T as Tooltip, b as usePluginConfig, c as useAllContentTypes, t as transformToUrl } from "./index-DMpiX4hP.mjs";
6
6
  import { useIntl } from "react-intl";
7
7
  import "@strapi/icons/symbols";
8
8
  import { F as FullLoader } from "./FullLoader-CrPED_dY.mjs";
9
- function PageWrapper({
10
- settingsState,
11
- initialState,
12
- save,
13
- isSaving,
14
- children
15
- }) {
16
- const { formatMessage } = useIntl();
17
- return /* @__PURE__ */ jsxs(Page.Main, { children: [
18
- /* @__PURE__ */ jsx(
19
- Layouts.Header,
20
- {
21
- title: PLUGIN_NAME,
22
- subtitle: formatMessage({
23
- id: getTranslation("settings.page.subtitle"),
24
- defaultMessage: "Settings"
25
- }),
26
- primaryAction: settingsState && initialState && save && /* @__PURE__ */ jsx(
27
- Button,
28
- {
29
- type: "submit",
30
- onClick: () => save(),
31
- loading: isSaving,
32
- disabled: JSON.stringify(settingsState) === JSON.stringify(initialState) || settingsState.selectedContentTypes.find((cta) => !cta.default) !== void 0 || isSaving,
33
- children: formatMessage({
34
- id: getTranslation("save"),
35
- defaultMessage: "Save"
36
- })
37
- }
38
- )
39
- }
40
- ),
41
- /* @__PURE__ */ jsx(Layouts.Content, { children: /* @__PURE__ */ jsx(
42
- Box,
43
- {
44
- background: "neutral0",
45
- borderColor: "neutral150",
46
- hasRadius: true,
47
- paddingBottom: 4,
48
- paddingLeft: 4,
49
- paddingRight: 4,
50
- paddingTop: 6,
51
- shadow: "tableShadow",
52
- children
53
- }
54
- ) })
55
- ] });
56
- }
9
+ import { P as PageWrapper } from "./PageWrapper-oLhcg9BA.mjs";
57
10
  function ContentTypeAccordion({
58
11
  contentType,
59
12
  contentTypeSettings,
@@ -145,44 +98,47 @@ function ContentTypeAccordion({
145
98
  contentType.uid
146
99
  );
147
100
  }
148
- function reducer(settingsState, action) {
101
+ function reducer(newConfig, action) {
149
102
  let updatedContentTypes;
150
103
  switch (action.type) {
151
104
  case "SET_SELECTED_CONTENT_TYPES":
105
+ if (!newConfig) return null;
152
106
  updatedContentTypes = action.payload.map((ct) => {
153
- return settingsState.selectedContentTypes.find((cta) => cta.uid === ct.uid) || ct;
107
+ return newConfig?.selectedContentTypes.find((cta) => cta.uid === ct.uid) || ct;
154
108
  });
155
- return { ...settingsState, selectedContentTypes: updatedContentTypes };
109
+ return { ...newConfig, selectedContentTypes: updatedContentTypes || [] };
156
110
  case "SET_DEFAULT_FIELD":
157
- updatedContentTypes = settingsState.selectedContentTypes.map(
111
+ if (!newConfig) return null;
112
+ updatedContentTypes = newConfig?.selectedContentTypes.map(
158
113
  (ct) => ct.uid === action.payload.ctUid ? { ...ct, default: action.payload.field } : ct
159
114
  );
160
- return { ...settingsState, selectedContentTypes: updatedContentTypes };
115
+ return { ...newConfig, selectedContentTypes: updatedContentTypes || [] };
161
116
  case "SET_PATTERN":
162
- updatedContentTypes = settingsState.selectedContentTypes.map(
117
+ if (!newConfig) return null;
118
+ updatedContentTypes = newConfig?.selectedContentTypes.map(
163
119
  (ct) => ct.uid === action.payload.ctUid ? { ...ct, pattern: transformToUrl(action.payload.pattern) } : ct
164
120
  );
165
- return { ...settingsState, selectedContentTypes: updatedContentTypes };
121
+ return { ...newConfig, selectedContentTypes: updatedContentTypes || [] };
122
+ case "SET_CONFIG":
123
+ return action.payload;
166
124
  default:
167
125
  throw new Error();
168
126
  }
169
127
  }
170
128
  const Settings = () => {
171
- const { config, setConfig, loading, fetchError } = usePluginConfig();
172
- const [settingsState, dispatch] = useReducer(reducer, config || { selectedContentTypes: [] });
129
+ const { config: fetchedConfig, setConfig, loading, fetchError } = usePluginConfig();
130
+ const [config, dispatch] = useReducer(reducer, fetchedConfig);
173
131
  const { contentTypes: allContentTypesData } = useAllContentTypes();
174
132
  const allContentTypes = allContentTypesData?.filter((ct) => ct.pluginOptions?.webatlas?.active === true);
175
- const [initialState, setInitialState] = useState(config || { selectedContentTypes: [] });
176
133
  const { toggleNotification } = useNotification();
177
134
  const { formatMessage } = useIntl();
178
135
  const [isSaving, setIsSaving] = useState(false);
136
+ const initialConfig = useRef(fetchedConfig);
179
137
  useEffect(() => {
180
- setInitialState(config || { selectedContentTypes: [] });
181
- }, [config]);
182
- useEffect(() => {
183
- if (!config) return;
184
- dispatch({ type: "SET_SELECTED_CONTENT_TYPES", payload: config.selectedContentTypes });
185
- }, [config]);
138
+ initialConfig.current = fetchedConfig;
139
+ if (fetchedConfig)
140
+ dispatch({ type: "SET_CONFIG", payload: fetchedConfig });
141
+ }, [fetchedConfig]);
186
142
  useEffect(() => {
187
143
  if (fetchError) {
188
144
  toggleNotification({
@@ -195,11 +151,11 @@ const Settings = () => {
195
151
  }
196
152
  }, [fetchError, toggleNotification, formatMessage]);
197
153
  async function save() {
198
- if (!settingsState || settingsState.selectedContentTypes.find((cta) => !cta.default) !== void 0) return;
154
+ if (!config || config.selectedContentTypes.find((cta) => !cta.default) !== void 0) return;
199
155
  setIsSaving(true);
200
156
  try {
201
- await setConfig(settingsState);
202
- setInitialState(settingsState);
157
+ await setConfig({ selectedContentTypes: config.selectedContentTypes });
158
+ initialConfig.current = config;
203
159
  toggleNotification({
204
160
  type: "success",
205
161
  message: formatMessage({
@@ -221,61 +177,77 @@ const Settings = () => {
221
177
  }
222
178
  }
223
179
  if (loading) {
224
- return /* @__PURE__ */ jsx(PageWrapper, { children: /* @__PURE__ */ jsx(FullLoader, { height: 200 }) });
225
- }
226
- return /* @__PURE__ */ jsxs(PageWrapper, { settingsState, initialState, save, isSaving, children: [
227
- /* @__PURE__ */ jsxs(
228
- Field.Root,
180
+ return /* @__PURE__ */ jsx(
181
+ PageWrapper,
229
182
  {
230
- name: "selectedContentTypes",
231
- hint: formatMessage({
232
- id: getTranslation("settings.page.enabledContentTypes.hint"),
233
- defaultMessage: "Select the content types for which you want to enable URL aliases"
234
- }),
235
- children: [
183
+ isSaving,
184
+ disabledCondition: true,
185
+ children: /* @__PURE__ */ jsx(FullLoader, { height: 200 })
186
+ }
187
+ );
188
+ }
189
+ return /* @__PURE__ */ jsxs(
190
+ PageWrapper,
191
+ {
192
+ save,
193
+ isSaving,
194
+ disabledCondition: JSON.stringify(config) === JSON.stringify(initialConfig.current),
195
+ children: [
196
+ /* @__PURE__ */ jsxs(
197
+ Field.Root,
198
+ {
199
+ name: "selectedContentTypes",
200
+ hint: formatMessage({
201
+ id: getTranslation("settings.page.enabledContentTypes.hint"),
202
+ defaultMessage: "Select the content types for which you want to enable URL aliases"
203
+ }),
204
+ children: [
205
+ /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
206
+ id: getTranslation("settings.page.enabledContentTypes"),
207
+ defaultMessage: "Enabled Content Types"
208
+ }) }),
209
+ /* @__PURE__ */ jsx(
210
+ MultiSelect,
211
+ {
212
+ placeholder: formatMessage({
213
+ id: getTranslation("settings.page.enabledContentTypes.placeholder"),
214
+ defaultMessage: "Select content types..."
215
+ }),
216
+ onClear: () => dispatch({ type: "SET_SELECTED_CONTENT_TYPES", payload: [] }),
217
+ value: [...config?.selectedContentTypes.map((ct) => ct.uid) || []],
218
+ onChange: (value) => dispatch({
219
+ type: "SET_SELECTED_CONTENT_TYPES",
220
+ payload: value.map((v) => ({
221
+ uid: v,
222
+ default: "",
223
+ pattern: ""
224
+ }))
225
+ }),
226
+ withTags: true,
227
+ children: allContentTypes && allContentTypes.map(
228
+ (item) => /* @__PURE__ */ jsx(MultiSelectOption, { value: item.uid, children: item.info.displayName }, item.uid)
229
+ )
230
+ }
231
+ ),
232
+ /* @__PURE__ */ jsx(Field.Hint, {})
233
+ ]
234
+ }
235
+ ),
236
+ config?.selectedContentTypes && config.selectedContentTypes.length > 0 && /* @__PURE__ */ jsx(Box, { paddingTop: 4, children: /* @__PURE__ */ jsxs(Field.Root, { name: "selectedContentTypesAccordion", children: [
236
237
  /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
237
- id: getTranslation("settings.page.enabledContentTypes"),
238
- defaultMessage: "Enabled Content Types"
238
+ id: getTranslation("settings.page.contentTypeSettings"),
239
+ defaultMessage: "Content Type settings"
239
240
  }) }),
240
- /* @__PURE__ */ jsx(
241
- MultiSelect,
242
- {
243
- placeholder: formatMessage({
244
- id: getTranslation("settings.page.enabledContentTypes.placeholder"),
245
- defaultMessage: "Select content types..."
246
- }),
247
- onClear: () => dispatch({ type: "SET_SELECTED_CONTENT_TYPES", payload: [] }),
248
- value: [...settingsState.selectedContentTypes.map((ct) => ct.uid)],
249
- onChange: (value) => dispatch({
250
- type: "SET_SELECTED_CONTENT_TYPES",
251
- payload: value.map((v) => ({
252
- uid: v,
253
- default: "",
254
- pattern: ""
255
- }))
256
- }),
257
- withTags: true,
258
- children: allContentTypes && allContentTypes.map(
259
- (item) => /* @__PURE__ */ jsx(MultiSelectOption, { value: item.uid, children: item.info.displayName }, item.uid)
260
- )
261
- }
262
- ),
263
- /* @__PURE__ */ jsx(Field.Hint, {})
264
- ]
265
- }
266
- ),
267
- settingsState.selectedContentTypes && settingsState.selectedContentTypes.length > 0 && /* @__PURE__ */ jsx(Box, { paddingTop: 4, children: /* @__PURE__ */ jsxs(Field.Root, { name: "selectedContentTypesAccordion", children: [
268
- /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
269
- id: getTranslation("settings.page.contentTypeSettings"),
270
- defaultMessage: "Content Type settings"
271
- }) }),
272
- /* @__PURE__ */ jsx(Accordion.Root, { children: settingsState.selectedContentTypes?.map((contentTypeSettings) => {
273
- const ct = allContentTypes?.find((item) => item.uid === contentTypeSettings.uid);
274
- return /* @__PURE__ */ jsx(ContentTypeAccordion, { contentType: ct, contentTypeSettings, dispatch }, contentTypeSettings.uid);
275
- }) })
276
- ] }) })
277
- ] });
241
+ /* @__PURE__ */ jsx(Accordion.Root, { children: config.selectedContentTypes?.map((contentTypeSettings) => {
242
+ const ct = allContentTypes?.find((item) => item.uid === contentTypeSettings.uid);
243
+ return /* @__PURE__ */ jsx(ContentTypeAccordion, { contentType: ct, contentTypeSettings, dispatch }, contentTypeSettings.uid);
244
+ }) })
245
+ ] }) })
246
+ ]
247
+ }
248
+ );
278
249
  };
279
250
  export {
280
251
  Settings as default
281
252
  };
253
+ //# sourceMappingURL=index-DJBXRNlE.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DJBXRNlE.mjs","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 { useEffect, useState, useReducer, useRef } from 'react';\nimport { Box, Accordion, Field } from '@strapi/design-system';\nimport { useNotification } from '@strapi/strapi/admin'\nimport { MultiSelect, MultiSelectOption } from '@strapi/design-system';\nimport usePluginConfig from '../../../hooks/usePluginConfig';\nimport type { ContentType, ConfigContentType, PluginConfig } from '../../../../../types';\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 from '../PageWrapper';\nimport ContentTypeAccordion from './ContentTypeAccordion';\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 disabledCondition={true}\n >\n <FullLoader height={200} />\n </PageWrapper>\n }\n\n return (\n <PageWrapper\n save={save}\n isSaving={isSaving}\n disabledCondition={JSON.stringify(config) === JSON.stringify(initialConfig.current)}\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 {formatMessage({\n id: getTranslation('settings.page.enabledContentTypes'),\n defaultMessage: 'Enabled Content Types',\n })}\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 {formatMessage({\n id: getTranslation('settings.page.contentTypeSettings'),\n defaultMessage: 'Content Type settings',\n })}\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 </PageWrapper>\n );\n};\n\nexport default Settings;\n"],"names":[],"mappings":"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"}
@@ -23,7 +23,7 @@ const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
23
23
  );
24
24
  });
25
25
  };
26
- const version = "0.7.0";
26
+ const version = "0.8.1";
27
27
  const keywords = [];
28
28
  const type = "commonjs";
29
29
  const exports = {
@@ -294,6 +294,10 @@ function usePluginConfig() {
294
294
  config2 = { ...config2, selectedContentTypes: activeContentTypes };
295
295
  await setConfig(config2);
296
296
  }
297
+ if (config2.navigation?.maxDepth === void 0) {
298
+ config2.navigation = { ...config2.navigation, maxDepth: 3 };
299
+ await setConfig(config2);
300
+ }
297
301
  setConfigData(config2);
298
302
  } catch (error) {
299
303
  setFetchError(error.message);
@@ -3618,7 +3622,7 @@ const $a093c7e1ec25a057$export$7c6e2c02157bb7d2 = $a093c7e1ec25a057$export$e9003
3618
3622
  function Tooltip({ description: description2 }) {
3619
3623
  return /* @__PURE__ */ jsx($a093c7e1ec25a057$export$2881499e37b75b9a, { children: /* @__PURE__ */ jsxs($a093c7e1ec25a057$export$be92b6f5f03c0fe9, { children: [
3620
3624
  /* @__PURE__ */ jsx($a093c7e1ec25a057$export$41fb9f06171c75f4, { asChild: true, children: /* @__PURE__ */ jsx(Information, { "aria-hidden": "true" }) }),
3621
- /* @__PURE__ */ jsx($a093c7e1ec25a057$export$602eac185826482c, { children: /* @__PURE__ */ jsx($a093c7e1ec25a057$export$7c6e2c02157bb7d2, { sideOffset: 5, children: /* @__PURE__ */ jsx(
3625
+ /* @__PURE__ */ jsx($a093c7e1ec25a057$export$602eac185826482c, { children: /* @__PURE__ */ jsx($a093c7e1ec25a057$export$7c6e2c02157bb7d2, { sideOffset: 5, style: { zIndex: 9999 }, children: /* @__PURE__ */ jsx(
3622
3626
  Box,
3623
3627
  {
3624
3628
  padding: 2,
@@ -4059,7 +4063,7 @@ const index = {
4059
4063
  defaultMessage: "Routes"
4060
4064
  },
4061
4065
  Component: async () => {
4062
- const component = await import("./index-KC82xDAD.mjs");
4066
+ const component = await import("./index-CAged_xE.mjs");
4063
4067
  return { default: component.default };
4064
4068
  },
4065
4069
  permissions: [
@@ -4078,7 +4082,7 @@ const index = {
4078
4082
  defaultMessage: "Navigation"
4079
4083
  },
4080
4084
  Component: async () => {
4081
- const component = await import("./index-D5Uc0GLu.mjs");
4085
+ const component = await import("./index-D29zBs5w.mjs");
4082
4086
  return { default: component.default };
4083
4087
  },
4084
4088
  permissions: [
@@ -4094,20 +4098,44 @@ const index = {
4094
4098
  id: PLUGIN_ID,
4095
4099
  intlLabel: {
4096
4100
  id: `${PLUGIN_ID}.settings.section`,
4097
- defaultMessage: "Webatlas"
4101
+ defaultMessage: PLUGIN_NAME
4098
4102
  }
4099
4103
  },
4100
4104
  {
4101
4105
  intlLabel: {
4102
- id: `${PLUGIN_ID}.settings.section`,
4103
- defaultMessage: "Configuration"
4106
+ id: `${PLUGIN_ID}.settings.section.general`,
4107
+ defaultMessage: "General"
4104
4108
  },
4105
- id: PLUGIN_ID,
4106
- to: `/settings/${PLUGIN_ID}/configuration`,
4109
+ id: `${PLUGIN_ID}-general`,
4110
+ to: `/settings/${PLUGIN_ID}/general`,
4111
+ Component: async () => {
4112
+ return await import(
4113
+ /* webpackChunkName: "webatlas-settings-general-page" */
4114
+ "./index-DJBXRNlE.mjs"
4115
+ );
4116
+ },
4117
+ permissions: [
4118
+ // Uncomment to set the permissions of the plugin here
4119
+ // {
4120
+ // action: '', // the action name should be plugin::plugin-name.actionType
4121
+ // subject: null,
4122
+ // },
4123
+ ]
4124
+ }
4125
+ );
4126
+ app.addSettingsLink(
4127
+ PLUGIN_ID,
4128
+ {
4129
+ intlLabel: {
4130
+ id: `${PLUGIN_ID}.settings.navigation`,
4131
+ defaultMessage: "Navigation"
4132
+ },
4133
+ id: `${PLUGIN_ID}-navigation`,
4134
+ to: `/settings/${PLUGIN_ID}/navigation`,
4107
4135
  Component: async () => {
4108
4136
  return await import(
4109
- /* webpackChunkName: "webatlas-settings-page" */
4110
- "./index-DcFYhqke.mjs"
4137
+ /* webpackChunkName: "webatlas-settings-navigation-page" */
4138
+ "./index-CHRBu9Xy.mjs"
4111
4139
  );
4112
4140
  },
4113
4141
  permissions: [
@@ -4136,7 +4164,7 @@ const index = {
4136
4164
  return Promise.all(
4137
4165
  locales.map(async (locale) => {
4138
4166
  try {
4139
- const { default: data } = await __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/de.json": () => import("./de-oxxH8hft.mjs"), "./translations/en.json": () => import("./en-DqC5aDzA.mjs") }), `./translations/${locale}.json`, 3);
4167
+ const { default: data } = await __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/de.json": () => import("./de-Dt80IqMG.mjs"), "./translations/en.json": () => import("./en-BHxDiueo.mjs") }), `./translations/${locale}.json`, 3);
4140
4168
  return { data, locale };
4141
4169
  } catch {
4142
4170
  return { data: {}, locale };
@@ -4158,3 +4186,4 @@ export {
4158
4186
  transformToUrl as t,
4159
4187
  useApi as u
4160
4188
  };
4189
+ //# sourceMappingURL=index-DMpiX4hP.mjs.map