Before starting with Employee Module Code you should aware of these things.
Project structure:- Project Structure
Dependency:- Install Dependency
Import Components:- Import required components
Employee Module Card -
In the Employee module first, we create the Homecard like how we are creating for citizens.
So Employee card contains Total application, Inbox, and Create Birth-registration.
...
Code Block |
---|
import React, { useState } from "react"; import { ActionBar, RemoveableTag, CloseSvg, Loader, DateRange, Localities, ApplyFilterBar, SubmitBar, Dropdown, RefreshIcon } from "@egovernments/digit-ui-react-components"; import { useTranslation } from "react-i18next"; const Filter = ({ type = "desktop", onClose, onSearch, onFilterChange, searchParams }) => { const { t } = useTranslation(); const [localSearchParams, setLocalSearchParams] = useState(() => ({ ...searchParams })); const tenantId = Digit.ULBService.getCurrentTenantId(); const state = tenantId?.split('.')[0]; const { isLoading, data } = Digit.Hooks.useCommonMDMS(state, "mseva", ["EventCategories"]); const clearAll = () => { setLocalSearchParams({ eventCategory: null, eventStatus: [], range: { startDate: null, endDate: new Date(""), title: "" } }) onFilterChange({ eventCategory: null, eventStatus: [], range: { startDate: null, endDate: new Date(""), title: "" } }); onClose?.(); }; const applyLocalFilters = () => { onFilterChange(localSearchParams); onClose?.(); }; const handleChange = (data) => { setLocalSearchParams({ ...localSearchParams, ...data }); }; const onStatusChange = (e, type) => { if (e.target.checked) handleChange({ eventStatus: [...(localSearchParams?.eventStatus || []), type] }) else handleChange({ eventStatus: localSearchParams?.eventStatus?.filter(status => status !== type) }) } if (isLoading) { return ( <Loader /> ); } return ( <div className="filter"> <div className="filter-card"> <div className="heading"> <div className="filter-label">{t("ES_COMMON_FILTER_BY")}:</div> <div className="clearAll" onClick={clearAll}> {t("ES_COMMON_CLEAR_ALL")} </div> {type === "desktop" && ( <span className="clear-search" onClick={clearAll}> <RefreshIcon /> </span> )} {type === "mobile" && ( <span onClick={onClose}> <CloseSvg /> </span> )} </div> <div className="filter-label">{`${t(`BR `)}`}</div> <Dropdown option={data?.mseva?.EventCategories} optionKey="code" t={t} selected={localSearchParams?.eventCategory} select={val => handleChange({ eventCategory: val })} /> <DateRange t={t} values={localSearchParams?.range} onFilterChange={handleChange} labelClass="filter-label" /> {/* <div> <Status onAssignmentChange={onStatusChange} searchParams={localSearchParams} /> </div> */} <div> <SubmitBar style={{ width: '100%' }} onSubmit={() => applyLocalFilters()} label={t("ES_COMMON_APPLY")} /> </div> </div> </div> ) } export default Filter; |
...
Routing:-
Code Block |
---|
import { PrivateRoute } from "@egovernments/digit-ui-react-components"; import React from "react"; import { useTranslation } from "react-i18next"; import { Link, Switch, useLocation , Route } from "react-router-dom"; import Inbox from "./Inbox/Inbox"; import ResponseEmployee from "./ResponseEmployee"; const EmployeeApp = ({ path, url, userType ,tenants, parentRoute }) => { const { t } = useTranslation(); const BRManageApplication = Digit?.ComponentRegistryService?.getComponent("BRManageApplication"); const RegisterDetails = Digit?.ComponentRegistryService?.getComponent("RegisterDetails"); const Inbox = Digit?.ComponentRegistryService?.getComponent("Inbox"); const ResponseEmployee = Digit?.ComponentRegistryService?.getComponent("ResponseEmployee"); return ( <Switch> <React.Fragment> <div className="ground-container"> <PrivateRoute path={`${path}/responseemp`} component={() => <ResponseEmployee/>} /> <PrivateRoute path={`${path}/inbox`} component={props => <Inbox {...props} tenants={tenants} parentRoute={parentRoute} />} /> {/* <PrivateRoute path={`${path}/details`} component={() => <RegisterDetails />} /> */} <PrivateRoute path={`${path}/myapplication`} component={() => <BRManageApplication />} /> <PrivateRoute path={`${path}/details/:id`} component={(props) => <RegisterDetails {...props} />} /> </div> </React.Fragment> </Switch> ); }; export default EmployeeApp; |
...
Code Block |
---|
import { Header, ActionBar, SubmitBar, ExternalLinkIcon, Menu, GenericFileIcon, LinkButton } from '@egovernments/digit-ui-react-components'; import React, { useState , useEffect } from 'react' import { useTranslation } from 'react-i18next'; import { openDocumentLink, openUploadedDocument } from '../../utils'; import axios from 'axios'; import { useParams } from "react-router-dom"; const RegisterDetails = ({ location, match, history, }) => { const params = useParams(); const [data, setData] = useState([]); useEffect(() => { (async () => { const result = await axios(`https://62f0e3e5e2bca93cd23f2ada.mockapi.io/birth/${params.id}`); setData(result.data); console.log("gooo" ,result.data); })(); }, [params.id]); let isMobile = window.Digit.Utils.browser.isMobile(); const { t } = useTranslation(); const [displayMenu, setDisplayMenu] = React.useState(false); const [showModal, setShowModal] = useState(false); function onActionSelect(action) { // setSelectedAction(action); history.push(`/digit-ui/employee/br/responseemp`) } return ( <div> {/* {showModal ? <Confirmation t={t} heading={'CONFIRM_DELETE_DOC'} docName={details?.name} closeModal={() => setShowModal(!showModal)} actionCancelLabel={'CS_COMMON_CANCEL'} actionCancelOnSubmit={onModalCancel} actionSaveLabel={'ES_COMMON_Y_DEL'} actionSaveOnSubmit={onModalSubmit} /> : null} */} <Header>{t(`Birth-Registration Details`)}</Header> <div className="notice_and_circular_main gap-ten"> <div className="documentDetails_wrapper"> {/* <div className="documentDetails_row_items"><p className="documentDetails_title">{`${t('ULB')}:`}</p> <p>{data?.tenantId}</p> </div> */} <div className="documentDetails_row_items"><p className="documentDetails_title">{`${t('Babys First NAME')}:`}</p> <p>{data?.babyFirstName}</p> </div> <div className="documentDetails_row_items"><p className="documentDetails_title">{`${t('Babys Last NAME')}:`}</p> <p>{t(data?.babyLastName)}</p> </div> <div className="documentDetails_row_items"><p className="documentDetails_title">{`${t('Father NAME')}:`}</p> <p>{t(data?.fatherName)}</p> </div> <div className="documentDetails_row_items"><p className="documentDetails_title">{`${t('Mother NAME')}:`}</p> <p>{t(data?.motherName)}</p> </div> <div className="documentDetails_row_items"><p className="documentDetails_title">{`${t('Doctor NAME')}:`}</p> <p>{t(data?.doctorName)}</p> </div> <div className="documentDetails_row_items"><p className="documentDetails_title">{`${t('Hospital NAME')}:`}</p> <p>{t(data?.hospitalName)}</p> </div> <div className="documentDetails_row_items"><p className="documentDetails_title">{`${t('Applicant MobileNumber')}:`}</p> <p>{t(data?.applicantMobileNumber)}</p> </div> <div className="documentDetails_row_items"><p className="documentDetails_title">{`${t('Correspondence Address')}:`}</p> <p>{t(data?.correspondenceAddress)}</p> </div> <div className="documentDetails_row_items"><p className="documentDetails_title">{`${t('Correspondence City')}:`}</p> <p>{t(data?.correspondenceCity)}</p> </div> <div className="documentDetails_row_items"><p className="documentDetails_title">{`${t('Permanent Address')}:`}</p> <p>{t(data?.permanentAddress)}</p> </div> <div className="documentDetails_row_items"><p className="documentDetails_title">{`${t('Place Of Birth')}:`}</p> <p>{t(data?.placeOfBirth)}</p> </div> {/* <div className="documentDetails_row_items"><p className="documentDetails_title">{`${t('DCOUMENT_DESCRIPTION')}:`}</p> <p className="documentDetails__description">{details?.description?.length ? details?.description : 'NA'}</p> </div> */} {/* <div className="documentDetails_row_items"><p className="documentDetails_title">{`${t('ES_COMMON_LINK_LABEL')}:`}</p> {details?.documentLink ? <LinkButton label={ <div className="link" onClick={() => openDocumentLink(details?.documentLink, details?.name)}> <p>{t(`CE_DOCUMENT_OPEN_LINK`)}</p> </div> } /> : 'NA'} </div> */} </div> </div> <ActionBar> {displayMenu ? ( <Menu localeKeyPrefix={"BR"} options={['Approve', 'Reject']} t={t} onSelect={onActionSelect} /> ) : null} <SubmitBar label={t("ES_COMMON_TAKE_ACTION")} onSubmit={() => setDisplayMenu(!displayMenu)} /> </ActionBar> {showModal && <Modal headerBarMain={<Heading label={t('ES_EVENT_DELETE_POPUP_HEADER')} />} headerBarEnd={<CloseBtn onClick={() => setShowModal(false)} />} actionCancelLabel={t("CS_COMMON_CANCEL")} actionCancelOnSubmit={() => setShowModal(false)} actionSaveLabel={t('APPROVE')} actionSaveOnSubmit={handleDelete} > <Card style={{ boxShadow: "none" }}> <CardText>{t(`REJECT`)}</CardText> </Card> </Modal> } </div> ) } export default RegisterDetails; |
Module.js:-
module.js is the entry point where we can register all components and Modules.
Code Block |
---|
import { CitizenHomeCard, PTIcon } from "@egovernments/digit-ui-react-components";
import React, { useEffect } from "react";
import { useTranslation } from "react-i18next";
import { useRouteMatch } from "react-router-dom";
import CitizenApp from "./pages/citizen";
import Create from "./pages/citizen/create/index";
import EmployeeApp from "./pages/employee";
import BrSelectName from "./pagecomponents/BrSelectName";
import BRSelectPhoneNumber from "./pagecomponents/BrSelectPhoneNumber";
import BRSelectGender from "./pagecomponents/BRSelectGender";
import BRSelectEmailId from "./pagecomponents/SelectEmailId";
import BRSelectPincode from "./pagecomponents/BRSelectPincode";
import BrSelectAddress from "./pagecomponents/BrSelectAddress";
import SelectCorrespondenceAddress from "./pagecomponents/SelectCorrespondenceAddress";
import SelectDocuments from "./pagecomponents/SelectDocuments";
import BRCard from "./components/config/BRCard";
import BRManageApplication from "./pages/employee/BRManageApplication";
import RegisterDetails from "./pages/employee/RegisterDetails";
import Response from "./pages/citizen/create/Response";
import Inbox from "./pages/employee/Inbox/Inbox";
import DesktopInbox from "./pages/employee/Inbox/DesktopInbox";
import ResponseEmployee from "./pages/employee/ResponseEmployee";
const componentsToRegister = {
ResponseEmployee,
DesktopInbox,
Inbox,
Response,
RegisterDetails,
BRManageApplication,
BRCard,
SelectDocuments,
SelectCorrespondenceAddress,
BrSelectAddress,
BRSelectPincode,
BRSelectEmailId,
BRSelectGender,
BRSelectPhoneNumber,
BrSelectName,
BRCreate : Create,
};
export const BRModule = ({ stateCode, userType, tenants }) => {
const { path, url } = useRouteMatch();
const moduleCode = "BR";
const language = Digit.StoreData.getCurrentLanguage();
const { isLoading, data: store } = Digit.Services.useStore({ stateCode, moduleCode, language });
if (userType === "citizen") {
return <CitizenApp path={path} stateCode={stateCode} />;
}
return <EmployeeApp path={path} stateCode={stateCode} />;
};
export const BRLinks = ({ matchPath, userType }) => {
const { t } = useTranslation();
const links = [
{
link: `${matchPath}/birth`,
i18nKey: t("Create BirthRegistration"),
},
];
return <CitizenHomeCard header={t("BirthRegistration")} links={links} Icon={() => <PTIcon className="fill-path-primary-main" />} />;
};
export const initBRComponents = () => {
Object.entries(componentsToRegister).forEach(([key, value]) => {
Digit.ComponentRegistryService.setComponent(key, value);
});
};
|
So After adding all components to the module.js again we need to enable modules into the web->src-> app.js and in example->src->index.js. there we need to import.
App.js:-
Code Block |
---|
import React from 'react'; import { initDSSComponents } from "@egovernments/digit-ui-module-dss"; import { PaymentModule, PaymentLinks, paymentConfigs } from "@egovernments/digit-ui-module-common"; import { DigitUI } from "@egovernments/digit-ui-module-core"; import { initLibraries } from "@egovernments/digit-ui-libraries"; import { initEngagementComponents } from "@egovernments/digit-ui-module-engagement"; import {initCustomisationComponents} from "./Customisations"; import { BRModule ,initBRComponents ,BRLinks} from "@egovernments/digit-ui-module-br"; initLibraries(); const enabledModules = ["Payment","QuickPayLinks", "DSS","Engagement", "BR"]; window.Digit.ComponentRegistryService.setupRegistry({ ...paymentConfigs, PaymentModule, PaymentLinks, BRModule, BRLinks, }); initBRComponents(); initDSSComponents(); initEngagementComponents(); initCustomisationComponents(); function App() { const stateCode = window.globalConfigs?.getConfig("STATE_LEVEL_TENANT_ID") || process.env.REACT_APP_STATE_LEVEL_TENANT_ID; if (!stateCode) { return <h1>stateCode is not defined</h1> } return ( <DigitUI stateCode={stateCode} enabledModules={enabledModules} /> ); } export default App; |
index.js:-
Code Block |
---|
import React from "react";
import ReactDOM from "react-dom";
import { initLibraries } from "@egovernments/digit-ui-libraries";
import { BRModule, initBRComponents ,BRLinks} from "@egovernments/digit-ui-module-br";
import { initDSSComponents } from "@egovernments/digit-ui-module-dss";
import { PaymentModule, PaymentLinks, paymentConfigs } from "@egovernments/digit-ui-module-common";
import { initEngagementComponents } from "@egovernments/digit-ui-module-engagement";
import { DigitUI } from "@egovernments/digit-ui-module-core";
import "@egovernments/digit-ui-css/example/index.css";
var Digit = window.Digit || {};
const enabledModules = [ "Payment","QuickPayLinks", "DSS","Engagement","BR"];
const initTokens = (stateCode) => {
const userType = window.sessionStorage.getItem("userType") || process.env.REACT_APP_USER_TYPE || "CITIZEN";
const token =window.localStorage.getItem("token")|| process.env[`REACT_APP_${userType}_TOKEN`];
const citizenInfo = window.localStorage.getItem("Citizen.user-info")
const citizenTenantId = window.localStorage.getItem("Citizen.tenant-id") || stateCode;
const employeeInfo = window.localStorage.getItem("Employee.user-info");
const employeeTenantId = window.localStorage.getItem("Employee.tenant-id");
const userTypeInfo = userType === "CITIZEN" || userType === "QACT" ? "citizen" : "employee";
window.Digit.SessionStorage.set("user_type", userTypeInfo);
window.Digit.SessionStorage.set("userType", userTypeInfo);
if (userType !== "CITIZEN") {
window.Digit.SessionStorage.set("User", { access_token: token, info: userType !== "CITIZEN" ? JSON.parse(employeeInfo) : citizenInfo });
} else {
// if (!window.Digit.SessionStorage.get("User")?.extraRoleInfo) window.Digit.SessionStorage.set("User", { access_token: token, info: citizenInfo });
}
window.Digit.SessionStorage.set("Citizen.tenantId", citizenTenantId);
if(employeeTenantId && employeeTenantId.length) window.Digit.SessionStorage.set("Employee.tenantId", employeeTenantId);
};
const initDigitUI = () => {
window?.Digit.ComponentRegistryService.setupRegistry({
PaymentModule,
BRModule,
PaymentLinks,
BRLinks,
});
initDSSComponents();
initEngagementComponents();
initBRComponents();
const stateCode = window?.globalConfigs?.getConfig("STATE_LEVEL_TENANT_ID") || "pb";
initTokens(stateCode);
const registry = window?.Digit.ComponentRegistryService.getRegistry();
ReactDOM.render(<DigitUI stateCode={stateCode} enabledModules={enabledModules} />, document.getElementById("root"));
};
initLibraries().then(() => {
initDigitUI();
});
|