@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
@@ -0,0 +1 @@
|
|
1
|
+
export declare const FEATURE_ID = "preview";
|
package/dist/server/index.js
CHANGED
@@ -121,7 +121,7 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
121
121
|
}
|
122
122
|
};
|
123
123
|
};
|
124
|
-
const controllers$
|
124
|
+
const controllers$2 = {
|
125
125
|
"history-version": createHistoryVersionController
|
126
126
|
/**
|
127
127
|
* Casting is needed because the types aren't aware that Strapi supports
|
@@ -620,17 +620,17 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
620
620
|
}
|
621
621
|
};
|
622
622
|
};
|
623
|
-
const services$
|
623
|
+
const services$2 = {
|
624
624
|
history: createHistoryService,
|
625
625
|
lifecycles: createLifecyclesService
|
626
626
|
};
|
627
|
-
const info = { pluginName: "content-manager", type: "admin" };
|
627
|
+
const info$1 = { pluginName: "content-manager", type: "admin" };
|
628
628
|
const historyVersionRouter = {
|
629
629
|
type: "admin",
|
630
630
|
routes: [
|
631
631
|
{
|
632
632
|
method: "GET",
|
633
|
-
info,
|
633
|
+
info: info$1,
|
634
634
|
path: "/history-versions",
|
635
635
|
handler: "history-version.findMany",
|
636
636
|
config: {
|
@@ -639,7 +639,7 @@ const historyVersionRouter = {
|
|
639
639
|
},
|
640
640
|
{
|
641
641
|
method: "PUT",
|
642
|
-
info,
|
642
|
+
info: info$1,
|
643
643
|
path: "/history-versions/:versionId/restore",
|
644
644
|
handler: "history-version.restoreVersion",
|
645
645
|
config: {
|
@@ -648,7 +648,7 @@ const historyVersionRouter = {
|
|
648
648
|
}
|
649
649
|
]
|
650
650
|
};
|
651
|
-
const routes$
|
651
|
+
const routes$2 = {
|
652
652
|
"history-version": historyVersionRouter
|
653
653
|
};
|
654
654
|
const historyVersion = {
|
@@ -695,7 +695,7 @@ const historyVersion = {
|
|
695
695
|
}
|
696
696
|
}
|
697
697
|
};
|
698
|
-
const getFeature = () => {
|
698
|
+
const getFeature$1 = () => {
|
699
699
|
if (strapi.ee.features.isEnabled("cms-content-history")) {
|
700
700
|
return {
|
701
701
|
register({ strapi: strapi2 }) {
|
@@ -707,9 +707,9 @@ const getFeature = () => {
|
|
707
707
|
destroy({ strapi: strapi2 }) {
|
708
708
|
getService(strapi2, "lifecycles").destroy();
|
709
709
|
},
|
710
|
-
controllers: controllers$
|
711
|
-
services: services$
|
712
|
-
routes: routes$
|
710
|
+
controllers: controllers$2,
|
711
|
+
services: services$2,
|
712
|
+
routes: routes$2
|
713
713
|
};
|
714
714
|
}
|
715
715
|
return {
|
@@ -718,7 +718,7 @@ const getFeature = () => {
|
|
718
718
|
}
|
719
719
|
};
|
720
720
|
};
|
721
|
-
const history = getFeature();
|
721
|
+
const history = getFeature$1();
|
722
722
|
const register = async ({ strapi: strapi2 }) => {
|
723
723
|
await history.register?.({ strapi: strapi2 });
|
724
724
|
};
|
@@ -726,6 +726,62 @@ const ALLOWED_WEBHOOK_EVENTS = {
|
|
726
726
|
ENTRY_PUBLISH: "entry.publish",
|
727
727
|
ENTRY_UNPUBLISH: "entry.unpublish"
|
728
728
|
};
|
729
|
+
const FEATURE_ID = "preview";
|
730
|
+
const info = { pluginName: "content-manager", type: "admin" };
|
731
|
+
const previewRouter = {
|
732
|
+
type: "admin",
|
733
|
+
routes: [
|
734
|
+
{
|
735
|
+
method: "GET",
|
736
|
+
info,
|
737
|
+
path: "/preview/url/:contentType",
|
738
|
+
handler: "preview.getPreviewURL",
|
739
|
+
config: {
|
740
|
+
policies: ["admin::isAuthenticatedAdmin"]
|
741
|
+
}
|
742
|
+
}
|
743
|
+
]
|
744
|
+
};
|
745
|
+
const routes$1 = {
|
746
|
+
preview: previewRouter
|
747
|
+
};
|
748
|
+
const createPreviewController = () => {
|
749
|
+
return {
|
750
|
+
async getPreviewURL(ctx) {
|
751
|
+
ctx.request;
|
752
|
+
return {
|
753
|
+
data: { url: "" }
|
754
|
+
};
|
755
|
+
}
|
756
|
+
};
|
757
|
+
};
|
758
|
+
const controllers$1 = {
|
759
|
+
preview: createPreviewController
|
760
|
+
/**
|
761
|
+
* Casting is needed because the types aren't aware that Strapi supports
|
762
|
+
* passing a controller factory as the value, instead of a controller object directly
|
763
|
+
*/
|
764
|
+
};
|
765
|
+
const createPreviewService = () => {
|
766
|
+
};
|
767
|
+
const services$1 = {
|
768
|
+
preview: createPreviewService
|
769
|
+
};
|
770
|
+
const getFeature = () => {
|
771
|
+
if (!strapi.features.future.isEnabled(FEATURE_ID)) {
|
772
|
+
return {};
|
773
|
+
}
|
774
|
+
return {
|
775
|
+
bootstrap() {
|
776
|
+
console.log("Bootstrapping preview server");
|
777
|
+
strapi.config.get("admin.preview");
|
778
|
+
},
|
779
|
+
routes: routes$1,
|
780
|
+
controllers: controllers$1,
|
781
|
+
services: services$1
|
782
|
+
};
|
783
|
+
};
|
784
|
+
const preview = getFeature();
|
729
785
|
const bootstrap = async () => {
|
730
786
|
Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
|
731
787
|
strapi.get("webhookStore").addAllowedEvent(key, value);
|
@@ -735,6 +791,7 @@ const bootstrap = async () => {
|
|
735
791
|
await getService$1("content-types").syncConfigurations();
|
736
792
|
await getService$1("permission").registerPermissions();
|
737
793
|
await history.bootstrap?.({ strapi });
|
794
|
+
await preview.bootstrap?.({ strapi });
|
738
795
|
};
|
739
796
|
const destroy = async ({ strapi: strapi2 }) => {
|
740
797
|
await history.destroy?.({ strapi: strapi2 });
|
@@ -1224,7 +1281,8 @@ const admin = {
|
|
1224
1281
|
};
|
1225
1282
|
const routes = {
|
1226
1283
|
admin,
|
1227
|
-
...history.routes ? history.routes : {}
|
1284
|
+
...history.routes ? history.routes : {},
|
1285
|
+
...preview.routes ? preview.routes : {}
|
1228
1286
|
};
|
1229
1287
|
const hasPermissionsSchema = strapiUtils.yup.object({
|
1230
1288
|
actions: strapiUtils.yup.array().of(strapiUtils.yup.string()),
|
@@ -2364,15 +2422,27 @@ const sanitizeMainField = (model, mainField, userAbility) => {
|
|
2364
2422
|
}
|
2365
2423
|
return mainField;
|
2366
2424
|
};
|
2367
|
-
const addStatusToRelations = async (
|
2368
|
-
if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.
|
2425
|
+
const addStatusToRelations = async (targetUid, relations2) => {
|
2426
|
+
if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.getModel(targetUid))) {
|
2369
2427
|
return relations2;
|
2370
2428
|
}
|
2371
2429
|
const documentMetadata2 = getService$1("document-metadata");
|
2372
|
-
|
2430
|
+
if (!relations2.length) {
|
2431
|
+
return relations2;
|
2432
|
+
}
|
2433
|
+
const firstRelation = relations2[0];
|
2434
|
+
const filters = {
|
2435
|
+
documentId: { $in: relations2.map((r) => r.documentId) },
|
2436
|
+
// NOTE: find the "opposite" status
|
2437
|
+
publishedAt: firstRelation.publishedAt !== null ? { $null: true } : { $notNull: true }
|
2438
|
+
};
|
2439
|
+
const availableStatus = await strapi.query(targetUid).findMany({
|
2440
|
+
select: ["id", "documentId", "locale", "updatedAt", "createdAt", "publishedAt"],
|
2441
|
+
filters
|
2442
|
+
});
|
2373
2443
|
return relations2.map((relation) => {
|
2374
|
-
const availableStatuses =
|
2375
|
-
(availableDocument) => availableDocument.documentId === relation.documentId
|
2444
|
+
const availableStatuses = availableStatus.filter(
|
2445
|
+
(availableDocument) => availableDocument.documentId === relation.documentId && (relation.locale ? availableDocument.locale === relation.locale : true)
|
2376
2446
|
);
|
2377
2447
|
return {
|
2378
2448
|
...relation,
|
@@ -2601,21 +2671,33 @@ const relations = {
|
|
2601
2671
|
attribute,
|
2602
2672
|
targetField,
|
2603
2673
|
fieldsToSelect,
|
2604
|
-
|
2605
|
-
|
2606
|
-
}
|
2607
|
-
target: {
|
2608
|
-
schema: { uid: targetUid }
|
2609
|
-
}
|
2674
|
+
status,
|
2675
|
+
source: { schema: sourceSchema },
|
2676
|
+
target: { schema: targetSchema }
|
2610
2677
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2678
|
+
const { uid: sourceUid } = sourceSchema;
|
2679
|
+
const { uid: targetUid } = targetSchema;
|
2611
2680
|
const permissionQuery = await getService$1("permission-checker").create({ userAbility, model: targetUid }).sanitizedQuery.read({ fields: fieldsToSelect });
|
2612
2681
|
const dbQuery = strapi.db.query(sourceUid);
|
2613
2682
|
const loadRelations = strapiUtils.relations.isAnyToMany(attribute) ? (...args) => dbQuery.loadPages(...args) : (...args) => dbQuery.load(...args).then((res2) => ({ results: res2 ? [res2] : [] }));
|
2683
|
+
const filters = {};
|
2684
|
+
if (sourceSchema?.options?.draftAndPublish) {
|
2685
|
+
if (targetSchema?.options?.draftAndPublish) {
|
2686
|
+
if (status === "published") {
|
2687
|
+
filters.publishedAt = { $notNull: true };
|
2688
|
+
} else {
|
2689
|
+
filters.publishedAt = { $null: true };
|
2690
|
+
}
|
2691
|
+
}
|
2692
|
+
} else if (targetSchema?.options?.draftAndPublish) {
|
2693
|
+
filters.publishedAt = { $null: true };
|
2694
|
+
}
|
2614
2695
|
const res = await loadRelations({ id: entryId }, targetField, {
|
2615
|
-
select: ["id", "documentId", "locale", "publishedAt"],
|
2696
|
+
select: ["id", "documentId", "locale", "publishedAt", "updatedAt"],
|
2616
2697
|
ordering: "desc",
|
2617
2698
|
page: ctx.request.query.page,
|
2618
|
-
pageSize: ctx.request.query.pageSize
|
2699
|
+
pageSize: ctx.request.query.pageSize,
|
2700
|
+
filters
|
2619
2701
|
});
|
2620
2702
|
const loadedIds = res.results.map((item) => item.id);
|
2621
2703
|
addFiltersClause(permissionQuery, { id: { $in: loadedIds } });
|
@@ -2907,7 +2989,8 @@ const controllers = {
|
|
2907
2989
|
relations,
|
2908
2990
|
"single-types": singleTypes,
|
2909
2991
|
uid: uid$1,
|
2910
|
-
...history.controllers ? history.controllers : {}
|
2992
|
+
...history.controllers ? history.controllers : {},
|
2993
|
+
...preview.controllers ? preview.controllers : {}
|
2911
2994
|
};
|
2912
2995
|
const keys = {
|
2913
2996
|
CONFIGURATION: "configuration"
|
@@ -4079,7 +4162,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4079
4162
|
*/
|
4080
4163
|
async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
|
4081
4164
|
const versionsByLocale = fp.groupBy("locale", allVersions);
|
4082
|
-
|
4165
|
+
if (version.locale) {
|
4166
|
+
delete versionsByLocale[version.locale];
|
4167
|
+
}
|
4083
4168
|
const model = strapi2.getModel(uid2);
|
4084
4169
|
const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
|
4085
4170
|
const traversalFunction = async (localeVersion) => strapiUtils.traverseEntity(
|
@@ -4435,7 +4520,8 @@ const services = {
|
|
4435
4520
|
permission,
|
4436
4521
|
"populate-builder": populateBuilder$1,
|
4437
4522
|
uid,
|
4438
|
-
...history.services ? history.services : {}
|
4523
|
+
...history.services ? history.services : {},
|
4524
|
+
...preview.services ? preview.services : {}
|
4439
4525
|
};
|
4440
4526
|
const index = () => {
|
4441
4527
|
return {
|