From 601cb74f5388ce206494fb64f8b4950709ff00bc Mon Sep 17 00:00:00 2001 From: Arpit Date: Thu, 26 Oct 2023 21:47:35 +0530 Subject: [PATCH] fixes: tabs children are not rendered as the are not in their repsective parent container (#8036) --- server/src/services/page.service.ts | 35 +++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/server/src/services/page.service.ts b/server/src/services/page.service.ts index e0b4d125a9..ebf00ed05a 100644 --- a/server/src/services/page.service.ts +++ b/server/src/services/page.service.ts @@ -126,7 +126,7 @@ export class PageService { const clonedComponents = await Promise.all( pageComponents.map(async (component) => { const clonedComponent = { ...component, id: undefined, pageId: clonePageId }; - const newComponent = await manager.save(Component, clonedComponent); + const newComponent = await manager.save(manager.create(Component, clonedComponent)); componentsIdMap[component.id] = newComponent.id; const componentLayouts = await manager.find(Layout, { componentId: component.id }); @@ -164,10 +164,37 @@ export class PageService { }) ); + const isChildOfTabsOrCalendar = (component, allComponents = [], componentParentId = undefined) => { + if (componentParentId) { + const parentId = component?.parent?.split('-').slice(0, -1).join('-'); + + const parentComponent = allComponents.find((comp) => comp.id === parentId); + + if (parentComponent) { + return parentComponent.type === 'Tabs' || parentComponent.type === 'Calendar'; + } + } + + return false; + }; + for (const component of clonedComponents) { - const componentId = componentsIdMap[component.parent]; - if (componentId) { - await manager.update(Component, component.id, { parent: componentId }); + let parentId = component.parent ? component.parent : null; + + const isParentTabOrCalendar = isChildOfTabsOrCalendar(component, pageComponents, parentId); + + if (isParentTabOrCalendar) { + const childTabId = component.parent.split('-')[component.parent.split('-').length - 1]; + const _parentId = component?.parent?.split('-').slice(0, -1).join('-'); + const mappedParentId = componentsIdMap[_parentId]; + + parentId = `${mappedParentId}-${childTabId}`; + } else { + parentId = componentsIdMap[parentId]; + } + + if (parentId) { + await manager.update(Component, component.id, { parent: parentId }); } } });