Skip to content

Commit b76c5f0

Browse files
chore: region inside region processing
1 parent 05b50fb commit b76c5f0

File tree

2 files changed

+64
-34
lines changed

2 files changed

+64
-34
lines changed

src/migration/interfaces.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ export interface ExpSiteComponent {
158158
type: string;
159159
subtype?: string;
160160
language?: string;
161+
regions?: ExpSiteRegion[]; // Optional, as some components can contain regions (e.g., forceCommunity:section)
161162
}
162163

163164
export interface ExpSiteComponentAttributes {

src/migration/related/ExperienceSiteMigration.ts

Lines changed: 63 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ export class ExperienceSiteMigration extends BaseRelatedObjectMigration {
7979
Logger.logVerbose('The namespace for expsites processing is ' + this.namespace);
8080
for (const directory of directoryMap.keys()) {
8181
const fileArray = directoryMap.get(directory);
82+
if (!fileArray) {
83+
continue;
84+
}
8285
for (const file of fileArray) {
8386
progressBar.update(++progressCounter);
8487
if (file.ext !== '.json') {
@@ -124,7 +127,7 @@ export class ExperienceSiteMigration extends BaseRelatedObjectMigration {
124127
// TODO - undefined check here
125128
const experienceSiteParsedJSON = JSON.parse(fileContent) as ExpSitePageJson;
126129
const normalizedOriginalFileContent = JSON.stringify(experienceSiteParsedJSON, null, 2);
127-
const regions: ExpSiteRegion[] = experienceSiteParsedJSON['regions'];
130+
const regions: ExpSiteRegion[] = experienceSiteParsedJSON.regions;
128131

129132
// TODO - When will it be Flexcard
130133

@@ -142,35 +145,7 @@ export class ExperienceSiteMigration extends BaseRelatedObjectMigration {
142145
}
143146

144147
for (const region of regions) {
145-
Logger.logVerbose(this.messages.getMessage('currentRegionOfExperienceSite', [JSON.stringify(region)]));
146-
147-
const regionComponents: ExpSiteComponent[] = region['components'];
148-
149-
if (regionComponents === undefined) {
150-
continue;
151-
}
152-
153-
if (Array.isArray(regionComponents)) {
154-
for (const component of regionComponents) {
155-
if (component === undefined || component === null) {
156-
continue;
157-
}
158-
159-
Logger.logVerbose(this.messages.getMessage('currentComponentOfExperienceSite', [JSON.stringify(component)]));
160-
161-
if (component.componentName === lookupComponentName) {
162-
Logger.logVerbose(this.messages.getMessage('omniWrapperFound'));
163-
experienceSiteAssessmentInfo.hasOmnistudioContent = true;
164-
165-
this.updateComponentAndItsAttributes(
166-
component,
167-
component.componentAttributes,
168-
experienceSiteAssessmentInfo,
169-
storage
170-
);
171-
}
172-
}
173-
}
148+
this.processRegion(region, experienceSiteAssessmentInfo, storage, lookupComponentName);
174149
}
175150

176151
Logger.logVerbose(this.messages.getMessage('printUpdatedObject', [JSON.stringify(experienceSiteParsedJSON)]));
@@ -193,6 +168,60 @@ export class ExperienceSiteMigration extends BaseRelatedObjectMigration {
193168
return experienceSiteAssessmentInfo;
194169
}
195170

171+
private processRegion(
172+
region: ExpSiteRegion,
173+
experienceSiteAssessmentInfo: ExperienceSiteAssessmentInfo,
174+
storage: MigrationStorage,
175+
lookupComponentName: string
176+
): void {
177+
Logger.logVerbose(this.messages.getMessage('currentRegionOfExperienceSite', [JSON.stringify(region)]));
178+
179+
const regionComponents: ExpSiteComponent[] = region.components;
180+
181+
if (regionComponents === undefined) {
182+
return;
183+
}
184+
185+
if (Array.isArray(regionComponents)) {
186+
for (const component of regionComponents) {
187+
this.processComponent(component, experienceSiteAssessmentInfo, storage, lookupComponentName);
188+
}
189+
}
190+
}
191+
192+
private processComponent(
193+
component: ExpSiteComponent,
194+
experienceSiteAssessmentInfo: ExperienceSiteAssessmentInfo,
195+
storage: MigrationStorage,
196+
lookupComponentName: string
197+
): void {
198+
if (component === undefined || component === null) {
199+
return;
200+
}
201+
202+
if (component.componentName === lookupComponentName) {
203+
Logger.logVerbose(this.messages.getMessage('omniWrapperFound'));
204+
experienceSiteAssessmentInfo.hasOmnistudioContent = true;
205+
206+
this.updateComponentAndItsAttributes(
207+
component,
208+
component.componentAttributes,
209+
experienceSiteAssessmentInfo,
210+
storage
211+
);
212+
213+
return;
214+
}
215+
216+
const regionsInsideComponent: ExpSiteRegion[] = component.regions;
217+
218+
if (Array.isArray(regionsInsideComponent)) {
219+
for (const region of regionsInsideComponent) {
220+
this.processRegion(region, experienceSiteAssessmentInfo, storage, lookupComponentName);
221+
}
222+
}
223+
}
224+
196225
private updateComponentAndItsAttributes(
197226
component: ExpSiteComponent,
198227
currentAttribute: ExpSiteComponentAttributes,
@@ -254,7 +283,7 @@ export class ExperienceSiteMigration extends BaseRelatedObjectMigration {
254283
): void {
255284
Logger.logVerbose(this.messages.getMessage('processingOmniscriptComponent', [JSON.stringify(component)]));
256285
// Use storage to find the updated properties
257-
const targetDataFromStorage: OmniScriptStorage = storage.osStorage.get(targetName.toLocaleLowerCase());
286+
const targetDataFromStorage: OmniScriptStorage = storage.osStorage.get(targetName.toLowerCase());
258287
StorageUtil.printAssessmentStorage();
259288
Logger.logVerbose(this.messages.getMessage('targetData', [JSON.stringify(targetDataFromStorage)]));
260289

@@ -267,9 +296,9 @@ export class ExperienceSiteMigration extends BaseRelatedObjectMigration {
267296
// Preserve the layout value before clearing
268297
const originalLayout = currentAttribute['layout'];
269298

270-
// define an array and delete those keys
271-
// Clear existing properties and set new ones
272-
Object.keys(currentAttribute).forEach((key) => delete currentAttribute[key]);
299+
// Clear existing properties more safely - preserve any properties we don't want to delete
300+
const keysToDelete = ['layout', 'params', 'standAlone', 'target'];
301+
keysToDelete.forEach((key) => delete currentAttribute[key]);
273302

274303
currentAttribute['direction'] = 'ltr';
275304
currentAttribute['display'] = 'Display button to open Omniscript';

0 commit comments

Comments
 (0)