export type IReplacedRouteConfigProps = { layoutType:any; layoutConfigData: any; routeConfig: any; initialRouteName?:any; } function uniqueRoutes(routes) { const seenPaths = new Set(); return routes.filter(route => { const path = Object.keys(route)[0]; if (seenPaths.has(path)) { return false; } seenPaths.add(path); return true; }); } const getReplacedRouteConfig = ({ layoutType, layoutConfigData, routeConfig = [], initialRouteName = null, }:IReplacedRouteConfigProps) => { let modulesRouteConfig = []; const modulesRouteConfigObj = Object.assign( {}, ...(routeConfig?.flat(1) || []) ); const layoutOrgLength = Object.keys(modulesRouteConfigObj)?.filter((r) => r?.startsWith('/:orgName/l/'))?.length; const hostOrgLength = Object.keys(modulesRouteConfigObj)?.filter((r) => r?.startsWith('/:orgName/h/'))?.length; const isLayoutOrgExists = layoutOrgLength > 0 ? true : false; const isHostOrgExists = hostOrgLength > 0 ? true : false; const layoutRouteConfig = layoutConfigData[layoutType]; const hostRouteConfig = layoutConfigData['host-bottom']; const layoutRouteKey = Object.keys(layoutRouteConfig)[1]; const hostRouteKey = Object.keys(hostRouteConfig)[1]; const appLayout = layoutRouteConfig[layoutRouteKey]; const hostLayout = hostRouteConfig[hostRouteKey]; const keyToReplace = appLayout.key || 'bottom_tab'; const hostFilteredRouteConfig = routeConfig?.map((rcArry)=>rcArry.filter(((obj)=>!Object.keys(obj)?.[0]?.startsWith('/l/') && !Object.keys(obj)?.[0].startsWith('/:orgName/l/')))); let filteredRouteConfig = routeConfig; if(keyToReplace == 'host_tab'){ filteredRouteConfig = hostFilteredRouteConfig; } const hostModuleRouteConfigLength = Object.entries(modulesRouteConfigObj)?.filter( ([key, value]) => key?.startsWith('/:orgName/h/') || key?.startsWith('/h/'), )?.flat(1)?.filter((rc:any)=>rc.length)?.length ?? 0; if(hostModuleRouteConfigLength && hostModuleRouteConfigLength > 0){ modulesRouteConfig = [[layoutRouteConfig || []], [hostRouteConfig || []],...filteredRouteConfig]; } else{ modulesRouteConfig = [[layoutRouteConfig || []],...filteredRouteConfig] } // const layoutRouteConfigObj = Object.assign( // {}, // ...(modulesRouteConfig?.flat(1) || []) // ); //const mainStackConfig:any = Object.entries(layoutRouteConfigObj)?.filter(([key,val])=> key == '/')?.reduce((acc,val)=>{ return val[1]},{}); // const mainStackPath = mainStackConfig?.name?.toLowerCase()??''; // const mainStackName = mainStackConfig?.name??'MainStack'; const lConfig = Object.keys(layoutRouteConfig).map((k)=>layoutRouteConfig[k]); const mainStackConfig = lConfig[0] || {}; const layoutConfig = lConfig[1] || {}; const mainStackPath = mainStackConfig?.name?.toLowerCase()??''; const mainStackName = mainStackConfig?.name??'MainStack'; const layoutName = layoutConfig?.name??'Layout'; const layoutRootName = mainStackName+'.'+layoutName; const hConfig = Object.keys(hostRouteConfig).map((k)=>hostRouteConfig[k]); const hostConfig = hConfig[1] || {}; const hostName = hostConfig?.name??'Layout'; const hostRootName = mainStackName+'.'+hostName; const replacedNavigationRouteConfig = modulesRouteConfig?.map( (innerArray) => innerArray?.map((obj) => Object.fromEntries( Object.entries(obj).map(([key, val]) => { let originalVal: any = Object.assign({}, val); let objKey = key; let path = originalVal.path || key; let pathObj = { path: path }; let objVal: any = Object.assign({}, val, pathObj); let name = objVal.name; if (key === '/' && initialRouteName) objVal.props.initialRouteName = initialRouteName; if (key == '/' + keyToReplace && initialRouteName) objVal.props.initialRouteName = initialRouteName; let initialParams = objVal?.props?.initialParams ?? {}; if (objVal?.props?.options) { initialParams.auth = objVal?.auth ?? false; initialParams.menu_position = objVal?.menu_position ?? 'bottom'; initialParams.priority = objVal?.props?.options?.priority ?? 0; // initialParams.options = objVal.props.options ? JSON.stringify(objVal?.props?.options) : null; objVal.props.initialParams = initialParams; } if (isLayoutOrgExists && objKey == `/${keyToReplace}`) { objKey = objKey.replace(objKey, `/:orgName${objKey}`); path = path.replace(path, `/:orgName${path}`); } if (isHostOrgExists && key == `/${hostLayout.key}`) { objKey = key.replace(objKey, `/:orgName${objKey}`); path = path.replace(path, `/:orgName${path}`); } if (keyToReplace == 'host_tab') { name = path.startsWith('/:orgName/l/') ? name.replace(name, `${layoutRootName}.${name}`) : path.startsWith('/l/') ? name.replace(name, `${layoutRootName}.${name}`) : path.startsWith('/:orgName/h/') ? name.replace(name, `${hostRootName}.${name}`) : path.startsWith('/h/') ? name.replace(name, `${hostRootName}.${name}`) : path.startsWith('//') ? name.startsWith(`${mainStackName}`) ? name : name.replace(name, `${mainStackName}.${name}`) : path.startsWith(`/${mainStackPath}`) ? name : path === '/' ? name : name.startsWith(`${mainStackName}`) ? name : name.replace(name, `${mainStackName}.${name}`); objKey = objKey.startsWith('/:orgName/h/') ? objKey.replace('/:orgName/h/', '//:orgName/' + keyToReplace + '/') : objKey.startsWith('/h/') ? objKey.replace('/h/', '//' + keyToReplace + '/') : objKey.startsWith('/:orgName/l/') ? null : objKey.startsWith('/l/') ? null : objKey === '/' ? objKey : objKey.startsWith('//') ? objKey : objKey.replace('/', '//'); path = path.startsWith('/:orgName/h/') ? path.replace('/:orgName/h/', '/:orgName/' + keyToReplace + '/') : path.startsWith('/h/') ? path.replace('/h/', '/' + keyToReplace + '/') : path.startsWith('/:orgName/l/') ? null : path.startsWith('/l/') ? null : path.startsWith('//') ? path.replace('//', '/') : path.startsWith(`/${mainStackPath}`) ? path : path === '/' ? path : path.replace('/', `/${mainStackPath}/`); } else { name = path.startsWith('/:orgName/l/') ? name.replace(name, `${layoutRootName}.${name}`) : path.startsWith('/l/') ? name.replace(name, `${layoutRootName}.${name}`) : path.startsWith('/:orgName/h/') ? name.replace(name, `${hostRootName}.${name}`) : path.startsWith('/h/') ? name.replace(name, `${hostRootName}.${name}`) : path.startsWith('//') ? name.startsWith(`${mainStackName}`) ? name : name.replace(name, `${mainStackName}.${name}`) : path.startsWith(`/${mainStackPath}`) ? name : path === '/' ? name : name.startsWith(`${mainStackName}`) ? name : name.replace(name, `${mainStackName}.${name}`); objKey = objKey.startsWith('/:orgName/l/') ? objKey.replace('/:orgName/l/', '//:orgName/' + keyToReplace + '/') : objKey.startsWith('/l/') ? objKey.replace('/l/', '//' + keyToReplace + '/') : objKey.startsWith('/:orgName/h/') ? objKey.replace('/:orgName/h/', '//:orgName/host_tab/') : objKey.startsWith('/h/') ? objKey.replace('/h/', '//host_tab/') : objKey === '/' ? objKey : objKey.startsWith('//') ? objKey : objKey.replace('/', '//'); path = path.startsWith('/:orgName/l/') ? path.replace('/:orgName/l/', '/:orgName/' + keyToReplace + '/') : path.startsWith('/l/') ? path.replace('/l/', '/' + keyToReplace + '/') : path.startsWith('/:orgName/h/') ? path.replace('/:orgName/h/', '/:orgName/host_tab/') : path.startsWith('/h/') ? path.replace('/h/', '/host_tab/') : path.startsWith('//') ? path.replace('//', '/') : path.startsWith(`/${mainStackPath}`) ? path : path; // : path === '/' ? path : path.replace('/',`/${mainStackPath}/`); //name = name.startsWith(`${mainStackName}`) ? name : name.replace(name,`${mainStackName}.${name}`); } objVal.path = path; objVal.name = name; return [objKey, objVal]; }), ), ), // Extract the name property ); const replacedConfiguredRouteConfig = modulesRouteConfig.map( (innerArray) => innerArray.map((obj) => Object.fromEntries( Object.entries(obj).map(([key, val]) => { let originalVal: any = Object.assign({}, val); let objKey = key; let path = originalVal.path || key; let pathObj = { path: path }; let objVal: any = Object.assign({}, val, pathObj); let name = objVal.name; if (key === '/' && initialRouteName) objVal.props.initialRouteName = initialRouteName; if (key == '/' + keyToReplace && initialRouteName) objVal.props.initialRouteName = initialRouteName; let initialParams = objVal?.props?.initialParams ?? {}; if (objVal?.props?.options) { initialParams.menu_position = objVal?.menu_position ?? 'bottom'; initialParams.priority = objVal?.props?.options?.priority ?? 0; // initialParams.options = objVal.props.options ? JSON.stringify(objVal?.props?.options) : null; objVal.props.initialParams = initialParams; } if (isLayoutOrgExists && objKey == `/${keyToReplace}`) { objKey = objKey.replace(objKey, `/:orgName${objKey}`); path = path.replace(path, `/:orgName${path}`); } if (isHostOrgExists && key == `/${hostLayout.key}`) { objKey = key.replace(objKey, `/:orgName${objKey}`); path = path.replace(path, `/:orgName${path}`); } if (keyToReplace == 'host_tab') { objKey = objKey.startsWith('/:orgName/h/') ? objKey.replace('/:orgName/h/', '//:orgName/' + keyToReplace + '/') : objKey.startsWith('/h/') ? objKey.replace('/h/', '//' + keyToReplace + '/') : objKey.startsWith('/:orgName/l/') ? null : objKey.startsWith('/l/') ? null : objKey === '/' ? objKey : objKey.startsWith('//') ? objKey : objKey.replace('/', '//'); path = path.startsWith('/:orgName/h/') ? path.replace('/:orgName/h/', '/:orgName/' + keyToReplace + '/') : path.startsWith('/h/') ? path.replace('/h/', '/' + keyToReplace + '/') : path.startsWith('/:orgName/l/') ? null : path.startsWith('/l/') ? null : path.startsWith('//') ? path.replace('//', '/') : path.startsWith(`/${mainStackPath}`) ? path : path === '/' ? path : path.replace('/', `/${mainStackPath}/`); } else { objKey = objKey.startsWith('/:orgName/l/') ? objKey.replace('/:orgName/l/', '//:orgName/' + keyToReplace + '/') : objKey.startsWith('/l/') ? objKey.replace('/l/', '//' + keyToReplace + '/') : objKey.startsWith('/:orgName/h/') ? objKey.replace('/:orgName/h/', '//:orgName/host_tab/') : objKey.startsWith('/h/') ? objKey.replace('/h/', '//host_tab/') : objKey === '/' ? objKey : objKey.startsWith('//') ? objKey : objKey.replace('/', '//'); path = path.startsWith('/:orgName/l/') ? path.replace('/:orgName/l/', '/:orgName/' + keyToReplace + '/') : path.startsWith('/l/') ? path.replace('/l/', '/' + keyToReplace + '/') : path.startsWith('/:orgName/h/') ? path.replace('/:orgName/h/', '/:orgName/host_tab/') : path.startsWith('/h/') ? path.replace('/h/', '/host_tab/') : path.startsWith('//') ? path.replace('//', '/') : path.startsWith(`/${mainStackPath}`) ? path : path; } objVal.path = path; objVal.name = name; return [objKey, objVal]; }), ), ), // Extract the name property ); return {replacedNavigationRouteConfig,replacedConfiguredRouteConfig}; }; export {getReplacedRouteConfig};