From 991df3655210d9a0669e083fc7c624f389d70096 Mon Sep 17 00:00:00 2001 From: mithun-hegde-egov Date: Sat, 19 Oct 2024 11:49:13 +0530 Subject: [PATCH] role based landing decoupled with module --- .../src/components/RoleBasedEmployeeHome.js | 179 ++++++++++-------- 1 file changed, 95 insertions(+), 84 deletions(-) diff --git a/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/RoleBasedEmployeeHome.js b/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/RoleBasedEmployeeHome.js index f780bba266b..53907b88b13 100644 --- a/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/RoleBasedEmployeeHome.js +++ b/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/RoleBasedEmployeeHome.js @@ -5,6 +5,19 @@ import { useHistory } from "react-router-dom"; const DIGIT_UI_CONTEXTS = ["digit-ui", "works-ui", "workbench-ui", "health-ui", "sanitation-ui", "core-ui", "mgramseva-web", "sandbox-ui"]; + +const MODULE_CONFIG = { + PGR: { + howItWorksLink: "HOW_IT_WORKS_PGR", + userManualLink: "PGR_INFO_LINK", + }, + HRMS: { + howItWorksLink: "HOW_IT_WORKS_HRMS", + userManualLink: "HRMS_INFO_LINK", + }, + // Add more modules as needed here +}; + export const RoleBasedEmployeeHome = ({ modules, additionalComponent }) => { const { isLoading, data } = Digit.Hooks.useAccessControl(); const isMultiRootTenant = Digit.Utils.getMultiRootTenant(); @@ -29,6 +42,24 @@ export const RoleBasedEmployeeHome = ({ modules, additionalComponent }) => { } ); + + + const { data: moduleConfigData, isLoading: isModuleConfigLoading } = Digit.Hooks.useCustomMDMS( + tenantId, + "SandBoxLanding", + [ + { + name: "AdditionalModuleLinks", + }, + ], + { + + select: (data) => { + return data?.["SandBoxLanding"]?.["AdditionalModuleLinks"]; + }, + } + ); + useEffect(() => { setMdmsOrderData(MdmsRes); }, [MdmsRes]); @@ -51,6 +82,28 @@ export const RoleBasedEmployeeHome = ({ modules, additionalComponent }) => { } }; + // Function to get links by type from the module configuration + const getLinkByType = (moduleData, type) => { + const moduleConfig = moduleConfigData.find((config) => config.moduleName === moduleData.module); + if (!moduleConfig) return null; + + const linkKey = moduleConfig[type]; + return moduleData?.links?.find((item) => item?.displayName === linkKey); + }; + + // Function to filter links dynamically based on module config + const getFilteredLinks = (moduleData) => { + const moduleConfig = moduleConfigData.find((config) => config.moduleName === moduleData.module); + return moduleData.links?.filter((item) => { + const displayName = item.displayName; + const isNotConfigureMaster = displayName !== "Configure_master"; + const isNotHowItWorks = displayName !== moduleConfig?.howItWorksLink; + const isNotUserManual = displayName !== moduleConfig?.userManualLink; + + return isNotConfigureMaster && isNotHowItWorks && isNotUserManual; + }); + }; + const configEmployeeSideBar = data?.actions .filter((e) => e.url === "card" && e.parentModule) .reduce((acc, item) => { @@ -59,18 +112,16 @@ export const RoleBasedEmployeeHome = ({ modules, additionalComponent }) => { acc[module] = { module: module, kpis: [], - icon: item.leftIcon ? Digit.Utils.iconRender(item.leftIcon, "white") : "", // Set icon if available - label: Digit.Utils.locale.getTransformedLocale(`${module}_CARD_HEADER`), // Set label if needed or leave as an empty string + icon: item.leftIcon ? Digit.Utils.iconRender(item.leftIcon, "white") : "", + label: Digit.Utils.locale.getTransformedLocale(`${module}_CARD_HEADER`), links: [], }; } const linkUrl = transformURL(item.navigationURL); const queryParamIndex = linkUrl.indexOf("?"); acc[module].links.push({ - // link: linkUrl, link: linkUrl, icon: item.leftIcon, - // link: queryParamIndex === -1 ? linkUrl : linkUrl.substring(0, queryParamIndex), queryParams: queryParamIndex === -1 ? null : linkUrl.substring(queryParamIndex), label: t(Digit.Utils.locale.getTransformedLocale(`${module}_LINK_${item.displayName}`)), displayName: item.displayName, @@ -87,21 +138,16 @@ export const RoleBasedEmployeeHome = ({ modules, additionalComponent }) => { } const sortCardAndLink = (configEmployeeSideBar) => { - // Sort card modules based on the order in MdmsRes const sortedModules = Object.keys(configEmployeeSideBar) .sort((a, b) => { - // Find the card order in mdmsOrderData based on module names (HRMS, PGR, etc.) const cardOrderA = mdmsOrderData?.find((item) => item.moduleType === "card" && item.name === a)?.order || null; const cardOrderB = mdmsOrderData?.find((item) => item.moduleType === "card" && item.name === b)?.order || null; return cardOrderA - cardOrderB; }) .reduce((acc, module) => { - // Sort links based on the order in MdmsRes const sortedLinks = configEmployeeSideBar?.[module]?.links?.sort((linkA, linkB) => { const labelA = linkA?.displayName; const labelB = linkB?.displayName; - - // Find the order for links inside the module const orderA = mdmsOrderData?.find((item) => item.moduleType === "link" && item.name === `${module}.${labelA.replace(/\s+/g, "_")}`)?.order || null; const orderB = @@ -127,97 +173,62 @@ export const RoleBasedEmployeeHome = ({ modules, additionalComponent }) => { sortedConfigEmployeesSidebar = configEmployeeSideBar; } - const getHowItWorksLink = (moduleData) => { - return moduleData?.links?.find((item) => { - if (moduleData.module === "PGR") { - return item?.displayName === "HOW_IT_WORKS_PGR"; - } else if (moduleData.module === "HRMS") { - return item?.displayName === "HOW_IT_WORKS_HRMS"; - } else { - return false; - } - }); - }; - - const getUserManualLink = (moduleData) => { - return moduleData?.links?.find((item) => { - if (moduleData.module === "PGR") { - return item?.displayName === "PGR_INFO_LINK"; - } else if (moduleData.module === "HRMS") { - return item?.displayName === "HRMS_INFO_LINK"; - } else { - return false; // No match for other modules - } - }); - }; - - const getFilteredLinks = (moduleData) => { - return moduleData.links?.filter((item) => { - const displayName = item.displayName; - const isPGR = moduleData.module === "PGR"; - const isHRMS = moduleData.module === "HRMS"; - const isNotConfigureMaster = displayName !== "Configure_master"; - const isNotHowItWorksPGR = !(isPGR && displayName === "HOW_IT_WORKS_PGR"); - const isNotHRMSInfoLink = !(isHRMS && displayName === "HRMS_INFO_LINK"); - const isNotHowItWorksHRMS = !(isHRMS && displayName === "HOW_IT_WORKS_HRMS"); - const isNotPGRInfoLink = !(isPGR && displayName === "PGR_INFO_LINK"); - - return ( - isNotConfigureMaster && - isNotHowItWorksPGR && - isNotHRMSInfoLink && - isNotHowItWorksHRMS && - isNotPGRInfoLink - ); - }); - }; - const children = Object.keys(sortedConfigEmployeesSidebar)?.map((current, index) => { const moduleData = sortedConfigEmployeesSidebar?.[current]; const configureData = moduleData?.links?.find((item) => item?.displayName === "Configure_master"); - const howItWorks = getHowItWorksLink(moduleData); - const userManual = getUserManualLink(moduleData); + const howItWorks = getLinkByType(moduleData, "howItWorksLink"); + const userManual = getLinkByType(moduleData, "userManualLink"); + const propsForModuleCard = { icon: "SupervisorAccount", moduleName: t(moduleData?.label), metrics: [], - links: Digit.Utils.getMultiRootTenant()? getFilteredLinks(moduleData): moduleData.links, - centreChildren: [
{t(Digit.Utils.locale.getTransformedLocale(`MODULE_CARD_DESC_${current}`))}
, -