Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const mapContentBlocksByCmsBlockUID = function (cmsBlocks) {
- const mapByCmsBlockUID = {};
- // console.log();
- cmsBlocks.forEach((cmsItem, index) => {
- // Assigning owner
- // console.log("SONO NELL'iterazione: ", cmsItem);
- cmsItem["cmsCustomBlockPosition"] = index;
- if (!cmsItem.cmsBlockOwner) {
- cmsItem.cmsBlockOwner = getOwnerTypeByReferenceType(
- cmsItem.referenceType
- );
- }
- if (cmsItem.cmsBlockUID) {
- mapByCmsBlockUID[cmsItem.cmsBlockUID] = cmsItem;
- } else {
- cmsItem.cmsBlockUID = generateRandomCmsBlockUID();
- mapByCmsBlockUID[cmsItem.cmsBlockUID] = cmsItem;
- }
- Object.keys(cmsItem).forEach((cmsItemKey) => {
- if (Array.isArray(cmsItem[cmsItemKey])) {
- cmsItem[cmsItemKey] = mapContentBlocksByCmsBlockUID(
- cmsItem[cmsItemKey]
- );
- }
- });
- });
- return mapByCmsBlockUID;
- };
- const mergeContents = function (masterObj, slaveObj) {
- const mergeFirstLevel = (masterObj, slaveObj) => {
- if (!masterObj || !slaveObj) {
- return null;
- }
- const masterContent = mapContentBlocksByCmsBlockUID(
- masterObj["content"]["blocks"] || masterObj["content"]["pillars"]
- );
- const slaveContent = mapContentBlocksByCmsBlockUID(
- slaveObj["content"]["blocks"] || slaveObj["content"]["pillars"]
- );
- mergeDeepLevels(masterContent, slaveContent);
- // 'title', 'internalTitle', 'sitemapId', 'parentId' ""
- const fieldToOverrideFromHq = [];
- fieldToOverrideFromHq.forEach((key) => (slaveObj[key] = masterObj[key]));
- return slaveObj;
- };
- const mergeDeepLevels = (hqContent, dealerContent) => {
- if (!hqContent || !dealerContent) {
- return null;
- }
- const toCheckForOverride = Object.keys(hqContent);
- for (const key of toCheckForOverride) {
- // console.log('Checking key', key);
- if (isObject(hqContent[key])) {
- // console.log('HQ is object', key);
- /// hqContent[key] is an object
- if (isEmptyOrNotObject(dealerContent[key])) {
- // console.log('HQ is object and dealer is not or is empty', key);
- // Both are objects and dealer is empty
- // console.log('Overwrite 1', key);
- dealerContent[key] = { ...hqContent[key] };
- } else {
- // console.log('HQ is object and dealer is object and not empty', key);
- // Either dealer is not an object or is an empty object
- // dealerContect did not previusly containt key
- if (
- hqContent[key].isLocked === undefined &&
- hqContent.isLocked &&
- key !== "items"
- ) {
- // console.log('Overwrite 2', key);
- dealerContent[key] = { ...hqContent[key] };
- } else {
- mergeDeepLevels(hqContent[key], dealerContent[key]);
- }
- }
- } else {
- /// Is primitive
- // console.log('HQ is primitive', key);
- if (hqContent.isLocked === undefined) {
- // console.log('HqContent locked is undefined');
- dealerContent = {};
- dealerContent[key] = hqContent[key];
- }
- if (hqContent.isLocked) {
- // console.log('HQ is primitive and locked', key);
- dealerContent[key] = hqContent[key];
- }
- dealerContent.isPinned = hqContent.isPinned;
- }
- }
- if (dealerContent.items) {
- const keys = Object.keys(dealerContent.items);
- const itemsAsArray = Object.entries(dealerContent.items).map(
- ([k, v]) => v
- );
- dealerContent.items = itemsAsArray;
- }
- if (dealerContent.menuItems) {
- const keys = Object.keys(dealerContent.menuItems);
- const itemsAsArray = Object.entries(dealerContent.menuItems).map(
- ([k, v]) => v
- );
- dealerContent.menuItems = itemsAsArray;
- }
- };
- // console.log('Prima del merge: ', slaveObj);
- return mergeFirstLevel(masterObj, slaveObj);
- };
- const master_items = [
- {
- type: "BoxGridRow",
- cmsBlockUID: "09ea55b0-14cf-4e02-bf68-33750991f571",
- cmsBlockOwner: "hq",
- isLocked: false,
- isPinned: false,
- items: [
- {
- cmsBlockUID: "5846ac58-9c8f-4094-8ff8-5a80295dbda2",
- cmsBlockOwner: "hq",
- isLocked: true,
- isPinned: false,
- preTitle: "test-new-validate",
- title: "test-new-validate",
- subTitle: "test-new-validate",
- description: "test-new-validate",
- width: "33%",
- media: {
- landscapeBig: {
- id: "603794de41c6d945e01235d3",
- },
- portraitMedium: {
- id: "603794de41c6d945e01235d3",
- },
- },
- thronPlaylistId: "603794de41c6d945e01235d3",
- cta: null,
- ctaType: "standard",
- filterValues: {
- filter1: "",
- filter2: "",
- filter3: "",
- },
- cmsCustomBlockPosition: 0,
- },
- {
- cmsBlockUID: "8156c2e3-8657-42e3-abb7-e98c8cf38280",
- cmsBlockOwner: "hq",
- isLocked: true,
- isPinned: false,
- preTitle: "test-new-validate",
- title: "test-new-validate",
- subTitle: "test-new-validate",
- description: "test-new-validate",
- width: "33%",
- media: {
- landscapeBig: {
- id: "603794de41c6d945e01235d3",
- },
- portraitMedium: {
- id: "603794de41c6d945e01235d3",
- },
- },
- thronPlaylistId: "603794de41c6d945e01235d3",
- cta: null,
- ctaType: "standard",
- filterValues: {
- filter1: "",
- filter2: "",
- filter3: "",
- },
- cmsCustomBlockPosition: 1,
- },
- ],
- cmsCustomBlockPosition: 0,
- },
- ];
- const slave_items = [
- {
- type: "BoxGridRow",
- cmsBlockUID: "09ea55b0-14cf-4e02-bf68-33750991f571",
- cmsBlockOwner: "hq",
- isLocked: false,
- isPinned: false,
- items: [
- {
- cmsBlockUID: "5846ac58-9c8f-4094-8ff8-5a80295dbda2",
- cmsBlockOwner: "hq",
- isLocked: true,
- isPinned: false,
- preTitle: "test-new-validate-NOTHERE",
- title: "test-new-validate",
- subTitle: "test-new-validate",
- description: "test-new-validate",
- width: "33%",
- media: {
- landscapeBig: {
- id: "603794de41c6d945e01235d3",
- },
- portraitMedium: {
- id: "603794de41c6d945e01235d3",
- },
- },
- thronPlaylistId: "603794de41c6d945e01235d3",
- cta: null,
- ctaType: "standard",
- filterValues: {
- filter1: "",
- filter2: "",
- filter3: "",
- },
- cmsCustomBlockPosition: 0,
- },
- {
- cmsBlockUID: "8156c2e3-8657-42e3-abb7-e98c8cf38280",
- cmsBlockOwner: "hq",
- isLocked: false,
- isPinned: false,
- preTitle: "test-new-validate",
- title: "test-new-validate-YESHERE",
- subTitle: "test-new-validate",
- description: "test-new-validate",
- width: "33%",
- media: {
- landscapeBig: {
- id: "603794de41c6d945e01235d3",
- },
- portraitMedium: {
- id: "603794de41c6d945e01235d3",
- },
- },
- thronPlaylistId: "603794de41c6d945e01235d3",
- cta: null,
- ctaType: "standard",
- filterValues: {
- filter1: "",
- filter2: "",
- filter3: "",
- },
- cmsCustomBlockPosition: 1,
- },
- ],
- cmsCustomBlockPosition: 0,
- },
- ];
- const master = {
- _id: "605dbb1614600dfa17334244",
- reference: null,
- isHiddenFromSitemap: false,
- ignoreInheritance: false,
- isContentLocked: false,
- isCreatedByHq: true,
- sitemapId: "home-demo-SR",
- sitemapPriority: "1",
- parentId: null,
- title: "Home Demo SR",
- internalTitle: "Home Demo SR",
- locale: "en-GB",
- metadata: [
- {
- name: "robots",
- content: "index-follow",
- },
- {
- name: "description",
- content: "Home Demo SR",
- },
- {
- name: "keywords",
- content: "Home Demo SR",
- },
- {
- property: "og:title",
- content: "Home Demo SR",
- },
- {
- property: "og:type",
- content: "website",
- },
- {
- property: "og:description",
- content: "Home Demo SR",
- },
- {
- property: "og:url",
- content: "Home Demo SR",
- },
- {
- property: "og:image",
- content: "",
- },
- {
- property: "twitter:title",
- content: "Home Demo SR",
- },
- {
- property: "twitter:description",
- content: "Home Demo SR",
- },
- {
- property: "twitter:image",
- content: "",
- },
- ],
- content: {
- blocks: master_items,
- },
- slug: "Home-Demo-SR",
- status: "draft",
- publishedAt: null,
- original: "605c9631c0b66bd61c686f25",
- createdAt: "2021-03-26T10:44:38.252Z",
- updatedAt: "2021-03-26T10:44:39.421Z",
- revision: 4,
- active: true,
- ownedByDealer: "",
- referenceType: "group",
- disableEditing: false,
- selected: true,
- createdBy: "6022f67fae4c426d52e1a30b",
- expireAt: null,
- };
- const slave = {
- _id: "605dbb1614600dfa17334244",
- reference: null,
- isHiddenFromSitemap: false,
- ignoreInheritance: false,
- isContentLocked: false,
- isCreatedByHq: true,
- sitemapId: "home-demo-SR",
- sitemapPriority: "1",
- parentId: null,
- title: "Home Demo SR",
- internalTitle: "Home Demo SR",
- locale: "en-GB",
- metadata: [
- {
- name: "robots",
- content: "index-follow",
- },
- {
- name: "description",
- content: "Home Demo SR",
- },
- {
- name: "keywords",
- content: "Home Demo SR",
- },
- {
- property: "og:title",
- content: "Home Demo SR",
- },
- {
- property: "og:type",
- content: "website",
- },
- {
- property: "og:description",
- content: "Home Demo SR",
- },
- {
- property: "og:url",
- content: "Home Demo SR",
- },
- {
- property: "og:image",
- content: "",
- },
- {
- property: "twitter:title",
- content: "Home Demo SR",
- },
- {
- property: "twitter:description",
- content: "Home Demo SR",
- },
- {
- property: "twitter:image",
- content: "",
- },
- ],
- content: {
- blocks: slave_items,
- },
- slug: "Home-Demo-SR",
- status: "draft",
- publishedAt: null,
- original: "605c9631c0b66bd61c686f25",
- createdAt: "2021-03-26T10:44:38.252Z",
- updatedAt: "2021-03-26T10:44:39.421Z",
- revision: 4,
- active: true,
- ownedByDealer: "",
- referenceType: "group",
- disableEditing: false,
- selected: true,
- createdBy: "6022f67fae4c426d52e1a30b",
- expireAt: null,
- };
- const isObject = (item) => item && typeof item === "object";
- const isEmptyOrNotObject = (obj) =>
- !isObject(obj) || Object.keys(obj).length === 0;
- const resMerged = mergeContents(master, slave);
- console.log(JSON.stringify(resMerged, null, 2));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement