@strapi/content-manager 0.0.0-next.504076d2165a82f124620a3f1f3e3a6017e97f3f → 0.0.0-next.62c4d48d34e826c6c9f6fbe5cf6e858546239e40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{ComponentConfigurationPage-DfFSZQxe.mjs → ComponentConfigurationPage-CIjXcRAB.mjs} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-DfFSZQxe.mjs.map → ComponentConfigurationPage-CIjXcRAB.mjs.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-FqfsxQ1j.js → ComponentConfigurationPage-gsCd80MU.js} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-FqfsxQ1j.js.map → ComponentConfigurationPage-gsCd80MU.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-DdPNAbl3.mjs → EditConfigurationPage-BglmD_BF.mjs} +4 -4
- package/dist/_chunks/{EditConfigurationPage-DdPNAbl3.mjs.map → EditConfigurationPage-BglmD_BF.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-Cn0e8t3I.js → EditConfigurationPage-DHDQKBzw.js} +4 -4
- package/dist/_chunks/{EditConfigurationPage-Cn0e8t3I.js.map → EditConfigurationPage-DHDQKBzw.js.map} +1 -1
- package/dist/_chunks/{EditViewPage-DlxEHhUt.js → EditViewPage-C4iTxUPU.js} +3 -3
- package/dist/_chunks/EditViewPage-C4iTxUPU.js.map +1 -0
- package/dist/_chunks/{EditViewPage-B82x_x1b.mjs → EditViewPage-CiwVPMaK.mjs} +3 -3
- package/dist/_chunks/EditViewPage-CiwVPMaK.mjs.map +1 -0
- package/dist/_chunks/{Field-DufHXW17.mjs → Field-DIjL1b5d.mjs} +4 -4
- package/dist/_chunks/{Field-DufHXW17.mjs.map → Field-DIjL1b5d.mjs.map} +1 -1
- package/dist/_chunks/{Field-COL25JiC.js → Field-DhXEK8y1.js} +4 -4
- package/dist/_chunks/{Field-COL25JiC.js.map → Field-DhXEK8y1.js.map} +1 -1
- package/dist/_chunks/{Form-u_kAOhwB.mjs → Form-CmNesrvR.mjs} +2 -2
- package/dist/_chunks/{Form-u_kAOhwB.mjs.map → Form-CmNesrvR.mjs.map} +1 -1
- package/dist/_chunks/{Form-BssUwrTO.js → Form-CwmJ4sWe.js} +2 -2
- package/dist/_chunks/{Form-BssUwrTO.js.map → Form-CwmJ4sWe.js.map} +1 -1
- package/dist/_chunks/{History-C9t9UqpO.js → History-BLCCNgCt.js} +5 -5
- package/dist/_chunks/History-BLCCNgCt.js.map +1 -0
- package/dist/_chunks/{History-DRwA3oMM.mjs → History-D-99Wh30.mjs} +5 -5
- package/dist/_chunks/History-D-99Wh30.mjs.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-BXYPohh-.js → ListConfigurationPage-DxWpeZrO.js} +3 -3
- package/dist/_chunks/{ListConfigurationPage-BXYPohh-.js.map → ListConfigurationPage-DxWpeZrO.js.map} +1 -1
- package/dist/_chunks/{ListConfigurationPage-BxfQJzPk.mjs → ListConfigurationPage-JPWZz7Kg.mjs} +3 -3
- package/dist/_chunks/{ListConfigurationPage-BxfQJzPk.mjs.map → ListConfigurationPage-JPWZz7Kg.mjs.map} +1 -1
- package/dist/_chunks/{ListViewPage-D2VD8Szg.js → ListViewPage-CIQekSFz.js} +15 -4
- package/dist/_chunks/ListViewPage-CIQekSFz.js.map +1 -0
- package/dist/_chunks/{ListViewPage-CELx2ysp.mjs → ListViewPage-DSK3f0ST.mjs} +15 -4
- package/dist/_chunks/{ListViewPage-CELx2ysp.mjs.map → ListViewPage-DSK3f0ST.mjs.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-BV9IjJSM.js → NoContentTypePage-C5cxKvC2.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-BV9IjJSM.js.map → NoContentTypePage-C5cxKvC2.js.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-DtJ9jcfk.mjs → NoContentTypePage-D99LU1YP.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-DtJ9jcfk.mjs.map → NoContentTypePage-D99LU1YP.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-DWleVYK7.mjs → NoPermissionsPage-DBrBw-0y.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-DWleVYK7.mjs.map → NoPermissionsPage-DBrBw-0y.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-Dp8NpF9I.js → NoPermissionsPage-Oy4tmUrW.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-Dp8NpF9I.js.map → NoPermissionsPage-Oy4tmUrW.js.map} +1 -1
- package/dist/_chunks/{Relations-BTcf5xaw.mjs → Relations-BBmhcWFV.mjs} +41 -17
- package/dist/_chunks/Relations-BBmhcWFV.mjs.map +1 -0
- package/dist/_chunks/{Relations-DR7EUgyC.js → Relations-eG-9p_qS.js} +40 -16
- package/dist/_chunks/Relations-eG-9p_qS.js.map +1 -0
- package/dist/_chunks/{index-BdMf2lfT.js → index-BIWDoFLK.js} +45 -21
- package/dist/_chunks/index-BIWDoFLK.js.map +1 -0
- package/dist/_chunks/{index-wnqzm4Q8.mjs → index-BrUzbQ30.mjs} +44 -21
- package/dist/_chunks/index-BrUzbQ30.mjs.map +1 -0
- package/dist/_chunks/{layout-2CfjL0T9.mjs → layout-_5-cXs34.mjs} +3 -3
- package/dist/_chunks/{layout-2CfjL0T9.mjs.map → layout-_5-cXs34.mjs.map} +1 -1
- package/dist/_chunks/{layout-B2MyZU-_.js → layout-lMc9i1-Z.js} +3 -3
- package/dist/_chunks/{layout-B2MyZU-_.js.map → layout-lMc9i1-Z.js.map} +1 -1
- package/dist/_chunks/{objects-gigeqt7s.js → objects-BcXOv6_9.js} +2 -4
- package/dist/_chunks/{objects-gigeqt7s.js.map → objects-BcXOv6_9.js.map} +1 -1
- package/dist/_chunks/{objects-mKMAmfec.mjs → objects-D6yBsdmx.mjs} +2 -4
- package/dist/_chunks/{objects-mKMAmfec.mjs.map → objects-D6yBsdmx.mjs.map} +1 -1
- package/dist/_chunks/{relations-BH7JJGGe.js → relations-BRHithi8.js} +3 -7
- package/dist/_chunks/relations-BRHithi8.js.map +1 -0
- package/dist/_chunks/{relations-C0w0GcXi.mjs → relations-B_VLk-DD.mjs} +3 -7
- package/dist/_chunks/relations-B_VLk-DD.mjs.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/preview/constants.d.ts +1 -0
- package/dist/admin/src/preview/index.d.ts +4 -0
- package/dist/server/index.js +114 -28
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +114 -28
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/metadata.d.ts +15 -1
- package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +4 -4
- package/dist/server/src/preview/constants.d.ts +2 -0
- package/dist/server/src/preview/constants.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/index.d.ts +2 -0
- package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/preview.d.ts +9 -0
- package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
- package/dist/server/src/preview/index.d.ts +4 -0
- package/dist/server/src/preview/index.d.ts.map +1 -0
- package/dist/server/src/preview/routes/index.d.ts +8 -0
- package/dist/server/src/preview/routes/index.d.ts.map +1 -0
- package/dist/server/src/preview/routes/preview.d.ts +4 -0
- package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
- package/dist/server/src/preview/services/index.d.ts +4 -0
- package/dist/server/src/preview/services/index.d.ts.map +1 -0
- package/dist/server/src/preview/services/preview.d.ts +6 -0
- package/dist/server/src/preview/services/preview.d.ts.map +1 -0
- package/dist/server/src/preview/utils.d.ts +7 -0
- package/dist/server/src/preview/utils.d.ts.map +1 -0
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts +8 -8
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +4 -4
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
- package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/package.json +6 -6
- package/dist/_chunks/EditViewPage-B82x_x1b.mjs.map +0 -1
- package/dist/_chunks/EditViewPage-DlxEHhUt.js.map +0 -1
- package/dist/_chunks/History-C9t9UqpO.js.map +0 -1
- package/dist/_chunks/History-DRwA3oMM.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-D2VD8Szg.js.map +0 -1
- package/dist/_chunks/Relations-BTcf5xaw.mjs.map +0 -1
- package/dist/_chunks/Relations-DR7EUgyC.js.map +0 -1
- package/dist/_chunks/index-BdMf2lfT.js.map +0 -1
- package/dist/_chunks/index-wnqzm4Q8.mjs.map +0 -1
- package/dist/_chunks/relations-BH7JJGGe.js.map +0 -1
- package/dist/_chunks/relations-C0w0GcXi.mjs.map +0 -1
package/dist/server/index.mjs
CHANGED
@@ -95,7 +95,7 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
95
95
|
}
|
96
96
|
};
|
97
97
|
};
|
98
|
-
const controllers$
|
98
|
+
const controllers$2 = {
|
99
99
|
"history-version": createHistoryVersionController
|
100
100
|
/**
|
101
101
|
* Casting is needed because the types aren't aware that Strapi supports
|
@@ -594,17 +594,17 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
594
594
|
}
|
595
595
|
};
|
596
596
|
};
|
597
|
-
const services$
|
597
|
+
const services$2 = {
|
598
598
|
history: createHistoryService,
|
599
599
|
lifecycles: createLifecyclesService
|
600
600
|
};
|
601
|
-
const info = { pluginName: "content-manager", type: "admin" };
|
601
|
+
const info$1 = { pluginName: "content-manager", type: "admin" };
|
602
602
|
const historyVersionRouter = {
|
603
603
|
type: "admin",
|
604
604
|
routes: [
|
605
605
|
{
|
606
606
|
method: "GET",
|
607
|
-
info,
|
607
|
+
info: info$1,
|
608
608
|
path: "/history-versions",
|
609
609
|
handler: "history-version.findMany",
|
610
610
|
config: {
|
@@ -613,7 +613,7 @@ const historyVersionRouter = {
|
|
613
613
|
},
|
614
614
|
{
|
615
615
|
method: "PUT",
|
616
|
-
info,
|
616
|
+
info: info$1,
|
617
617
|
path: "/history-versions/:versionId/restore",
|
618
618
|
handler: "history-version.restoreVersion",
|
619
619
|
config: {
|
@@ -622,7 +622,7 @@ const historyVersionRouter = {
|
|
622
622
|
}
|
623
623
|
]
|
624
624
|
};
|
625
|
-
const routes$
|
625
|
+
const routes$2 = {
|
626
626
|
"history-version": historyVersionRouter
|
627
627
|
};
|
628
628
|
const historyVersion = {
|
@@ -669,7 +669,7 @@ const historyVersion = {
|
|
669
669
|
}
|
670
670
|
}
|
671
671
|
};
|
672
|
-
const getFeature = () => {
|
672
|
+
const getFeature$1 = () => {
|
673
673
|
if (strapi.ee.features.isEnabled("cms-content-history")) {
|
674
674
|
return {
|
675
675
|
register({ strapi: strapi2 }) {
|
@@ -681,9 +681,9 @@ const getFeature = () => {
|
|
681
681
|
destroy({ strapi: strapi2 }) {
|
682
682
|
getService(strapi2, "lifecycles").destroy();
|
683
683
|
},
|
684
|
-
controllers: controllers$
|
685
|
-
services: services$
|
686
|
-
routes: routes$
|
684
|
+
controllers: controllers$2,
|
685
|
+
services: services$2,
|
686
|
+
routes: routes$2
|
687
687
|
};
|
688
688
|
}
|
689
689
|
return {
|
@@ -692,7 +692,7 @@ const getFeature = () => {
|
|
692
692
|
}
|
693
693
|
};
|
694
694
|
};
|
695
|
-
const history = getFeature();
|
695
|
+
const history = getFeature$1();
|
696
696
|
const register = async ({ strapi: strapi2 }) => {
|
697
697
|
await history.register?.({ strapi: strapi2 });
|
698
698
|
};
|
@@ -700,6 +700,62 @@ const ALLOWED_WEBHOOK_EVENTS = {
|
|
700
700
|
ENTRY_PUBLISH: "entry.publish",
|
701
701
|
ENTRY_UNPUBLISH: "entry.unpublish"
|
702
702
|
};
|
703
|
+
const FEATURE_ID = "preview";
|
704
|
+
const info = { pluginName: "content-manager", type: "admin" };
|
705
|
+
const previewRouter = {
|
706
|
+
type: "admin",
|
707
|
+
routes: [
|
708
|
+
{
|
709
|
+
method: "GET",
|
710
|
+
info,
|
711
|
+
path: "/preview/url/:contentType",
|
712
|
+
handler: "preview.getPreviewURL",
|
713
|
+
config: {
|
714
|
+
policies: ["admin::isAuthenticatedAdmin"]
|
715
|
+
}
|
716
|
+
}
|
717
|
+
]
|
718
|
+
};
|
719
|
+
const routes$1 = {
|
720
|
+
preview: previewRouter
|
721
|
+
};
|
722
|
+
const createPreviewController = () => {
|
723
|
+
return {
|
724
|
+
async getPreviewURL(ctx) {
|
725
|
+
ctx.request;
|
726
|
+
return {
|
727
|
+
data: { url: "" }
|
728
|
+
};
|
729
|
+
}
|
730
|
+
};
|
731
|
+
};
|
732
|
+
const controllers$1 = {
|
733
|
+
preview: createPreviewController
|
734
|
+
/**
|
735
|
+
* Casting is needed because the types aren't aware that Strapi supports
|
736
|
+
* passing a controller factory as the value, instead of a controller object directly
|
737
|
+
*/
|
738
|
+
};
|
739
|
+
const createPreviewService = () => {
|
740
|
+
};
|
741
|
+
const services$1 = {
|
742
|
+
preview: createPreviewService
|
743
|
+
};
|
744
|
+
const getFeature = () => {
|
745
|
+
if (!strapi.features.future.isEnabled(FEATURE_ID)) {
|
746
|
+
return {};
|
747
|
+
}
|
748
|
+
return {
|
749
|
+
bootstrap() {
|
750
|
+
console.log("Bootstrapping preview server");
|
751
|
+
strapi.config.get("admin.preview");
|
752
|
+
},
|
753
|
+
routes: routes$1,
|
754
|
+
controllers: controllers$1,
|
755
|
+
services: services$1
|
756
|
+
};
|
757
|
+
};
|
758
|
+
const preview = getFeature();
|
703
759
|
const bootstrap = async () => {
|
704
760
|
Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
|
705
761
|
strapi.get("webhookStore").addAllowedEvent(key, value);
|
@@ -709,6 +765,7 @@ const bootstrap = async () => {
|
|
709
765
|
await getService$1("content-types").syncConfigurations();
|
710
766
|
await getService$1("permission").registerPermissions();
|
711
767
|
await history.bootstrap?.({ strapi });
|
768
|
+
await preview.bootstrap?.({ strapi });
|
712
769
|
};
|
713
770
|
const destroy = async ({ strapi: strapi2 }) => {
|
714
771
|
await history.destroy?.({ strapi: strapi2 });
|
@@ -1198,7 +1255,8 @@ const admin = {
|
|
1198
1255
|
};
|
1199
1256
|
const routes = {
|
1200
1257
|
admin,
|
1201
|
-
...history.routes ? history.routes : {}
|
1258
|
+
...history.routes ? history.routes : {},
|
1259
|
+
...preview.routes ? preview.routes : {}
|
1202
1260
|
};
|
1203
1261
|
const hasPermissionsSchema = yup$1.object({
|
1204
1262
|
actions: yup$1.array().of(yup$1.string()),
|
@@ -2338,15 +2396,27 @@ const sanitizeMainField = (model, mainField, userAbility) => {
|
|
2338
2396
|
}
|
2339
2397
|
return mainField;
|
2340
2398
|
};
|
2341
|
-
const addStatusToRelations = async (
|
2342
|
-
if (!contentTypes$1.hasDraftAndPublish(strapi.
|
2399
|
+
const addStatusToRelations = async (targetUid, relations2) => {
|
2400
|
+
if (!contentTypes$1.hasDraftAndPublish(strapi.getModel(targetUid))) {
|
2343
2401
|
return relations2;
|
2344
2402
|
}
|
2345
2403
|
const documentMetadata2 = getService$1("document-metadata");
|
2346
|
-
|
2404
|
+
if (!relations2.length) {
|
2405
|
+
return relations2;
|
2406
|
+
}
|
2407
|
+
const firstRelation = relations2[0];
|
2408
|
+
const filters = {
|
2409
|
+
documentId: { $in: relations2.map((r) => r.documentId) },
|
2410
|
+
// NOTE: find the "opposite" status
|
2411
|
+
publishedAt: firstRelation.publishedAt !== null ? { $null: true } : { $notNull: true }
|
2412
|
+
};
|
2413
|
+
const availableStatus = await strapi.query(targetUid).findMany({
|
2414
|
+
select: ["id", "documentId", "locale", "updatedAt", "createdAt", "publishedAt"],
|
2415
|
+
filters
|
2416
|
+
});
|
2347
2417
|
return relations2.map((relation) => {
|
2348
|
-
const availableStatuses =
|
2349
|
-
(availableDocument) => availableDocument.documentId === relation.documentId
|
2418
|
+
const availableStatuses = availableStatus.filter(
|
2419
|
+
(availableDocument) => availableDocument.documentId === relation.documentId && (relation.locale ? availableDocument.locale === relation.locale : true)
|
2350
2420
|
);
|
2351
2421
|
return {
|
2352
2422
|
...relation,
|
@@ -2575,21 +2645,33 @@ const relations = {
|
|
2575
2645
|
attribute,
|
2576
2646
|
targetField,
|
2577
2647
|
fieldsToSelect,
|
2578
|
-
|
2579
|
-
|
2580
|
-
}
|
2581
|
-
target: {
|
2582
|
-
schema: { uid: targetUid }
|
2583
|
-
}
|
2648
|
+
status,
|
2649
|
+
source: { schema: sourceSchema },
|
2650
|
+
target: { schema: targetSchema }
|
2584
2651
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2652
|
+
const { uid: sourceUid } = sourceSchema;
|
2653
|
+
const { uid: targetUid } = targetSchema;
|
2585
2654
|
const permissionQuery = await getService$1("permission-checker").create({ userAbility, model: targetUid }).sanitizedQuery.read({ fields: fieldsToSelect });
|
2586
2655
|
const dbQuery = strapi.db.query(sourceUid);
|
2587
2656
|
const loadRelations = relations$1.isAnyToMany(attribute) ? (...args) => dbQuery.loadPages(...args) : (...args) => dbQuery.load(...args).then((res2) => ({ results: res2 ? [res2] : [] }));
|
2657
|
+
const filters = {};
|
2658
|
+
if (sourceSchema?.options?.draftAndPublish) {
|
2659
|
+
if (targetSchema?.options?.draftAndPublish) {
|
2660
|
+
if (status === "published") {
|
2661
|
+
filters.publishedAt = { $notNull: true };
|
2662
|
+
} else {
|
2663
|
+
filters.publishedAt = { $null: true };
|
2664
|
+
}
|
2665
|
+
}
|
2666
|
+
} else if (targetSchema?.options?.draftAndPublish) {
|
2667
|
+
filters.publishedAt = { $null: true };
|
2668
|
+
}
|
2588
2669
|
const res = await loadRelations({ id: entryId }, targetField, {
|
2589
|
-
select: ["id", "documentId", "locale", "publishedAt"],
|
2670
|
+
select: ["id", "documentId", "locale", "publishedAt", "updatedAt"],
|
2590
2671
|
ordering: "desc",
|
2591
2672
|
page: ctx.request.query.page,
|
2592
|
-
pageSize: ctx.request.query.pageSize
|
2673
|
+
pageSize: ctx.request.query.pageSize,
|
2674
|
+
filters
|
2593
2675
|
});
|
2594
2676
|
const loadedIds = res.results.map((item) => item.id);
|
2595
2677
|
addFiltersClause(permissionQuery, { id: { $in: loadedIds } });
|
@@ -2881,7 +2963,8 @@ const controllers = {
|
|
2881
2963
|
relations,
|
2882
2964
|
"single-types": singleTypes,
|
2883
2965
|
uid: uid$1,
|
2884
|
-
...history.controllers ? history.controllers : {}
|
2966
|
+
...history.controllers ? history.controllers : {},
|
2967
|
+
...preview.controllers ? preview.controllers : {}
|
2885
2968
|
};
|
2886
2969
|
const keys = {
|
2887
2970
|
CONFIGURATION: "configuration"
|
@@ -4053,7 +4136,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4053
4136
|
*/
|
4054
4137
|
async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
|
4055
4138
|
const versionsByLocale = groupBy("locale", allVersions);
|
4056
|
-
|
4139
|
+
if (version.locale) {
|
4140
|
+
delete versionsByLocale[version.locale];
|
4141
|
+
}
|
4057
4142
|
const model = strapi2.getModel(uid2);
|
4058
4143
|
const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
|
4059
4144
|
const traversalFunction = async (localeVersion) => traverseEntity(
|
@@ -4409,7 +4494,8 @@ const services = {
|
|
4409
4494
|
permission,
|
4410
4495
|
"populate-builder": populateBuilder$1,
|
4411
4496
|
uid,
|
4412
|
-
...history.services ? history.services : {}
|
4497
|
+
...history.services ? history.services : {},
|
4498
|
+
...preview.services ? preview.services : {}
|
4413
4499
|
};
|
4414
4500
|
const index = () => {
|
4415
4501
|
return {
|