Skip to content

Commit

Permalink
role based landing decoupled with module
Browse files Browse the repository at this point in the history
  • Loading branch information
mithunhegde-egov committed Oct 19, 2024
1 parent 9af2089 commit 991df36
Showing 1 changed file with 95 additions and 84 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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]);
Expand All @@ -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) => {
Expand All @@ -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,
Expand All @@ -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 =
Expand All @@ -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: [<div>{t(Digit.Utils.locale.getTransformedLocale(`MODULE_CARD_DESC_${current}`))}</div>,
<Button
variation="teritiary"
label={userManual?.label}
icon={userManual?.icon}
type="button"
size={"medium"}
onClick={() => window.open(userManual?.link, "_blank")}
style={{ padding: "0px" }}
/>,
],
endChildren: Digit.Utils.getMultiRootTenant()
? [
<Button
variation="teritiary"
label={configureData?.label}
icon={configureData?.icon}
type="button"
size={"medium"}
onClick={() => history?.push(configureData?.link)}
style={{ padding: "0px" }}
/>,
<Button
links: Digit.Utils.getMultiRootTenant() ? getFilteredLinks(moduleData) : moduleData.links,
centreChildren: [
<div>{t(Digit.Utils.locale.getTransformedLocale(`MODULE_CARD_DESC_${current}`))}</div>,
userManual && (
<Button
variation="teritiary"
label={howItWorks?.label}
icon={howItWorks?.icon}
label={userManual?.label}
icon={userManual?.icon}
type="button"
size={"medium"}
onClick={() => window.open(howItWorks?.link, "_blank")}
onClick={() => window.open(userManual?.link, "_blank")}
style={{ padding: "0px" }}
/>,
/>
),
],
endChildren: Digit.Utils.getMultiRootTenant()
? [
configureData && (
<Button
variation="teritiary"
label={configureData?.label}
icon={configureData?.icon}
type="button"
size={"medium"}
onClick={() => history?.push(configureData?.link)}
style={{ padding: "0px" }}
/>
),
howItWorks && (
<Button
variation="teritiary"
label={howItWorks?.label}
icon={howItWorks?.icon}
type="button"
size={"medium"}
onClick={() => window.open(howItWorks?.link, "_blank")}
style={{ padding: "0px" }}
/>
),
]
: null,
};

return <LandingPageCard buttonSize={"medium"} {...propsForModuleCard} />;
});

return (
<>
<LandingPageWrapper>{React.Children.map(children, (child) => React.cloneElement(child))}</LandingPageWrapper>
Expand Down

0 comments on commit 991df36

Please sign in to comment.