@strapi/plugin-documentation 5.0.0-beta.7 → 5.0.0-beta.8

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 (31) hide show
  1. package/dist/_chunks/{App-Go7NNBmB.mjs → App-DA2BHbXn.mjs} +12 -12
  2. package/dist/_chunks/App-DA2BHbXn.mjs.map +1 -0
  3. package/dist/_chunks/{App-C7jXxgem.js → App-DcdhgmrA.js} +15 -15
  4. package/dist/_chunks/App-DcdhgmrA.js.map +1 -0
  5. package/dist/_chunks/{Settings-MolQTtkV.mjs → Settings-BL7U87Uv.mjs} +6 -3
  6. package/dist/_chunks/Settings-BL7U87Uv.mjs.map +1 -0
  7. package/dist/_chunks/{Settings-BaiyFmcb.js → Settings-BixD2UPK.js} +9 -6
  8. package/dist/_chunks/Settings-BixD2UPK.js.map +1 -0
  9. package/dist/_chunks/getTrad-BOYjM2qH.js +50 -0
  10. package/dist/_chunks/getTrad-BOYjM2qH.js.map +1 -0
  11. package/dist/_chunks/getTrad-DaxOKsel.mjs +51 -0
  12. package/dist/_chunks/getTrad-DaxOKsel.mjs.map +1 -0
  13. package/dist/_chunks/{index-Dfhqe6__.mjs → index-BgCmKIlZ.mjs} +7 -123
  14. package/dist/_chunks/index-BgCmKIlZ.mjs.map +1 -0
  15. package/dist/_chunks/{index-CTFz5sSR.js → index-CFzYhRlr.js} +5 -121
  16. package/dist/_chunks/index-CFzYhRlr.js.map +1 -0
  17. package/dist/admin/index.js +1 -1
  18. package/dist/admin/index.mjs +2 -2
  19. package/dist/admin/src/services/api.d.ts +5 -17
  20. package/dist/admin/src/utils/baseQuery.d.ts +4 -18
  21. package/package.json +13 -13
  22. package/dist/_chunks/App-C7jXxgem.js.map +0 -1
  23. package/dist/_chunks/App-Go7NNBmB.mjs.map +0 -1
  24. package/dist/_chunks/Settings-BaiyFmcb.js.map +0 -1
  25. package/dist/_chunks/Settings-MolQTtkV.mjs.map +0 -1
  26. package/dist/_chunks/getTrad-BIFypGyq.mjs +0 -6
  27. package/dist/_chunks/getTrad-BIFypGyq.mjs.map +0 -1
  28. package/dist/_chunks/getTrad-X8N4GzO0.js +0 -5
  29. package/dist/_chunks/getTrad-X8N4GzO0.js.map +0 -1
  30. package/dist/_chunks/index-CTFz5sSR.js.map +0 -1
  31. package/dist/_chunks/index-Dfhqe6__.mjs.map +0 -1
@@ -1,6 +1,4 @@
1
1
  import { Information } from "@strapi/icons";
2
- import { createApi } from "@reduxjs/toolkit/query/react";
3
- import { getFetchClient, isFetchError } from "@strapi/strapi/admin";
4
2
  const __variableDynamicImportRuntimeHelper = (glob, path) => {
5
3
  const v = glob[path];
6
4
  if (v) {
@@ -28,112 +26,6 @@ const PERMISSIONS = {
28
26
  update: [{ action: "plugin::documentation.settings.update", subject: null }]
29
27
  };
30
28
  const pluginId = "documentation";
31
- const baseQuery = () => async (query, { signal }) => {
32
- try {
33
- const { get, post, del, put } = getFetchClient();
34
- if (typeof query === "string") {
35
- const result = await get(query, { signal });
36
- return { data: result.data };
37
- } else {
38
- const { url, method = "GET", data, config } = query;
39
- if (method === "POST") {
40
- const result2 = await post(url, data, {
41
- ...config,
42
- signal
43
- });
44
- return { data: result2.data };
45
- }
46
- if (method === "DELETE") {
47
- const result2 = await del(url, {
48
- ...config,
49
- signal
50
- });
51
- return { data: result2.data };
52
- }
53
- if (method === "PUT") {
54
- const result2 = await put(url, data, {
55
- ...config,
56
- signal
57
- });
58
- return { data: result2.data };
59
- }
60
- const result = await get(url, {
61
- ...config,
62
- signal
63
- });
64
- return { data: result.data };
65
- }
66
- } catch (err) {
67
- if (isFetchError(err)) {
68
- if (typeof err.response?.data === "object" && err.response?.data !== null && "error" in err.response?.data) {
69
- return { data: void 0, error: err.response?.data.error };
70
- } else {
71
- return {
72
- data: void 0,
73
- error: {
74
- name: "UnknownError",
75
- message: "There was an unknown error response from the API",
76
- details: err.response?.data,
77
- status: err.status
78
- }
79
- };
80
- }
81
- }
82
- const error = err;
83
- return {
84
- data: void 0,
85
- error: {
86
- name: error.name,
87
- message: error.message,
88
- stack: error.stack
89
- }
90
- };
91
- }
92
- };
93
- const isBaseQueryError = (error) => {
94
- return error.name !== void 0;
95
- };
96
- const api = createApi({
97
- reducerPath: "plugin::documentation",
98
- baseQuery: baseQuery(),
99
- tagTypes: ["DocumentInfo"],
100
- endpoints: (builder) => {
101
- return {
102
- getInfo: builder.query({
103
- query: () => "/documentation/getInfos",
104
- providesTags: ["DocumentInfo"]
105
- }),
106
- deleteVersion: builder.mutation({
107
- query: ({ version }) => ({
108
- url: `/documentation/deleteDoc/${version}`,
109
- method: "DELETE"
110
- }),
111
- invalidatesTags: ["DocumentInfo"]
112
- }),
113
- updateSettings: builder.mutation({
114
- query: ({ body }) => ({
115
- url: `/documentation/updateSettings`,
116
- method: "PUT",
117
- data: body
118
- }),
119
- invalidatesTags: ["DocumentInfo"]
120
- }),
121
- regenerateDoc: builder.mutation({
122
- query: ({ version }) => ({
123
- url: `/documentation/regenerateDoc`,
124
- method: "POST",
125
- data: { version }
126
- })
127
- })
128
- };
129
- }
130
- });
131
- const {
132
- useGetInfoQuery,
133
- useDeleteVersionMutation,
134
- useUpdateSettingsMutation,
135
- useRegenerateDocMutation
136
- } = api;
137
29
  const prefixPluginTranslations = (trad, pluginId2) => {
138
30
  if (!pluginId2) {
139
31
  throw new TypeError("pluginId can't be empty");
@@ -157,13 +49,10 @@ const index = {
157
49
  },
158
50
  permissions: PERMISSIONS.main,
159
51
  Component: async () => {
160
- const { App } = await import("./App-Go7NNBmB.mjs");
52
+ const { App } = await import("./App-DA2BHbXn.mjs");
161
53
  return App;
162
- }
163
- });
164
- app.addMiddlewares([() => api.middleware]);
165
- app.addReducers({
166
- [api.reducerPath]: api.reducer
54
+ },
55
+ position: 9
167
56
  });
168
57
  app.registerPlugin({
169
58
  id: pluginId,
@@ -179,7 +68,7 @@ const index = {
179
68
  id: "documentation",
180
69
  to: pluginId,
181
70
  Component: async () => {
182
- const { SettingsPage } = await import("./Settings-MolQTtkV.mjs");
71
+ const { SettingsPage } = await import("./Settings-BL7U87Uv.mjs");
183
72
  return SettingsPage;
184
73
  },
185
74
  permissions: PERMISSIONS.main
@@ -206,12 +95,7 @@ const index = {
206
95
  };
207
96
  export {
208
97
  PERMISSIONS as P,
209
- useRegenerateDocMutation as a,
210
- useDeleteVersionMutation as b,
211
- useUpdateSettingsMutation as c,
212
- index as d,
213
- isBaseQueryError as i,
214
- pluginId as p,
215
- useGetInfoQuery as u
98
+ index as i,
99
+ pluginId as p
216
100
  };
217
- //# sourceMappingURL=index-Dfhqe6__.mjs.map
101
+ //# sourceMappingURL=index-BgCmKIlZ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-BgCmKIlZ.mjs","sources":["../../admin/src/constants.ts","../../admin/src/pluginId.ts","../../admin/src/utils/prefixPluginTranslations.ts","../../admin/src/index.ts"],"sourcesContent":["export const PERMISSIONS = {\n // This permission regards the main component (App) and is used to tell\n // If the plugin link should be displayed in the menu\n // And also if the plugin is accessible. This use case is found when a user types the url of the\n // plugin directly in the browser\n main: [\n { action: 'plugin::documentation.read', subject: null },\n { action: 'plugin::documentation.settings.regenerate', subject: null },\n { action: 'plugin::documentation.settings.update', subject: null },\n ],\n open: [\n { action: 'plugin::documentation.read', subject: null },\n { action: 'plugin::documentation.settings.regenerate', subject: null },\n ],\n regenerate: [{ action: 'plugin::documentation.settings.regenerate', subject: null }],\n update: [{ action: 'plugin::documentation.settings.update', subject: null }],\n};\n","export const pluginId = 'documentation';\n","const prefixPluginTranslations = (trad: Record<string, string>, pluginId?: string) => {\n if (!pluginId) {\n throw new TypeError(\"pluginId can't be empty\");\n }\n\n return Object.keys(trad).reduce(\n (acc, current) => {\n acc[`${pluginId}.${current}`] = trad[current];\n\n return acc;\n },\n {} as Record<string, string>\n );\n};\n\nexport { prefixPluginTranslations };\n","import { Information } from '@strapi/icons';\n\nimport { PERMISSIONS } from './constants';\nimport { pluginId } from './pluginId';\nimport { prefixPluginTranslations } from './utils/prefixPluginTranslations';\n\n// eslint-disable-next-line import/no-default-export\nexport default {\n register(app: any) {\n app.addMenuLink({\n to: `plugins/${pluginId}`,\n icon: Information,\n intlLabel: {\n id: `${pluginId}.plugin.name`,\n defaultMessage: 'Documentation',\n },\n permissions: PERMISSIONS.main,\n Component: async () => {\n const { App } = await import('./pages/App');\n return App;\n },\n position: 9,\n });\n\n app.registerPlugin({\n id: pluginId,\n name: pluginId,\n });\n },\n bootstrap(app: any) {\n app.addSettingsLink('global', {\n intlLabel: {\n id: `${pluginId}.plugin.name`,\n defaultMessage: 'Documentation',\n },\n id: 'documentation',\n to: pluginId,\n Component: async () => {\n const { SettingsPage } = await import('./pages/Settings');\n return SettingsPage;\n },\n permissions: PERMISSIONS.main,\n });\n },\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, pluginId),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n"],"names":["pluginId"],"mappings":";;;;;;;;;;AAAO,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAKzB,MAAM;AAAA,IACJ,EAAE,QAAQ,8BAA8B,SAAS,KAAK;AAAA,IACtD,EAAE,QAAQ,6CAA6C,SAAS,KAAK;AAAA,IACrE,EAAE,QAAQ,yCAAyC,SAAS,KAAK;AAAA,EACnE;AAAA,EACA,MAAM;AAAA,IACJ,EAAE,QAAQ,8BAA8B,SAAS,KAAK;AAAA,IACtD,EAAE,QAAQ,6CAA6C,SAAS,KAAK;AAAA,EACvE;AAAA,EACA,YAAY,CAAC,EAAE,QAAQ,6CAA6C,SAAS,MAAM;AAAA,EACnF,QAAQ,CAAC,EAAE,QAAQ,yCAAyC,SAAS,MAAM;AAC7E;AChBO,MAAM,WAAW;ACAxB,MAAM,2BAA2B,CAAC,MAA8BA,cAAsB;AACpF,MAAI,CAACA,WAAU;AACP,UAAA,IAAI,UAAU,yBAAyB;AAAA,EAC/C;AAEO,SAAA,OAAO,KAAK,IAAI,EAAE;AAAA,IACvB,CAAC,KAAK,YAAY;AAChB,UAAI,GAAGA,SAAQ,IAAI,OAAO,EAAE,IAAI,KAAK,OAAO;AAErC,aAAA;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EAAA;AAEL;ACNA,MAAe,QAAA;AAAA,EACb,SAAS,KAAU;AACjB,QAAI,YAAY;AAAA,MACd,IAAI,WAAW,QAAQ;AAAA,MACvB,MAAM;AAAA,MACN,WAAW;AAAA,QACT,IAAI,GAAG,QAAQ;AAAA,QACf,gBAAgB;AAAA,MAClB;AAAA,MACA,aAAa,YAAY;AAAA,MACzB,WAAW,YAAY;AACrB,cAAM,EAAE,IAAA,IAAQ,MAAM,OAAO,oBAAa;AACnC,eAAA;AAAA,MACT;AAAA,MACA,UAAU;AAAA,IAAA,CACX;AAED,QAAI,eAAe;AAAA,MACjB,IAAI;AAAA,MACJ,MAAM;AAAA,IAAA,CACP;AAAA,EACH;AAAA,EACA,UAAU,KAAU;AAClB,QAAI,gBAAgB,UAAU;AAAA,MAC5B,WAAW;AAAA,QACT,IAAI,GAAG,QAAQ;AAAA,QACf,gBAAgB;AAAA,MAClB;AAAA,MACA,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,WAAW,YAAY;AACrB,cAAM,EAAE,aAAA,IAAiB,MAAM,OAAO,yBAAkB;AACjD,eAAA;AAAA,MACT;AAAA,MACA,aAAa,YAAY;AAAA,IAAA,CAC1B;AAAA,EACH;AAAA,EACA,MAAM,cAAc,EAAE,WAAkC;AAChD,UAAA,gBAAgB,MAAM,QAAQ;AAAA,MAClC,QAAQ,IAAI,CAAC,WAAW;AACf,eAAA,qCAA+B,uBAAA,OAAA,EAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,6BAAA,MAAA,OAAA,sBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,+BAAA,MAAA,OAAA,wBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,EAAA,CAAA,GAAA,kBAAA,MAAA,OAAA,EACnC,KAAK,CAAC,EAAE,SAAS,KAAA,MAAW;AACpB,iBAAA;AAAA,YACL,MAAM,yBAAyB,MAAM,QAAQ;AAAA,YAC7C;AAAA,UAAA;AAAA,QACF,CACD,EACA,MAAM,MAAM;AACJ,iBAAA;AAAA,YACL,MAAM,CAAC;AAAA,YACP;AAAA,UAAA;AAAA,QACF,CACD;AAAA,MAAA,CACJ;AAAA,IAAA;AAGI,WAAA,QAAQ,QAAQ,aAAa;AAAA,EACtC;AACF;"}
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
  const icons = require("@strapi/icons");
3
- const react = require("@reduxjs/toolkit/query/react");
4
- const admin = require("@strapi/strapi/admin");
5
3
  const __variableDynamicImportRuntimeHelper = (glob, path) => {
6
4
  const v = glob[path];
7
5
  if (v) {
@@ -29,112 +27,6 @@ const PERMISSIONS = {
29
27
  update: [{ action: "plugin::documentation.settings.update", subject: null }]
30
28
  };
31
29
  const pluginId = "documentation";
32
- const baseQuery = () => async (query, { signal }) => {
33
- try {
34
- const { get, post, del, put } = admin.getFetchClient();
35
- if (typeof query === "string") {
36
- const result = await get(query, { signal });
37
- return { data: result.data };
38
- } else {
39
- const { url, method = "GET", data, config } = query;
40
- if (method === "POST") {
41
- const result2 = await post(url, data, {
42
- ...config,
43
- signal
44
- });
45
- return { data: result2.data };
46
- }
47
- if (method === "DELETE") {
48
- const result2 = await del(url, {
49
- ...config,
50
- signal
51
- });
52
- return { data: result2.data };
53
- }
54
- if (method === "PUT") {
55
- const result2 = await put(url, data, {
56
- ...config,
57
- signal
58
- });
59
- return { data: result2.data };
60
- }
61
- const result = await get(url, {
62
- ...config,
63
- signal
64
- });
65
- return { data: result.data };
66
- }
67
- } catch (err) {
68
- if (admin.isFetchError(err)) {
69
- if (typeof err.response?.data === "object" && err.response?.data !== null && "error" in err.response?.data) {
70
- return { data: void 0, error: err.response?.data.error };
71
- } else {
72
- return {
73
- data: void 0,
74
- error: {
75
- name: "UnknownError",
76
- message: "There was an unknown error response from the API",
77
- details: err.response?.data,
78
- status: err.status
79
- }
80
- };
81
- }
82
- }
83
- const error = err;
84
- return {
85
- data: void 0,
86
- error: {
87
- name: error.name,
88
- message: error.message,
89
- stack: error.stack
90
- }
91
- };
92
- }
93
- };
94
- const isBaseQueryError = (error) => {
95
- return error.name !== void 0;
96
- };
97
- const api = react.createApi({
98
- reducerPath: "plugin::documentation",
99
- baseQuery: baseQuery(),
100
- tagTypes: ["DocumentInfo"],
101
- endpoints: (builder) => {
102
- return {
103
- getInfo: builder.query({
104
- query: () => "/documentation/getInfos",
105
- providesTags: ["DocumentInfo"]
106
- }),
107
- deleteVersion: builder.mutation({
108
- query: ({ version }) => ({
109
- url: `/documentation/deleteDoc/${version}`,
110
- method: "DELETE"
111
- }),
112
- invalidatesTags: ["DocumentInfo"]
113
- }),
114
- updateSettings: builder.mutation({
115
- query: ({ body }) => ({
116
- url: `/documentation/updateSettings`,
117
- method: "PUT",
118
- data: body
119
- }),
120
- invalidatesTags: ["DocumentInfo"]
121
- }),
122
- regenerateDoc: builder.mutation({
123
- query: ({ version }) => ({
124
- url: `/documentation/regenerateDoc`,
125
- method: "POST",
126
- data: { version }
127
- })
128
- })
129
- };
130
- }
131
- });
132
- const {
133
- useGetInfoQuery,
134
- useDeleteVersionMutation,
135
- useUpdateSettingsMutation,
136
- useRegenerateDocMutation
137
- } = api;
138
30
  const prefixPluginTranslations = (trad, pluginId2) => {
139
31
  if (!pluginId2) {
140
32
  throw new TypeError("pluginId can't be empty");
@@ -158,13 +50,10 @@ const index = {
158
50
  },
159
51
  permissions: PERMISSIONS.main,
160
52
  Component: async () => {
161
- const { App } = await Promise.resolve().then(() => require("./App-C7jXxgem.js"));
53
+ const { App } = await Promise.resolve().then(() => require("./App-DcdhgmrA.js"));
162
54
  return App;
163
- }
164
- });
165
- app.addMiddlewares([() => api.middleware]);
166
- app.addReducers({
167
- [api.reducerPath]: api.reducer
55
+ },
56
+ position: 9
168
57
  });
169
58
  app.registerPlugin({
170
59
  id: pluginId,
@@ -180,7 +69,7 @@ const index = {
180
69
  id: "documentation",
181
70
  to: pluginId,
182
71
  Component: async () => {
183
- const { SettingsPage } = await Promise.resolve().then(() => require("./Settings-BaiyFmcb.js"));
72
+ const { SettingsPage } = await Promise.resolve().then(() => require("./Settings-BixD2UPK.js"));
184
73
  return SettingsPage;
185
74
  },
186
75
  permissions: PERMISSIONS.main
@@ -207,10 +96,5 @@ const index = {
207
96
  };
208
97
  exports.PERMISSIONS = PERMISSIONS;
209
98
  exports.index = index;
210
- exports.isBaseQueryError = isBaseQueryError;
211
99
  exports.pluginId = pluginId;
212
- exports.useDeleteVersionMutation = useDeleteVersionMutation;
213
- exports.useGetInfoQuery = useGetInfoQuery;
214
- exports.useRegenerateDocMutation = useRegenerateDocMutation;
215
- exports.useUpdateSettingsMutation = useUpdateSettingsMutation;
216
- //# sourceMappingURL=index-CTFz5sSR.js.map
100
+ //# sourceMappingURL=index-CFzYhRlr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CFzYhRlr.js","sources":["../../admin/src/constants.ts","../../admin/src/pluginId.ts","../../admin/src/utils/prefixPluginTranslations.ts","../../admin/src/index.ts"],"sourcesContent":["export const PERMISSIONS = {\n // This permission regards the main component (App) and is used to tell\n // If the plugin link should be displayed in the menu\n // And also if the plugin is accessible. This use case is found when a user types the url of the\n // plugin directly in the browser\n main: [\n { action: 'plugin::documentation.read', subject: null },\n { action: 'plugin::documentation.settings.regenerate', subject: null },\n { action: 'plugin::documentation.settings.update', subject: null },\n ],\n open: [\n { action: 'plugin::documentation.read', subject: null },\n { action: 'plugin::documentation.settings.regenerate', subject: null },\n ],\n regenerate: [{ action: 'plugin::documentation.settings.regenerate', subject: null }],\n update: [{ action: 'plugin::documentation.settings.update', subject: null }],\n};\n","export const pluginId = 'documentation';\n","const prefixPluginTranslations = (trad: Record<string, string>, pluginId?: string) => {\n if (!pluginId) {\n throw new TypeError(\"pluginId can't be empty\");\n }\n\n return Object.keys(trad).reduce(\n (acc, current) => {\n acc[`${pluginId}.${current}`] = trad[current];\n\n return acc;\n },\n {} as Record<string, string>\n );\n};\n\nexport { prefixPluginTranslations };\n","import { Information } from '@strapi/icons';\n\nimport { PERMISSIONS } from './constants';\nimport { pluginId } from './pluginId';\nimport { prefixPluginTranslations } from './utils/prefixPluginTranslations';\n\n// eslint-disable-next-line import/no-default-export\nexport default {\n register(app: any) {\n app.addMenuLink({\n to: `plugins/${pluginId}`,\n icon: Information,\n intlLabel: {\n id: `${pluginId}.plugin.name`,\n defaultMessage: 'Documentation',\n },\n permissions: PERMISSIONS.main,\n Component: async () => {\n const { App } = await import('./pages/App');\n return App;\n },\n position: 9,\n });\n\n app.registerPlugin({\n id: pluginId,\n name: pluginId,\n });\n },\n bootstrap(app: any) {\n app.addSettingsLink('global', {\n intlLabel: {\n id: `${pluginId}.plugin.name`,\n defaultMessage: 'Documentation',\n },\n id: 'documentation',\n to: pluginId,\n Component: async () => {\n const { SettingsPage } = await import('./pages/Settings');\n return SettingsPage;\n },\n permissions: PERMISSIONS.main,\n });\n },\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, pluginId),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n"],"names":["pluginId","Information"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- const index = require("../_chunks/index-CTFz5sSR.js");
2
+ const index = require("../_chunks/index-CFzYhRlr.js");
3
3
  require("@strapi/icons");
4
4
  module.exports = index.index;
5
5
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
- import { d } from "../_chunks/index-Dfhqe6__.mjs";
1
+ import { i } from "../_chunks/index-BgCmKIlZ.mjs";
2
2
  import "@strapi/icons";
3
3
  export {
4
- d as default
4
+ i as default
5
5
  };
6
6
  //# sourceMappingURL=index.mjs.map
@@ -3,23 +3,11 @@ type SettingsInput = {
3
3
  restrictedAccess: boolean;
4
4
  password: string;
5
5
  };
6
- declare const api: import("@reduxjs/toolkit/query/react").Api<import("@reduxjs/toolkit/query/react").BaseQueryFn<string | import("../utils/baseQuery").QueryArguments, unknown, import("../utils/baseQuery").BaseQueryError>, {
7
- getInfo: import("@reduxjs/toolkit/query/react").QueryDefinition<void, import("@reduxjs/toolkit/query/react").BaseQueryFn<string | import("../utils/baseQuery").QueryArguments, unknown, import("../utils/baseQuery").BaseQueryError>, "DocumentInfo", DocumentInfos, "plugin::documentation">;
8
- deleteVersion: import("@reduxjs/toolkit/query/react").MutationDefinition<{
9
- version: string;
10
- }, import("@reduxjs/toolkit/query/react").BaseQueryFn<string | import("../utils/baseQuery").QueryArguments, unknown, import("../utils/baseQuery").BaseQueryError>, "DocumentInfo", void, "plugin::documentation">;
11
- updateSettings: import("@reduxjs/toolkit/query/react").MutationDefinition<{
12
- body: SettingsInput;
13
- }, import("@reduxjs/toolkit/query/react").BaseQueryFn<string | import("../utils/baseQuery").QueryArguments, unknown, import("../utils/baseQuery").BaseQueryError>, "DocumentInfo", void, "plugin::documentation">;
14
- regenerateDoc: import("@reduxjs/toolkit/query/react").MutationDefinition<{
15
- version: string;
16
- }, import("@reduxjs/toolkit/query/react").BaseQueryFn<string | import("../utils/baseQuery").QueryArguments, unknown, import("../utils/baseQuery").BaseQueryError>, "DocumentInfo", void, "plugin::documentation">;
17
- }, "plugin::documentation", "DocumentInfo", typeof import("@reduxjs/toolkit/query/react").coreModuleName | typeof import("@reduxjs/toolkit/query/react").reactHooksModuleName>;
18
- export { api };
19
- export declare const useGetInfoQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query/react").QueryDefinition<void, import("@reduxjs/toolkit/query/react").BaseQueryFn<string | import("../utils/baseQuery").QueryArguments, unknown, import("../utils/baseQuery").BaseQueryError>, "DocumentInfo", DocumentInfos, "plugin::documentation">>, useDeleteVersionMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query/react").MutationDefinition<{
6
+ export declare const useGetInfoQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "DocumentInfo", DocumentInfos, "adminApi">>, useDeleteVersionMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<{
20
7
  version: string;
21
- }, import("@reduxjs/toolkit/query/react").BaseQueryFn<string | import("../utils/baseQuery").QueryArguments, unknown, import("../utils/baseQuery").BaseQueryError>, "DocumentInfo", void, "plugin::documentation">>, useUpdateSettingsMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query/react").MutationDefinition<{
8
+ }, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "DocumentInfo", void, "adminApi">>, useUpdateSettingsMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<{
22
9
  body: SettingsInput;
23
- }, import("@reduxjs/toolkit/query/react").BaseQueryFn<string | import("../utils/baseQuery").QueryArguments, unknown, import("../utils/baseQuery").BaseQueryError>, "DocumentInfo", void, "plugin::documentation">>, useRegenerateDocMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query/react").MutationDefinition<{
10
+ }, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "DocumentInfo", void, "adminApi">>, useRegenerateDocMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<{
24
11
  version: string;
25
- }, import("@reduxjs/toolkit/query/react").BaseQueryFn<string | import("../utils/baseQuery").QueryArguments, unknown, import("../utils/baseQuery").BaseQueryError>, "DocumentInfo", void, "plugin::documentation">>;
12
+ }, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "DocumentInfo", void, "adminApi">>;
13
+ export {};
@@ -1,19 +1,5 @@
1
1
  import { SerializedError } from '@reduxjs/toolkit';
2
- import { BaseQueryFn } from '@reduxjs/toolkit/query';
3
- import { type ApiError, type FetchOptions } from '@strapi/strapi/admin';
4
- export interface QueryArguments {
5
- url: string;
6
- method?: string;
7
- data?: unknown;
8
- config?: FetchOptions;
9
- }
10
- export interface UnknownApiError {
11
- name: 'UnknownError';
12
- message: string;
13
- details?: unknown;
14
- status?: number;
15
- }
16
- export type BaseQueryError = ApiError | UnknownApiError | SerializedError;
17
- declare const baseQuery: () => BaseQueryFn<string | QueryArguments, unknown, BaseQueryError>;
18
- declare const isBaseQueryError: (error: BaseQueryError) => error is UnknownApiError | ApiError;
19
- export { baseQuery, isBaseQueryError };
2
+ import { type UnknownApiError, type ApiError } from '@strapi/strapi/admin';
3
+ type BaseQueryError = ApiError | UnknownApiError | SerializedError;
4
+ declare const isBaseQueryError: (error: BaseQueryError) => error is ApiError | UnknownApiError;
5
+ export { isBaseQueryError };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/plugin-documentation",
3
- "version": "5.0.0-beta.7",
3
+ "version": "5.0.0-beta.8",
4
4
  "description": "Create an OpenAPI Document and visualize your API with SWAGGER UI.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -55,10 +55,10 @@
55
55
  },
56
56
  "dependencies": {
57
57
  "@reduxjs/toolkit": "1.9.7",
58
- "@strapi/admin": "5.0.0-beta.7",
59
- "@strapi/design-system": "2.0.0-beta.3",
60
- "@strapi/icons": "2.0.0-beta.3",
61
- "@strapi/utils": "5.0.0-beta.7",
58
+ "@strapi/admin": "5.0.0-beta.8",
59
+ "@strapi/design-system": "2.0.0-beta.4",
60
+ "@strapi/icons": "2.0.0-beta.4",
61
+ "@strapi/utils": "5.0.0-beta.8",
62
62
  "bcryptjs": "2.4.3",
63
63
  "cheerio": "^1.0.0-rc.12",
64
64
  "formik": "2.4.5",
@@ -74,12 +74,12 @@
74
74
  },
75
75
  "devDependencies": {
76
76
  "@apidevtools/swagger-parser": "^10.1.0",
77
- "@strapi/admin-test-utils": "5.0.0-beta.7",
77
+ "@strapi/admin-test-utils": "5.0.0-beta.8",
78
78
  "@strapi/pack-up": "5.0.0",
79
- "@strapi/strapi": "5.0.0-beta.7",
80
- "@strapi/types": "5.0.0-beta.7",
81
- "@testing-library/react": "14.0.0",
82
- "@testing-library/user-event": "14.4.3",
79
+ "@strapi/strapi": "5.0.0-beta.8",
80
+ "@strapi/types": "5.0.0-beta.8",
81
+ "@testing-library/react": "15.0.7",
82
+ "@testing-library/user-event": "14.5.2",
83
83
  "@types/fs-extra": "11.0.4",
84
84
  "@types/koa": "2.13.4",
85
85
  "@types/koa-session": "6.4.1",
@@ -89,8 +89,8 @@
89
89
  "koa-session": "6.4.0",
90
90
  "msw": "1.3.0",
91
91
  "openapi-types": "12.1.3",
92
- "react": "^18.2.0",
93
- "react-dom": "^18.2.0",
92
+ "react": "18.3.1",
93
+ "react-dom": "18.3.1",
94
94
  "react-router-dom": "6.22.3",
95
95
  "styled-components": "6.1.8"
96
96
  },
@@ -111,5 +111,5 @@
111
111
  "description": "Create an OpenAPI Document and visualize your API with SWAGGER UI.",
112
112
  "kind": "plugin"
113
113
  },
114
- "gitHead": "a86c75effabb5eb8aa36a2e9563f2878ddfbb4c1"
114
+ "gitHead": "710e683d6bc017dbc2804708580146daa4b2fc4c"
115
115
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"App-C7jXxgem.js","sources":["../../admin/src/pages/App.tsx"],"sourcesContent":["/* eslint-disable import/no-default-export */\nimport * as React from 'react';\n\nimport {\n LinkButton,\n Flex,\n IconButton,\n Table,\n Tbody,\n Td,\n Th,\n Thead,\n Tr,\n Typography,\n EmptyStateLayout,\n} from '@strapi/design-system';\nimport { Eye as Show, ArrowClockwise as Reload, Trash } from '@strapi/icons';\nimport {\n ConfirmDialog,\n useRBAC,\n Page,\n useAPIErrorHandler,\n useNotification,\n Layouts,\n} from '@strapi/strapi/admin';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { PERMISSIONS } from '../constants';\nimport {\n useGetInfoQuery,\n useRegenerateDocMutation,\n useDeleteVersionMutation,\n} from '../services/api';\nimport { getTrad } from '../utils';\n\nconst App = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const { data, isLoading: isLoadingInfo, isError } = useGetInfoQuery();\n const [regenerate] = useRegenerateDocMutation();\n const [deleteVersion] = useDeleteVersionMutation();\n const [showConfirmDelete, setShowConfirmDelete] = React.useState<boolean>(false);\n const [versionToDelete, setVersionToDelete] = React.useState<string>();\n const { allowedActions, isLoading: isLoadingRBAC } = useRBAC(PERMISSIONS);\n\n const isLoading = isLoadingInfo || isLoadingRBAC;\n\n const colCount = 4;\n const rowCount = (data?.docVersions?.length || 0) + 1;\n\n const handleRegenerateDoc = (version: string) => {\n regenerate({ version })\n .unwrap()\n .then(() => {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTrad('notification.generate.success'),\n defaultMessage: 'Successfully generated documentation',\n }),\n });\n })\n .catch((err) => {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n });\n };\n\n const handleShowConfirmDelete = () => {\n setShowConfirmDelete(!showConfirmDelete);\n };\n\n const handleConfirmDelete = async () => {\n if (!versionToDelete) {\n // nothing to delete\n return;\n }\n\n await deleteVersion({ version: versionToDelete })\n .unwrap()\n .then(() => {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTrad('notification.delete.success'),\n defaultMessage: 'Successfully deleted documentation',\n }),\n });\n })\n .catch((err) => {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n });\n\n setShowConfirmDelete(!showConfirmDelete);\n };\n\n const handleClickDelete = (version: string) => {\n setVersionToDelete(version);\n setShowConfirmDelete(!showConfirmDelete);\n };\n\n const title = formatMessage({\n id: getTrad('plugin.name'),\n defaultMessage: 'Documentation',\n });\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (isError) {\n return <Page.Error />;\n }\n\n return (\n <Layouts.Root>\n <Page.Title>{title}</Page.Title>\n <Page.Main>\n <Layouts.Header\n title={title}\n subtitle={formatMessage({\n id: getTrad('pages.PluginPage.header.description'),\n defaultMessage: 'Configure the documentation plugin',\n })}\n primaryAction={\n <OpenDocLink\n disabled={!allowedActions.canRead || !data?.currentVersion || !data?.prefix}\n href={createDocumentationHref(`${data?.prefix}/v${data?.currentVersion}`)}\n startIcon={<Show />}\n >\n {formatMessage({\n id: getTrad('pages.PluginPage.Button.open'),\n defaultMessage: 'Open Documentation',\n })}\n </OpenDocLink>\n }\n />\n <Layouts.Content>\n {data?.docVersions.length ? (\n <Table colCount={colCount} rowCount={rowCount}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad('pages.PluginPage.table.version'),\n defaultMessage: 'Version',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad('pages.PluginPage.table.generated'),\n defaultMessage: 'Last Generated',\n })}\n </Typography>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {data.docVersions\n .slice(0)\n .sort((a, b) => (a.generatedDate < b.generatedDate ? 1 : -1))\n .map((doc) => (\n <Tr key={doc.version}>\n <Td width=\"50%\">\n <Typography>{doc.version}</Typography>\n </Td>\n <Td width=\"50%\">\n <Typography>{doc.generatedDate}</Typography>\n </Td>\n <Td>\n <Flex justifyContent=\"end\" onClick={(e) => e.stopPropagation()}>\n <IconButton\n tag=\"a\"\n disabled={!allowedActions.canRead}\n href={createDocumentationHref(`${data.prefix}/v${doc.version}`)}\n noBorder\n icon={<Show />}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n label={formatMessage(\n {\n id: getTrad('pages.PluginPage.table.icon.show'),\n defaultMessage: 'Open {target}',\n },\n { target: `${doc.version}` }\n )}\n />\n {allowedActions.canRegenerate ? (\n <IconButton\n onClick={() => handleRegenerateDoc(doc.version)}\n noBorder\n icon={<Reload />}\n label={formatMessage(\n {\n id: getTrad('pages.PluginPage.table.icon.regenerate'),\n defaultMessage: 'Regenerate {target}',\n },\n { target: `${doc.version}` }\n )}\n />\n ) : null}\n {allowedActions.canUpdate && doc.version !== data.currentVersion ? (\n <IconButton\n onClick={() => handleClickDelete(doc.version)}\n noBorder\n icon={<Trash />}\n label={formatMessage(\n {\n id: 'global.delete-target',\n defaultMessage: 'Delete {target}',\n },\n { target: `${doc.version}` }\n )}\n />\n ) : null}\n </Flex>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n ) : (\n <EmptyStateLayout content=\"\" icon={null} />\n )}\n </Layouts.Content>\n <ConfirmDialog\n onConfirm={handleConfirmDelete}\n onClose={handleShowConfirmDelete}\n isOpen={showConfirmDelete}\n />\n </Page.Main>\n </Layouts.Root>\n );\n};\n\n/**\n * TODO: should this be fixed in the DS?\n */\nconst OpenDocLink = styled(LinkButton)`\n text-decoration: none;\n`;\n\nconst createDocumentationHref = (path: string) => {\n if (path.startsWith('http')) {\n return path;\n }\n\n if (path.startsWith('/')) {\n return `${window.strapi.backendURL}${path}`;\n }\n\n return `${window.strapi.backendURL}/${path}`;\n};\n\nexport { App };\n"],"names":["useIntl","useNotification","useAPIErrorHandler","useGetInfoQuery","useRegenerateDocMutation","useDeleteVersionMutation","React","useRBAC","PERMISSIONS","getTrad","jsx","Page","jsxs","Layouts","Show","Table","Thead","Tr","Th","Typography","Tbody","Td","Flex","IconButton","Reload","Trash","EmptyStateLayout","ConfirmDialog","styled","LinkButton"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"App-Go7NNBmB.mjs","sources":["../../admin/src/pages/App.tsx"],"sourcesContent":["/* eslint-disable import/no-default-export */\nimport * as React from 'react';\n\nimport {\n LinkButton,\n Flex,\n IconButton,\n Table,\n Tbody,\n Td,\n Th,\n Thead,\n Tr,\n Typography,\n EmptyStateLayout,\n} from '@strapi/design-system';\nimport { Eye as Show, ArrowClockwise as Reload, Trash } from '@strapi/icons';\nimport {\n ConfirmDialog,\n useRBAC,\n Page,\n useAPIErrorHandler,\n useNotification,\n Layouts,\n} from '@strapi/strapi/admin';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { PERMISSIONS } from '../constants';\nimport {\n useGetInfoQuery,\n useRegenerateDocMutation,\n useDeleteVersionMutation,\n} from '../services/api';\nimport { getTrad } from '../utils';\n\nconst App = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const { data, isLoading: isLoadingInfo, isError } = useGetInfoQuery();\n const [regenerate] = useRegenerateDocMutation();\n const [deleteVersion] = useDeleteVersionMutation();\n const [showConfirmDelete, setShowConfirmDelete] = React.useState<boolean>(false);\n const [versionToDelete, setVersionToDelete] = React.useState<string>();\n const { allowedActions, isLoading: isLoadingRBAC } = useRBAC(PERMISSIONS);\n\n const isLoading = isLoadingInfo || isLoadingRBAC;\n\n const colCount = 4;\n const rowCount = (data?.docVersions?.length || 0) + 1;\n\n const handleRegenerateDoc = (version: string) => {\n regenerate({ version })\n .unwrap()\n .then(() => {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTrad('notification.generate.success'),\n defaultMessage: 'Successfully generated documentation',\n }),\n });\n })\n .catch((err) => {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n });\n };\n\n const handleShowConfirmDelete = () => {\n setShowConfirmDelete(!showConfirmDelete);\n };\n\n const handleConfirmDelete = async () => {\n if (!versionToDelete) {\n // nothing to delete\n return;\n }\n\n await deleteVersion({ version: versionToDelete })\n .unwrap()\n .then(() => {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTrad('notification.delete.success'),\n defaultMessage: 'Successfully deleted documentation',\n }),\n });\n })\n .catch((err) => {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n });\n\n setShowConfirmDelete(!showConfirmDelete);\n };\n\n const handleClickDelete = (version: string) => {\n setVersionToDelete(version);\n setShowConfirmDelete(!showConfirmDelete);\n };\n\n const title = formatMessage({\n id: getTrad('plugin.name'),\n defaultMessage: 'Documentation',\n });\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (isError) {\n return <Page.Error />;\n }\n\n return (\n <Layouts.Root>\n <Page.Title>{title}</Page.Title>\n <Page.Main>\n <Layouts.Header\n title={title}\n subtitle={formatMessage({\n id: getTrad('pages.PluginPage.header.description'),\n defaultMessage: 'Configure the documentation plugin',\n })}\n primaryAction={\n <OpenDocLink\n disabled={!allowedActions.canRead || !data?.currentVersion || !data?.prefix}\n href={createDocumentationHref(`${data?.prefix}/v${data?.currentVersion}`)}\n startIcon={<Show />}\n >\n {formatMessage({\n id: getTrad('pages.PluginPage.Button.open'),\n defaultMessage: 'Open Documentation',\n })}\n </OpenDocLink>\n }\n />\n <Layouts.Content>\n {data?.docVersions.length ? (\n <Table colCount={colCount} rowCount={rowCount}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad('pages.PluginPage.table.version'),\n defaultMessage: 'Version',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad('pages.PluginPage.table.generated'),\n defaultMessage: 'Last Generated',\n })}\n </Typography>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {data.docVersions\n .slice(0)\n .sort((a, b) => (a.generatedDate < b.generatedDate ? 1 : -1))\n .map((doc) => (\n <Tr key={doc.version}>\n <Td width=\"50%\">\n <Typography>{doc.version}</Typography>\n </Td>\n <Td width=\"50%\">\n <Typography>{doc.generatedDate}</Typography>\n </Td>\n <Td>\n <Flex justifyContent=\"end\" onClick={(e) => e.stopPropagation()}>\n <IconButton\n tag=\"a\"\n disabled={!allowedActions.canRead}\n href={createDocumentationHref(`${data.prefix}/v${doc.version}`)}\n noBorder\n icon={<Show />}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n label={formatMessage(\n {\n id: getTrad('pages.PluginPage.table.icon.show'),\n defaultMessage: 'Open {target}',\n },\n { target: `${doc.version}` }\n )}\n />\n {allowedActions.canRegenerate ? (\n <IconButton\n onClick={() => handleRegenerateDoc(doc.version)}\n noBorder\n icon={<Reload />}\n label={formatMessage(\n {\n id: getTrad('pages.PluginPage.table.icon.regenerate'),\n defaultMessage: 'Regenerate {target}',\n },\n { target: `${doc.version}` }\n )}\n />\n ) : null}\n {allowedActions.canUpdate && doc.version !== data.currentVersion ? (\n <IconButton\n onClick={() => handleClickDelete(doc.version)}\n noBorder\n icon={<Trash />}\n label={formatMessage(\n {\n id: 'global.delete-target',\n defaultMessage: 'Delete {target}',\n },\n { target: `${doc.version}` }\n )}\n />\n ) : null}\n </Flex>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n ) : (\n <EmptyStateLayout content=\"\" icon={null} />\n )}\n </Layouts.Content>\n <ConfirmDialog\n onConfirm={handleConfirmDelete}\n onClose={handleShowConfirmDelete}\n isOpen={showConfirmDelete}\n />\n </Page.Main>\n </Layouts.Root>\n );\n};\n\n/**\n * TODO: should this be fixed in the DS?\n */\nconst OpenDocLink = styled(LinkButton)`\n text-decoration: none;\n`;\n\nconst createDocumentationHref = (path: string) => {\n if (path.startsWith('http')) {\n return path;\n }\n\n if (path.startsWith('/')) {\n return `${window.strapi.backendURL}${path}`;\n }\n\n return `${window.strapi.backendURL}/${path}`;\n};\n\nexport { App };\n"],"names":["Show","Reload"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Settings-BaiyFmcb.js","sources":["../../admin/src/components/SettingsForm.tsx","../../admin/src/pages/Settings.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n Grid,\n GridItem,\n TextInput,\n Toggle,\n Typography,\n Field,\n} from '@strapi/design-system';\n// Strapi Icons\nimport { Check, Eye as Show, EyeStriked as Hide } from '@strapi/icons';\nimport { translatedErrors, useRBAC, Layouts } from '@strapi/strapi/admin';\nimport { Form, Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\n\nimport { PERMISSIONS } from '../constants';\nimport { DocumentInfos, SettingsInput } from '../types';\nimport { getTrad } from '../utils';\n\nconst schema = yup.object().shape({\n restrictedAccess: yup.boolean(),\n password: yup.string().when('restrictedAccess', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required.id) : initSchema;\n }),\n});\n\nconst FieldActionWrapper = styled(Field.Action)`\n svg {\n height: 1.6rem;\n width: 1.6rem;\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n`;\n\ntype SettingsFormProps = {\n data?: DocumentInfos;\n onSubmit: (body: SettingsInput, formik: FormikHelpers<SettingsInput>) => Promise<void>;\n};\n\nexport const SettingsForm = ({ data, onSubmit }: SettingsFormProps) => {\n const { formatMessage } = useIntl();\n const [passwordShown, setPasswordShown] = React.useState(false);\n const { allowedActions } = useRBAC(PERMISSIONS);\n\n return (\n <Formik\n enableReinitialize\n initialValues={{\n restrictedAccess: data?.documentationAccess.restrictedAccess || false,\n password: '',\n }}\n onSubmit={onSubmit}\n validationSchema={schema}\n >\n {({\n handleSubmit,\n values,\n handleChange,\n errors,\n setFieldTouched,\n setFieldValue,\n setFieldError,\n dirty,\n }) => {\n return (\n <Form noValidate onSubmit={handleSubmit}>\n <Layouts.Header\n title={formatMessage({\n id: getTrad('plugin.name'),\n defaultMessage: 'Documentation',\n })}\n subtitle={formatMessage({\n id: getTrad('pages.SettingsPage.header.description'),\n defaultMessage: 'Configure the documentation plugin',\n })}\n primaryAction={\n <Button\n type=\"submit\"\n startIcon={<Check />}\n disabled={!dirty && allowedActions.canUpdate}\n >\n {formatMessage({\n id: getTrad('pages.SettingsPage.Button.save'),\n defaultMessage: 'Save',\n })}\n </Button>\n }\n />\n <Layouts.Content>\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid gap={4}>\n <GridItem col={6} s={12}>\n <Field.Root\n name=\"restrictedAccess\"\n hint={formatMessage({\n id: getTrad('pages.SettingsPage.toggle.hint'),\n defaultMessage: 'Make the documentation endpoint private',\n })}\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('pages.SettingsPage.toggle.label'),\n defaultMessage: 'Restricted Access',\n })}\n </Field.Label>\n <Toggle\n checked={values.restrictedAccess}\n onChange={() => {\n if (values.restrictedAccess === true) {\n setFieldValue('password', '', false);\n setFieldTouched('password', false, false);\n setFieldError('password', undefined);\n }\n\n setFieldValue('restrictedAccess', !values.restrictedAccess, false);\n }}\n onLabel=\"On\"\n offLabel=\"Off\"\n />\n <Field.Hint />\n </Field.Root>\n </GridItem>\n {values.restrictedAccess && (\n <GridItem col={6} s={12}>\n <Field.Root\n name=\"password\"\n error={\n errors.password\n ? formatMessage({\n id: errors.password,\n defaultMessage: errors.password,\n })\n : undefined\n }\n >\n <Field.Label>\n {formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n })}\n </Field.Label>\n <TextInput\n placeholder=\"**********\"\n type={passwordShown ? 'text' : 'password'}\n value={values.password}\n onChange={handleChange}\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.stopPropagation();\n setPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n passwordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {passwordShown ? <Show /> : <Hide />}\n </FieldActionWrapper>\n }\n />\n <Field.Error />\n </Field.Root>\n </GridItem>\n )}\n </Grid>\n </Flex>\n </Box>\n </Layouts.Content>\n </Form>\n );\n }}\n </Formik>\n );\n};\n","import * as React from 'react';\n\nimport { Main } from '@strapi/design-system';\nimport { useAPIErrorHandler, Page, useNotification } from '@strapi/strapi/admin';\nimport { FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\n\nimport { SettingsForm } from '../components/SettingsForm';\nimport { useGetInfoQuery, useUpdateSettingsMutation } from '../services/api';\nimport { getTrad, isBaseQueryError } from '../utils';\n\nimport type { SettingsInput } from '../types';\n\nconst SettingsPage = () => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const { data, isError, isLoading, isFetching } = useGetInfoQuery();\n const [updateSettings] = useUpdateSettingsMutation();\n\n const onUpdateSettings = async (body: SettingsInput, formik: FormikHelpers<SettingsInput>) => {\n return updateSettings({ body })\n .unwrap()\n .then(() => {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTrad('notification.update.success'),\n defaultMessage: 'Successfully updated settings',\n }),\n });\n })\n .catch((err) => {\n if (isBaseQueryError(err) && err.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(err));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(err),\n });\n }\n });\n };\n\n if (isLoading || isFetching) {\n return <Page.Loading />;\n }\n\n if (isError) {\n return <Page.Error />;\n }\n\n return (\n <Main>\n <SettingsForm data={data} onSubmit={onUpdateSettings} />\n </Main>\n );\n};\n\nexport { SettingsPage };\n"],"names":["yup","translatedErrors","styled","Field","useIntl","React","useRBAC","PERMISSIONS","jsx","Formik","jsxs","Form","Layouts","getTrad","Button","Check","Box","Flex","Typography","Grid","GridItem","Toggle","TextInput","Show","Hide","useNotification","useAPIErrorHandler","useGetInfoQuery","useUpdateSettingsMutation","formik","isBaseQueryError","Page","Main"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Settings-MolQTtkV.mjs","sources":["../../admin/src/components/SettingsForm.tsx","../../admin/src/pages/Settings.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n Grid,\n GridItem,\n TextInput,\n Toggle,\n Typography,\n Field,\n} from '@strapi/design-system';\n// Strapi Icons\nimport { Check, Eye as Show, EyeStriked as Hide } from '@strapi/icons';\nimport { translatedErrors, useRBAC, Layouts } from '@strapi/strapi/admin';\nimport { Form, Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\n\nimport { PERMISSIONS } from '../constants';\nimport { DocumentInfos, SettingsInput } from '../types';\nimport { getTrad } from '../utils';\n\nconst schema = yup.object().shape({\n restrictedAccess: yup.boolean(),\n password: yup.string().when('restrictedAccess', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required.id) : initSchema;\n }),\n});\n\nconst FieldActionWrapper = styled(Field.Action)`\n svg {\n height: 1.6rem;\n width: 1.6rem;\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n`;\n\ntype SettingsFormProps = {\n data?: DocumentInfos;\n onSubmit: (body: SettingsInput, formik: FormikHelpers<SettingsInput>) => Promise<void>;\n};\n\nexport const SettingsForm = ({ data, onSubmit }: SettingsFormProps) => {\n const { formatMessage } = useIntl();\n const [passwordShown, setPasswordShown] = React.useState(false);\n const { allowedActions } = useRBAC(PERMISSIONS);\n\n return (\n <Formik\n enableReinitialize\n initialValues={{\n restrictedAccess: data?.documentationAccess.restrictedAccess || false,\n password: '',\n }}\n onSubmit={onSubmit}\n validationSchema={schema}\n >\n {({\n handleSubmit,\n values,\n handleChange,\n errors,\n setFieldTouched,\n setFieldValue,\n setFieldError,\n dirty,\n }) => {\n return (\n <Form noValidate onSubmit={handleSubmit}>\n <Layouts.Header\n title={formatMessage({\n id: getTrad('plugin.name'),\n defaultMessage: 'Documentation',\n })}\n subtitle={formatMessage({\n id: getTrad('pages.SettingsPage.header.description'),\n defaultMessage: 'Configure the documentation plugin',\n })}\n primaryAction={\n <Button\n type=\"submit\"\n startIcon={<Check />}\n disabled={!dirty && allowedActions.canUpdate}\n >\n {formatMessage({\n id: getTrad('pages.SettingsPage.Button.save'),\n defaultMessage: 'Save',\n })}\n </Button>\n }\n />\n <Layouts.Content>\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid gap={4}>\n <GridItem col={6} s={12}>\n <Field.Root\n name=\"restrictedAccess\"\n hint={formatMessage({\n id: getTrad('pages.SettingsPage.toggle.hint'),\n defaultMessage: 'Make the documentation endpoint private',\n })}\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('pages.SettingsPage.toggle.label'),\n defaultMessage: 'Restricted Access',\n })}\n </Field.Label>\n <Toggle\n checked={values.restrictedAccess}\n onChange={() => {\n if (values.restrictedAccess === true) {\n setFieldValue('password', '', false);\n setFieldTouched('password', false, false);\n setFieldError('password', undefined);\n }\n\n setFieldValue('restrictedAccess', !values.restrictedAccess, false);\n }}\n onLabel=\"On\"\n offLabel=\"Off\"\n />\n <Field.Hint />\n </Field.Root>\n </GridItem>\n {values.restrictedAccess && (\n <GridItem col={6} s={12}>\n <Field.Root\n name=\"password\"\n error={\n errors.password\n ? formatMessage({\n id: errors.password,\n defaultMessage: errors.password,\n })\n : undefined\n }\n >\n <Field.Label>\n {formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n })}\n </Field.Label>\n <TextInput\n placeholder=\"**********\"\n type={passwordShown ? 'text' : 'password'}\n value={values.password}\n onChange={handleChange}\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.stopPropagation();\n setPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n passwordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {passwordShown ? <Show /> : <Hide />}\n </FieldActionWrapper>\n }\n />\n <Field.Error />\n </Field.Root>\n </GridItem>\n )}\n </Grid>\n </Flex>\n </Box>\n </Layouts.Content>\n </Form>\n );\n }}\n </Formik>\n );\n};\n","import * as React from 'react';\n\nimport { Main } from '@strapi/design-system';\nimport { useAPIErrorHandler, Page, useNotification } from '@strapi/strapi/admin';\nimport { FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\n\nimport { SettingsForm } from '../components/SettingsForm';\nimport { useGetInfoQuery, useUpdateSettingsMutation } from '../services/api';\nimport { getTrad, isBaseQueryError } from '../utils';\n\nimport type { SettingsInput } from '../types';\n\nconst SettingsPage = () => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const { data, isError, isLoading, isFetching } = useGetInfoQuery();\n const [updateSettings] = useUpdateSettingsMutation();\n\n const onUpdateSettings = async (body: SettingsInput, formik: FormikHelpers<SettingsInput>) => {\n return updateSettings({ body })\n .unwrap()\n .then(() => {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTrad('notification.update.success'),\n defaultMessage: 'Successfully updated settings',\n }),\n });\n })\n .catch((err) => {\n if (isBaseQueryError(err) && err.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(err));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(err),\n });\n }\n });\n };\n\n if (isLoading || isFetching) {\n return <Page.Loading />;\n }\n\n if (isError) {\n return <Page.Error />;\n }\n\n return (\n <Main>\n <SettingsForm data={data} onSubmit={onUpdateSettings} />\n </Main>\n );\n};\n\nexport { SettingsPage };\n"],"names":["Show","Hide"],"mappings":"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"}