@strapi/admin 5.24.2 → 5.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/admin/admin/src/services/homepage.js +15 -1
  2. package/dist/admin/admin/src/services/homepage.js.map +1 -1
  3. package/dist/admin/admin/src/services/homepage.mjs +14 -2
  4. package/dist/admin/admin/src/services/homepage.mjs.map +1 -1
  5. package/dist/admin/src/services/homepage.d.ts +3 -2
  6. package/dist/server/server/src/controllers/homepage.js +17 -0
  7. package/dist/server/server/src/controllers/homepage.js.map +1 -1
  8. package/dist/server/server/src/controllers/homepage.mjs +17 -0
  9. package/dist/server/server/src/controllers/homepage.mjs.map +1 -1
  10. package/dist/server/server/src/controllers/validation/schema.js +30 -0
  11. package/dist/server/server/src/controllers/validation/schema.js.map +1 -0
  12. package/dist/server/server/src/controllers/validation/schema.mjs +26 -0
  13. package/dist/server/server/src/controllers/validation/schema.mjs.map +1 -0
  14. package/dist/server/server/src/routes/homepage.js +20 -0
  15. package/dist/server/server/src/routes/homepage.js.map +1 -1
  16. package/dist/server/server/src/routes/homepage.mjs +20 -0
  17. package/dist/server/server/src/routes/homepage.mjs.map +1 -1
  18. package/dist/server/server/src/services/homepage.js +48 -1
  19. package/dist/server/server/src/services/homepage.js.map +1 -1
  20. package/dist/server/server/src/services/homepage.mjs +48 -1
  21. package/dist/server/server/src/services/homepage.mjs.map +1 -1
  22. package/dist/server/src/controllers/homepage.d.ts +8 -0
  23. package/dist/server/src/controllers/homepage.d.ts.map +1 -1
  24. package/dist/server/src/controllers/index.d.ts +20 -0
  25. package/dist/server/src/controllers/index.d.ts.map +1 -1
  26. package/dist/server/src/controllers/validation/schema.d.ts +61 -0
  27. package/dist/server/src/controllers/validation/schema.d.ts.map +1 -0
  28. package/dist/server/src/index.d.ts +36 -0
  29. package/dist/server/src/index.d.ts.map +1 -1
  30. package/dist/server/src/routes/homepage.d.ts.map +1 -1
  31. package/dist/server/src/services/homepage.d.ts +3 -0
  32. package/dist/server/src/services/homepage.d.ts.map +1 -1
  33. package/dist/server/src/services/index.d.ts +16 -0
  34. package/dist/server/src/services/index.d.ts.map +1 -1
  35. package/dist/shared/contracts/homepage.d.ts +27 -0
  36. package/dist/shared/contracts/homepage.d.ts.map +1 -1
  37. package/package.json +9 -9
@@ -21,11 +21,25 @@ const homepageService = api.adminApi.enhanceEndpoints({
21
21
  providesTags: (_, _err)=>[
22
22
  'CountDocuments'
23
23
  ]
24
+ }),
25
+ getHomepageLayout: builder.query({
26
+ query: ()=>'/admin/homepage/layout',
27
+ transformResponse: (r)=>r.data
28
+ }),
29
+ updateHomepageLayout: builder.mutation({
30
+ query: (body)=>({
31
+ url: '/admin/homepage/layout',
32
+ method: 'PUT',
33
+ body
34
+ }),
35
+ transformResponse: (r)=>r.data
24
36
  })
25
37
  })
26
38
  });
27
- const { useGetKeyStatisticsQuery, useGetCountDocumentsQuery } = homepageService;
39
+ const { useGetKeyStatisticsQuery, useGetCountDocumentsQuery, useGetHomepageLayoutQuery, useUpdateHomepageLayoutMutation } = homepageService;
28
40
 
29
41
  exports.useGetCountDocumentsQuery = useGetCountDocumentsQuery;
42
+ exports.useGetHomepageLayoutQuery = useGetHomepageLayoutQuery;
30
43
  exports.useGetKeyStatisticsQuery = useGetKeyStatisticsQuery;
44
+ exports.useUpdateHomepageLayoutMutation = useUpdateHomepageLayoutMutation;
31
45
  //# sourceMappingURL=homepage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.js","sources":["../../../../../admin/src/services/homepage.ts"],"sourcesContent":["import * as Homepage from '../../../shared/contracts/homepage';\n\nimport { adminApi } from './api';\n\nconst homepageService = adminApi\n .enhanceEndpoints({\n addTagTypes: ['CountDocuments'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n getKeyStatistics: builder.query<Homepage.GetKeyStatistics.Response['data'], void>({\n query: () => '/admin/homepage/key-statistics',\n transformResponse: (response: Homepage.GetKeyStatistics.Response) => response.data,\n providesTags: (_, _err) => ['HomepageKeyStatistics'],\n }),\n getCountDocuments: builder.query<Homepage.GetCountDocuments.Response['data'], void>({\n query: () => '/content-manager/homepage/count-documents',\n transformResponse: (response: Homepage.GetCountDocuments.Response) => response.data,\n providesTags: (_, _err) => ['CountDocuments'],\n }),\n }),\n });\n\nconst { useGetKeyStatisticsQuery, useGetCountDocumentsQuery } = homepageService;\n\nexport { useGetKeyStatisticsQuery, useGetCountDocumentsQuery };\n"],"names":["homepageService","adminApi","enhanceEndpoints","addTagTypes","injectEndpoints","endpoints","builder","getKeyStatistics","query","transformResponse","response","data","providesTags","_","_err","getCountDocuments","useGetKeyStatisticsQuery","useGetCountDocumentsQuery"],"mappings":";;;;AAIA,MAAMA,eAAAA,GAAkBC,YACrBC,CAAAA,gBAAgB,CAAC;IAChBC,WAAa,EAAA;AAAC,QAAA;AAAiB;AACjC,CAAA,CAAA,CACCC,eAAe,CAAC;IACfC,SAAW,EAAA,CAACC,WAAa;YACvBC,gBAAkBD,EAAAA,OAAAA,CAAQE,KAAK,CAAmD;AAChFA,gBAAAA,KAAAA,EAAO,IAAM,gCAAA;gBACbC,iBAAmB,EAAA,CAACC,QAAiDA,GAAAA,QAAAA,CAASC,IAAI;gBAClFC,YAAc,EAAA,CAACC,GAAGC,IAAS,GAAA;AAAC,wBAAA;AAAwB;AACtD,aAAA,CAAA;YACAC,iBAAmBT,EAAAA,OAAAA,CAAQE,KAAK,CAAoD;AAClFA,gBAAAA,KAAAA,EAAO,IAAM,2CAAA;gBACbC,iBAAmB,EAAA,CAACC,QAAkDA,GAAAA,QAAAA,CAASC,IAAI;gBACnFC,YAAc,EAAA,CAACC,GAAGC,IAAS,GAAA;AAAC,wBAAA;AAAiB;AAC/C,aAAA;SACF;AACF,CAAA,CAAA;AAEF,MAAM,EAAEE,wBAAwB,EAAEC,yBAAyB,EAAE,GAAGjB;;;;;"}
1
+ {"version":3,"file":"homepage.js","sources":["../../../../../admin/src/services/homepage.ts"],"sourcesContent":["import * as Homepage from '../../../shared/contracts/homepage';\n\nimport { adminApi } from './api';\n\nconst homepageService = adminApi\n .enhanceEndpoints({\n addTagTypes: ['CountDocuments'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n getKeyStatistics: builder.query<Homepage.GetKeyStatistics.Response['data'], void>({\n query: () => '/admin/homepage/key-statistics',\n transformResponse: (response: Homepage.GetKeyStatistics.Response) => response.data,\n providesTags: (_, _err) => ['HomepageKeyStatistics'],\n }),\n getCountDocuments: builder.query<Homepage.GetCountDocuments.Response['data'], void>({\n query: () => '/content-manager/homepage/count-documents',\n transformResponse: (response: Homepage.GetCountDocuments.Response) => response.data,\n providesTags: (_, _err) => ['CountDocuments'],\n }),\n getHomepageLayout: builder.query<Homepage.GetHomepageLayout.Response['data'], void>({\n query: () => '/admin/homepage/layout',\n transformResponse: (r: Homepage.GetHomepageLayout.Response) => r.data,\n }),\n updateHomepageLayout: builder.mutation<\n Homepage.UpdateHomepageLayout.Response['data'],\n Homepage.UpdateHomepageLayout.Request['body']\n >({\n query: (body) => ({ url: '/admin/homepage/layout', method: 'PUT', body }),\n transformResponse: (r: Homepage.UpdateHomepageLayout.Response) => r.data,\n }),\n }),\n });\n\nconst {\n useGetKeyStatisticsQuery,\n useGetCountDocumentsQuery,\n useGetHomepageLayoutQuery,\n useUpdateHomepageLayoutMutation,\n} = homepageService;\n\nexport {\n useGetKeyStatisticsQuery,\n useGetCountDocumentsQuery,\n useGetHomepageLayoutQuery,\n useUpdateHomepageLayoutMutation,\n};\n"],"names":["homepageService","adminApi","enhanceEndpoints","addTagTypes","injectEndpoints","endpoints","builder","getKeyStatistics","query","transformResponse","response","data","providesTags","_","_err","getCountDocuments","getHomepageLayout","r","updateHomepageLayout","mutation","body","url","method","useGetKeyStatisticsQuery","useGetCountDocumentsQuery","useGetHomepageLayoutQuery","useUpdateHomepageLayoutMutation"],"mappings":";;;;AAIA,MAAMA,eAAAA,GAAkBC,YACrBC,CAAAA,gBAAgB,CAAC;IAChBC,WAAa,EAAA;AAAC,QAAA;AAAiB;AACjC,CAAA,CAAA,CACCC,eAAe,CAAC;IACfC,SAAW,EAAA,CAACC,WAAa;YACvBC,gBAAkBD,EAAAA,OAAAA,CAAQE,KAAK,CAAmD;AAChFA,gBAAAA,KAAAA,EAAO,IAAM,gCAAA;gBACbC,iBAAmB,EAAA,CAACC,QAAiDA,GAAAA,QAAAA,CAASC,IAAI;gBAClFC,YAAc,EAAA,CAACC,GAAGC,IAAS,GAAA;AAAC,wBAAA;AAAwB;AACtD,aAAA,CAAA;YACAC,iBAAmBT,EAAAA,OAAAA,CAAQE,KAAK,CAAoD;AAClFA,gBAAAA,KAAAA,EAAO,IAAM,2CAAA;gBACbC,iBAAmB,EAAA,CAACC,QAAkDA,GAAAA,QAAAA,CAASC,IAAI;gBACnFC,YAAc,EAAA,CAACC,GAAGC,IAAS,GAAA;AAAC,wBAAA;AAAiB;AAC/C,aAAA,CAAA;YACAE,iBAAmBV,EAAAA,OAAAA,CAAQE,KAAK,CAAoD;AAClFA,gBAAAA,KAAAA,EAAO,IAAM,wBAAA;gBACbC,iBAAmB,EAAA,CAACQ,CAA2CA,GAAAA,CAAAA,CAAEN;AACnE,aAAA,CAAA;YACAO,oBAAsBZ,EAAAA,OAAAA,CAAQa,QAAQ,CAGpC;gBACAX,KAAO,EAAA,CAACY,QAAU;wBAAEC,GAAK,EAAA,wBAAA;wBAA0BC,MAAQ,EAAA,KAAA;AAAOF,wBAAAA;qBAAK,CAAA;gBACvEX,iBAAmB,EAAA,CAACQ,CAA8CA,GAAAA,CAAAA,CAAEN;AACtE,aAAA;SACF;AACF,CAAA,CAAA;AAEI,MAAA,EACJY,wBAAwB,EACxBC,yBAAyB,EACzBC,yBAAyB,EACzBC,+BAA+B,EAChC,GAAG1B;;;;;;;"}
@@ -19,10 +19,22 @@ const homepageService = adminApi.enhanceEndpoints({
19
19
  providesTags: (_, _err)=>[
20
20
  'CountDocuments'
21
21
  ]
22
+ }),
23
+ getHomepageLayout: builder.query({
24
+ query: ()=>'/admin/homepage/layout',
25
+ transformResponse: (r)=>r.data
26
+ }),
27
+ updateHomepageLayout: builder.mutation({
28
+ query: (body)=>({
29
+ url: '/admin/homepage/layout',
30
+ method: 'PUT',
31
+ body
32
+ }),
33
+ transformResponse: (r)=>r.data
22
34
  })
23
35
  })
24
36
  });
25
- const { useGetKeyStatisticsQuery, useGetCountDocumentsQuery } = homepageService;
37
+ const { useGetKeyStatisticsQuery, useGetCountDocumentsQuery, useGetHomepageLayoutQuery, useUpdateHomepageLayoutMutation } = homepageService;
26
38
 
27
- export { useGetCountDocumentsQuery, useGetKeyStatisticsQuery };
39
+ export { useGetCountDocumentsQuery, useGetHomepageLayoutQuery, useGetKeyStatisticsQuery, useUpdateHomepageLayoutMutation };
28
40
  //# sourceMappingURL=homepage.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.mjs","sources":["../../../../../admin/src/services/homepage.ts"],"sourcesContent":["import * as Homepage from '../../../shared/contracts/homepage';\n\nimport { adminApi } from './api';\n\nconst homepageService = adminApi\n .enhanceEndpoints({\n addTagTypes: ['CountDocuments'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n getKeyStatistics: builder.query<Homepage.GetKeyStatistics.Response['data'], void>({\n query: () => '/admin/homepage/key-statistics',\n transformResponse: (response: Homepage.GetKeyStatistics.Response) => response.data,\n providesTags: (_, _err) => ['HomepageKeyStatistics'],\n }),\n getCountDocuments: builder.query<Homepage.GetCountDocuments.Response['data'], void>({\n query: () => '/content-manager/homepage/count-documents',\n transformResponse: (response: Homepage.GetCountDocuments.Response) => response.data,\n providesTags: (_, _err) => ['CountDocuments'],\n }),\n }),\n });\n\nconst { useGetKeyStatisticsQuery, useGetCountDocumentsQuery } = homepageService;\n\nexport { useGetKeyStatisticsQuery, useGetCountDocumentsQuery };\n"],"names":["homepageService","adminApi","enhanceEndpoints","addTagTypes","injectEndpoints","endpoints","builder","getKeyStatistics","query","transformResponse","response","data","providesTags","_","_err","getCountDocuments","useGetKeyStatisticsQuery","useGetCountDocumentsQuery"],"mappings":";;AAIA,MAAMA,eAAAA,GAAkBC,QACrBC,CAAAA,gBAAgB,CAAC;IAChBC,WAAa,EAAA;AAAC,QAAA;AAAiB;AACjC,CAAA,CAAA,CACCC,eAAe,CAAC;IACfC,SAAW,EAAA,CAACC,WAAa;YACvBC,gBAAkBD,EAAAA,OAAAA,CAAQE,KAAK,CAAmD;AAChFA,gBAAAA,KAAAA,EAAO,IAAM,gCAAA;gBACbC,iBAAmB,EAAA,CAACC,QAAiDA,GAAAA,QAAAA,CAASC,IAAI;gBAClFC,YAAc,EAAA,CAACC,GAAGC,IAAS,GAAA;AAAC,wBAAA;AAAwB;AACtD,aAAA,CAAA;YACAC,iBAAmBT,EAAAA,OAAAA,CAAQE,KAAK,CAAoD;AAClFA,gBAAAA,KAAAA,EAAO,IAAM,2CAAA;gBACbC,iBAAmB,EAAA,CAACC,QAAkDA,GAAAA,QAAAA,CAASC,IAAI;gBACnFC,YAAc,EAAA,CAACC,GAAGC,IAAS,GAAA;AAAC,wBAAA;AAAiB;AAC/C,aAAA;SACF;AACF,CAAA,CAAA;AAEF,MAAM,EAAEE,wBAAwB,EAAEC,yBAAyB,EAAE,GAAGjB;;;;"}
1
+ {"version":3,"file":"homepage.mjs","sources":["../../../../../admin/src/services/homepage.ts"],"sourcesContent":["import * as Homepage from '../../../shared/contracts/homepage';\n\nimport { adminApi } from './api';\n\nconst homepageService = adminApi\n .enhanceEndpoints({\n addTagTypes: ['CountDocuments'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n getKeyStatistics: builder.query<Homepage.GetKeyStatistics.Response['data'], void>({\n query: () => '/admin/homepage/key-statistics',\n transformResponse: (response: Homepage.GetKeyStatistics.Response) => response.data,\n providesTags: (_, _err) => ['HomepageKeyStatistics'],\n }),\n getCountDocuments: builder.query<Homepage.GetCountDocuments.Response['data'], void>({\n query: () => '/content-manager/homepage/count-documents',\n transformResponse: (response: Homepage.GetCountDocuments.Response) => response.data,\n providesTags: (_, _err) => ['CountDocuments'],\n }),\n getHomepageLayout: builder.query<Homepage.GetHomepageLayout.Response['data'], void>({\n query: () => '/admin/homepage/layout',\n transformResponse: (r: Homepage.GetHomepageLayout.Response) => r.data,\n }),\n updateHomepageLayout: builder.mutation<\n Homepage.UpdateHomepageLayout.Response['data'],\n Homepage.UpdateHomepageLayout.Request['body']\n >({\n query: (body) => ({ url: '/admin/homepage/layout', method: 'PUT', body }),\n transformResponse: (r: Homepage.UpdateHomepageLayout.Response) => r.data,\n }),\n }),\n });\n\nconst {\n useGetKeyStatisticsQuery,\n useGetCountDocumentsQuery,\n useGetHomepageLayoutQuery,\n useUpdateHomepageLayoutMutation,\n} = homepageService;\n\nexport {\n useGetKeyStatisticsQuery,\n useGetCountDocumentsQuery,\n useGetHomepageLayoutQuery,\n useUpdateHomepageLayoutMutation,\n};\n"],"names":["homepageService","adminApi","enhanceEndpoints","addTagTypes","injectEndpoints","endpoints","builder","getKeyStatistics","query","transformResponse","response","data","providesTags","_","_err","getCountDocuments","getHomepageLayout","r","updateHomepageLayout","mutation","body","url","method","useGetKeyStatisticsQuery","useGetCountDocumentsQuery","useGetHomepageLayoutQuery","useUpdateHomepageLayoutMutation"],"mappings":";;AAIA,MAAMA,eAAAA,GAAkBC,QACrBC,CAAAA,gBAAgB,CAAC;IAChBC,WAAa,EAAA;AAAC,QAAA;AAAiB;AACjC,CAAA,CAAA,CACCC,eAAe,CAAC;IACfC,SAAW,EAAA,CAACC,WAAa;YACvBC,gBAAkBD,EAAAA,OAAAA,CAAQE,KAAK,CAAmD;AAChFA,gBAAAA,KAAAA,EAAO,IAAM,gCAAA;gBACbC,iBAAmB,EAAA,CAACC,QAAiDA,GAAAA,QAAAA,CAASC,IAAI;gBAClFC,YAAc,EAAA,CAACC,GAAGC,IAAS,GAAA;AAAC,wBAAA;AAAwB;AACtD,aAAA,CAAA;YACAC,iBAAmBT,EAAAA,OAAAA,CAAQE,KAAK,CAAoD;AAClFA,gBAAAA,KAAAA,EAAO,IAAM,2CAAA;gBACbC,iBAAmB,EAAA,CAACC,QAAkDA,GAAAA,QAAAA,CAASC,IAAI;gBACnFC,YAAc,EAAA,CAACC,GAAGC,IAAS,GAAA;AAAC,wBAAA;AAAiB;AAC/C,aAAA,CAAA;YACAE,iBAAmBV,EAAAA,OAAAA,CAAQE,KAAK,CAAoD;AAClFA,gBAAAA,KAAAA,EAAO,IAAM,wBAAA;gBACbC,iBAAmB,EAAA,CAACQ,CAA2CA,GAAAA,CAAAA,CAAEN;AACnE,aAAA,CAAA;YACAO,oBAAsBZ,EAAAA,OAAAA,CAAQa,QAAQ,CAGpC;gBACAX,KAAO,EAAA,CAACY,QAAU;wBAAEC,GAAK,EAAA,wBAAA;wBAA0BC,MAAQ,EAAA,KAAA;AAAOF,wBAAAA;qBAAK,CAAA;gBACvEX,iBAAmB,EAAA,CAACQ,CAA8CA,GAAAA,CAAAA,CAAEN;AACtE,aAAA;SACF;AACF,CAAA,CAAA;AAEI,MAAA,EACJY,wBAAwB,EACxBC,yBAAyB,EACzBC,yBAAyB,EACzBC,+BAA+B,EAChC,GAAG1B;;;;"}
@@ -1,3 +1,4 @@
1
+ import * as Homepage from '../../../shared/contracts/homepage';
1
2
  declare const useGetKeyStatisticsQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("..").QueryArguments, unknown, import("..").BaseQueryError>, "GuidedTourMeta" | "HomepageKeyStatistics" | "CountDocuments", {
2
3
  assets: number;
3
4
  contentTypes: number;
@@ -10,5 +11,5 @@ declare const useGetKeyStatisticsQuery: import("@reduxjs/toolkit/dist/query/reac
10
11
  draft: number;
11
12
  published: number;
12
13
  modified: number;
13
- }, "adminApi">>;
14
- export { useGetKeyStatisticsQuery, useGetCountDocumentsQuery };
14
+ }, "adminApi">>, useGetHomepageLayoutQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("..").QueryArguments, unknown, import("..").BaseQueryError>, "GuidedTourMeta" | "HomepageKeyStatistics" | "CountDocuments", Homepage.Homepage.Layout, "adminApi">>, useUpdateHomepageLayoutMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<Homepage.Homepage.LayoutWrite, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("..").QueryArguments, unknown, import("..").BaseQueryError>, "GuidedTourMeta" | "HomepageKeyStatistics" | "CountDocuments", Homepage.Homepage.Layout, "adminApi">>;
15
+ export { useGetKeyStatisticsQuery, useGetCountDocumentsQuery, useGetHomepageLayoutQuery, useUpdateHomepageLayoutMutation, };
@@ -8,6 +8,23 @@ var homepage = {
8
8
  return {
9
9
  data: await homepageService.getKeyStatistics()
10
10
  };
11
+ },
12
+ async getHomepageLayout (ctx) {
13
+ const homepageService = index.getService('homepage');
14
+ const userId = ctx.state.user?.id;
15
+ const data = await homepageService.getHomepageLayout(userId);
16
+ return {
17
+ data
18
+ };
19
+ },
20
+ async updateHomepageLayout (ctx) {
21
+ const homepageService = index.getService('homepage');
22
+ const userId = ctx.state.user?.id;
23
+ const body = ctx.request.body;
24
+ const data = await homepageService.updateHomepageLayout(userId, body);
25
+ return {
26
+ data
27
+ };
11
28
  }
12
29
  };
13
30
 
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.js","sources":["../../../../../server/src/controllers/homepage.ts"],"sourcesContent":["import { getService } from '../utils';\n\nexport default {\n async getKeyStatistics(): Promise<{\n data: Awaited<ReturnType<typeof homepageService.getKeyStatistics>>;\n }> {\n const homepageService = getService('homepage');\n return { data: await homepageService.getKeyStatistics() };\n },\n};\n"],"names":["getKeyStatistics","homepageService","getService","data"],"mappings":";;;;AAEA,eAAe;IACb,MAAMA,gBAAAA,CAAAA,GAAAA;AAGJ,QAAA,MAAMC,kBAAkBC,gBAAW,CAAA,UAAA,CAAA;QACnC,OAAO;YAAEC,IAAM,EAAA,MAAMF,gBAAgBD,gBAAgB;AAAG,SAAA;AAC1D;AACF,CAAE;;;;"}
1
+ {"version":3,"file":"homepage.js","sources":["../../../../../server/src/controllers/homepage.ts"],"sourcesContent":["import type { Context } from 'koa';\nimport { getService } from '../utils';\nimport { HomepageLayout, HomepageLayoutWrite } from './validation/schema';\n\nexport default {\n async getKeyStatistics(): Promise<{\n data: Awaited<ReturnType<typeof homepageService.getKeyStatistics>>;\n }> {\n const homepageService = getService('homepage');\n return { data: await homepageService.getKeyStatistics() };\n },\n async getHomepageLayout(ctx: Context): Promise<{ data: HomepageLayout | null }> {\n const homepageService = getService('homepage');\n const userId = ctx.state.user?.id;\n\n const data = await homepageService.getHomepageLayout(userId);\n return { data };\n },\n async updateHomepageLayout(ctx: Context): Promise<{ data: HomepageLayout }> {\n const homepageService = getService('homepage');\n const userId = ctx.state.user?.id;\n\n const body = ctx.request.body as HomepageLayoutWrite;\n const data = await homepageService.updateHomepageLayout(userId, body);\n return { data };\n },\n};\n"],"names":["getKeyStatistics","homepageService","getService","data","getHomepageLayout","ctx","userId","state","user","id","updateHomepageLayout","body","request"],"mappings":";;;;AAIA,eAAe;IACb,MAAMA,gBAAAA,CAAAA,GAAAA;AAGJ,QAAA,MAAMC,kBAAkBC,gBAAW,CAAA,UAAA,CAAA;QACnC,OAAO;YAAEC,IAAM,EAAA,MAAMF,gBAAgBD,gBAAgB;AAAG,SAAA;AAC1D,KAAA;AACA,IAAA,MAAMI,mBAAkBC,GAAY,EAAA;AAClC,QAAA,MAAMJ,kBAAkBC,gBAAW,CAAA,UAAA,CAAA;AACnC,QAAA,MAAMI,MAASD,GAAAA,GAAAA,CAAIE,KAAK,CAACC,IAAI,EAAEC,EAAAA;AAE/B,QAAA,MAAMN,IAAO,GAAA,MAAMF,eAAgBG,CAAAA,iBAAiB,CAACE,MAAAA,CAAAA;QACrD,OAAO;AAAEH,YAAAA;AAAK,SAAA;AAChB,KAAA;AACA,IAAA,MAAMO,sBAAqBL,GAAY,EAAA;AACrC,QAAA,MAAMJ,kBAAkBC,gBAAW,CAAA,UAAA,CAAA;AACnC,QAAA,MAAMI,MAASD,GAAAA,GAAAA,CAAIE,KAAK,CAACC,IAAI,EAAEC,EAAAA;AAE/B,QAAA,MAAME,IAAON,GAAAA,GAAAA,CAAIO,OAAO,CAACD,IAAI;AAC7B,QAAA,MAAMR,IAAO,GAAA,MAAMF,eAAgBS,CAAAA,oBAAoB,CAACJ,MAAQK,EAAAA,IAAAA,CAAAA;QAChE,OAAO;AAAER,YAAAA;AAAK,SAAA;AAChB;AACF,CAAE;;;;"}
@@ -6,6 +6,23 @@ var homepage = {
6
6
  return {
7
7
  data: await homepageService.getKeyStatistics()
8
8
  };
9
+ },
10
+ async getHomepageLayout (ctx) {
11
+ const homepageService = getService('homepage');
12
+ const userId = ctx.state.user?.id;
13
+ const data = await homepageService.getHomepageLayout(userId);
14
+ return {
15
+ data
16
+ };
17
+ },
18
+ async updateHomepageLayout (ctx) {
19
+ const homepageService = getService('homepage');
20
+ const userId = ctx.state.user?.id;
21
+ const body = ctx.request.body;
22
+ const data = await homepageService.updateHomepageLayout(userId, body);
23
+ return {
24
+ data
25
+ };
9
26
  }
10
27
  };
11
28
 
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.mjs","sources":["../../../../../server/src/controllers/homepage.ts"],"sourcesContent":["import { getService } from '../utils';\n\nexport default {\n async getKeyStatistics(): Promise<{\n data: Awaited<ReturnType<typeof homepageService.getKeyStatistics>>;\n }> {\n const homepageService = getService('homepage');\n return { data: await homepageService.getKeyStatistics() };\n },\n};\n"],"names":["getKeyStatistics","homepageService","getService","data"],"mappings":";;AAEA,eAAe;IACb,MAAMA,gBAAAA,CAAAA,GAAAA;AAGJ,QAAA,MAAMC,kBAAkBC,UAAW,CAAA,UAAA,CAAA;QACnC,OAAO;YAAEC,IAAM,EAAA,MAAMF,gBAAgBD,gBAAgB;AAAG,SAAA;AAC1D;AACF,CAAE;;;;"}
1
+ {"version":3,"file":"homepage.mjs","sources":["../../../../../server/src/controllers/homepage.ts"],"sourcesContent":["import type { Context } from 'koa';\nimport { getService } from '../utils';\nimport { HomepageLayout, HomepageLayoutWrite } from './validation/schema';\n\nexport default {\n async getKeyStatistics(): Promise<{\n data: Awaited<ReturnType<typeof homepageService.getKeyStatistics>>;\n }> {\n const homepageService = getService('homepage');\n return { data: await homepageService.getKeyStatistics() };\n },\n async getHomepageLayout(ctx: Context): Promise<{ data: HomepageLayout | null }> {\n const homepageService = getService('homepage');\n const userId = ctx.state.user?.id;\n\n const data = await homepageService.getHomepageLayout(userId);\n return { data };\n },\n async updateHomepageLayout(ctx: Context): Promise<{ data: HomepageLayout }> {\n const homepageService = getService('homepage');\n const userId = ctx.state.user?.id;\n\n const body = ctx.request.body as HomepageLayoutWrite;\n const data = await homepageService.updateHomepageLayout(userId, body);\n return { data };\n },\n};\n"],"names":["getKeyStatistics","homepageService","getService","data","getHomepageLayout","ctx","userId","state","user","id","updateHomepageLayout","body","request"],"mappings":";;AAIA,eAAe;IACb,MAAMA,gBAAAA,CAAAA,GAAAA;AAGJ,QAAA,MAAMC,kBAAkBC,UAAW,CAAA,UAAA,CAAA;QACnC,OAAO;YAAEC,IAAM,EAAA,MAAMF,gBAAgBD,gBAAgB;AAAG,SAAA;AAC1D,KAAA;AACA,IAAA,MAAMI,mBAAkBC,GAAY,EAAA;AAClC,QAAA,MAAMJ,kBAAkBC,UAAW,CAAA,UAAA,CAAA;AACnC,QAAA,MAAMI,MAASD,GAAAA,GAAAA,CAAIE,KAAK,CAACC,IAAI,EAAEC,EAAAA;AAE/B,QAAA,MAAMN,IAAO,GAAA,MAAMF,eAAgBG,CAAAA,iBAAiB,CAACE,MAAAA,CAAAA;QACrD,OAAO;AAAEH,YAAAA;AAAK,SAAA;AAChB,KAAA;AACA,IAAA,MAAMO,sBAAqBL,GAAY,EAAA;AACrC,QAAA,MAAMJ,kBAAkBC,UAAW,CAAA,UAAA,CAAA;AACnC,QAAA,MAAMI,MAASD,GAAAA,GAAAA,CAAIE,KAAK,CAACC,IAAI,EAAEC,EAAAA;AAE/B,QAAA,MAAME,IAAON,GAAAA,GAAAA,CAAIO,OAAO,CAACD,IAAI;AAC7B,QAAA,MAAMR,IAAO,GAAA,MAAMF,eAAgBS,CAAAA,oBAAoB,CAACJ,MAAQK,EAAAA,IAAAA,CAAAA;QAChE,OAAO;AAAER,YAAAA;AAAK,SAAA;AAChB;AACF,CAAE;;;;"}
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+
3
+ var zod = require('zod');
4
+
5
+ // widths must be one of 4, 6, 8, 12
6
+ const WidthSchema = zod.z.union([
7
+ zod.z.literal(4),
8
+ zod.z.literal(6),
9
+ zod.z.literal(8),
10
+ zod.z.literal(12)
11
+ ]);
12
+ const WidgetEntrySchema = zod.z.object({
13
+ uid: zod.z.string().nonempty(),
14
+ width: WidthSchema
15
+ }).strict();
16
+ const HomepageLayoutSchema = zod.z.object({
17
+ version: zod.z.number().int().min(1),
18
+ widgets: zod.z.array(WidgetEntrySchema).max(100),
19
+ updatedAt: zod.z.string().datetime()
20
+ }).strict();
21
+ const HomepageLayoutWriteSchema = zod.z.object({
22
+ version: zod.z.number().int().min(1).optional(),
23
+ widgets: zod.z.array(WidgetEntrySchema).max(100),
24
+ updatedAt: zod.z.string().datetime().optional()
25
+ }).strict();
26
+
27
+ exports.HomepageLayoutSchema = HomepageLayoutSchema;
28
+ exports.HomepageLayoutWriteSchema = HomepageLayoutWriteSchema;
29
+ exports.WidthSchema = WidthSchema;
30
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sources":["../../../../../../server/src/controllers/validation/schema.ts"],"sourcesContent":["import { z } from 'zod';\n\n// widths must be one of 4, 6, 8, 12\nexport const WidthSchema = z.union([z.literal(4), z.literal(6), z.literal(8), z.literal(12)]);\n\nconst WidgetEntrySchema = z\n .object({\n uid: z.string().nonempty(),\n width: WidthSchema,\n })\n .strict();\n\nexport const HomepageLayoutSchema = z\n .object({\n version: z.number().int().min(1),\n widgets: z.array(WidgetEntrySchema).max(100),\n updatedAt: z.string().datetime(),\n })\n .strict();\n\nexport type HomepageLayout = z.infer<typeof HomepageLayoutSchema>;\n\nexport const HomepageLayoutWriteSchema = z\n .object({\n version: z.number().int().min(1).optional(),\n widgets: z.array(WidgetEntrySchema).max(100),\n updatedAt: z.string().datetime().optional(),\n })\n .strict();\n\nexport type HomepageLayoutWrite = z.infer<typeof HomepageLayoutWriteSchema>;\n"],"names":["WidthSchema","z","union","literal","WidgetEntrySchema","object","uid","string","nonempty","width","strict","HomepageLayoutSchema","version","number","int","min","widgets","array","max","updatedAt","datetime","HomepageLayoutWriteSchema","optional"],"mappings":";;;;AAEA;AACaA,MAAAA,WAAAA,GAAcC,KAAEC,CAAAA,KAAK,CAAC;AAACD,IAAAA,KAAAA,CAAEE,OAAO,CAAC,CAAA,CAAA;AAAIF,IAAAA,KAAAA,CAAEE,OAAO,CAAC,CAAA,CAAA;AAAIF,IAAAA,KAAAA,CAAEE,OAAO,CAAC,CAAA,CAAA;AAAIF,IAAAA,KAAAA,CAAEE,OAAO,CAAC,EAAA;CAAI;AAE5F,MAAMC,iBAAAA,GAAoBH,KACvBI,CAAAA,MAAM,CAAC;IACNC,GAAKL,EAAAA,KAAAA,CAAEM,MAAM,EAAA,CAAGC,QAAQ,EAAA;IACxBC,KAAOT,EAAAA;AACT,CAAA,CAAA,CACCU,MAAM,EAAA;AAEIC,MAAAA,oBAAAA,GAAuBV,KACjCI,CAAAA,MAAM,CAAC;AACNO,IAAAA,OAAAA,EAASX,MAAEY,MAAM,EAAA,CAAGC,GAAG,EAAA,CAAGC,GAAG,CAAC,CAAA,CAAA;AAC9BC,IAAAA,OAAAA,EAASf,KAAEgB,CAAAA,KAAK,CAACb,iBAAAA,CAAAA,CAAmBc,GAAG,CAAC,GAAA,CAAA;IACxCC,SAAWlB,EAAAA,KAAAA,CAAEM,MAAM,EAAA,CAAGa,QAAQ;AAChC,CAAA,CAAA,CACCV,MAAM;AAIIW,MAAAA,yBAAAA,GAA4BpB,KACtCI,CAAAA,MAAM,CAAC;IACNO,OAASX,EAAAA,KAAAA,CAAEY,MAAM,EAAGC,CAAAA,GAAG,GAAGC,GAAG,CAAC,GAAGO,QAAQ,EAAA;AACzCN,IAAAA,OAAAA,EAASf,KAAEgB,CAAAA,KAAK,CAACb,iBAAAA,CAAAA,CAAmBc,GAAG,CAAC,GAAA,CAAA;AACxCC,IAAAA,SAAAA,EAAWlB,KAAEM,CAAAA,MAAM,EAAGa,CAAAA,QAAQ,GAAGE,QAAQ;AAC3C,CAAA,CAAA,CACCZ,MAAM;;;;;;"}
@@ -0,0 +1,26 @@
1
+ import { z } from 'zod';
2
+
3
+ // widths must be one of 4, 6, 8, 12
4
+ const WidthSchema = z.union([
5
+ z.literal(4),
6
+ z.literal(6),
7
+ z.literal(8),
8
+ z.literal(12)
9
+ ]);
10
+ const WidgetEntrySchema = z.object({
11
+ uid: z.string().nonempty(),
12
+ width: WidthSchema
13
+ }).strict();
14
+ const HomepageLayoutSchema = z.object({
15
+ version: z.number().int().min(1),
16
+ widgets: z.array(WidgetEntrySchema).max(100),
17
+ updatedAt: z.string().datetime()
18
+ }).strict();
19
+ const HomepageLayoutWriteSchema = z.object({
20
+ version: z.number().int().min(1).optional(),
21
+ widgets: z.array(WidgetEntrySchema).max(100),
22
+ updatedAt: z.string().datetime().optional()
23
+ }).strict();
24
+
25
+ export { HomepageLayoutSchema, HomepageLayoutWriteSchema, WidthSchema };
26
+ //# sourceMappingURL=schema.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.mjs","sources":["../../../../../../server/src/controllers/validation/schema.ts"],"sourcesContent":["import { z } from 'zod';\n\n// widths must be one of 4, 6, 8, 12\nexport const WidthSchema = z.union([z.literal(4), z.literal(6), z.literal(8), z.literal(12)]);\n\nconst WidgetEntrySchema = z\n .object({\n uid: z.string().nonempty(),\n width: WidthSchema,\n })\n .strict();\n\nexport const HomepageLayoutSchema = z\n .object({\n version: z.number().int().min(1),\n widgets: z.array(WidgetEntrySchema).max(100),\n updatedAt: z.string().datetime(),\n })\n .strict();\n\nexport type HomepageLayout = z.infer<typeof HomepageLayoutSchema>;\n\nexport const HomepageLayoutWriteSchema = z\n .object({\n version: z.number().int().min(1).optional(),\n widgets: z.array(WidgetEntrySchema).max(100),\n updatedAt: z.string().datetime().optional(),\n })\n .strict();\n\nexport type HomepageLayoutWrite = z.infer<typeof HomepageLayoutWriteSchema>;\n"],"names":["WidthSchema","z","union","literal","WidgetEntrySchema","object","uid","string","nonempty","width","strict","HomepageLayoutSchema","version","number","int","min","widgets","array","max","updatedAt","datetime","HomepageLayoutWriteSchema","optional"],"mappings":";;AAEA;AACaA,MAAAA,WAAAA,GAAcC,CAAEC,CAAAA,KAAK,CAAC;AAACD,IAAAA,CAAAA,CAAEE,OAAO,CAAC,CAAA,CAAA;AAAIF,IAAAA,CAAAA,CAAEE,OAAO,CAAC,CAAA,CAAA;AAAIF,IAAAA,CAAAA,CAAEE,OAAO,CAAC,CAAA,CAAA;AAAIF,IAAAA,CAAAA,CAAEE,OAAO,CAAC,EAAA;CAAI;AAE5F,MAAMC,iBAAAA,GAAoBH,CACvBI,CAAAA,MAAM,CAAC;IACNC,GAAKL,EAAAA,CAAAA,CAAEM,MAAM,EAAA,CAAGC,QAAQ,EAAA;IACxBC,KAAOT,EAAAA;AACT,CAAA,CAAA,CACCU,MAAM,EAAA;AAEIC,MAAAA,oBAAAA,GAAuBV,CACjCI,CAAAA,MAAM,CAAC;AACNO,IAAAA,OAAAA,EAASX,EAAEY,MAAM,EAAA,CAAGC,GAAG,EAAA,CAAGC,GAAG,CAAC,CAAA,CAAA;AAC9BC,IAAAA,OAAAA,EAASf,CAAEgB,CAAAA,KAAK,CAACb,iBAAAA,CAAAA,CAAmBc,GAAG,CAAC,GAAA,CAAA;IACxCC,SAAWlB,EAAAA,CAAAA,CAAEM,MAAM,EAAA,CAAGa,QAAQ;AAChC,CAAA,CAAA,CACCV,MAAM;AAIIW,MAAAA,yBAAAA,GAA4BpB,CACtCI,CAAAA,MAAM,CAAC;IACNO,OAASX,EAAAA,CAAAA,CAAEY,MAAM,EAAGC,CAAAA,GAAG,GAAGC,GAAG,CAAC,GAAGO,QAAQ,EAAA;AACzCN,IAAAA,OAAAA,EAASf,CAAEgB,CAAAA,KAAK,CAACb,iBAAAA,CAAAA,CAAmBc,GAAG,CAAC,GAAA,CAAA;AACxCC,IAAAA,SAAAA,EAAWlB,CAAEM,CAAAA,MAAM,EAAGa,CAAAA,QAAQ,GAAGE,QAAQ;AAC3C,CAAA,CAAA,CACCZ,MAAM;;;;"}
@@ -10,6 +10,26 @@ var homepage = [
10
10
  'admin::isAuthenticatedAdmin'
11
11
  ]
12
12
  }
13
+ },
14
+ {
15
+ method: 'GET',
16
+ path: '/homepage/layout',
17
+ handler: 'homepage.getHomepageLayout',
18
+ config: {
19
+ policies: [
20
+ 'admin::isAuthenticatedAdmin'
21
+ ]
22
+ }
23
+ },
24
+ {
25
+ method: 'PUT',
26
+ path: '/homepage/layout',
27
+ handler: 'homepage.updateHomepageLayout',
28
+ config: {
29
+ policies: [
30
+ 'admin::isAuthenticatedAdmin'
31
+ ]
32
+ }
13
33
  }
14
34
  ];
15
35
 
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.js","sources":["../../../../../server/src/routes/homepage.ts"],"sourcesContent":["export default [\n {\n method: 'GET',\n path: '/homepage/key-statistics',\n handler: 'homepage.getKeyStatistics',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n];\n"],"names":["method","path","handler","config","policies"],"mappings":";;AAAA,eAAe;AACb,IAAA;QACEA,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,0BAAA;QACNC,OAAS,EAAA,2BAAA;QACTC,MAAQ,EAAA;YACNC,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAC3C;AACF;CACD;;;;"}
1
+ {"version":3,"file":"homepage.js","sources":["../../../../../server/src/routes/homepage.ts"],"sourcesContent":["export default [\n {\n method: 'GET',\n path: '/homepage/key-statistics',\n handler: 'homepage.getKeyStatistics',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/homepage/layout',\n handler: 'homepage.getHomepageLayout',\n config: { policies: ['admin::isAuthenticatedAdmin'] },\n },\n {\n method: 'PUT',\n path: '/homepage/layout',\n handler: 'homepage.updateHomepageLayout',\n config: { policies: ['admin::isAuthenticatedAdmin'] },\n },\n];\n"],"names":["method","path","handler","config","policies"],"mappings":";;AAAA,eAAe;AACb,IAAA;QACEA,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,0BAAA;QACNC,OAAS,EAAA,2BAAA;QACTC,MAAQ,EAAA;YACNC,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAC3C;AACF,KAAA;AACA,IAAA;QACEJ,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,kBAAA;QACNC,OAAS,EAAA,4BAAA;QACTC,MAAQ,EAAA;YAAEC,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAAC;AACtD,KAAA;AACA,IAAA;QACEJ,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,kBAAA;QACNC,OAAS,EAAA,+BAAA;QACTC,MAAQ,EAAA;YAAEC,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAAC;AACtD;CACD;;;;"}
@@ -8,6 +8,26 @@ var homepage = [
8
8
  'admin::isAuthenticatedAdmin'
9
9
  ]
10
10
  }
11
+ },
12
+ {
13
+ method: 'GET',
14
+ path: '/homepage/layout',
15
+ handler: 'homepage.getHomepageLayout',
16
+ config: {
17
+ policies: [
18
+ 'admin::isAuthenticatedAdmin'
19
+ ]
20
+ }
21
+ },
22
+ {
23
+ method: 'PUT',
24
+ path: '/homepage/layout',
25
+ handler: 'homepage.updateHomepageLayout',
26
+ config: {
27
+ policies: [
28
+ 'admin::isAuthenticatedAdmin'
29
+ ]
30
+ }
11
31
  }
12
32
  ];
13
33
 
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.mjs","sources":["../../../../../server/src/routes/homepage.ts"],"sourcesContent":["export default [\n {\n method: 'GET',\n path: '/homepage/key-statistics',\n handler: 'homepage.getKeyStatistics',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n];\n"],"names":["method","path","handler","config","policies"],"mappings":"AAAA,eAAe;AACb,IAAA;QACEA,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,0BAAA;QACNC,OAAS,EAAA,2BAAA;QACTC,MAAQ,EAAA;YACNC,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAC3C;AACF;CACD;;;;"}
1
+ {"version":3,"file":"homepage.mjs","sources":["../../../../../server/src/routes/homepage.ts"],"sourcesContent":["export default [\n {\n method: 'GET',\n path: '/homepage/key-statistics',\n handler: 'homepage.getKeyStatistics',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/homepage/layout',\n handler: 'homepage.getHomepageLayout',\n config: { policies: ['admin::isAuthenticatedAdmin'] },\n },\n {\n method: 'PUT',\n path: '/homepage/layout',\n handler: 'homepage.updateHomepageLayout',\n config: { policies: ['admin::isAuthenticatedAdmin'] },\n },\n];\n"],"names":["method","path","handler","config","policies"],"mappings":"AAAA,eAAe;AACb,IAAA;QACEA,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,0BAAA;QACNC,OAAS,EAAA,2BAAA;QACTC,MAAQ,EAAA;YACNC,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAC3C;AACF,KAAA;AACA,IAAA;QACEJ,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,kBAAA;QACNC,OAAS,EAAA,4BAAA;QACTC,MAAQ,EAAA;YAAEC,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAAC;AACtD,KAAA;AACA,IAAA;QACEJ,MAAQ,EAAA,KAAA;QACRC,IAAM,EAAA,kBAAA;QACNC,OAAS,EAAA,+BAAA;QACTC,MAAQ,EAAA;YAAEC,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAAC;AACtD;CACD;;;;"}
@@ -1,9 +1,16 @@
1
1
  'use strict';
2
2
 
3
3
  var index = require('../utils/index.js');
4
+ var schema = require('../controllers/validation/schema.js');
4
5
 
6
+ const DEFAULT_WIDTH = 6;
7
+ const keyFor = (userId)=>`homepage-layout:${userId}`;
5
8
  const isContentTypeVisible = (model)=>model?.pluginOptions?.['content-type-builder']?.visible !== false;
6
9
  const homepageService = ({ strapi })=>{
10
+ const adminStore = strapi.store({
11
+ type: 'core',
12
+ name: 'admin'
13
+ });
7
14
  const getKeyStatistics = async ()=>{
8
15
  const contentTypes = Object.entries(strapi.contentTypes).filter(([, contentType])=>{
9
16
  return isContentTypeVisible(contentType);
@@ -25,8 +32,48 @@ const homepageService = ({ strapi })=>{
25
32
  apiTokens: countApiTokens
26
33
  };
27
34
  };
35
+ const getHomepageLayout = async (userId)=>{
36
+ const key = keyFor(userId);
37
+ const value = await adminStore.get({
38
+ key
39
+ });
40
+ if (!value) {
41
+ // nothing saved yet
42
+ return null;
43
+ }
44
+ return schema.HomepageLayoutSchema.parse(value);
45
+ };
46
+ const updateHomepageLayout = async (userId, input)=>{
47
+ const write = schema.HomepageLayoutWriteSchema.parse(input);
48
+ const key = keyFor(userId);
49
+ const currentRaw = await adminStore.get({
50
+ key
51
+ });
52
+ const current = currentRaw ? schema.HomepageLayoutSchema.parse(currentRaw) : null;
53
+ const widgetsNext = write.widgets ?? current?.widgets ?? [];
54
+ // Normalize widths (fill defaults where missing)
55
+ const normalizedWidgets = widgetsNext.map((w)=>{
56
+ const prev = current?.widgets.find((cw)=>cw.uid === w.uid);
57
+ return {
58
+ uid: w.uid,
59
+ width: w.width ?? prev?.width ?? DEFAULT_WIDTH
60
+ };
61
+ });
62
+ const next = {
63
+ version: write.version ?? 1,
64
+ widgets: normalizedWidgets,
65
+ updatedAt: write.updatedAt ?? new Date().toISOString()
66
+ };
67
+ await adminStore.set({
68
+ key,
69
+ value: next
70
+ });
71
+ return next;
72
+ };
28
73
  return {
29
- getKeyStatistics
74
+ getKeyStatistics,
75
+ getHomepageLayout,
76
+ updateHomepageLayout
30
77
  };
31
78
  };
32
79
 
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.js","sources":["../../../../../server/src/services/homepage.ts"],"sourcesContent":["import { Core } from '@strapi/types';\nimport { getService } from '../utils';\n\nconst isContentTypeVisible = (model: any) =>\n model?.pluginOptions?.['content-type-builder']?.visible !== false;\n\nexport const homepageService = ({ strapi }: { strapi: Core.Strapi }) => {\n const getKeyStatistics = async () => {\n const contentTypes = Object.entries(strapi.contentTypes).filter(([, contentType]) => {\n return isContentTypeVisible(contentType);\n });\n\n const countApiTokens = await getService('api-token').count();\n const countAdmins = await getService('user').count();\n const countLocales = (await strapi.plugin('i18n')?.service('locales')?.count()) ?? null;\n const countsAssets = await strapi.db.query('plugin::upload.file').count();\n const countWebhooks = await strapi.db.query('strapi::webhook').count();\n\n const componentCategories = new Set(\n Object.values(strapi.components).map((component) => component.category)\n );\n const components = Array.from(componentCategories);\n\n return {\n assets: countsAssets,\n contentTypes: contentTypes.length,\n components: components.length,\n locales: countLocales,\n admins: countAdmins,\n webhooks: countWebhooks,\n apiTokens: countApiTokens,\n };\n };\n\n return {\n getKeyStatistics,\n };\n};\n"],"names":["isContentTypeVisible","model","pluginOptions","visible","homepageService","strapi","getKeyStatistics","contentTypes","Object","entries","filter","contentType","countApiTokens","getService","count","countAdmins","countLocales","plugin","service","countsAssets","db","query","countWebhooks","componentCategories","Set","values","components","map","component","category","Array","from","assets","length","locales","admins","webhooks","apiTokens"],"mappings":";;;;AAGA,MAAMA,oBAAAA,GAAuB,CAACC,KAC5BA,GAAAA,KAAAA,EAAOC,gBAAgB,sBAAA,CAAuB,EAAEC,OAAY,KAAA,KAAA;AAEjDC,MAAAA,eAAAA,GAAkB,CAAC,EAAEC,MAAM,EAA2B,GAAA;AACjE,IAAA,MAAMC,gBAAmB,GAAA,UAAA;QACvB,MAAMC,YAAAA,GAAeC,MAAOC,CAAAA,OAAO,CAACJ,MAAAA,CAAOE,YAAY,CAAA,CAAEG,MAAM,CAAC,CAAC,GAAGC,WAAY,CAAA,GAAA;AAC9E,YAAA,OAAOX,oBAAqBW,CAAAA,WAAAA,CAAAA;AAC9B,SAAA,CAAA;AAEA,QAAA,MAAMC,cAAiB,GAAA,MAAMC,gBAAW,CAAA,WAAA,CAAA,CAAaC,KAAK,EAAA;AAC1D,QAAA,MAAMC,WAAc,GAAA,MAAMF,gBAAW,CAAA,MAAA,CAAA,CAAQC,KAAK,EAAA;QAClD,MAAME,YAAAA,GAAe,MAAOX,MAAAA,CAAOY,MAAM,CAAC,MAAA,CAAA,EAASC,OAAQ,CAAA,SAAA,CAAA,EAAYJ,KAAY,EAAA,IAAA,IAAA;QACnF,MAAMK,YAAAA,GAAe,MAAMd,MAAOe,CAAAA,EAAE,CAACC,KAAK,CAAC,uBAAuBP,KAAK,EAAA;QACvE,MAAMQ,aAAAA,GAAgB,MAAMjB,MAAOe,CAAAA,EAAE,CAACC,KAAK,CAAC,mBAAmBP,KAAK,EAAA;AAEpE,QAAA,MAAMS,mBAAsB,GAAA,IAAIC,GAC9BhB,CAAAA,MAAAA,CAAOiB,MAAM,CAACpB,MAAAA,CAAOqB,UAAU,CAAA,CAAEC,GAAG,CAAC,CAACC,SAAAA,GAAcA,UAAUC,QAAQ,CAAA,CAAA;QAExE,MAAMH,UAAAA,GAAaI,KAAMC,CAAAA,IAAI,CAACR,mBAAAA,CAAAA;QAE9B,OAAO;YACLS,MAAQb,EAAAA,YAAAA;AACRZ,YAAAA,YAAAA,EAAcA,aAAa0B,MAAM;AACjCP,YAAAA,UAAAA,EAAYA,WAAWO,MAAM;YAC7BC,OAASlB,EAAAA,YAAAA;YACTmB,MAAQpB,EAAAA,WAAAA;YACRqB,QAAUd,EAAAA,aAAAA;YACVe,SAAWzB,EAAAA;AACb,SAAA;AACF,KAAA;IAEA,OAAO;AACLN,QAAAA;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"homepage.js","sources":["../../../../../server/src/services/homepage.ts"],"sourcesContent":["import { Core } from '@strapi/types';\nimport { getService } from '../utils';\nimport {\n HomepageLayout,\n HomepageLayoutSchema,\n HomepageLayoutWrite,\n HomepageLayoutWriteSchema,\n} from '../controllers/validation/schema';\n\nconst DEFAULT_WIDTH = 6 as const;\nconst keyFor = (userId: number) => `homepage-layout:${userId}`;\n\nconst isContentTypeVisible = (model: any) =>\n model?.pluginOptions?.['content-type-builder']?.visible !== false;\n\nexport const homepageService = ({ strapi }: { strapi: Core.Strapi }) => {\n const adminStore = strapi.store({ type: 'core', name: 'admin' });\n const getKeyStatistics = async () => {\n const contentTypes = Object.entries(strapi.contentTypes).filter(([, contentType]) => {\n return isContentTypeVisible(contentType);\n });\n\n const countApiTokens = await getService('api-token').count();\n const countAdmins = await getService('user').count();\n const countLocales = (await strapi.plugin('i18n')?.service('locales')?.count()) ?? null;\n const countsAssets = await strapi.db.query('plugin::upload.file').count();\n const countWebhooks = await strapi.db.query('strapi::webhook').count();\n\n const componentCategories = new Set(\n Object.values(strapi.components).map((component) => component.category)\n );\n const components = Array.from(componentCategories);\n\n return {\n assets: countsAssets,\n contentTypes: contentTypes.length,\n components: components.length,\n locales: countLocales,\n admins: countAdmins,\n webhooks: countWebhooks,\n apiTokens: countApiTokens,\n };\n };\n\n const getHomepageLayout = async (userId: number): Promise<HomepageLayout | null> => {\n const key = keyFor(userId);\n const value = await adminStore.get({ key });\n if (!value) {\n // nothing saved yet\n return null;\n }\n\n return HomepageLayoutSchema.parse(value);\n };\n\n const updateHomepageLayout = async (userId: number, input: unknown): Promise<HomepageLayout> => {\n const write: HomepageLayoutWrite = HomepageLayoutWriteSchema.parse(input);\n\n const key = keyFor(userId);\n\n const currentRaw = await adminStore.get({ key });\n const current: HomepageLayout | null = currentRaw\n ? HomepageLayoutSchema.parse(currentRaw)\n : null;\n\n const widgetsNext = write.widgets ?? current?.widgets ?? [];\n\n // Normalize widths (fill defaults where missing)\n const normalizedWidgets = widgetsNext.map((w) => {\n const prev = current?.widgets.find((cw) => cw.uid === w.uid);\n return {\n uid: w.uid,\n width: w.width ?? prev?.width ?? DEFAULT_WIDTH,\n };\n });\n\n const next: HomepageLayout = {\n version: write.version ?? 1,\n widgets: normalizedWidgets,\n updatedAt: write.updatedAt ?? new Date().toISOString(),\n };\n\n await adminStore.set({ key, value: next });\n return next;\n };\n return {\n getKeyStatistics,\n getHomepageLayout,\n updateHomepageLayout,\n };\n};\n"],"names":["DEFAULT_WIDTH","keyFor","userId","isContentTypeVisible","model","pluginOptions","visible","homepageService","strapi","adminStore","store","type","name","getKeyStatistics","contentTypes","Object","entries","filter","contentType","countApiTokens","getService","count","countAdmins","countLocales","plugin","service","countsAssets","db","query","countWebhooks","componentCategories","Set","values","components","map","component","category","Array","from","assets","length","locales","admins","webhooks","apiTokens","getHomepageLayout","key","value","get","HomepageLayoutSchema","parse","updateHomepageLayout","input","write","HomepageLayoutWriteSchema","currentRaw","current","widgetsNext","widgets","normalizedWidgets","w","prev","find","cw","uid","width","next","version","updatedAt","Date","toISOString","set"],"mappings":"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"}
@@ -1,7 +1,14 @@
1
1
  import { getService } from '../utils/index.mjs';
2
+ import { HomepageLayoutSchema, HomepageLayoutWriteSchema } from '../controllers/validation/schema.mjs';
2
3
 
4
+ const DEFAULT_WIDTH = 6;
5
+ const keyFor = (userId)=>`homepage-layout:${userId}`;
3
6
  const isContentTypeVisible = (model)=>model?.pluginOptions?.['content-type-builder']?.visible !== false;
4
7
  const homepageService = ({ strapi })=>{
8
+ const adminStore = strapi.store({
9
+ type: 'core',
10
+ name: 'admin'
11
+ });
5
12
  const getKeyStatistics = async ()=>{
6
13
  const contentTypes = Object.entries(strapi.contentTypes).filter(([, contentType])=>{
7
14
  return isContentTypeVisible(contentType);
@@ -23,8 +30,48 @@ const homepageService = ({ strapi })=>{
23
30
  apiTokens: countApiTokens
24
31
  };
25
32
  };
33
+ const getHomepageLayout = async (userId)=>{
34
+ const key = keyFor(userId);
35
+ const value = await adminStore.get({
36
+ key
37
+ });
38
+ if (!value) {
39
+ // nothing saved yet
40
+ return null;
41
+ }
42
+ return HomepageLayoutSchema.parse(value);
43
+ };
44
+ const updateHomepageLayout = async (userId, input)=>{
45
+ const write = HomepageLayoutWriteSchema.parse(input);
46
+ const key = keyFor(userId);
47
+ const currentRaw = await adminStore.get({
48
+ key
49
+ });
50
+ const current = currentRaw ? HomepageLayoutSchema.parse(currentRaw) : null;
51
+ const widgetsNext = write.widgets ?? current?.widgets ?? [];
52
+ // Normalize widths (fill defaults where missing)
53
+ const normalizedWidgets = widgetsNext.map((w)=>{
54
+ const prev = current?.widgets.find((cw)=>cw.uid === w.uid);
55
+ return {
56
+ uid: w.uid,
57
+ width: w.width ?? prev?.width ?? DEFAULT_WIDTH
58
+ };
59
+ });
60
+ const next = {
61
+ version: write.version ?? 1,
62
+ widgets: normalizedWidgets,
63
+ updatedAt: write.updatedAt ?? new Date().toISOString()
64
+ };
65
+ await adminStore.set({
66
+ key,
67
+ value: next
68
+ });
69
+ return next;
70
+ };
26
71
  return {
27
- getKeyStatistics
72
+ getKeyStatistics,
73
+ getHomepageLayout,
74
+ updateHomepageLayout
28
75
  };
29
76
  };
30
77
 
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.mjs","sources":["../../../../../server/src/services/homepage.ts"],"sourcesContent":["import { Core } from '@strapi/types';\nimport { getService } from '../utils';\n\nconst isContentTypeVisible = (model: any) =>\n model?.pluginOptions?.['content-type-builder']?.visible !== false;\n\nexport const homepageService = ({ strapi }: { strapi: Core.Strapi }) => {\n const getKeyStatistics = async () => {\n const contentTypes = Object.entries(strapi.contentTypes).filter(([, contentType]) => {\n return isContentTypeVisible(contentType);\n });\n\n const countApiTokens = await getService('api-token').count();\n const countAdmins = await getService('user').count();\n const countLocales = (await strapi.plugin('i18n')?.service('locales')?.count()) ?? null;\n const countsAssets = await strapi.db.query('plugin::upload.file').count();\n const countWebhooks = await strapi.db.query('strapi::webhook').count();\n\n const componentCategories = new Set(\n Object.values(strapi.components).map((component) => component.category)\n );\n const components = Array.from(componentCategories);\n\n return {\n assets: countsAssets,\n contentTypes: contentTypes.length,\n components: components.length,\n locales: countLocales,\n admins: countAdmins,\n webhooks: countWebhooks,\n apiTokens: countApiTokens,\n };\n };\n\n return {\n getKeyStatistics,\n };\n};\n"],"names":["isContentTypeVisible","model","pluginOptions","visible","homepageService","strapi","getKeyStatistics","contentTypes","Object","entries","filter","contentType","countApiTokens","getService","count","countAdmins","countLocales","plugin","service","countsAssets","db","query","countWebhooks","componentCategories","Set","values","components","map","component","category","Array","from","assets","length","locales","admins","webhooks","apiTokens"],"mappings":";;AAGA,MAAMA,oBAAAA,GAAuB,CAACC,KAC5BA,GAAAA,KAAAA,EAAOC,gBAAgB,sBAAA,CAAuB,EAAEC,OAAY,KAAA,KAAA;AAEjDC,MAAAA,eAAAA,GAAkB,CAAC,EAAEC,MAAM,EAA2B,GAAA;AACjE,IAAA,MAAMC,gBAAmB,GAAA,UAAA;QACvB,MAAMC,YAAAA,GAAeC,MAAOC,CAAAA,OAAO,CAACJ,MAAAA,CAAOE,YAAY,CAAA,CAAEG,MAAM,CAAC,CAAC,GAAGC,WAAY,CAAA,GAAA;AAC9E,YAAA,OAAOX,oBAAqBW,CAAAA,WAAAA,CAAAA;AAC9B,SAAA,CAAA;AAEA,QAAA,MAAMC,cAAiB,GAAA,MAAMC,UAAW,CAAA,WAAA,CAAA,CAAaC,KAAK,EAAA;AAC1D,QAAA,MAAMC,WAAc,GAAA,MAAMF,UAAW,CAAA,MAAA,CAAA,CAAQC,KAAK,EAAA;QAClD,MAAME,YAAAA,GAAe,MAAOX,MAAAA,CAAOY,MAAM,CAAC,MAAA,CAAA,EAASC,OAAQ,CAAA,SAAA,CAAA,EAAYJ,KAAY,EAAA,IAAA,IAAA;QACnF,MAAMK,YAAAA,GAAe,MAAMd,MAAOe,CAAAA,EAAE,CAACC,KAAK,CAAC,uBAAuBP,KAAK,EAAA;QACvE,MAAMQ,aAAAA,GAAgB,MAAMjB,MAAOe,CAAAA,EAAE,CAACC,KAAK,CAAC,mBAAmBP,KAAK,EAAA;AAEpE,QAAA,MAAMS,mBAAsB,GAAA,IAAIC,GAC9BhB,CAAAA,MAAAA,CAAOiB,MAAM,CAACpB,MAAAA,CAAOqB,UAAU,CAAA,CAAEC,GAAG,CAAC,CAACC,SAAAA,GAAcA,UAAUC,QAAQ,CAAA,CAAA;QAExE,MAAMH,UAAAA,GAAaI,KAAMC,CAAAA,IAAI,CAACR,mBAAAA,CAAAA;QAE9B,OAAO;YACLS,MAAQb,EAAAA,YAAAA;AACRZ,YAAAA,YAAAA,EAAcA,aAAa0B,MAAM;AACjCP,YAAAA,UAAAA,EAAYA,WAAWO,MAAM;YAC7BC,OAASlB,EAAAA,YAAAA;YACTmB,MAAQpB,EAAAA,WAAAA;YACRqB,QAAUd,EAAAA,aAAAA;YACVe,SAAWzB,EAAAA;AACb,SAAA;AACF,KAAA;IAEA,OAAO;AACLN,QAAAA;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"homepage.mjs","sources":["../../../../../server/src/services/homepage.ts"],"sourcesContent":["import { Core } from '@strapi/types';\nimport { getService } from '../utils';\nimport {\n HomepageLayout,\n HomepageLayoutSchema,\n HomepageLayoutWrite,\n HomepageLayoutWriteSchema,\n} from '../controllers/validation/schema';\n\nconst DEFAULT_WIDTH = 6 as const;\nconst keyFor = (userId: number) => `homepage-layout:${userId}`;\n\nconst isContentTypeVisible = (model: any) =>\n model?.pluginOptions?.['content-type-builder']?.visible !== false;\n\nexport const homepageService = ({ strapi }: { strapi: Core.Strapi }) => {\n const adminStore = strapi.store({ type: 'core', name: 'admin' });\n const getKeyStatistics = async () => {\n const contentTypes = Object.entries(strapi.contentTypes).filter(([, contentType]) => {\n return isContentTypeVisible(contentType);\n });\n\n const countApiTokens = await getService('api-token').count();\n const countAdmins = await getService('user').count();\n const countLocales = (await strapi.plugin('i18n')?.service('locales')?.count()) ?? null;\n const countsAssets = await strapi.db.query('plugin::upload.file').count();\n const countWebhooks = await strapi.db.query('strapi::webhook').count();\n\n const componentCategories = new Set(\n Object.values(strapi.components).map((component) => component.category)\n );\n const components = Array.from(componentCategories);\n\n return {\n assets: countsAssets,\n contentTypes: contentTypes.length,\n components: components.length,\n locales: countLocales,\n admins: countAdmins,\n webhooks: countWebhooks,\n apiTokens: countApiTokens,\n };\n };\n\n const getHomepageLayout = async (userId: number): Promise<HomepageLayout | null> => {\n const key = keyFor(userId);\n const value = await adminStore.get({ key });\n if (!value) {\n // nothing saved yet\n return null;\n }\n\n return HomepageLayoutSchema.parse(value);\n };\n\n const updateHomepageLayout = async (userId: number, input: unknown): Promise<HomepageLayout> => {\n const write: HomepageLayoutWrite = HomepageLayoutWriteSchema.parse(input);\n\n const key = keyFor(userId);\n\n const currentRaw = await adminStore.get({ key });\n const current: HomepageLayout | null = currentRaw\n ? HomepageLayoutSchema.parse(currentRaw)\n : null;\n\n const widgetsNext = write.widgets ?? current?.widgets ?? [];\n\n // Normalize widths (fill defaults where missing)\n const normalizedWidgets = widgetsNext.map((w) => {\n const prev = current?.widgets.find((cw) => cw.uid === w.uid);\n return {\n uid: w.uid,\n width: w.width ?? prev?.width ?? DEFAULT_WIDTH,\n };\n });\n\n const next: HomepageLayout = {\n version: write.version ?? 1,\n widgets: normalizedWidgets,\n updatedAt: write.updatedAt ?? new Date().toISOString(),\n };\n\n await adminStore.set({ key, value: next });\n return next;\n };\n return {\n getKeyStatistics,\n getHomepageLayout,\n updateHomepageLayout,\n };\n};\n"],"names":["DEFAULT_WIDTH","keyFor","userId","isContentTypeVisible","model","pluginOptions","visible","homepageService","strapi","adminStore","store","type","name","getKeyStatistics","contentTypes","Object","entries","filter","contentType","countApiTokens","getService","count","countAdmins","countLocales","plugin","service","countsAssets","db","query","countWebhooks","componentCategories","Set","values","components","map","component","category","Array","from","assets","length","locales","admins","webhooks","apiTokens","getHomepageLayout","key","value","get","HomepageLayoutSchema","parse","updateHomepageLayout","input","write","HomepageLayoutWriteSchema","currentRaw","current","widgetsNext","widgets","normalizedWidgets","w","prev","find","cw","uid","width","next","version","updatedAt","Date","toISOString","set"],"mappings":";;;AASA,MAAMA,aAAgB,GAAA,CAAA;AACtB,MAAMC,SAAS,CAACC,MAAAA,GAAmB,CAAC,gBAAgB,EAAEA,OAAO,CAAC;AAE9D,MAAMC,oBAAAA,GAAuB,CAACC,KAC5BA,GAAAA,KAAAA,EAAOC,gBAAgB,sBAAA,CAAuB,EAAEC,OAAY,KAAA,KAAA;AAEjDC,MAAAA,eAAAA,GAAkB,CAAC,EAAEC,MAAM,EAA2B,GAAA;IACjE,MAAMC,UAAAA,GAAaD,MAAOE,CAAAA,KAAK,CAAC;QAAEC,IAAM,EAAA,MAAA;QAAQC,IAAM,EAAA;AAAQ,KAAA,CAAA;AAC9D,IAAA,MAAMC,gBAAmB,GAAA,UAAA;QACvB,MAAMC,YAAAA,GAAeC,MAAOC,CAAAA,OAAO,CAACR,MAAAA,CAAOM,YAAY,CAAA,CAAEG,MAAM,CAAC,CAAC,GAAGC,WAAY,CAAA,GAAA;AAC9E,YAAA,OAAOf,oBAAqBe,CAAAA,WAAAA,CAAAA;AAC9B,SAAA,CAAA;AAEA,QAAA,MAAMC,cAAiB,GAAA,MAAMC,UAAW,CAAA,WAAA,CAAA,CAAaC,KAAK,EAAA;AAC1D,QAAA,MAAMC,WAAc,GAAA,MAAMF,UAAW,CAAA,MAAA,CAAA,CAAQC,KAAK,EAAA;QAClD,MAAME,YAAAA,GAAe,MAAOf,MAAAA,CAAOgB,MAAM,CAAC,MAAA,CAAA,EAASC,OAAQ,CAAA,SAAA,CAAA,EAAYJ,KAAY,EAAA,IAAA,IAAA;QACnF,MAAMK,YAAAA,GAAe,MAAMlB,MAAOmB,CAAAA,EAAE,CAACC,KAAK,CAAC,uBAAuBP,KAAK,EAAA;QACvE,MAAMQ,aAAAA,GAAgB,MAAMrB,MAAOmB,CAAAA,EAAE,CAACC,KAAK,CAAC,mBAAmBP,KAAK,EAAA;AAEpE,QAAA,MAAMS,mBAAsB,GAAA,IAAIC,GAC9BhB,CAAAA,MAAAA,CAAOiB,MAAM,CAACxB,MAAAA,CAAOyB,UAAU,CAAA,CAAEC,GAAG,CAAC,CAACC,SAAAA,GAAcA,UAAUC,QAAQ,CAAA,CAAA;QAExE,MAAMH,UAAAA,GAAaI,KAAMC,CAAAA,IAAI,CAACR,mBAAAA,CAAAA;QAE9B,OAAO;YACLS,MAAQb,EAAAA,YAAAA;AACRZ,YAAAA,YAAAA,EAAcA,aAAa0B,MAAM;AACjCP,YAAAA,UAAAA,EAAYA,WAAWO,MAAM;YAC7BC,OAASlB,EAAAA,YAAAA;YACTmB,MAAQpB,EAAAA,WAAAA;YACRqB,QAAUd,EAAAA,aAAAA;YACVe,SAAWzB,EAAAA;AACb,SAAA;AACF,KAAA;AAEA,IAAA,MAAM0B,oBAAoB,OAAO3C,MAAAA,GAAAA;AAC/B,QAAA,MAAM4C,MAAM7C,MAAOC,CAAAA,MAAAA,CAAAA;AACnB,QAAA,MAAM6C,KAAQ,GAAA,MAAMtC,UAAWuC,CAAAA,GAAG,CAAC;AAAEF,YAAAA;AAAI,SAAA,CAAA;AACzC,QAAA,IAAI,CAACC,KAAO,EAAA;;YAEV,OAAO,IAAA;AACT;QAEA,OAAOE,oBAAAA,CAAqBC,KAAK,CAACH,KAAAA,CAAAA;AACpC,KAAA;IAEA,MAAMI,oBAAAA,GAAuB,OAAOjD,MAAgBkD,EAAAA,KAAAA,GAAAA;QAClD,MAAMC,KAAAA,GAA6BC,yBAA0BJ,CAAAA,KAAK,CAACE,KAAAA,CAAAA;AAEnE,QAAA,MAAMN,MAAM7C,MAAOC,CAAAA,MAAAA,CAAAA;AAEnB,QAAA,MAAMqD,UAAa,GAAA,MAAM9C,UAAWuC,CAAAA,GAAG,CAAC;AAAEF,YAAAA;AAAI,SAAA,CAAA;AAC9C,QAAA,MAAMU,OAAiCD,GAAAA,UAAAA,GACnCN,oBAAqBC,CAAAA,KAAK,CAACK,UAC3B,CAAA,GAAA,IAAA;AAEJ,QAAA,MAAME,cAAcJ,KAAMK,CAAAA,OAAO,IAAIF,OAAAA,EAASE,WAAW,EAAE;;AAG3D,QAAA,MAAMC,iBAAoBF,GAAAA,WAAAA,CAAYvB,GAAG,CAAC,CAAC0B,CAAAA,GAAAA;YACzC,MAAMC,IAAAA,GAAOL,OAASE,EAAAA,OAAAA,CAAQI,IAAK,CAAA,CAACC,KAAOA,EAAGC,CAAAA,GAAG,KAAKJ,CAAAA,CAAEI,GAAG,CAAA;YAC3D,OAAO;AACLA,gBAAAA,GAAAA,EAAKJ,EAAEI,GAAG;AACVC,gBAAAA,KAAAA,EAAOL,CAAEK,CAAAA,KAAK,IAAIJ,IAAAA,EAAMI,KAASjE,IAAAA;AACnC,aAAA;AACF,SAAA,CAAA;AAEA,QAAA,MAAMkE,IAAuB,GAAA;YAC3BC,OAASd,EAAAA,KAAAA,CAAMc,OAAO,IAAI,CAAA;YAC1BT,OAASC,EAAAA,iBAAAA;AACTS,YAAAA,SAAAA,EAAWf,KAAMe,CAAAA,SAAS,IAAI,IAAIC,OAAOC,WAAW;AACtD,SAAA;QAEA,MAAM7D,UAAAA,CAAW8D,GAAG,CAAC;AAAEzB,YAAAA,GAAAA;YAAKC,KAAOmB,EAAAA;AAAK,SAAA,CAAA;QACxC,OAAOA,IAAAA;AACT,KAAA;IACA,OAAO;AACLrD,QAAAA,gBAAAA;AACAgC,QAAAA,iBAAAA;AACAM,QAAAA;AACF,KAAA;AACF;;;;"}
@@ -1,3 +1,5 @@
1
+ import type { Context } from 'koa';
2
+ import { HomepageLayout } from './validation/schema';
1
3
  declare const _default: {
2
4
  getKeyStatistics(): Promise<{
3
5
  data: {
@@ -10,6 +12,12 @@ declare const _default: {
10
12
  apiTokens: number;
11
13
  };
12
14
  }>;
15
+ getHomepageLayout(ctx: Context): Promise<{
16
+ data: HomepageLayout | null;
17
+ }>;
18
+ updateHomepageLayout(ctx: Context): Promise<{
19
+ data: HomepageLayout;
20
+ }>;
13
21
  };
14
22
  export default _default;
15
23
  //# sourceMappingURL=homepage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/homepage.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAEA,wBAOE"}
1
+ {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/homepage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAuB,MAAM,qBAAqB,CAAC;;;;;;;;;;;;;2BAS3C,OAAO,GAAG,QAAQ;QAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAAA;KAAE,CAAC;8BAO/C,OAAO,GAAG,QAAQ;QAAE,IAAI,EAAE,cAAc,CAAA;KAAE,CAAC;;AAd7E,wBAsBE"}
@@ -125,6 +125,26 @@ declare const _default: {
125
125
  apiTokens: number;
126
126
  };
127
127
  }>;
128
+ getHomepageLayout(ctx: import("koa").Context): Promise<{
129
+ data: {
130
+ updatedAt: string;
131
+ version: number;
132
+ widgets: {
133
+ uid: string;
134
+ width: 8 | 6 | 4 | 12;
135
+ }[];
136
+ } | null;
137
+ }>;
138
+ updateHomepageLayout(ctx: import("koa").Context): Promise<{
139
+ data: {
140
+ updatedAt: string;
141
+ version: number;
142
+ widgets: {
143
+ uid: string;
144
+ width: 8 | 6 | 4 | 12;
145
+ }[];
146
+ };
147
+ }>;
128
148
  };
129
149
  };
130
150
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,wBAYE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,wBAYE"}
@@ -0,0 +1,61 @@
1
+ import { z } from 'zod';
2
+ export declare const WidthSchema: z.ZodUnion<[z.ZodLiteral<4>, z.ZodLiteral<6>, z.ZodLiteral<8>, z.ZodLiteral<12>]>;
3
+ export declare const HomepageLayoutSchema: z.ZodObject<{
4
+ version: z.ZodNumber;
5
+ widgets: z.ZodArray<z.ZodObject<{
6
+ uid: z.ZodString;
7
+ width: z.ZodUnion<[z.ZodLiteral<4>, z.ZodLiteral<6>, z.ZodLiteral<8>, z.ZodLiteral<12>]>;
8
+ }, "strict", z.ZodTypeAny, {
9
+ uid: string;
10
+ width: 8 | 6 | 4 | 12;
11
+ }, {
12
+ uid: string;
13
+ width: 8 | 6 | 4 | 12;
14
+ }>, "many">;
15
+ updatedAt: z.ZodString;
16
+ }, "strict", z.ZodTypeAny, {
17
+ updatedAt: string;
18
+ version: number;
19
+ widgets: {
20
+ uid: string;
21
+ width: 8 | 6 | 4 | 12;
22
+ }[];
23
+ }, {
24
+ updatedAt: string;
25
+ version: number;
26
+ widgets: {
27
+ uid: string;
28
+ width: 8 | 6 | 4 | 12;
29
+ }[];
30
+ }>;
31
+ export type HomepageLayout = z.infer<typeof HomepageLayoutSchema>;
32
+ export declare const HomepageLayoutWriteSchema: z.ZodObject<{
33
+ version: z.ZodOptional<z.ZodNumber>;
34
+ widgets: z.ZodArray<z.ZodObject<{
35
+ uid: z.ZodString;
36
+ width: z.ZodUnion<[z.ZodLiteral<4>, z.ZodLiteral<6>, z.ZodLiteral<8>, z.ZodLiteral<12>]>;
37
+ }, "strict", z.ZodTypeAny, {
38
+ uid: string;
39
+ width: 8 | 6 | 4 | 12;
40
+ }, {
41
+ uid: string;
42
+ width: 8 | 6 | 4 | 12;
43
+ }>, "many">;
44
+ updatedAt: z.ZodOptional<z.ZodString>;
45
+ }, "strict", z.ZodTypeAny, {
46
+ widgets: {
47
+ uid: string;
48
+ width: 8 | 6 | 4 | 12;
49
+ }[];
50
+ updatedAt?: string | undefined;
51
+ version?: number | undefined;
52
+ }, {
53
+ widgets: {
54
+ uid: string;
55
+ width: 8 | 6 | 4 | 12;
56
+ }[];
57
+ updatedAt?: string | undefined;
58
+ version?: number | undefined;
59
+ }>;
60
+ export type HomepageLayoutWrite = z.infer<typeof HomepageLayoutWriteSchema>;
61
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../server/src/controllers/validation/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,WAAW,mFAAqE,CAAC;AAS9F,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMtB,CAAC;AAEZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM3B,CAAC;AAEZ,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC"}
@@ -202,6 +202,22 @@ declare let admin: {
202
202
  webhooks: number;
203
203
  apiTokens: number;
204
204
  }>;
205
+ getHomepageLayout: (userId: number) => Promise<{
206
+ updatedAt: string;
207
+ version: number;
208
+ widgets: {
209
+ uid: string;
210
+ width: 8 | 6 | 4 | 12;
211
+ }[];
212
+ } | null>;
213
+ updateHomepageLayout: (userId: number, input: unknown) => Promise<{
214
+ updatedAt: string;
215
+ version: number;
216
+ widgets: {
217
+ uid: string;
218
+ width: 8 | 6 | 4 | 12;
219
+ }[];
220
+ }>;
205
221
  };
206
222
  };
207
223
  controllers: {
@@ -330,6 +346,26 @@ declare let admin: {
330
346
  apiTokens: number;
331
347
  };
332
348
  }>;
349
+ getHomepageLayout(ctx: import("koa").Context): Promise<{
350
+ data: {
351
+ updatedAt: string;
352
+ version: number;
353
+ widgets: {
354
+ uid: string;
355
+ width: 8 | 6 | 4 | 12;
356
+ }[];
357
+ } | null;
358
+ }>;
359
+ updateHomepageLayout(ctx: import("koa").Context): Promise<{
360
+ data: {
361
+ updatedAt: string;
362
+ version: number;
363
+ widgets: {
364
+ uid: string;
365
+ width: 8 | 6 | 4 | 12;
366
+ }[];
367
+ };
368
+ }>;
333
369
  };
334
370
  };
335
371
  contentTypes: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";AAeA,QAAA,IAAI,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWR,CAAC;AAUF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";AAeA,QAAA,IAAI,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWR,CAAC;AAUF,eAAe,KAAK,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/homepage.ts"],"names":[],"mappings":";;;;;;;;AAAA,wBASE"}
1
+ {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/homepage.ts"],"names":[],"mappings":";;;;;;;;AAAA,wBAqBE"}
@@ -1,4 +1,5 @@
1
1
  import { Core } from '@strapi/types';
2
+ import { HomepageLayout } from '../controllers/validation/schema';
2
3
  export declare const homepageService: ({ strapi }: {
3
4
  strapi: Core.Strapi;
4
5
  }) => {
@@ -11,5 +12,7 @@ export declare const homepageService: ({ strapi }: {
11
12
  webhooks: number;
12
13
  apiTokens: number;
13
14
  }>;
15
+ getHomepageLayout: (userId: number) => Promise<HomepageLayout | null>;
16
+ updateHomepageLayout: (userId: number, input: unknown) => Promise<HomepageLayout>;
14
17
  };
15
18
  //# sourceMappingURL=homepage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../../server/src/services/homepage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAMrC,eAAO,MAAM,eAAe,eAAgB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;;;;;;;;;;CA+BlE,CAAC"}
1
+ {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../../server/src/services/homepage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,OAAO,EACL,cAAc,EAIf,MAAM,kCAAkC,CAAC;AAQ1C,eAAO,MAAM,eAAe,eAAgB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;;;;;;;;;;gCA6BxB,MAAM,KAAG,QAAQ,cAAc,GAAG,IAAI,CAAC;mCAWpC,MAAM,SAAS,OAAO,KAAG,QAAQ,cAAc,CAAC;CAmC7F,CAAC"}
@@ -124,6 +124,22 @@ declare const _default: {
124
124
  webhooks: number;
125
125
  apiTokens: number;
126
126
  }>;
127
+ getHomepageLayout: (userId: number) => Promise<{
128
+ updatedAt: string;
129
+ version: number;
130
+ widgets: {
131
+ uid: string;
132
+ width: 8 | 6 | 4 | 12;
133
+ }[];
134
+ } | null>;
135
+ updateHomepageLayout: (userId: number, input: unknown) => Promise<{
136
+ updatedAt: string;
137
+ version: number;
138
+ widgets: {
139
+ uid: string;
140
+ width: 8 | 6 | 4 | 12;
141
+ }[];
142
+ }>;
127
143
  };
128
144
  };
129
145
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/services/index.ts"],"names":[],"mappings":";AAOA,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,eAAe,MAAM,oBAAoB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAItD,wBAiBE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/services/index.ts"],"names":[],"mappings":";AAOA,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,eAAe,MAAM,oBAAoB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAItD,wBAiBE"}
@@ -53,3 +53,30 @@ export declare namespace GetCountDocuments {
53
53
  error?: errors.ApplicationError;
54
54
  }
55
55
  }
56
+ export declare namespace Homepage {
57
+ type WidgetUID = string;
58
+ type Width = 4 | 6 | 8 | 12;
59
+ interface Layout {
60
+ version: number;
61
+ order: WidgetUID[];
62
+ widths: Record<WidgetUID, Width>;
63
+ updatedAt: string;
64
+ }
65
+ interface LayoutWrite {
66
+ order: WidgetUID[];
67
+ widths: Record<WidgetUID, Width>;
68
+ }
69
+ }
70
+ export declare namespace GetHomepageLayout {
71
+ interface Response {
72
+ data: Homepage.Layout;
73
+ }
74
+ }
75
+ export declare namespace UpdateHomepageLayout {
76
+ interface Request {
77
+ body: Homepage.LayoutWrite;
78
+ }
79
+ interface Response {
80
+ data: Homepage.Layout;
81
+ }
82
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../shared/contracts/homepage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAGjD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC;IAC7B,cAAc,EAAE,GAAG,CAAC,WAAW,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,CAAC,OAAO,WAAW,kBAAkB,CAAC;IAC1C,UAAiB,OAAO;QACtB,IAAI,EAAE,EAAE,CAAC;QACT,KAAK,EAAE;YACL,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;SAC9B,CAAC;KACH;IAED,UAAiB,QAAQ;QACvB,IAAI,EAAE,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC;KACjC;CACF;AAED,MAAM,CAAC,OAAO,WAAW,gBAAgB,CAAC;IACxC,UAAiB,OAAO;QACtB,IAAI,EAAE,EAAE,CAAC;KACV;IAED,UAAiB,QAAQ;QACvB,IAAI,EAAE;YACJ,MAAM,EAAE,MAAM,CAAC;YACf,YAAY,EAAE,MAAM,CAAC;YACrB,UAAU,EAAE,MAAM,CAAC;YACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;YACvB,MAAM,EAAE,MAAM,CAAC;YACf,QAAQ,EAAE,MAAM,CAAC;YACjB,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC;KACjC;CACF;AAED,MAAM,CAAC,OAAO,WAAW,iBAAiB,CAAC;IACzC,UAAiB,OAAO;QACtB,IAAI,EAAE,EAAE,CAAC;KACV;IAED,UAAiB,QAAQ;QACvB,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM,CAAC;YACd,SAAS,EAAE,MAAM,CAAC;YAClB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC;KACjC;CACF"}
1
+ {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../shared/contracts/homepage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAGjD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC;IAC7B,cAAc,EAAE,GAAG,CAAC,WAAW,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,CAAC,OAAO,WAAW,kBAAkB,CAAC;IAC1C,UAAiB,OAAO;QACtB,IAAI,EAAE,EAAE,CAAC;QACT,KAAK,EAAE;YACL,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;SAC9B,CAAC;KACH;IAED,UAAiB,QAAQ;QACvB,IAAI,EAAE,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC;KACjC;CACF;AAED,MAAM,CAAC,OAAO,WAAW,gBAAgB,CAAC;IACxC,UAAiB,OAAO;QACtB,IAAI,EAAE,EAAE,CAAC;KACV;IAED,UAAiB,QAAQ;QACvB,IAAI,EAAE;YACJ,MAAM,EAAE,MAAM,CAAC;YACf,YAAY,EAAE,MAAM,CAAC;YACrB,UAAU,EAAE,MAAM,CAAC;YACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;YACvB,MAAM,EAAE,MAAM,CAAC;YACf,QAAQ,EAAE,MAAM,CAAC;YACjB,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC;KACjC;CACF;AAED,MAAM,CAAC,OAAO,WAAW,iBAAiB,CAAC;IACzC,UAAiB,OAAO;QACtB,IAAI,EAAE,EAAE,CAAC;KACV;IAED,UAAiB,QAAQ;QACvB,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM,CAAC;YACd,SAAS,EAAE,MAAM,CAAC;YAClB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC;KACjC;CACF;AAED,MAAM,CAAC,OAAO,WAAW,QAAQ,CAAC;IAChC,KAAY,SAAS,GAAG,MAAM,CAAC;IAC/B,KAAY,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IAEnC,UAAiB,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,SAAS,EAAE,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACjC,SAAS,EAAE,MAAM,CAAC;KACnB;IAED,UAAiB,WAAW;QAC1B,KAAK,EAAE,SAAS,EAAE,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;KAClC;CACF;AAED,MAAM,CAAC,OAAO,WAAW,iBAAiB,CAAC;IACzC,UAAiB,QAAQ;QACvB,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;KACvB;CACF;AAED,MAAM,CAAC,OAAO,WAAW,oBAAoB,CAAC;IAC5C,UAAiB,OAAO;QACtB,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC;KAC5B;IAED,UAAiB,QAAQ;QACvB,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;KACvB;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/admin",
3
- "version": "5.24.2",
3
+ "version": "5.25.0",
4
4
  "description": "Strapi Admin",
5
5
  "repository": {
6
6
  "type": "git",
@@ -84,12 +84,12 @@
84
84
  "@radix-ui/react-context": "1.0.1",
85
85
  "@radix-ui/react-toolbar": "1.0.4",
86
86
  "@reduxjs/toolkit": "1.9.7",
87
- "@strapi/design-system": "2.0.0-rc.29",
88
- "@strapi/icons": "2.0.0-rc.29",
89
- "@strapi/permissions": "5.24.2",
90
- "@strapi/types": "5.24.2",
91
- "@strapi/typescript-utils": "5.24.2",
92
- "@strapi/utils": "5.24.2",
87
+ "@strapi/design-system": "2.0.0-rc.30",
88
+ "@strapi/icons": "2.0.0-rc.30",
89
+ "@strapi/permissions": "5.25.0",
90
+ "@strapi/types": "5.25.0",
91
+ "@strapi/typescript-utils": "5.25.0",
92
+ "@strapi/utils": "5.25.0",
93
93
  "@testing-library/dom": "10.1.0",
94
94
  "@testing-library/react": "15.0.7",
95
95
  "@testing-library/user-event": "14.5.2",
@@ -143,8 +143,8 @@
143
143
  "zod": "3.25.67"
144
144
  },
145
145
  "devDependencies": {
146
- "@strapi/admin-test-utils": "5.24.2",
147
- "@strapi/data-transfer": "5.24.2",
146
+ "@strapi/admin-test-utils": "5.25.0",
147
+ "@strapi/data-transfer": "5.25.0",
148
148
  "@types/codemirror5": "npm:@types/codemirror@^5.60.15",
149
149
  "@types/fs-extra": "11.0.4",
150
150
  "@types/invariant": "2.2.36",