diff --git a/frontend/micro-ui-internals/.gitignore b/frontend/micro-ui-internals/.gitignore new file mode 100644 index 00000000000..66bd56df0c2 --- /dev/null +++ b/frontend/micro-ui-internals/.gitignore @@ -0,0 +1,139 @@ + +# Created by https://www.toptal.com/developers/gitignore/api/node,react +# Edit at https://www.toptal.com/developers/gitignore?templates=node,react + +### eGov ### +packages/css/example/index.css +package-lock.json +locales/ +build/ + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test +.env*.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist +dist-storybook + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +### react ### +.DS_* +**/*.backup.* +**/*.back.* + +node_modules + +*.sublime* + +psd +thumb +sketch + +# vs code +.vscode/ + +# End of https://www.toptal.com/developers/gitignore/api/node,react diff --git a/frontend/micro-ui-internals/.prettierignore b/frontend/micro-ui-internals/.prettierignore new file mode 100644 index 00000000000..d54de016ef0 --- /dev/null +++ b/frontend/micro-ui-internals/.prettierignore @@ -0,0 +1,23 @@ + +# See https://help.github.com/ignore-files/ for more about ignoring files. +# dependencies +node_modules +# builds +build +dist +.rpt2_cache +# dev +dev.css +index.css +index.compat.css +index.min.css +# misc +.DS_Store +.env +.env.local +.env.development.local +.env.test.local +.env.production.local +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/frontend/micro-ui-internals/.prettierrc.json b/frontend/micro-ui-internals/.prettierrc.json new file mode 100644 index 00000000000..b975008d6f8 --- /dev/null +++ b/frontend/micro-ui-internals/.prettierrc.json @@ -0,0 +1,3 @@ +{ + "printWidth": 150 +} diff --git a/frontend/micro-ui-internals/.vscode/settings.json b/frontend/micro-ui-internals/.vscode/settings.json new file mode 100644 index 00000000000..d7427189b62 --- /dev/null +++ b/frontend/micro-ui-internals/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.hover.delay": 500 +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/CODEOWNERS b/frontend/micro-ui-internals/CODEOWNERS new file mode 100644 index 00000000000..cdfa4a7ff2a --- /dev/null +++ b/frontend/micro-ui-internals/CODEOWNERS @@ -0,0 +1 @@ +* @jagankumar-egov @saurabh-egov @sathishp-eGov diff --git a/frontend/micro-ui-internals/README.md b/frontend/micro-ui-internals/README.md new file mode 100644 index 00000000000..006ee046f0f --- /dev/null +++ b/frontend/micro-ui-internals/README.md @@ -0,0 +1,34 @@ +# digit-ui-internals + +DIGIT (Digital Infrastructure for Governance, Impact & Transformation) is India's largest platform for governance services. Visit https://www.digit.org for more details. + +This repository contains source code for web implementation of the new Digit UI modules with dependencies and libraries. + +#### Starting local server + +1. In the project run **yarn install** to install node modules and dependencies +1. Run **yarn start** to start the local server + +#### Reference Docs + +###### Module wise reference docs + +| Module | Reference Docs | +| -------------- | ------------------------------------------------------------------------------------------------------------ | +| PGR | https://digit-discuss.atlassian.net/wiki/spaces/EPE/pages/1285587062/PGR+UI+Implementation+-+Guidelines+FAQs | +| FSM | https://digit-discuss.atlassian.net/wiki/spaces/EPE/pages/1290567710/FSM+UI+Implementation+-+Guidelines+FAQs | +| DIGIT Services | https://digit-discuss.atlassian.net/wiki/spaces/DD/pages/647364616/DIGIT+Services | + +###### Dependencies and their references + +1. https://www.npmjs.com/package/react-query +2. https://react-redux.js.org/ +3. https://react-hook-form.com/ +4. https://www.npmjs.com/package/react-table +5. https://www.npmjs.com/package/react-time-picker +6. https://reactrouter.com/web/guides/quick-start +7. https://recharts.org/ + +#### License + +These reference apps are released under MIT diff --git a/frontend/micro-ui-internals/clean.sh b/frontend/micro-ui-internals/clean.sh new file mode 100755 index 00000000000..2235ef1c1d0 --- /dev/null +++ b/frontend/micro-ui-internals/clean.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +BASEDIR="$( cd "$( dirname "$0" )" && pwd )" + +msg() { + echo -e "\n\n\033[32;32m$1\033[0m" +} + +msg "Cleaning root" +rm -rf node_modules + +msg "Cleaning css" +cd "$BASEDIR/packages/css" && rm -rf node_modules + +msg "Cleaning libraries" +cd "$BASEDIR/packages/libraries" && rm -rf node_modules + +msg "Cleaning react-components" +cd "$BASEDIR/packages/react-components" && rm -rf node_modules + +msg "Cleaning PGR module" +cd "$BASEDIR/packages/modules/pgr" && rm -rf node_modules + +msg "Cleaning FSM module" +cd "$BASEDIR/packages/modules/fsm" && rm -rf node_modules + +msg "Cleaning Core module" +cd "$BASEDIR/packages/modules/core" && rm -rf node_modules diff --git a/frontend/micro-ui-internals/example/package.json b/frontend/micro-ui-internals/example/package.json new file mode 100644 index 00000000000..246b0ed5ab5 --- /dev/null +++ b/frontend/micro-ui-internals/example/package.json @@ -0,0 +1,39 @@ +{ + "name": "@egovernments/digit-ui-example", + "version": "1.3.0", + "main": "index.js", + "license": "MIT", + "private": true, + "homepage": "digit-ui/", + "scripts": { + "start": "react-scripts start" + }, + "devDependencies": { + "@egovernments/digit-ui-libraries": "^1.3.0", + "@egovernments/digit-ui-module-common": "^1.3.0", + "@egovernments/digit-ui-module-fsm": "^1.3.0", + "@egovernments/digit-ui-module-pgr": "^1.3.0", + "@egovernments/digit-ui-module-pt": "^1.3.0", + "@egovernments/digit-ui-module-mcollect": "^1.3.0", + "@egovernments/digit-ui-module-tl":"^1.3.0", + "@egovernments/digit-ui-module-receipts":"^1.3.0", + "http-proxy-middleware": "^1.0.5", + "react": "^17.0.0", + "react-dom": "^17.0.0", + "react-i18next": "^11.7.3", + "react-router-dom": "^5.2.0", + "react-scripts": "^4.0.1" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/frontend/micro-ui-internals/example/public/index.html b/frontend/micro-ui-internals/example/public/index.html new file mode 100644 index 00000000000..a677acab79d --- /dev/null +++ b/frontend/micro-ui-internals/example/public/index.html @@ -0,0 +1,35 @@ + + + + + + + + + mSeva + + + + + + +
+ + + diff --git a/frontend/micro-ui-internals/example/src/ComponentRegistry.js b/frontend/micro-ui-internals/example/src/ComponentRegistry.js new file mode 100644 index 00000000000..9bafce3dc89 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/ComponentRegistry.js @@ -0,0 +1,11 @@ +class Registry { + constructor(registry = {}) { + this._registry = registry; + } + + getComponent(id) { + return this._registry[id]; + } +} + +export default Registry; diff --git a/frontend/micro-ui-internals/example/src/complaintConfig.js b/frontend/micro-ui-internals/example/src/complaintConfig.js new file mode 100644 index 00000000000..28c85515205 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/complaintConfig.js @@ -0,0 +1,31 @@ +export const config = { + routes: { + "complaint-type": { + nextStep: "pincode", + }, + landmark: { + nextStep: "apartment", + }, + apartment: { + component: "SelectName", + texts: { + header: "Apartment or Society", + cardText: "CS_COMPLAINT_SUBTYPE_TEXT", + submitBarLabel: "PT_COMMONS_NEXT", + }, + inputs: [ + { + label: "Apartment", + type: "text", + name: "custom.additionalDetails.apartment", + validation: { + minLength: 6, + maxLength: 7, + }, + error: "CORE_COMMON_PINCODE_INVALID", + }, + ], + nextStep: "upload-photos", + }, + }, +}; diff --git a/frontend/micro-ui-internals/example/src/components/SelectName.js b/frontend/micro-ui-internals/example/src/components/SelectName.js new file mode 100644 index 00000000000..4dd7b550001 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/components/SelectName.js @@ -0,0 +1,7 @@ +import { FormStep } from "@egovernments/digit-ui-react-components"; + +const SelectName = ({ config, onSelect, onSkip, t }) => { + return ; +}; + +export default SelectName; diff --git a/frontend/micro-ui-internals/example/src/fsm.js b/frontend/micro-ui-internals/example/src/fsm.js new file mode 100644 index 00000000000..271d3ddad56 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/fsm.js @@ -0,0 +1,38 @@ +const fsmCustomizations = { + getEmployeeApplicationCustomization: (config, t) => { + const employeeConfig = [ + { + name: "applicationDetails", + // fields: ["sanitationType", "applicationChannel"], + // fieldsOrder: {sanitationType: 0, applicationChannel: 1}, // TODO + allFields: true, // for example: If in applicationDetails you have 10 fields and in fieldsOrder you only enter 3 fields name then on browser you will only see 3 fields in that order but if you want to see rest of 7 fields at the bottom. + // removeFields: ["applicantName"], // type the name of the field in camelCase to remove it + addFields: [ + // by default all the custom fields will add at the bottom, you can add "field name" to "fieldsOrder" if you want them in your custom order. + { + name: "example", + label: t("EXAMPLE"), + type: "text", + isMandatory: true, + populators: { + name: "example", + validation: { + required: true, + pattern: /[A-Za-z]/, + }, + }, + }, + ], + }, + ]; + + return { + config: employeeConfig, + defaultConfig: true, // You want to use defaultConfig and you only want to update one field section. The above employeeConfig is also an order for all the field section. So if defaultConfig is false then on browser you will only see those field section who are inside employeeConfig + }; + }, +}; + +const fsmComponents = {}; + +export { fsmCustomizations, fsmComponents }; diff --git a/frontend/micro-ui-internals/example/src/index.js b/frontend/micro-ui-internals/example/src/index.js new file mode 100644 index 00000000000..cf789602ce2 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/index.js @@ -0,0 +1,174 @@ +import React from "react"; +import ReactDOM from "react-dom"; + +import { initLibraries } from "@egovernments/digit-ui-libraries"; +import { PGRModule, PGRLinks, PGRReducers } from "@egovernments/digit-ui-module-pgr"; +import { PTModule, PTLinks, PTComponents } from "@egovernments/digit-ui-module-pt"; +import { MCollectModule, MCollectLinks } from "@egovernments/digit-ui-module-mcollect"; +// import { TLModule, TLLinks } from "@egovernments/digit-ui-module-tl"; +import { initFSMComponents } from "@egovernments/digit-ui-module-fsm"; +import { initPGRComponents } from "@egovernments/digit-ui-module-pgr"; +import { initDSSComponents } from "@egovernments/digit-ui-module-dss"; +import { initHRMSComponents } from "@egovernments/digit-ui-module-hrms"; +import { initReceiptsComponents, ReceiptsModule } from "@egovernments/digit-ui-module-receipts"; +import { initMCollectComponents } from "@egovernments/digit-ui-module-mcollect"; +import { initTLComponents } from "@egovernments/digit-ui-module-tl"; +import { PaymentModule, PaymentLinks, paymentConfigs } from "@egovernments/digit-ui-module-common"; +import { HRMSModule } from "@egovernments/digit-ui-module-hrms"; +import { DigitUI } from "@egovernments/digit-ui-module-core"; +// import { PGRModule, PGRLinks } from "@egovernments/digit-ui-module-pgr"; +// import { Body, TopBar } from "@egovernments/digit-ui-react-components"; +import "@egovernments/digit-ui-css/example/index.css"; + +import CITIZEN from "./userInfo/citizen.json"; +import EMPLOYEE from "./userInfo/employee.json"; +import LME from "./userInfo/lme.json"; +import GRO from "./userInfo/gro.json"; +import QAGRO from "./userInfo/qa-gro.json"; +import QACSR from "./userInfo/qa-csr.json"; +import QACT from "./userInfo/qa-citizen.json"; +import QADSO from "./userInfo/qa-dso.json"; +import QAPGRCSR from "./userInfo/QAPGRCSR.json"; + +import FSM_EDITOR from "./userInfo/fsm-editor.json"; +import FSM_COLLECTOR from "./userInfo/fsm-collector.json"; +import FSM_FSTP from "./userInfo/fsm-fstp.json"; +import FSM_DSO from "./userInfo/fsm-dso.json"; +import FSM_ADMIN from "./userInfo/fsm-admin.json"; +import FSM_CREATOR from "./userInfo/fsm-creator.json"; +import QA_FSM_CREATOR from "./userInfo/QACE.json"; +import QA_FSM_EDITOR from "./userInfo/QAEE.json"; +import QA_FSM_COLLECTOR from "./userInfo/QACOLL.json"; +import QA_FSM_DSO from "./userInfo/QADSO.json"; +import QA_FSM_FSTP from "./userInfo/QAFSTPO.json"; +import QA_CECOLL from "./userInfo/qa-cecoll.json"; +import QACREDITOR from "./userInfo/QACREDITOR.json"; +import QACREATOR from "./userInfo/QACREATOR.json"; + +import QAFSTP from "./userInfo/fstp.json"; +import QAADMIN from "./userInfo/QAADMIN.json"; + +import QAPTCE from "./userInfo/QAPTCE.json"; +import QAPTDV from "./userInfo/QAPTDV.json"; +import QAPTFI from "./userInfo/QAPTFI.json"; +import QAPTA from "./userInfo/QAPTA.json"; + +import UATSU from "./userInfo/UATSU.json"; +import UATCSR from "./userInfo/UATCSR.json"; +import UATHRMS from "./userInfo/UATHRMS.json"; + +import NAWANSHAHR_QA_GRO from "./userInfo/qa-gro-nawanshahr.json"; + +import * as comps from "@egovernments/digit-ui-react-components"; + +import { subFormRegistry } from "@egovernments/digit-ui-libraries"; + +import { pgrCustomizations, pgrComponents } from "./pgr"; + +const userInfo = { + CITIZEN, + EMPLOYEE, + LME, + GRO, + QACSR, + QACT, + QAGRO, + QADSO, + FSM_ADMIN, + FSM_CREATOR, + FSM_EDITOR, + FSM_COLLECTOR, + FSM_FSTP, + FSM_DSO, + NAWANSHAHR_QA_GRO, + QA_FSM_COLLECTOR, + QA_FSM_CREATOR, + QA_FSM_DSO, + QA_FSM_EDITOR, + QA_FSM_FSTP, + QA_CECOLL, + QACREDITOR, + QAADMIN, + QACREATOR, + UATSU, + UATCSR, + UATHRMS, + QAPTCE, + QAPTDV, + QAPTFI, + QAPTA, + QAPGRCSR, +}; + +const enabledModules = ["PGR", "FSM", "Payment", "PT", "QuickPayLinks", "DSS", "MCollect", "HRMS", "TL", "Receipts"]; + +const initTokens = (stateCode) => { + const userType = window.sessionStorage.getItem("userType") || process.env.REACT_APP_USER_TYPE || "CITIZEN"; + + const token = window.sessionStorage.getItem("token") || process.env[`REACT_APP_${userType}_TOKEN`]; + + // console.log(token); + + const citizenInfo = window.localStorage.getItem("Citizen.user-info") || userInfo[userType]; + + const citizenTenantId = window.localStorage.getItem("Citizen.tenant-id") || stateCode; + + const employeeInfo = window.localStorage.getItem("Employee.user-info") || userInfo[userType]; + const employeeTenantId = window.localStorage.getItem("Employee.tenant-id") || "pb.amritsar"; + + 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" ? 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); + window.Digit.SessionStorage.set("Employee.tenantId", employeeTenantId); +}; + +const initDigitUI = () => { + Digit.ComponentRegistryService.setupRegistry({ + ...pgrComponents, + PaymentModule, + ...paymentConfigs, + PaymentLinks, + PTModule, + PTLinks, + ...PTComponents, + MCollectLinks, + MCollectModule, + HRMSModule, + ReceiptsModule, + // TLModule, + // TLLinks, + }); + + initFSMComponents(); + initPGRComponents(); + initDSSComponents(); + initMCollectComponents(); + initHRMSComponents(); + initTLComponents(); + initReceiptsComponents(); + + const moduleReducers = (initData) => ({ + pgr: PGRReducers(initData), + }); + + window.Digit.Customizations = { PGR: pgrCustomizations }; + + const stateCode = window?.globalConfigs?.getConfig("STATE_LEVEL_TENANT_ID") || "pb"; + initTokens(stateCode); + + const registry = Digit.ComponentRegistryService.getRegistry(); + console.log(registry); + ReactDOM.render(, document.getElementById("root")); +}; + +initLibraries().then(() => { + initDigitUI(); +}); diff --git a/frontend/micro-ui-internals/example/src/pgr.js b/frontend/micro-ui-internals/example/src/pgr.js new file mode 100644 index 00000000000..93f8524e28a --- /dev/null +++ b/frontend/micro-ui-internals/example/src/pgr.js @@ -0,0 +1,15 @@ +import SelectName from "./components/SelectName"; + +import { config as complaintConfig } from "./complaintConfig"; + +const pgrCustomizations = { + // complaintConfig, + getComplaintDetailsTableRows: ({ id, service, role, t }) => { + return {}; + }, +}; + +const pgrComponents = { + SelectName: SelectName, +}; +export { pgrCustomizations, pgrComponents }; diff --git a/frontend/micro-ui-internals/example/src/setupProxy.js b/frontend/micro-ui-internals/example/src/setupProxy.js new file mode 100644 index 00000000000..7bed376185e --- /dev/null +++ b/frontend/micro-ui-internals/example/src/setupProxy.js @@ -0,0 +1,48 @@ +const { createProxyMiddleware } = require("http-proxy-middleware"); + +const createProxy = createProxyMiddleware({ + //target: process.env.REACT_APP_PROXY_API || "https://uat.digit.org", + target: process.env.REACT_APP_PROXY_API || "https://qa.digit.org", + // target: process.env.REACT_APP_PROXY_API || "https://dev.digit.org", + changeOrigin: true, +}); +const assetsProxy = createProxyMiddleware({ + target: process.env.REACT_APP_PROXY_ASSETS || "https://qa.digit.org", + changeOrigin: true, +}); +module.exports = function (app) { + [ + "/egov-mdms-service", + "/egov-location", + "/localization", + "/egov-workflow-v2", + "/pgr-services", + "/filestore", + "/egov-hrms", + "/user-otp", + "/user", + "/fsm", + "/billing-service", + "/collection-services", + "/pdf-service", + "/pg-service", + "/vehicle", + "/vendor", + "/property-services", + "/fsm-calculator/v1/billingSlab/_search", + "/pt-calculator-v2", + "/dashboard-analytics", + "/echallan-services", + "/egov-searcher/bill-genie/mcollectbills/_get", + "/egov-searcher/bill-genie/billswithaddranduser/_get", + "/egov-pdf/download/UC/mcollect-challan", + "/egov-hrms/employees/_count", + "/tl-services/v1/_create", + "/tl-services/v1/_search", + "/egov-url-shortening/shortener", + "/inbox/v1/_search", + "/tl-services", + "/tl-calculator", + ].forEach((location) => app.use(location, createProxy)); + ["/pb-egov-assets"].forEach((location) => app.use(location, assetsProxy)); +}; diff --git a/frontend/micro-ui-internals/example/src/userInfo/QAADMIN.json b/frontend/micro-ui-internals/example/src/userInfo/QAADMIN.json new file mode 100644 index 00000000000..11dbb71fe88 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/QAADMIN.json @@ -0,0 +1,34 @@ +{ + "id": 12074, + "uuid": "d0710c4c-728a-446d-bc7e-d4614efe1463", + "userName": "QAADMIN", + "name": "FSM Admin", + "mobileNumber": "9966999999", + "emailId": null, + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "FSM Employee Application Viewer", + "code": "FSM_VIEW_EMP", + "tenantId": "pb.amritsar" + }, + { + "name": "FSM Administrator", + "code": "FSM_ADMIN", + "tenantId": "pb.amritsar" + }, + { + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pb.amritsar" + }, + { + "name": "EMPLOYEE ADMIN", + "code": "EMPLOYEE ADMIN", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar" + } \ No newline at end of file diff --git a/frontend/micro-ui-internals/example/src/userInfo/QACE.json b/frontend/micro-ui-internals/example/src/userInfo/QACE.json new file mode 100644 index 00000000000..6788d9732ec --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/QACE.json @@ -0,0 +1,24 @@ +{ + "id": 12069, + "uuid": "29a02577-7f30-4d00-9041-0c499e34fd87", + "userName": "QACE", + "name": "Employee Creator", + "mobileNumber": "9911999999", + "emailId": null, + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pb.amritsar" + }, + { + "name": "FSM Employee Application Creator", + "code": "FSM_CREATOR_EMP", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar" +} diff --git a/frontend/micro-ui-internals/example/src/userInfo/QACOLL.json b/frontend/micro-ui-internals/example/src/userInfo/QACOLL.json new file mode 100644 index 00000000000..eeae16b086a --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/QACOLL.json @@ -0,0 +1,34 @@ +{ + "id": 12079, + "uuid": "1c791c44-41aa-46c7-aaa0-96896c97c219", + "userName": "QACOLL", + "name": "FSM Collector", + "mobileNumber": "9999229999", + "emailId": null, + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "FSM Employee Application Viewer", + "code": "FSM_VIEW_EMP", + "tenantId": "pb.amritsar" + }, + { + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pb.amritsar" + }, + { + "name": "FSM Payment Collector", + "code": "FSM_COLLECTOR", + "tenantId": "pb.amritsar" + }, + { + "name": "EMPLOYEE ADMIN", + "code": "EMPLOYEE ADMIN", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar" +} diff --git a/frontend/micro-ui-internals/example/src/userInfo/QACREATOR.json b/frontend/micro-ui-internals/example/src/userInfo/QACREATOR.json new file mode 100644 index 00000000000..07cc62f2eb6 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/QACREATOR.json @@ -0,0 +1,24 @@ +{ + "id": 12069, + "uuid": "29a02577-7f30-4d00-9041-0c499e34fd87", + "userName": "QACE", + "name": "Employee Creator", + "mobileNumber": "9911999999", + "emailId": null, + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pb.amritsar" + }, + { + "name": "FSM Employee Application Creator", + "code": "FSM_CREATOR_EMP", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar" + } \ No newline at end of file diff --git a/frontend/micro-ui-internals/example/src/userInfo/QACREDITOR.json b/frontend/micro-ui-internals/example/src/userInfo/QACREDITOR.json new file mode 100644 index 00000000000..782fc5b810c --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/QACREDITOR.json @@ -0,0 +1,64 @@ +{ + "id": 17082, + "userName": "QACREDITOR", + "salutation": null, + "name": "Test CE", + "gender": "FEMALE", + "mobileNumber": "9909888888", + "emailId": "", + "altContactNumber": null, + "pan": null, + "aadhaarNumber": null, + "permanentAddress": null, + "permanentCity": null, + "permanentPinCode": null, + "correspondenceAddress": null, + "correspondenceCity": null, + "correspondencePinCode": null, + "active": true, + "locale": null, + "type": "EMPLOYEE", + "accountLocked": false, + "accountLockedDate": 0, + "fatherOrHusbandName": "Test", + "relationship": "FATHER", + "signature": null, + "bloodGroup": null, + "photo": null, + "identificationMark": null, + "createdBy": 12011, + "lastModifiedBy": 1, + "tenantId": "pb.amritsar", + "roles": [ + { + "code": "FSM_VIEW_EMP", + "name": "FSM Employee Application Viewer", + "tenantId": "pb.amritsar" + }, + { + "code": "EMPLOYEE", + "name": "Employee", + "tenantId": "pb.amritsar" + }, + { + "code": "FSM_CREATOR_EMP", + "name": "FSM Employee Application Creator", + "tenantId": "pb.amritsar" + }, + { + "code": "EMPLOYEE ADMIN", + "name": "EMPLOYEE ADMIN", + "tenantId": "pb.amritsar" + }, + { + "code": "FSM_EDITOR_EMP", + "name": "FSM Employee Application Editor", + "tenantId": "pb.amritsar" + } + ], + "uuid": "adac9cf8-7f91-47c3-a013-03825309587d", + "createdDate": "01-03-2021 12:45:40", + "lastModifiedDate": "01-03-2021 12:56:30", + "dob": "9/9/1990", + "pwdExpiryDate": "30-05-2021 12:45:40" +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/example/src/userInfo/QADSO.json b/frontend/micro-ui-internals/example/src/userInfo/QADSO.json new file mode 100644 index 00000000000..032598a927e --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/QADSO.json @@ -0,0 +1,39 @@ +{ + "id": 12075, + "uuid": "6d6f2ee7-cb16-4e96-af07-66da0480694a", + "userName": "QADSO", + "name": "Jack", + "mobileNumber": "9977999999", + "emailId": "", + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "FSM Employee Application Viewer", + "code": "FSM_VIEW_EMP", + "tenantId": "pb.amritsar" + }, + { + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pb.amritsar" + }, + { + "name": "FSM Desluding Operator", + "code": "FSM_DSO", + "tenantId": "pb.amritsar" + }, + { + "name": "EMPLOYEE ADMIN", + "code": "EMPLOYEE ADMIN", + "tenantId": "pb.amritsar" + }, + { + "name": "FSM Employee Application Editor", + "code": "FSM_EDITOR_EMP", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar" +} diff --git a/frontend/micro-ui-internals/example/src/userInfo/QAEE.json b/frontend/micro-ui-internals/example/src/userInfo/QAEE.json new file mode 100644 index 00000000000..1a0d61be48e --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/QAEE.json @@ -0,0 +1,34 @@ +{ + "id": 12070, + "uuid": "97a111f0-e2fc-40ee-976f-96acfa1d085b", + "userName": "QAEE", + "name": "Employee Editor", + "mobileNumber": "9922999999", + "emailId": null, + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "FSM Employee Application Viewer", + "code": "FSM_VIEW_EMP", + "tenantId": "pb.amritsar" + }, + { + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pb.amritsar" + }, + { + "name": "EMPLOYEE ADMIN", + "code": "EMPLOYEE ADMIN", + "tenantId": "pb.amritsar" + }, + { + "name": "FSM Employee Application Editor", + "code": "FSM_EDITOR_EMP", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar" +} diff --git a/frontend/micro-ui-internals/example/src/userInfo/QAFSTPO.json b/frontend/micro-ui-internals/example/src/userInfo/QAFSTPO.json new file mode 100644 index 00000000000..2d316b9faf1 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/QAFSTPO.json @@ -0,0 +1,34 @@ +{ + "id": 12077, + "uuid": "55ffb0dd-0fe2-4dc0-92d0-745d57534ab0", + "userName": "QAFSTPO", + "name": "Emp FSTPO", + "mobileNumber": "9999119999", + "emailId": null, + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "FSM Employee Application Viewer", + "code": "FSM_VIEW_EMP", + "tenantId": "pb.amritsar" + }, + { + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pb.amritsar" + }, + { + "name": "FSM FSTP Opperator", + "code": "FSM_EMP_FSTPO", + "tenantId": "pb.amritsar" + }, + { + "name": "EMPLOYEE ADMIN", + "code": "EMPLOYEE ADMIN", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar" +} diff --git a/frontend/micro-ui-internals/example/src/userInfo/QAPGRCSR.json b/frontend/micro-ui-internals/example/src/userInfo/QAPGRCSR.json new file mode 100644 index 00000000000..38baa89a7a7 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/QAPGRCSR.json @@ -0,0 +1,20 @@ +{ + "id": 12024, + "uuid": "c7f34f4b-baca-42ea-80a4-d81a781ae80e", + "userName": "QAPGRCSR", + "name": "QA CSR", + "mobileNumber": "8977889788", + "emailId": null, + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "Customer Support Representative", + "code": "CSR", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar", + "permanentCity": null + } \ No newline at end of file diff --git a/frontend/micro-ui-internals/example/src/userInfo/QAPTA.json b/frontend/micro-ui-internals/example/src/userInfo/QAPTA.json new file mode 100644 index 00000000000..7bcc96c7b36 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/QAPTA.json @@ -0,0 +1,19 @@ +{ + "id": 12021, + "uuid": "3ee5dd0d-2b6b-4d2f-88c0-c23960c42af4", + "userName": "QAPTA", + "name": "Das", + "mobileNumber": "9876543210", + "emailId": null, + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "PT Counter Approver", + "code": "PT_APPROVER", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar" +} diff --git a/frontend/micro-ui-internals/example/src/userInfo/QAPTCE.json b/frontend/micro-ui-internals/example/src/userInfo/QAPTCE.json new file mode 100644 index 00000000000..d4d4ed9dfd0 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/QAPTCE.json @@ -0,0 +1,40 @@ +{ + "id": 25802, + "uuid": "a24d397c-3d5a-4186-8807-9bd73ed0a027", + "userName": "EMP-107-001926", + "name": "QAPTCE", + "mobileNumber": "7898754654", + "emailId": null, + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "PT Doc Verifier", + "code": "PT_DOC_VERIFIER", + "tenantId": "pb.amritsar" + }, + { + "name": "PT Counter Employee", + "code": "PT_CEMP", + "tenantId": "pb.amritsar" + }, + { + "name": "PT Field Inspector", + "code": "PT_FIELD_INSPECTOR", + "tenantId": "pb.amritsar" + }, + { + "name": "PT Counter Approver", + "code": "PT_APPROVER", + "tenantId": "pb.amritsar" + }, + { + "name": "Property Approver", + "code": "Property Approver", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar", + "permanentCity": null +} diff --git a/frontend/micro-ui-internals/example/src/userInfo/QAPTDV.json b/frontend/micro-ui-internals/example/src/userInfo/QAPTDV.json new file mode 100644 index 00000000000..b3a43eae593 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/QAPTDV.json @@ -0,0 +1,19 @@ +{ + "id": 12014, + "uuid": "e4d6f4d6-4a67-4f9e-b7b6-3705ee2ee4d7", + "userName": "QAPTDV", + "name": "irfan", + "mobileNumber": "9999999992", + "emailId": null, + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "PT Doc Verifier", + "code": "PT_DOC_VERIFIER", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar" +} diff --git a/frontend/micro-ui-internals/example/src/userInfo/QAPTFI.json b/frontend/micro-ui-internals/example/src/userInfo/QAPTFI.json new file mode 100644 index 00000000000..e878dd96017 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/QAPTFI.json @@ -0,0 +1,19 @@ +{ + "id": 12020, + "uuid": "0491b387-f134-42b5-a48c-abdee61ee2df", + "userName": "QAPTFI", + "name": "darshan", + "mobileNumber": "9999999994", + "emailId": null, + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "PT Field Inspector", + "code": "PT_FIELD_INSPECTOR", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar" +} diff --git a/frontend/micro-ui-internals/example/src/userInfo/QAVE.json b/frontend/micro-ui-internals/example/src/userInfo/QAVE.json new file mode 100644 index 00000000000..19da1f7517e --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/QAVE.json @@ -0,0 +1,29 @@ +{ + "id": 12071, + "uuid": "dbd9baa3-1f80-4f70-82be-441f6f731dad", + "userName": "QAVE", + "name": "Employee View", + "mobileNumber": "9933999999", + "emailId": null, + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "FSM Employee Application Viewer", + "code": "FSM_VIEW_EMP", + "tenantId": "pb.amritsar" + }, + { + "name": "EMPLOYEE ADMIN", + "code": "EMPLOYEE ADMIN", + "tenantId": "pb.amritsar" + }, + { + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar" +} diff --git a/frontend/micro-ui-internals/example/src/userInfo/UATCSR.json b/frontend/micro-ui-internals/example/src/userInfo/UATCSR.json new file mode 100644 index 00000000000..371ff526c6e --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/UATCSR.json @@ -0,0 +1,23 @@ +{ + "id": 2006, + "uuid": "e38dba9f-b056-4684-a916-2c5e8e716c38", + "userName": "UATCSR1", + "name": "Shanmugam", + "mobileNumber": "7895875821", + "emailId": null, + "locale": null, + "type": "EMPLOYEE", + "roles": [{ + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pg.citya" + }, + { + "name": "Customer Support Representative", + "code": "CSR", + "tenantId": "pg.citya" + } + ], + "active": true, + "tenantId": "pg.citya" +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/example/src/userInfo/UATHRMS.json b/frontend/micro-ui-internals/example/src/userInfo/UATHRMS.json new file mode 100644 index 00000000000..388910c01b7 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/UATHRMS.json @@ -0,0 +1,63 @@ +{ + "id": 4727, + "uuid": "e1c7eff9-6666-4e6a-8f95-bc094db1be0d", + "userName": "EMP-HRMS2", + "name": "UAT HRMS", + "mobileNumber": "8767688766", + "emailId": null, + "locale": null, + "type": "EMPLOYEE", + "roles": [{ + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pg.citya" + }, + { + "name": "HRMS ADMIN", + "code": "HRMS_ADMIN", + "tenantId": "pg.citya" + }, + { + "name": "HRMS ADMIN", + "code": "HRMS_ADMIN", + "tenantId": "pg.cityb" + }, + { + "name": "HRMS ADMIN", + "code": "HRMS_ADMIN", + "tenantId": "pg.cityc" + }, + { + "name": "Super User", + "code": "SUPERUSER", + "tenantId": "pg.cityc" + }, + { + "name": "Super User", + "code": "SUPERUSER", + "tenantId": "pg.cityb" + }, + { + "name": "State Administrator", + "code": "STADMIN", + "tenantId": "pg.citya" + }, + { + "name": "Super User", + "code": "SUPERUSER", + "tenantId": "pg" + }, + { + "name": "Super User", + "code": "SUPERUSER", + "tenantId": "pg.citya" + }, + { + "name": "HRMS ADMIN", + "code": "HRMS_ADMIN", + "tenantId": "pg" + } + ], + "active": true, + "tenantId": "pg.citya" +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/example/src/userInfo/UATSU.json b/frontend/micro-ui-internals/example/src/userInfo/UATSU.json new file mode 100644 index 00000000000..c46082bc70e --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/UATSU.json @@ -0,0 +1,39 @@ +{ + "id": 5746, + "uuid": "726ecdc0-e2d1-421e-ae42-5af5b4450efd", + "userName": "EMPFSM01", + "name": "Saniyo", + "mobileNumber": "9448031427", + "emailId": null, + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "FSM Employee Application Editor", + "code": "FSM_EDITOR_EMP", + "tenantId": "pg.balasore" + }, + { + "name": "FSM Payment Collector", + "code": "FSM_COLLECTOR", + "tenantId": "pg.balasore" + }, + { + "name": "FSM Administrator", + "code": "FSM_ADMIN", + "tenantId": "pg.balasore" + }, + { + "name": "FSM Employee Application Creator", + "code": "FSM_CREATOR_EMP", + "tenantId": "pg.balasore" + }, + { + "name": "HRMS ADMIN", + "code": "HRMS_ADMIN", + "tenantId": "pg.balasore" + } + ], + "active": true, + "tenantId": "pg.balasore" + } \ No newline at end of file diff --git a/frontend/micro-ui-internals/example/src/userInfo/citizen.json b/frontend/micro-ui-internals/example/src/userInfo/citizen.json new file mode 100644 index 00000000000..cfdf499872b --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/citizen.json @@ -0,0 +1,19 @@ +{ + "id": 12153, + "uuid": "5e5070d3-96ff-4009-b018-305a682dec53", + "userName": "9999999999", + "name": "Test", + "mobileNumber": "9999999999", + "emailId": "", + "locale": null, + "type": "CITIZEN", + "roles": [ + { + "name": "Citizen", + "code": "CITIZEN", + "tenantId": "pb" + } + ], + "active": true, + "tenantId": "pb" +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/example/src/userInfo/employee.json b/frontend/micro-ui-internals/example/src/userInfo/employee.json new file mode 100644 index 00000000000..610e0450d05 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/employee.json @@ -0,0 +1,174 @@ +{ + "id": 24226, + "uuid": "11b0e02b-0145-4de2-bc42-c97b96264807", + "userName": "amr001", + "name": "leela", + "mobileNumber": "9814424443", + "emailId": "leela@llgmail.com", + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "NoC counter employee", + "code": "NOC_CEMP", + "tenantId": "pb.amritsar" + }, + { + "name": "Grievance Routing Officer", + "code": "CR_PT", + "tenantId": "pb.amritsar" + }, + { + "name": "WS Document Verifier", + "code": "WS_DOC_VERIFIER", + "tenantId": "pb.amritsar" + }, + { + "name": "TL Field Inspector", + "code": "TL_FIELD_INSPECTOR", + "tenantId": "pb.amritsar" + }, + { + "name": "BPA Field Inspector", + "code": "BPA_FIELD_INSPECTOR", + "tenantId": "pb.amritsar" + }, + { + "name": "TL Approver", + "code": "TL_APPROVER", + "tenantId": "pb.amritsar" + }, + { + "name": "BPA Services Approver", + "code": "BPA_APPROVER", + "tenantId": "pb.amritsar" + }, + { + "name": "Field Employee", + "code": "FEMP", + "tenantId": "pb.amritsar" + }, + { + "name": "Counter Employee", + "code": "CEMP", + "tenantId": "pb.amritsar" + }, + { + "name": "WS Counter Employee", + "code": "WS_CEMP", + "tenantId": "pb.amritsar" + }, + { + "name": "BPAREG Approver", + "code": "BPAREG_APPROVER", + "tenantId": "pb.amritsar" + }, + { + "name": "WS Field Inspector", + "code": "WS_FIELD_INSPECTOR", + "tenantId": "pb.amritsar" + }, + { + "name": "Collection Operator", + "code": "COLL_OPERATOR", + "tenantId": "pb.amritsar" + }, + { + "name": "TL doc verifier", + "code": "TL_DOC_VERIFIER", + "tenantId": "pb.amritsar" + }, + { + "name": "CSC Collection Operator", + "code": "CSC_COLL_OPERATOR", + "tenantId": "pb.amritsar" + }, + { + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pb.amritsar" + }, + { + "name": "TL Counter Employee", + "code": "TL_CEMP", + "tenantId": "pb.amritsar" + }, + { + "name": "TL Creator", + "code": "TL_CREATOR", + "tenantId": "pb.amritsar" + }, + { + "name": "BPAREG doc verifier", + "code": "BPAREG_DOC_VERIFIER", + "tenantId": "pb.amritsar" + }, + { + "name": "Customer Support Representative", + "code": "CSR", + "tenantId": "pb.amritsar" + }, + { + "name": "NoC counter Approver", + "code": "NOC_APPROVER", + "tenantId": "pb.amritsar" + }, + { + "name": "HRMS Admin", + "code": "HRMS_ADMIN", + "tenantId": "pb.amritsar" + }, + { + "name": "Universal Collection Employee", + "code": "UC_EMP", + "tenantId": "pb.amritsar" + }, + { + "name": "WS Approver", + "code": "WS_APPROVER", + "tenantId": "pb.amritsar" + }, + { + "name": "BPA Services verifier", + "code": "BPA_VERIFIER", + "tenantId": "pb.amritsar" + }, + { + "name": "PT Counter Approver", + "code": "PT_APPROVER", + "tenantId": "pb.amritsar" + }, + { + "name": "NoC Field Inpector", + "code": "NOC_FIELD_INSPECTOR", + "tenantId": "pb.amritsar" + }, + { + "name": "Grievance Officer", + "code": "GO", + "tenantId": "pb.amritsar" + }, + { + "name": "Super User", + "code": "SUPERUSER", + "tenantId": "pb.amritsar" + }, + { + "name": "NOC Department Approver", + "code": "NOC_DEPT_APPROVER", + "tenantId": "pb.amritsar" + }, + { + "name": "WS Clerk", + "code": "WS_CLERK", + "tenantId": "pb.amritsar" + }, + { + "name": "NoC Doc Verifier", + "code": "NOC_DOC_VERIFIER", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar" +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/example/src/userInfo/fsm-admin.json b/frontend/micro-ui-internals/example/src/userInfo/fsm-admin.json new file mode 100644 index 00000000000..cb167481bae --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/fsm-admin.json @@ -0,0 +1,44 @@ +{ + "id": 28452, + "uuid": "5674253d-9c2a-4d47-88ae-450f3fbbcad2", + "userName": "BPAFieldInspector", + "name": "lakshmi", + "mobileNumber": "8656565343", + "emailId": null, + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "FSM Administrator", + "code": "FSM_ADMIN", + "tenantId": "pb.amritsar" + }, + { + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pb.amritsar" + }, + { + "name": "BPA Services Approver", + "code": "BPA_APPROVER", + "tenantId": "pb.amritsar" + }, + { + "name": "BPA Services verifier", + "code": "BPA_VERIFIER", + "tenantId": "pb.amritsar" + }, + { + "name": "BPA Field Inspector", + "code": "BPA_FIELD_INSPECTOR", + "tenantId": "pb.amritsar" + }, + { + "name": "BPAREG doc verifier", + "code": "BPAREG_DOC_VERIFIER", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar" + } \ No newline at end of file diff --git a/frontend/micro-ui-internals/example/src/userInfo/fsm-collector.json b/frontend/micro-ui-internals/example/src/userInfo/fsm-collector.json new file mode 100644 index 00000000000..18ea0ec0dc4 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/fsm-collector.json @@ -0,0 +1,64 @@ +{ + "id": 29766, + "uuid": "e63d2234-0c59-4713-9387-56b420e8041b", + "userName": "EMP-107-000351", + "name": "UITEAMFSMADMIN", + "mobileNumber": "9876543215", + "emailId": null, + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "FSM Employee Application Viewer", + "code": "FSM_VIEW_EMP", + "tenantId": "pb.amritsar" + }, + { + "name": "FSM Administrator", + "code": "FSM_ADMIN", + "tenantId": "pb.amritsar" + }, + { + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pb.amritsar" + }, + { + "name": "Employee Finance", + "code": "EMPLOYEE_FINANCE", + "tenantId": "pb.amritsar" + }, + { + "name": "FSM Employee Report Viewer", + "code": "FSM_REPORT_VIEWER", + "tenantId": "pb.amritsar" + }, + { + "name": "FSM Payment Collector", + "code": "FSM_COLLECTOR", + "tenantId": "pb.amritsar" + }, + { + "name": "FSM Employee Application Creator", + "code": "FSM_CREATOR_EMP", + "tenantId": "pb.amritsar" + }, + { + "name": "EMPLOYEE ADMIN", + "code": "EMPLOYEE ADMIN", + "tenantId": "pb.amritsar" + }, + { + "name": "FSM Employee Dashboard Viewer", + "code": "FSM_DASHBOARD_VIEWER", + "tenantId": "pb.amritsar" + }, + { + "name": "FSM Employee Application Editor", + "code": "FSM_EDITOR_EMP", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar" +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/example/src/userInfo/fsm-creator.json b/frontend/micro-ui-internals/example/src/userInfo/fsm-creator.json new file mode 100644 index 00000000000..6626a1b2e12 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/fsm-creator.json @@ -0,0 +1,34 @@ +{ + "id": 27481, + "uuid": "6b55dc64-5dc9-4284-a46f-6e264c22cf97", + "userName": "EMP-107-000253", + "name": "Karan", + "mobileNumber": "9898909739", + "emailId": "asd@123.com", + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "TL Approver", + "code": "TL_APPROVER", + "tenantId": "pb.amritsar" + }, + { + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pb.amritsar" + }, + { + "name": "FSM Employee Application Creator", + "code": "FSM_CREATOR_EMP", + "tenantId": "pb.amritsar" + }, + { + "name": "BPAREG Approver", + "code": "BPAREG_APPROVER", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar" + } \ No newline at end of file diff --git a/frontend/micro-ui-internals/example/src/userInfo/fsm-dso.json b/frontend/micro-ui-internals/example/src/userInfo/fsm-dso.json new file mode 100644 index 00000000000..b4df3c8461b --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/fsm-dso.json @@ -0,0 +1,19 @@ +{ + "id": 29817, + "uuid": "ad4cda58-7427-4b97-99a7-bd1768641aeb", + "userName": "8919146603", + "name": "DSOc4", + "mobileNumber": "8919146603", + "emailId": "test@dso.test", + "locale": null, + "type": "CITIZEN", + "roles": [ + { + "name": "FSM Desluding Operator", + "code": "FSM_DSO", + "tenantId": "pb" + } + ], + "active": true, + "tenantId": "pb" + } \ No newline at end of file diff --git a/frontend/micro-ui-internals/example/src/userInfo/fsm-editor.json b/frontend/micro-ui-internals/example/src/userInfo/fsm-editor.json new file mode 100644 index 00000000000..3ce44630a1f --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/fsm-editor.json @@ -0,0 +1,34 @@ +{ + "id": 27486, + "uuid": "2130ef7d-68cf-4606-b592-1451d4a4a6bf", + "userName": "EMP-107-000254", + "name": "Dharma", + "mobileNumber": "9987106361", + "emailId": "asd@123.com", + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pb.amritsar" + }, + { + "name": "BPAREG doc verifier", + "code": "BPAREG_DOC_VERIFIER", + "tenantId": "pb.amritsar" + }, + { + "name": "FSM Employee Application Editor", + "code": "FSM_EDITOR_EMP", + "tenantId": "pb.amritsar" + }, + { + "name": "TL doc verifier", + "code": "TL_DOC_VERIFIER", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar" + } \ No newline at end of file diff --git a/frontend/micro-ui-internals/example/src/userInfo/fsm-fstp.json b/frontend/micro-ui-internals/example/src/userInfo/fsm-fstp.json new file mode 100644 index 00000000000..1d6e64ac7f2 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/fsm-fstp.json @@ -0,0 +1,19 @@ +{ + "id": 29815, + "uuid": "157fc9f6-836f-4780-ba89-9e511f65099e", + "userName": "EMP-107-000369", + "name": "Saurabh", + "mobileNumber": "8919146655", + "emailId": "phani.gutha@gmail.com", + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "FSM FSTP Opperator", + "code": "FSM_EMP_FSTPO", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar" + } \ No newline at end of file diff --git a/frontend/micro-ui-internals/example/src/userInfo/fstp.json b/frontend/micro-ui-internals/example/src/userInfo/fstp.json new file mode 100644 index 00000000000..76894a5a5ac --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/fstp.json @@ -0,0 +1,29 @@ +{ + "id": 5217, + "uuid": "a89dcb90-3e7f-4c38-96a5-aa89c48e1efc", + "userName": "FSMQAFSTPO", + "name": "Omm", + "mobileNumber": "9999999007", + "emailId": null, + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "FSM FSTP Opperator", + "code": "FSM_EMP_FSTPO", + "tenantId": "pb.amritsar" + }, + { + "name": "EMPLOYEE ADMIN", + "code": "EMPLOYEE ADMIN", + "tenantId": "pb.amritsar" + }, + { + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar" +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/example/src/userInfo/gro.json b/frontend/micro-ui-internals/example/src/userInfo/gro.json new file mode 100644 index 00000000000..681511b9b88 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/gro.json @@ -0,0 +1,13 @@ +{ + "id": 23593, + "uuid": "b9309b36-b3b6-49cc-b4a5-819dc98782f7", + "userName": "DEVGRO", + "name": "DEVGRO", + "mobileNumber": "9999999999", + "emailId": null, + "locale": null, + "type": "EMPLOYEE", + "roles": [{ "name": "Grievance Routing Officer", "code": "GRO", "tenantId": "pb.amritsar" }], + "active": true, + "tenantId": "pb.amritsar" +} diff --git a/frontend/micro-ui-internals/example/src/userInfo/lme.json b/frontend/micro-ui-internals/example/src/userInfo/lme.json new file mode 100644 index 00000000000..319ff7ec545 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/lme.json @@ -0,0 +1,24 @@ +{ + "id": 23594, + "uuid": "8814c502-ecf2-4e5f-ac01-32cd76b9d622", + "userName": "DEVLME", + "name": "DEVLME", + "mobileNumber": "8888888888", + "emailId": "xyzz@abc.com", + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "PGR Last Mile Employee", + "code": "PGR_LME", + "tenantId": "pb.amritsar" + }, + { + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar" +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/example/src/userInfo/qa-cecoll.json b/frontend/micro-ui-internals/example/src/userInfo/qa-cecoll.json new file mode 100644 index 00000000000..56dd915da4c --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/qa-cecoll.json @@ -0,0 +1,69 @@ +{ + "id": 17085, + "userName": "QACECOLL", + "salutation": null, + "name": "Test CEC", + "gender": "FEMALE", + "mobileNumber": "9909888123", + "emailId": null, + "altContactNumber": null, + "pan": null, + "aadhaarNumber": null, + "permanentAddress": null, + "permanentCity": null, + "permanentPinCode": null, + "correspondenceAddress": null, + "correspondenceCity": null, + "correspondencePinCode": null, + "active": true, + "locale": null, + "type": "EMPLOYEE", + "accountLocked": false, + "accountLockedDate": 0, + "fatherOrHusbandName": "Test", + "relationship": "FATHER", + "signature": null, + "bloodGroup": null, + "photo": null, + "identificationMark": null, + "createdBy": 12011, + "lastModifiedBy": 1, + "tenantId": "pb.amritsar", + "roles": [ + { + "code": "FSM_VIEW_EMP", + "name": "FSM Employee Application Viewer", + "tenantId": "pb.amritsar" + }, + { + "code": "EMPLOYEE", + "name": "Employee", + "tenantId": "pb.amritsar" + }, + { + "code": "FSM_CREATOR_EMP", + "name": "FSM Employee Application Creator", + "tenantId": "pb.amritsar" + }, + { + "code": "FSM_COLLECTOR", + "name": "FSM Payment Collector", + "tenantId": "pb.amritsar" + }, + { + "code": "EMPLOYEE ADMIN", + "name": "EMPLOYEE ADMIN", + "tenantId": "pb.amritsar" + }, + { + "code": "FSM_EDITOR_EMP", + "name": "FSM Employee Application Editor", + "tenantId": "pb.amritsar" + } + ], + "uuid": "91d3690c-ced8-43e9-b341-6e50313cdcb8", + "createdDate": "01-03-2021 12:55:13", + "lastModifiedDate": "01-03-2021 12:59:24", + "dob": "9/9/1990", + "pwdExpiryDate": "30-05-2021 12:55:13" +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/example/src/userInfo/qa-citizen.json b/frontend/micro-ui-internals/example/src/userInfo/qa-citizen.json new file mode 100644 index 00000000000..4d9adec842b --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/qa-citizen.json @@ -0,0 +1,19 @@ +{ + "id": 762, + "uuid": "e4134081-ddf8-430f-a011-26f4895944de", + "userName": "7829727713", + "name": "lata", + "mobileNumber": "7829727713", + "emailId": "lata@gmail.com", + "locale": null, + "type": "CITIZEN", + "roles": [ + { + "name": "Citizen", + "code": "CITIZEN", + "tenantId": "pb" + } + ], + "active": true, + "tenantId": "pb" +} diff --git a/frontend/micro-ui-internals/example/src/userInfo/qa-csr.json b/frontend/micro-ui-internals/example/src/userInfo/qa-csr.json new file mode 100644 index 00000000000..b94638df657 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/qa-csr.json @@ -0,0 +1,34 @@ +{ + "id": 1585, + "uuid": "7fbcb459-bf21-45c9-a5e9-a1acb3351f02", + "userName": "QACSR", + "name": "Prashant", + "mobileNumber": "9999991452", + "emailId": "", + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pb.amritsar" + }, + { + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pb" + }, + { + "name": "Customer Support Representative", + "code": "CSR", + "tenantId": "pb.amritsar" + }, + { + "name": "Customer Support Representative", + "code": "CSR", + "tenantId": "pb" + } + ], + "active": true, + "tenantId": "pb.amritsar" +} diff --git a/frontend/micro-ui-internals/example/src/userInfo/qa-dso.json b/frontend/micro-ui-internals/example/src/userInfo/qa-dso.json new file mode 100644 index 00000000000..10f4e632825 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/qa-dso.json @@ -0,0 +1,34 @@ +{ + "id": 12075, + "uuid": "6d6f2ee7-cb16-4e96-af07-66da0480694a", + "userName": "QADSO", + "name": "DSO", + "mobileNumber": "9977999999", + "emailId": null, + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "FSM Employee Application Viewer", + "code": "FSM_VIEW_EMP", + "tenantId": "pb.amritsar" + }, + { + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pb.amritsar" + }, + { + "name": "FSM Desluding Operator", + "code": "FSM_DSO", + "tenantId": "pb.amritsar" + }, + { + "name": "EMPLOYEE ADMIN", + "code": "EMPLOYEE ADMIN", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar" + } \ No newline at end of file diff --git a/frontend/micro-ui-internals/example/src/userInfo/qa-gro-nawanshahr.json b/frontend/micro-ui-internals/example/src/userInfo/qa-gro-nawanshahr.json new file mode 100644 index 00000000000..0f17100ac50 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/qa-gro-nawanshahr.json @@ -0,0 +1,44 @@ +{ + "id": 1213, + "uuid": "c37c551e-534c-499b-8316-690d4786f02d", + "userName": "KFC1", + "name": "Kulvinder Singh", + "mobileNumber": "9876732639", + "emailId": "", + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pb.nawanshahr" + }, + { + "name": "TL doc verifier", + "code": "TL_DOC_VERIFIER", + "tenantId": "pb.nawanshahr" + }, + { + "name": "TL Counter Employee", + "code": "TL_CEMP", + "tenantId": "pb.nawanshahr" + }, + { + "name": "Grievance Routing Officer", + "code": "GRO", + "tenantId": "pb.nawanshahr" + }, + { + "name": "TL Field Inspector", + "code": "TL_FIELD_INSPECTOR", + "tenantId": "pb.nawanshahr" + }, + { + "name": "TL Approver", + "code": "TL_APPROVER", + "tenantId": "pb.nawanshahr" + } + ], + "active": true, + "tenantId": "pb.nawanshahr" + } \ No newline at end of file diff --git a/frontend/micro-ui-internals/example/src/userInfo/qa-gro.json b/frontend/micro-ui-internals/example/src/userInfo/qa-gro.json new file mode 100644 index 00000000000..30d6df1f905 --- /dev/null +++ b/frontend/micro-ui-internals/example/src/userInfo/qa-gro.json @@ -0,0 +1,24 @@ +{ + "id": 3665, + "uuid": "b545c5da-f39e-4db4-b73d-86ad27a3ee1f", + "userName": "GROA", + "name": "AMR GRO", + "mobileNumber": "7598641424", + "emailId": null, + "locale": null, + "type": "EMPLOYEE", + "roles": [ + { + "name": "Employee", + "code": "EMPLOYEE", + "tenantId": "pb.amritsar" + }, + { + "name": "Grievance Routing Officer", + "code": "GRO", + "tenantId": "pb.amritsar" + } + ], + "active": true, + "tenantId": "pb.amritsar" + } \ No newline at end of file diff --git a/frontend/micro-ui-internals/package.json b/frontend/micro-ui-internals/package.json new file mode 100644 index 00000000000..13d713be4f2 --- /dev/null +++ b/frontend/micro-ui-internals/package.json @@ -0,0 +1,66 @@ +{ + "name": "egovernments", + "version": "1.3.0", + "main": "index.js", + "workspaces": [ + "example", + "packages/*", + "packages/modules/*" + ], + "repository": "git@github.com:egovernments/digit-ui-internals.git", + "author": "Abhinav Kushwaha ", + "license": "MIT", + "private": true, + "engines": { + "node": ">=10" + }, + "scripts": { + "start": "SKIP_PREFLIGHT_CHECK=true run-s build start:dev", + "sprint": "SKIP_PREFLIGHT_CHECK=true run-s start:script", + "start:dev": "run-p dev:**", + "start:script": "./scripts/create.sh", + "dev:css": "cd packages/css && yarn start", + "dev:libraries": "cd packages/libraries && yarn start", + "dev:components": "cd packages/react-components && yarn start", + "dev:common": "cd packages/modules/common && yarn start", + "dev:pt": "cd packages/modules/pt && yarn start", + "dev:core": "cd packages/modules/core && yarn start", + "dev:pgr": "cd packages/modules/pgr && yarn start", + "dev:fsm": "cd packages/modules/fsm && yarn start", + "dev:dss": "cd packages/modules/dss && yarn start", + "dev:mcollect": "cd packages/modules/mCollect && yarn start", + "dev:receipts": "cd packages/modules/receipts && yarn start", + "dev:tl": "cd packages/modules/tl && yarn start", + "dev:hrms": "cd packages/modules/hrms && yarn build", + "dev:example": "cd example && yarn start", + "build": "run-p build:**", + "build:libraries": "cd packages/libraries && yarn build", + "build:components": "cd packages/react-components && yarn build", + "build:common": "cd packages/modules/common && yarn build", + "build:pt": "cd packages/modules/pt && yarn build", + "build:core": "cd packages/modules/core && yarn build", + "build:pgr": "cd packages/modules/pgr && yarn build", + "build:fsm": "cd packages/modules/fsm && yarn build", + "build:dss": "cd packages/modules/dss && yarn build", + "build:mcollect": "cd packages/modules/mCollect && yarn build", + "build:receipts": "cd packages/modules/receipts && yarn build", + "build:tl": "cd packages/modules/tl && yarn build", + "build:hrms": "cd packages/modules/hrms && yarn build", + "deploy:jenkins": "./scripts/jenkins.sh" + }, + "devDependencies": { + "husky": ">=4.3.6", + "lint-staged": ">=10.5.3", + "npm-run-all": "^4.1.5", + "prettier": "2.1.2" + }, + "husky": { + + }, + "lint-staged": { + "*.{js,css,md}": "prettier --write" + }, + "dependencies": { + "lodash": "^4.17.20" + } +} diff --git a/frontend/micro-ui-internals/packages/config/index.js b/frontend/micro-ui-internals/packages/config/index.js new file mode 100644 index 00000000000..87090e08d09 --- /dev/null +++ b/frontend/micro-ui-internals/packages/config/index.js @@ -0,0 +1,3 @@ +module.exports = { + PORT: "3000", +}; diff --git a/frontend/micro-ui-internals/packages/config/package.json b/frontend/micro-ui-internals/packages/config/package.json new file mode 100644 index 00000000000..bb380df1243 --- /dev/null +++ b/frontend/micro-ui-internals/packages/config/package.json @@ -0,0 +1,6 @@ +{ + "name": "@egovernments/digit-ui-config", + "version": "1.0.1", + "main": "index.js", + "license": "MIT" +} diff --git a/frontend/micro-ui-internals/packages/css/example/employee.html b/frontend/micro-ui-internals/packages/css/example/employee.html new file mode 100644 index 00000000000..11465f62a6f --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/example/employee.html @@ -0,0 +1,16 @@ + + + + + @egovernments/digit-ui.css + + + + + + + + +

employee example

+ + diff --git a/frontend/micro-ui-internals/packages/css/example/garbage.webp b/frontend/micro-ui-internals/packages/css/example/garbage.webp new file mode 100644 index 00000000000..0f4d88c2159 Binary files /dev/null and b/frontend/micro-ui-internals/packages/css/example/garbage.webp differ diff --git a/frontend/micro-ui-internals/packages/css/example/index.html b/frontend/micro-ui-internals/packages/css/example/index.html new file mode 100644 index 00000000000..4f1ea4bf81b --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/example/index.html @@ -0,0 +1,374 @@ + + + + + @egovernments/digit-ui.css + + + + + + + + + +
+
Quick Pay
+ + + + + +
+ + + + + +

Back

+
+ + +
+ +
Choose Complaint Type
+

+ Select option related to your complaint from the list given below. If the complaint type you are looking for is not listed select others +

+ + +

Moholla *

+
+
+ + + + + +
+
+ + + + + +
+
+ +

City *

+

Enter City

+ +
+
+ + + + + + + +
+
+

Ahmedabad

+

Banglore

+

Amritsar

+

New Delhi

+
+
+ + + + + + + + + +
+ + + + + +
+ + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ + + + + +
+
+ + +
+
Complaint Submitted
+
+ + + + + +

Complaint No.

+

02/09/2020/051705

+
+
+ + +
+
Complaint Not Submitted
+ + + + + + +
+ + +
+
Next
+
+ + Skip and Continue +
+ + +
+

Burning of Garbage

+
+ + + + + +

2-Aug-2020

+
+ +
+

Complaint No.

+

02/09/2020/051705

+
+ +
+

Open

+
+ +

Complaint Pending for Assignment

+
+ + +
+

Burning of Garbage

+
+
+

Complaint No.

+

02/09/2020/051705

+
+
+

Complaint Status

+

Filed

+
+
+

Filed Date

+

1-Aug-2020

+
+
+

Address

+

Back side Post Office Patiala Road Ajit Nagar Amritsar

+
+
+
+ + + +
+
+ + +
+

Complaint Timeline

+
+

+
Pending for Assignment
+
+ + +
+ +
+

+
+ Complaint Filed +

12/08/2020

+
+
+
+ + +
+

How would you rate your experience with us?

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

What was Good?

+
+ +

+ + + + + +

+

Service

+
+
+ + +
+
OTP Verification
+

Enter the OTP sent to +91 - 9876453444

+
+ + + + +
+

Request another OTP in 25 seconds

+

RESEND

+
+ + +
+
+

There is a problem

+

Max 3 complaint photos allowed

+
+ +

+ Click on the icon below to upload the complaint photos as evidence. You can capture photos directly through your camera or upload from your + Gallery. If you do not have complaint photo, you can skip the continue for next step. +

+
+ + + +
+
Pin Complaint Location
+

+ Click and hold to drop the pin to complaint location. If you are not able to pin the location you can skip the continue for next step. +

+
+
+ + + + + + +
+
+
+
+
+ + diff --git a/frontend/micro-ui-internals/packages/css/example/map.js b/frontend/micro-ui-internals/packages/css/example/map.js new file mode 100644 index 00000000000..3899c3de054 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/example/map.js @@ -0,0 +1,73 @@ +"use strict"; +let map; +var script = document.createElement("script"); +const key = globalConfigs?.getConfig("GMAPS_API_KEY"); +script.src = `https://maps.googleapis.com/maps/api/js?key=${key}&callback=initAutocomplete&libraries=places`; +script.defer = true; +window.initAutocomplete = function () { + const map = new google.maps.Map(document.getElementById("map"), { + center: { + lat: 28.5355, + lng: 77.391, + }, + zoom: 15, + mapTypeId: "roadmap", + }); // Create the search box and link it to the UI element. + + const input = document.getElementById("pac-input"); + const searchBox = new google.maps.places.SearchBox(input); + // map.controls[google.maps.ControlPosition.TOP_LEFT].push(input); // Bias the SearchBox results towards current map's viewport. + + map.addListener("bounds_changed", () => { + searchBox.setBounds(map.getBounds()); + }); + let markers = []; // Listen for the event fired when the user selects a prediction and retrieve + // more details for that place. + + searchBox.addListener("places_changed", () => { + const places = searchBox.getPlaces(); + + if (places.length == 0) { + return; + } // Clear out the old markers. + + markers.forEach((marker) => { + marker.setMap(null); + }); + markers = []; // For each place, get the icon, name and location. + + const bounds = new google.maps.LatLngBounds(); + places.forEach((place) => { + if (!place.geometry) { + console.log("Returned place contains no geometry"); + return; + } + + const icon = { + url: place.icon, + size: new google.maps.Size(71, 71), + origin: new google.maps.Point(0, 0), + anchor: new google.maps.Point(17, 34), + scaledSize: new google.maps.Size(25, 25), + }; // Create a marker for each place. + + markers.push( + new google.maps.Marker({ + map, + icon, + title: place.name, + position: place.geometry.location, + }) + ); + + if (place.geometry.viewport) { + // Only geocodes have viewport. + bounds.union(place.geometry.viewport); + } else { + bounds.extend(place.geometry.location); + } + }); + map.fitBounds(bounds); + }); +}; +document.head.appendChild(script); diff --git a/frontend/micro-ui-internals/packages/css/example/package.json b/frontend/micro-ui-internals/packages/css/example/package.json new file mode 100644 index 00000000000..1d90ecddf4a --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/example/package.json @@ -0,0 +1,24 @@ +{ + "name": "@egovernments/digit-ui.css-example", + "homepage": ".", + "version": "0.0.0", + "private": true, + "scripts": { + "start": "hs ./" + }, + "dependencies": { + "@egovernments/digit-ui.css": "link:.." + }, + "devDependencies": { + "http-server": "^0.12.3" + }, + "eslintConfig": { + "extends": "react-app" + }, + "browserslist": [ + ">0.2%", + "not dead", + "not ie <= 11", + "not op_mini all" + ] +} diff --git a/frontend/micro-ui-internals/packages/css/example/yarn.lock b/frontend/micro-ui-internals/packages/css/example/yarn.lock new file mode 100644 index 00000000000..88ecd879ed1 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/example/yarn.lock @@ -0,0 +1,1879 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@egovernments/digit-ui.css@link:..": + version "0.0.0" + uid "" + +"@fullhuman/postcss-purgecss@^2.1.2": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@fullhuman/postcss-purgecss/-/postcss-purgecss-2.3.0.tgz#50a954757ec78696615d3e118e3fee2d9291882e" + integrity sha512-qnKm5dIOyPGJ70kPZ5jiz0I9foVOic0j+cOzNDoo8KoCf6HjicIZ99UfO2OmE7vCYSKAAepEwJtNzpiiZAh9xw== + dependencies: + postcss "7.0.32" + purgecss "^2.3.0" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +acorn-node@^1.6.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" + integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== + dependencies: + acorn "^7.0.0" + acorn-walk "^7.0.0" + xtend "^4.0.2" + +acorn-walk@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^7.0.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +ajv@^6.12.3: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +async-foreach@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" + integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +autoprefixer@^9.4.5: + version "9.8.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" + integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== + dependencies: + browserslist "^4.12.0" + caniuse-lite "^1.0.30001109" + colorette "^1.2.1" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.32" + postcss-value-parser "^4.1.0" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +basic-auth@^1.0.3: + version "1.1.0" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884" + integrity sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= + dependencies: + inherits "~2.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +browserslist@^4.12.0: + version "4.14.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.6.tgz#97702a9c212e0c6b6afefad913d3a1538e348457" + integrity sha512-zeFYcUo85ENhc/zxHbiIp0LGzzTrE2Pv2JhxvS7kpUb9Q9D38kUX6Bie7pGutJ/5iF5rOxE7CepAuWD56xJ33A== + dependencies: + caniuse-lite "^1.0.30001154" + electron-to-chromium "^1.3.585" + escalade "^3.1.1" + node-releases "^1.1.65" + +bytes@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001154: + version "1.0.30001157" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001157.tgz#2d11aaeb239b340bc1aa730eca18a37fdb07a9ab" + integrity sha512-gOerH9Wz2IRZ2ZPdMfBvyOi3cjaz4O4dgNwPGzx8EhqAs4+2IL/O+fJsbt+znSigujoZG8bVcIAUM/I/E5K3MA== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +"chalk@^3.0.0 || ^4.0.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +color-convert@^1.9.0, color-convert@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.4.tgz#dd51cd25cfee953d138fe4002372cc3d0e504cb6" + integrity sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" + integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.4" + +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + +colors@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +corser@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87" + integrity sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c= + +cross-spawn@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" + integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI= + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +css-unit-converter@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.2.tgz#4c77f5a1954e6dbff60695ecb214e3270436ab21" + integrity sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +debug@^3.1.1: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +decamelize@^1.1.2, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +detective@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" + integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg== + dependencies: + acorn-node "^1.6.1" + defined "^1.0.0" + minimist "^1.1.1" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ecstatic@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/ecstatic/-/ecstatic-3.3.2.tgz#6d1dd49814d00594682c652adb66076a69d46c48" + integrity sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog== + dependencies: + he "^1.1.1" + mime "^1.6.0" + minimist "^1.1.0" + url-join "^2.0.5" + +electron-to-chromium@^1.3.585: + version "1.3.591" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.591.tgz#a18892bf1acb93f7b6e4da402705d564bc235017" + integrity sha512-ol/0WzjL4NS4Kqy9VD6xXQON91xIihDT36sYCew/G/bnd1v0/4D+kahp26JauQhgFUjrdva3kRSo7URcUmQ+qw== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +follow-redirects@^1.0.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" + integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fs-extra@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fstream@^1.0.0, fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +gaze@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" + integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== + dependencies: + globule "^1.0.0" + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globule@^1.0.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.2.tgz#d8bdd9e9e4eef8f96e245999a5dee7eb5d8529c4" + integrity sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA== + dependencies: + glob "~7.1.1" + lodash "~4.17.10" + minimatch "~3.0.2" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +he@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +html-tags@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" + integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== + +http-proxy@^1.18.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-server@^0.12.3: + version "0.12.3" + resolved "https://registry.yarnpkg.com/http-server/-/http-server-0.12.3.tgz#ba0471d0ecc425886616cb35c4faf279140a0d37" + integrity sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA== + dependencies: + basic-auth "^1.0.3" + colors "^1.4.0" + corser "^2.0.1" + ecstatic "^3.3.2" + http-proxy "^1.18.0" + minimist "^1.2.5" + opener "^1.5.1" + portfinder "^1.0.25" + secure-compare "3.0.1" + union "~0.5.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +in-publish@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.1.tgz#948b1a535c8030561cea522f73f78f4be357e00c" + integrity sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ== + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@~2.0.0, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-core-module@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.1.0.tgz#a4cc031d9b1aca63eecbd18a650e13cb4eeab946" + integrity sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA== + dependencies: + has "^1.0.3" + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +js-base64@^2.1.8: + version "2.6.4" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" + integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +line-column@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/line-column/-/line-column-1.0.2.tgz#d25af2936b6f4849172b312e4792d1d987bc34a2" + integrity sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI= + dependencies: + isarray "^1.0.0" + isobject "^2.0.0" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lodash.toarray@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" + integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= + +lodash@^4.0.0, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@~4.17.10: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +meow@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +mime@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +minimatch@^3.0.4, minimatch@~3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nan@^2.13.2: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + +nanoid@^3.1.16: + version "3.1.16" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.16.tgz#b21f0a7d031196faf75314d7c65d36352beeef64" + integrity sha512-+AK8MN0WHji40lj8AEuwLOvLSbWYApQpre/aFJZD71r43wVRLrOYS4FmJOPQYon1TqB462RzrrxlfA74XRES8w== + +node-emoji@^1.8.1: + version "1.10.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" + integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== + dependencies: + lodash.toarray "^4.4.0" + +node-gyp@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" + integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== + dependencies: + fstream "^1.0.0" + glob "^7.0.3" + graceful-fs "^4.1.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3 || 4" + osenv "0" + request "^2.87.0" + rimraf "2" + semver "~5.3.0" + tar "^2.0.0" + which "1" + +node-releases@^1.1.65: + version "1.1.66" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.66.tgz#609bd0dc069381015cd982300bae51ab4f1b1814" + integrity sha512-JHEQ1iWPGK+38VLB2H9ef2otU4l8s3yAMt9Xf934r6+ojCYDMHPMqvCc9TnzfeFSP1QEOeU6YZEd3+De0LTCgg== + +node-sass@^4.14.1: + version "4.14.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.14.1.tgz#99c87ec2efb7047ed638fb4c9db7f3a42e2217b5" + integrity sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g== + dependencies: + async-foreach "^0.1.3" + chalk "^1.1.1" + cross-spawn "^3.0.0" + gaze "^1.0.0" + get-stdin "^4.0.1" + glob "^7.0.3" + in-publish "^2.0.0" + lodash "^4.17.15" + meow "^3.7.0" + mkdirp "^0.5.1" + nan "^2.13.2" + node-gyp "^3.8.0" + npmlog "^4.0.0" + request "^2.88.0" + sass-graph "2.2.5" + stdout-stream "^1.4.0" + "true-case-path" "^1.0.2" + +"nopt@2 || 3": + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize.css@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3" + integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== + +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-hash@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.0.3.tgz#d12db044e03cd2ca3d77c0570d87225b02e1e6ea" + integrity sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +opener@^1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@0: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-limit@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +portfinder@^1.0.25: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +postcss-functions@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-functions/-/postcss-functions-3.0.0.tgz#0e94d01444700a481de20de4d55fb2640564250e" + integrity sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4= + dependencies: + glob "^7.1.2" + object-assign "^4.1.1" + postcss "^6.0.9" + postcss-value-parser "^3.3.0" + +postcss-js@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-2.0.3.tgz#a96f0f23ff3d08cec7dc5b11bf11c5f8077cdab9" + integrity sha512-zS59pAk3deu6dVHyrGqmC3oDXBdNdajk4k1RyxeVXCrcEDBUBHoIhE4QTsmhxgzXxsaqFDAkUZfmMa5f/N/79w== + dependencies: + camelcase-css "^2.0.1" + postcss "^7.0.18" + +postcss-nested@^4.1.1: + version "4.2.3" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-4.2.3.tgz#c6f255b0a720549776d220d00c4b70cd244136f6" + integrity sha512-rOv0W1HquRCamWy2kFl3QazJMMe1ku6rCFoAAH+9AcxdbpDeBr6k968MLWuLjvjMcGEip01ak09hKOEgpK9hvw== + dependencies: + postcss "^7.0.32" + postcss-selector-parser "^6.0.2" + +postcss-scss@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-3.0.4.tgz#74ce30ec9de615b41aeab1249e7557698e372e73" + integrity sha512-BAkBZ35aXhCeBRmliHylYqTN1PvNJyh9aBPQHUmk9SdDdbk7n3GExm7cQivDckOgJpB+agyig9TwRAmf6WnvfA== + dependencies: + postcss "^8.1.6" + +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" + integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + util-deprecate "^1.0.2" + +postcss-value-parser@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + +postcss@7.0.32: + version "7.0.32" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" + integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@^6.0.9: + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + +postcss@^7.0.11, postcss@^7.0.18, postcss@^7.0.32: + version "7.0.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" + integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@^8.1.6: + version "8.1.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.6.tgz#b022ba2cfb8701da234d073ed3128c5a384c35ff" + integrity sha512-JuifSl4h8dJ70SiMXKjzCxhalE6p2TnMHuq9G8ftyXj2jg6SXzqCsEuxMj9RkmJoO5D+Z9YrWunNkxqpRT02qg== + dependencies: + colorette "^1.2.1" + line-column "^1.0.2" + nanoid "^3.1.16" + source-map "^0.6.1" + +pretty-hrtime@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" + integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +purgecss@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/purgecss/-/purgecss-2.3.0.tgz#5327587abf5795e6541517af8b190a6fb5488bb3" + integrity sha512-BE5CROfVGsx2XIhxGuZAT7rTH9lLeQx/6M0P7DTXQH4IUc3BBzs9JUzt4yzGf3JrH9enkeq6YJBe9CTtkm1WmQ== + dependencies: + commander "^5.0.0" + glob "^7.0.0" + postcss "7.0.32" + postcss-selector-parser "^6.0.2" + +qs@^6.4.0: + version "6.9.4" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687" + integrity sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +readable-stream@^2.0.1, readable-stream@^2.0.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +reduce-css-calc@^2.1.6: + version "2.1.7" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.7.tgz#1ace2e02c286d78abcd01fd92bfe8097ab0602c2" + integrity sha512-fDnlZ+AybAS3C7Q9xDq5y8A2z+lT63zLbynew/lur/IR24OQF5x98tfNwf79mzEdfywZ0a2wpM860FhFfMxZlA== + dependencies: + css-unit-converter "^1.1.1" + postcss-value-parser "^3.3.0" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +request@^2.87.0, request@^2.88.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve@^1.10.0, resolve@^1.14.2: + version "1.18.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130" + integrity sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA== + dependencies: + is-core-module "^2.0.0" + path-parse "^1.0.6" + +rimraf@2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +safe-buffer@^5.0.1, safe-buffer@^5.1.2: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass-graph@2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.5.tgz#a981c87446b8319d96dce0671e487879bd24c2e8" + integrity sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag== + dependencies: + glob "^7.0.0" + lodash "^4.0.0" + scss-tokenizer "^0.2.3" + yargs "^13.3.2" + +scss-tokenizer@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" + integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE= + dependencies: + js-base64 "^2.1.8" + source-map "^0.4.2" + +secure-compare@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3" + integrity sha1-8aAymzCLIh+uN7mXTz1XjQypmeM= + +"semver@2 || 3 || 4 || 5": + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +signal-exit@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +source-map@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + integrity sha1-66T12pwNyZneaAMti092FzZSA2s= + dependencies: + amdefine ">=0.0.4" + +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.6" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" + integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw== + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stdout-stream@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" + integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== + dependencies: + readable-stream "^2.0.1" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0, supports-color@^5.4.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +tailwindcss@^1.8.10: + version "1.9.6" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-1.9.6.tgz#0c5089911d24e1e98e592a31bfdb3d8f34ecf1a0" + integrity sha512-nY8WYM/RLPqGsPEGEV2z63riyQPcHYZUJpAwdyBzVpxQHOHqHE+F/fvbCeXhdF1+TA5l72vSkZrtYCB9hRcwkQ== + dependencies: + "@fullhuman/postcss-purgecss" "^2.1.2" + autoprefixer "^9.4.5" + browserslist "^4.12.0" + bytes "^3.0.0" + chalk "^3.0.0 || ^4.0.0" + color "^3.1.2" + detective "^5.2.0" + fs-extra "^8.0.0" + html-tags "^3.1.0" + lodash "^4.17.20" + node-emoji "^1.8.1" + normalize.css "^8.0.1" + object-hash "^2.0.3" + postcss "^7.0.11" + postcss-functions "^3.0.0" + postcss-js "^2.0.0" + postcss-nested "^4.1.1" + postcss-selector-parser "^6.0.0" + postcss-value-parser "^4.1.0" + pretty-hrtime "^1.0.3" + reduce-css-calc "^2.1.6" + resolve "^1.14.2" + +tar@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" + integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== + dependencies: + block-stream "*" + fstream "^1.0.12" + inherits "2" + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +"true-case-path@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" + integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew== + dependencies: + glob "^7.1.2" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +union@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/union/-/union-0.5.0.tgz#b2c11be84f60538537b846edb9ba266ba0090075" + integrity sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA== + dependencies: + qs "^6.4.0" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +uri-js@^4.2.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== + dependencies: + punycode "^2.1.0" + +url-join@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728" + integrity sha1-WvIvGMBSoACkjXuCxenC4v7tpyg= + +util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@1, which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +xtend@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" diff --git a/frontend/micro-ui-internals/packages/css/gulpfile.js b/frontend/micro-ui-internals/packages/css/gulpfile.js new file mode 100644 index 00000000000..f76cae7234e --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/gulpfile.js @@ -0,0 +1,55 @@ +const { series, src, dest, watch, task } = require("gulp"); +const clean = require("gulp-clean"); +const postcss = require("gulp-postcss"); +const sass = require("gulp-sass"); +const postcssPresetEnv = require("postcss-preset-env"); +const cleanCSS = require("gulp-clean-css"); +const rename = require("gulp-rename"); +const livereload = require("gulp-livereload"); + +let output = "./example"; +if (process.env.NODE_ENV === "production") { + output = "./dist"; +} + +function cleanStyles() { + return src(`${output}/*.css`, { read: false }).pipe(clean()); +} + +function styles() { + const plugins = [ + require("postcss-import"), + require("tailwindcss"), + postcssPresetEnv({ stage: 2, autoprefixer: { cascade: false }, features: { "custom-properties": true } }), + require("autoprefixer"), + require("cssnano"), + ]; + return src("src/index.scss").pipe(postcss(plugins)).pipe(sass()).pipe(dest(output)); +} + +function minify() { + return src(`${output}/index.css`).pipe(cleanCSS()).pipe(rename(`index.min.css`)).pipe(dest(output)); +} + +function stylesLive() { + styles().pipe(livereload({ start: true })); +} + +function livereloadStyles() { + livereload.listen(); + watch("src/**/*.scss", series(stylesLive)); +} + +exports.styles = styles; +exports.default = series(styles); +exports.watch = livereloadStyles; +if (process.env.NODE_ENV === "production") { + exports.build = series(cleanStyles, styles, minify); +} else { + exports.build = series(styles, livereloadStyles); +} + +// gulp.task("watch:styles", function () { +// livereload.listen(); +// gulp.watch("**/*.scss", ["styles"]); +// }); diff --git a/frontend/micro-ui-internals/packages/css/img/browser-icon.png b/frontend/micro-ui-internals/packages/css/img/browser-icon.png new file mode 100644 index 00000000000..32e2488b00e Binary files /dev/null and b/frontend/micro-ui-internals/packages/css/img/browser-icon.png differ diff --git a/frontend/micro-ui-internals/packages/css/img/m_seva_white_logo.png b/frontend/micro-ui-internals/packages/css/img/m_seva_white_logo.png new file mode 100644 index 00000000000..394e483de3a Binary files /dev/null and b/frontend/micro-ui-internals/packages/css/img/m_seva_white_logo.png differ diff --git a/frontend/micro-ui-internals/packages/css/img/mseva-demo.png b/frontend/micro-ui-internals/packages/css/img/mseva-demo.png new file mode 100644 index 00000000000..50a52517263 Binary files /dev/null and b/frontend/micro-ui-internals/packages/css/img/mseva-demo.png differ diff --git a/frontend/micro-ui-internals/packages/css/package.json b/frontend/micro-ui-internals/packages/css/package.json new file mode 100644 index 00000000000..184f8244c79 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/package.json @@ -0,0 +1,57 @@ +{ + "name": "@egovernments/digit-ui-css", + "version": "1.0.206", + "license": "MIT", + "main": "dist/index.css", + "engines": { + "node": ">=10" + }, + "cssConfig": { + "prefix": "" + }, + "scripts": { + "start": "gulp build", + "build:prod": "NODE_ENV=production gulp build", + "prepublish": "yarn build:prod", + "deploy": "gulp && cp -R svg example && cp -R img example && gh-pages -d example" + }, + "browserslist": [ + "> 3%", + "last 2 versions" + ], + "style": "./dist/index.css", + "dependencies": { + "node-sass": "^4.14.1", + "normalize.css": "^8.0.1", + "postcss-scss": "^3.0.1", + "tailwindcss": "^1.8.10" + }, + "devDependencies": { + "autoprefixer": "^10.0.0", + "cssnano": "^4.1.10", + "gh-pages": "^3.1.0", + "gulp": "^4.0.2", + "gulp-clean": "^0.4.0", + "gulp-clean-css": "^4.3.0", + "gulp-livereload": "^4.0.2", + "gulp-postcss": "^9.0.0", + "gulp-rename": "^2.0.0", + "gulp-sass": "^4.1.0", + "postcss": "^8.0.9", + "postcss-cli": "^8.0.0", + "postcss-header": "^2.0.0", + "postcss-import": "^12.0.1", + "postcss-prefixer": "^2.1.2", + "postcss-preset-env": "^6.7.0", + "postcss-scss": "^3.0.1", + "sass": "^1.26.11" + }, + "files": [ + "dist/index.min.css", + "dist/index.css", + "svg/**/*.svg", + "img/**/*.png", + "src/**/*.scss", + "src/**/*.css" + ] +} diff --git a/frontend/micro-ui-internals/packages/css/postcss.config.js b/frontend/micro-ui-internals/packages/css/postcss.config.js new file mode 100644 index 00000000000..25116f1d5aa --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/postcss.config.js @@ -0,0 +1,56 @@ +const postcssPresetEnv = require("postcss-preset-env"); + +module.exports = { + parser: require("postcss-scss"), + plugins: [ + require("postcss-import"), + require("postcss-nested").default, + require("tailwindcss"), + require("postcss-preset-env"), + require("autoprefixer"), + // require("cssnano"), + ], +}; + +// const fs = require('fs'); +// const { name, version, author, cssConfig } = JSON.parse(fs.readFileSync('package.json')); + +// const header = ` +// @charset "UTF-8"; +// /*! +// * ${name} - ${version} +// * +// * Copyright (c) ${new Date().getFullYear()} ${author.name} +// */ +// `; + +// module.exports = (ctx) => { +// const prefix = ctx.env === 'compat' ? '' : cssConfig.prefix; +// const devMessage = `🎉🎉🎉🎉 \n${name} ${ctx.env} build was compiled sucessfully! \n`; + +// console.log(devMessage); + +// return { +// map: ctx.options.map, +// parser: ctx.options.parser, +// plugins: { +// 'postcss-import': { root: ctx.file.dirname }, +// 'postcss-prefixer': { +// prefix, +// ignore: [/\[class\*=.*\]/], +// }, +// 'postcss-preset-env': { +// autoprefixer: { +// cascade: false, +// }, +// features: { +// 'custom-properties': true, +// }, +// }, +// cssnano: ctx.env === 'production' || ctx.env === 'compat' ? {} : false, +// 'postcss-header': { +// header, +// }, +// }, +// }; +// }; diff --git a/frontend/micro-ui-internals/packages/css/src/components/CitizenHomeCard.scss b/frontend/micro-ui-internals/packages/css/src/components/CitizenHomeCard.scss new file mode 100644 index 00000000000..6d3640ce5a4 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/CitizenHomeCard.scss @@ -0,0 +1,42 @@ +.CitizenHomeCard{ + + @apply bg-white mx-md p-md mb-lg; + + .header{ + @apply flex font-bold text-heading-l text-text-primary justify-between pb-sm; + + svg{ + width: 33px; + height: 33px; + } + } + + .links{ + @apply text-heading-s text-primary-main; + + a{ + @apply block pb-sm; + } + } +} + +@screen dt{ + .CitizenHomeCard{ + max-width: 45%; + min-width: 40%; + margin-left: 0; + @apply inline-block mr-lg p-lg align-top; + .header{ + @apply pb-lg text-heading-l-dt; + svg{ + @apply w-12 h-12; + } + } + + .links{ + a{ + @apply pb-md + } + } + } +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/src/components/EllipsisMenu.scss b/frontend/micro-ui-internals/packages/css/src/components/EllipsisMenu.scss new file mode 100644 index 00000000000..0eb243a266d --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/EllipsisMenu.scss @@ -0,0 +1,17 @@ +.ellipsis-menu-wrap{ + @apply relative; + + .menu{ + box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); + @apply absolute right-0 bg-white z-30; + .item{ + @apply flex items-center justify-between p-sm; + &:hover{ + @apply bg-grey-mid cursor-pointer; + } + svg { + margin-right: 10px; + } + } + } +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/src/components/SearchForm.scss b/frontend/micro-ui-internals/packages/css/src/components/SearchForm.scss new file mode 100644 index 00000000000..dc859b01119 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/SearchForm.scss @@ -0,0 +1,19 @@ +.search-form-wrapper{ + @apply flex flex-wrap justify-between bg-white mb-lg py-lg pl-lg; + .form-field{ + width: calc( 25% - 16px ); + @apply inline-block mr-md align-middle; + } + .submit{ + right: 36px; + margin-top: 22px; + @apply inline align-middle text-center !important; + button{ + margin: 0; + @apply inline-block w-full !important; + } + p{ + @apply cursor-pointer text-link text-focus w-full inline-block ; + } + } +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/src/components/actionLink.scss b/frontend/micro-ui-internals/packages/css/src/components/actionLink.scss new file mode 100644 index 00000000000..46a1f449ae1 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/actionLink.scss @@ -0,0 +1,3 @@ +.action-link { + @apply text-primary-main text-text-btn mr-lg !important; +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/actionbar.scss b/frontend/micro-ui-internals/packages/css/src/components/actionbar.scss new file mode 100644 index 00000000000..abd9169f700 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/actionbar.scss @@ -0,0 +1,59 @@ +.action-bar-wrap { + box-shadow: rgba(0, 0, 0, 0.16) 0 -2px 8px; + max-width: 480px; + z-index: 100; + + @apply left-0 bottom-0 w-full bg-white py-sm px-sm fixed text-right; + + div { + @apply w-full; + } + + .menu-wrap { + @apply absolute bg-white text-left mb-xs z-30 cursor-pointer; + bottom: 45px; + box-shadow: rgba(0, 0, 0, 0.14) 0 8px 10px 1px, rgba(0, 0, 0, 0.12) 0 3px 14px 2px, rgba(0, 0, 0, 0.2) 0 5px 5px -3px; + width: calc(100% - 16px); + right: 8px; + + div { + @apply h-12 pl-sm py-md text-body-l text-text-primary; + + &:hover { + @apply bg-grey-mid w-full; + } + } + } +} + +@screen dt { + .action-bar-wrap { + box-shadow: rgba(0, 0, 0, 0.16) 0 -2px 8px; + left: 0; + max-width: none; + z-index: 999; + + @apply fixed bottom-0 bg-white py-sm pr-lg text-right; + + div { + width: calc(100% - 16px); + } + + .menu-wrap { + bottom: 45px; + top: unset; + box-shadow: rgba(0, 0, 0, 0.14) 0 8px 10px 1px, rgba(0, 0, 0, 0.12) 0 3px 14px 2px, rgba(0, 0, 0, 0.2) 0 5px 5px -3px; + @apply absolute h-auto bg-white text-left mb-xs z-30; + width: 240px; + right: 24px; + + div { + @apply h-12 pl-sm py-md text-body-l text-text-primary; + + &:hover { + @apply bg-grey-mid w-full; + } + } + } + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/bannercomponents.scss b/frontend/micro-ui-internals/packages/css/src/components/bannercomponents.scss new file mode 100644 index 00000000000..687b73d0b23 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/bannercomponents.scss @@ -0,0 +1,109 @@ +.success-wrap, +.emp-success-wrap { + @apply block bg-success w-full text-center text-white pt-md pb-sm mb-md; + + header { + @apply block mb-sm font-rc font-bold text-heading-xl; + } + + div { + img { + padding: 13.67px; + margin-left: auto; + margin-right: auto; + @apply border border-solid border-white rounded-full h-16 w-16 bg-white mb-md; + } + + svg { + padding: 13.67px; + margin-left: auto; + margin-right: auto; + @apply border border-solid border-white rounded-full h-16 w-16 bg-white mb-md; + } + + svg.payment-svg { + border: unset; + background-color: unset; + @apply rounded-full; + } + + h2 { + @apply font-bold text-caption-m mb-sm; + } + + p { + @apply font-bold text-caption-l; + } + } +} + +.error-wrap, +.emp-error-wrap { + @apply block bg-error w-full text-center text-white pt-md pb-sm mb-md; + + header { + @apply block mb-sm font-rc font-bold text-heading-xl; + } + + img { + margin-left: auto; + margin-right: auto; + padding: 13.67px; + @apply border border-solid border-white rounded-full bg-white h-16 w-16 mb-md; + } + + svg { + margin-left: auto; + margin-right: auto; + padding: 13.67px; + @apply border border-solid border-white rounded-full bg-white h-16 w-16 mb-md; + } +} + +@screen dt { + .success-wrap { + width: calc(100% + 284px); + header { + @apply text-heading-xl-dt; + } + } + .emp-success-wrap { + width: calc(100%); + header { + @apply text-heading-xl-dt; + } + } + + .error-wrap { + width: calc(100% + 284px); + header { + @apply text-heading-xl-dt; + } + } + + .emp-error-wrap { + width: calc(100%); + header { + @apply text-heading-xl-dt; + } + } +} + +.photos-wrap { + max-width: 640px; + @apply flex pt-md; + + img { + width: calc(33% - 9.333px); + margin-right: 14px; + } + + svg { + width: calc(33% - 9.333px); + margin-right: 14px; + } + + .last { + width: calc(33% - 9.333px); + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/body.scss b/frontend/micro-ui-internals/packages/css/src/components/body.scss new file mode 100644 index 00000000000..6ab7e40ae6a --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/body.scss @@ -0,0 +1,118 @@ +body { + @apply bg-grey-bg; +} + +.body-container { + @apply bg-grey-bg h-full min-h-screen overflow-x-hidden; +} + +.navbar { + @apply text-white bg-secondary p-md w-full mb-md; + img { + height: 24px; + } +} +/* .navbar-header{ + @apply text-navbarheader float-left px-sm +} + +.navbar-subheader{ + @apply font-light px-sm border-solid border-l border-white border-opacity-100 +}*/ + +.h1 { + @apply font-rc text-heading-l text-text-primary font-bold mb-md ml-md; +} + +.link-label { + @apply block text-link text-primary-main mb-md ml-md cursor-pointer; + + &:hover { + @apply text-primary-main; + } +} + +.back-btn { + width: fit-content; + @apply block border-solid border-b border-text-primary font-rc text-text-primary text-text-btn ml-sm mt-md; + + label { + @apply inline mr-sm align-middle; + } + + p { + @apply inline float-right; + } +} + +.bread-crumb { + font-size: 14px; + color: #505a5f; + display: flex; + margin-bottom: 10px; +} +.bread-crumb--item { + margin-left: 5px; + + &:not(:last-child):after { + content: " /"; + } + + button { + outline: none; + } + + .last { + color: #0b0c0c; + } +} + +.back-btn2 { + width: fit-content; + @apply flex border-solid border-b border-text-primary font-rc text-text-primary text-text-btn ml-sm mb-md; + + img { + @apply flex; + } + + svg { + @apply flex; + } + + p { + @apply flex; + } +} + +@screen dt { + .employee-app-container { + @apply w-full; + } + + .app-container { + width: 960px; + margin-left: 8px; + margin-right: auto; + } + + .h1 { + margin-left: 0; + @apply text-heading-l-dt; + } + + .link-label { + margin-left: 0; + } + + .back-btn { + margin-left: 0; + } + + .back-btn2 { + margin-left: 0; + } +} + +.body-container::-webkit-scrollbar { + display: none; +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/src/components/buttons.scss b/frontend/micro-ui-internals/packages/css/src/components/buttons.scss new file mode 100644 index 00000000000..f7a82385619 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/buttons.scss @@ -0,0 +1,35 @@ +.selector-button-primary { + @apply h-8 bg-primary-main text-center border-b-2 border-input-border border-solid outline-none px-lg; + + &:focus { + @apply outline-none; + } + + h2 { + @apply font-rc font-medium text-legend text-white; + } +} + +.selector-button-border { + @apply h-8 bg-border text-center border-b-2 border-input-border border-solid outline-none px-lg; + + &:focus { + @apply outline-none; + } + + h2 { + @apply font-rc font-medium text-legend text-text-primary; + } +} + +.selector-button-primary-disabled { + @apply h-8 bg-primary-main text-center border-b-2 border-input-border border-solid outline-none px-lg opacity-50; + + &:focus { + @apply outline-none; + } + + h2 { + @apply font-rc font-medium text-legend text-white; + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/card.scss b/frontend/micro-ui-internals/packages/css/src/components/card.scss new file mode 100644 index 00000000000..64a4c82e804 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/card.scss @@ -0,0 +1,284 @@ +.card { + @apply bg-white m-sm px-md pt-md pb-lg shadow-card; + border-radius: 4px; + + .card-header { + @apply text-text-primary text-heading-xl font-bold font-rc align-middle text-left mb-md; + } + + .card-sub-header { + @apply text-text-primary text-caption-xl font-bold align-middle text-left mb-sm; + } + + .card-caption { + @apply text-text-secondary text-caption-xl mb-sm; + } + + .card-text { + @apply text-text-secondary text-body-l align-middle text-left mb-lg; + + span { + @apply text-text-primary; + } + } + + .card-text-primary { + @apply text-text-primary text-body-l; + } + + .card-text-button { + @apply text-primary-main text-text-btn; + } + + .card-label { + @apply text-legend text-text-primary mb-md; + } + + .card-label-error { + @apply block font-bold text-legend text-error mb-md; + } + + .card-label-desc { + @apply font-bold text-text-secondary text-heading-s mb-md; + } + + .card-link { + @apply block text-center text-link text-primary-main mt-md cursor-pointer; + } +} + +.docsDescription { + color: #0B0C0C !important; +} + +.field-container { + @apply flex justify-center items-center; +} + +.employeeCard { + @apply bg-white shadow-card p-md mb-xl; + border-radius: 4px; + + .card-header { + @apply text-text-primary text-heading-xl font-bold font-rc align-middle text-left mb-md; + } + + .card-sub-header, + .employee-card-sub-header { + @apply text-text-primary text-caption-xl font-bold align-middle text-left; + } + + .card-section-header { + @apply text-text-primary text-heading-m font-bold; + } + + .card-caption { + @apply text-text-secondary text-caption-xl mb-sm; + } + + .card-text { + @apply text-text-secondary text-body-l align-middle text-left mb-lg; + + span { + @apply text-text-primary; + } + } + + .card-text-primary { + @apply text-text-primary text-body-l; + } + + .card-text-button { + @apply text-primary-main text-text-btn; + } + + .card-label { + @apply text-legend text-text-primary mb-md; + } + + .card-label-error { + @apply block font-bold text-legend text-error mb-md; + } + + .card-label-desc { + @apply font-bold text-text-secondary text-heading-s mb-md; + } + + .card-link { + @apply block text-center text-link text-link-normal mt-md; + } +} + +.header-wrap { + @apply flex mb-md; + + .header-start { + margin-right: auto; + } + + .header-content { + } + + .header-end { + margin-left: auto; + } +} + +.card-emp { + @extend .card; + padding-right: 0; + padding-top: 0; + padding-left: 0; + @apply bg-white m-sm; +} + +.submit-bar { + @apply h-10 bg-primary-main text-center border-b-2 border-input-border border-solid w-full outline-none; + + &:focus { + @apply outline-none; + } + + header { + @apply font-rc font-medium text-legend text-white leading-10; + } +} + +.submit-bar-disabled { + @apply h-10 bg-primary-main text-center border-b-2 border-input-border border-solid w-full outline-none opacity-50; + + &:focus { + @apply outline-none; + } + + header { + @apply font-rc font-medium text-legend text-white leading-10; + } +} + +@screen dt { + .submit-bar, + .submit-bar-disabled { + width: 240px; + } + + .card { + margin-right: auto; + padding-right: 300px; + padding-left: 16px; + padding-top: 16px; + max-width: 960px; + min-width: 640px; + margin-left: 0px; + + .card-header { + @apply text-heading-xl-dt; + } + + .card-sub-header { + @apply text-heading-l-dt; + } + + .card-caption { + @apply text-caption-xl-dt; + } + + .card-text, + .card-text-primary { + @apply text-body-l-dt; + } + + .card-link { + @apply text-left; + } + } + + .employeeCard { + @apply mb-md mx-md !important; + + &.filter { + margin-left: auto; + margin-right: auto; + } + + .card-header { + @apply text-heading-xl-dt; + } + + .card-sub-header { + @apply text-heading-l-dt; + } + + .employee-card-sub-header { + margin-bottom: 40px; + @apply text-heading-l-dt; + } + + .card-section-header { + margin-bottom: 40px; + @apply text-heading-m-dt; + } + + .card-caption { + @apply text-caption-xl-dt; + } + + .card-text, + .card-text-primary { + @apply text-body-l-dt; + } + + .card-link { + @apply text-left; + } + + .label-field-pair { + @apply flex items-center; + + h2 { + width: 30%; + } + + .field { + width: 50%; + margin-right: 20%; + .field { + margin-right: unset; + } + } + } + + .field-container { + span { + border: 2px solid black; + background: rgb(247, 247, 247); + width: 40px; + height: 40px; + display: flex; + justify-content: center; + align-items: center; + margin-top: -16px; + border-right: none; + } + } + } + + .header-wrap { + @apply flex mb-md; + + .header-start { + margin-right: auto; + } + + .header-content { + } + + .header-end { + margin-left: auto; + } + } +} + +.card-section-header { + @apply text-text-primary text-heading-m font-bold; +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/cardHeaderWithOptions.scss b/frontend/micro-ui-internals/packages/css/src/components/cardHeaderWithOptions.scss new file mode 100644 index 00000000000..a19f1dc164a --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/cardHeaderWithOptions.scss @@ -0,0 +1,14 @@ +.cardHeaderWithOptions{ + @apply flex flex-row justify-between; + .multilinkWrapper{ + @apply relative; + .multilink-labelWrap{ + position: unset; + @apply flex z-10 items-center align-middle text-center m-md; + } + .multilink-optionWrap{ + top: 32px; + right: 0%; + } + } +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/src/components/changeLanguage.scss b/frontend/micro-ui-internals/packages/css/src/components/changeLanguage.scss new file mode 100644 index 00000000000..3a7d4a9b5b9 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/changeLanguage.scss @@ -0,0 +1,3 @@ +.language-title { + margin-bottom: "5px"; +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/charts.scss b/frontend/micro-ui-internals/packages/css/src/components/charts.scss new file mode 100644 index 00000000000..4ef7b90689d --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/charts.scss @@ -0,0 +1,168 @@ +.chartHeader { + display: flex; + flex-direction: row; + justify-content: space-between; + + .sideContent { + @apply flex justify-around items-center ; + + .searchInput { + @apply mr-lg; + input{ + margin-bottom: 0; + @apply pr-xl; + } + } + + .signature-img{ + top: 8px; + right: 8px; + fill: #505A5F; + @apply absolute; + } + } +} + +.column-direction { + flex-direction: column; +} + +.chart-wrapper { + padding: 0 10px; + margin-top: 60px; +} + +.chart-row { + @apply flex justify-between flex-wrap; + .chart-item { + flex-grow: 1; + margin-bottom: 15px; + width: 100%; + + &:last-child { + margin-right: 0px; + } + } +} + +.cursorPointer { + @apply cursor-pointer; +} + +.options { + @apply flex justify-between items-center; + div { + display: none; + } +} + +.options-m { + width: 95%; + margin: 0 auto 15px; + @apply flex justify-between; + + svg { + margin-right: 10px; + } +} + +.options-m { + div { + @apply flex; + } +} +.no-data { + @apply flex justify-center items-center h-full; + margin-bottom: 30px; +} + +@screen dt { + .chart-wrapper { + padding-left: 15px; + margin-top: 10px; + + .chart-item { + margin-right: 25px !important; + margin-bottom: 25px !important; + margin-left: 0 !important; + width: 31%; + } + } + .column-direction { + flex-direction: row; + } + .options-m { + display: none; + } + + .options { + div { + @apply flex cursor-pointer; + } + } +} + +.showMore { + @apply text-right cursor-pointer; + color: #F47738; +} + +@media print{ + .page-break { + margin-top: 1rem; + display: block; + page-break-before: auto; + } + .chart-wrapper { + @media print{ + .chart-row { + @media print{ + @apply flex justify-between flex-wrap; + .chart-item { + @media print{ + flex-grow: 1; + margin-right: 25px; + margin-bottom: 25px; + width: 31%; + + &:last-child { + margin-right: 0px; + } + .chartHeader { + display: flex; + justify-content: space-between; + + .sideContent { + @apply flex justify-around items-center ; + + .searchInput { + @apply mr-lg; + input{ + margin-bottom: 0; + @apply pr-xl; + } + } + + .signature-img{ + top: 8px; + right: 8px; + fill: #505A5F; + @apply absolute; + } + } + } + } + } + } + } + + .options { + @apply flex justify-end; + } + + .options-m { + display: none; + } + } +} +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/src/components/checkbox.scss b/frontend/micro-ui-internals/packages/css/src/components/checkbox.scss new file mode 100644 index 00000000000..b805530f4d7 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/checkbox.scss @@ -0,0 +1,53 @@ +.checkbox-wrap { + @apply flex mb-md relative items-baseline; + + input { + width: 38px; + height: 38px; + @apply opacity-0 absolute top-0 left-0 z-10; + } + + .input-emp { + @extend input; + width: 24px; + height: 24px; + } + + .custom-checkbox { + width: 38px; + height: 38px; + @apply absolute top-0 left-0 border border-solid border-input-border z-0; + + img { + @apply opacity-0; + } + + svg { + @apply opacity-0; + } + } + + .custom-checkbox-emp { + @extend .custom-checkbox; + width: 24px; + height: 24px; + } + + input:checked ~ .custom-checkbox, + input:hover ~ .custom-checkbox { + @apply border-2 border-primary-main; + } + + input:checked ~ .custom-checkbox img { + @apply opacity-100; + } + + input:checked ~ .custom-checkbox svg { + @apply opacity-100; + } + + .label { + margin-left: 56px; + @apply text-form-field text-text-primary; + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/checkpoint.scss b/frontend/micro-ui-internals/packages/css/src/components/checkpoint.scss new file mode 100644 index 00000000000..8cfa23660a2 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/checkpoint.scss @@ -0,0 +1,61 @@ +.checkpoint-connect-wrap { + padding-bottom: 40px; + @apply relative; +} +.checkpoint-done { + @apply flex; + + h2 { + width: 24px; + height: 24px; + border-radius: 50%; + @apply border-b border-solid border-primary-main bg-primary-main z-10; + } + + header { + @apply text-heading-s ml-md; + + p { + margin-top: 4px; + @apply text-heading-s text-text-secondary; + } + } +} + +.checkpoint { + @apply flex; + + h2 { + width: 24px; + height: 24px; + border-radius: 50%; + @apply border-b border-solid border-border bg-border z-10; + } + + header { + @apply text-heading-s ml-md; + + p { + margin-top: 4px; + @apply text-heading-s text-text-secondary; + } + } +} + +.checkpoint-connect { + margin-left: 12px; + @apply absolute top-0 left-0 h-full border-l border-solid border-border; +} + +.checkpoint-comments-wrap { + max-width: 560px; + @apply bg-grey-mid p-sm mt-sm; + + h4{ + @apply text-text-primary text-heading-s; + } + + p{ + @apply text-text-secondary text-body-s-dt; + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/citizenInfoLabel.scss b/frontend/micro-ui-internals/packages/css/src/components/citizenInfoLabel.scss new file mode 100644 index 00000000000..bbb1ce45220 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/citizenInfoLabel.scss @@ -0,0 +1,14 @@ +.citizen-info-label { + @apply p-sm border-4 border-solid border-link-normal text-heading-m m-sm; + max-width: 960px; + + p { + @apply text-link-normal font-bold mt-xs text-heading-s; + } +} + +@screen dt { + .citizen-info-label { + margin: 0; + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/custombtn.scss b/frontend/micro-ui-internals/packages/css/src/components/custombtn.scss new file mode 100644 index 00000000000..acf8a99d33d --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/custombtn.scss @@ -0,0 +1,11 @@ +.customBtn { + @apply bg-white text-black box-border inline-block outline-none px-sm border border-solid border-primary-main; + margin: 0px 4.65% 0px 0px; + height: 30px; + line-height: 30px; +} + +.customBtn-selected { + @extend .customBtn; + @apply bg-primary-main text-white font-medium; +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/datatable.scss b/frontend/micro-ui-internals/packages/css/src/components/datatable.scss new file mode 100644 index 00000000000..b41536d42d6 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/datatable.scss @@ -0,0 +1,71 @@ +.data-table { + @apply text-text-primary; + + .row { + @apply flex border-b border-border pb-sm mb-sm; + + span { + width: 70%; + display: contents; + } + + h2 { + width: 40%; + @apply font-bold text-heading-s; + } + + .value { + width: 50%; + @apply text-heading-s; + word-break: break-all; + } + .caption { + width: 70%; + @apply text-heading-s text-text-secondary; + } + } + + .last { + border: none; + padding: 0; + margin: 0; + } +} + +.employee-data-table { + .row { + @apply flex pb-sm mb-sm; + + span { + width: 70%; + display: contents; + } + + h2 { + width: 30%; + @apply font-bold text-heading-s; + } + + .value { + width: 50%; + @apply text-heading-s; + } + + .caption { + width: 70%; + @apply text-heading-s text-text-secondary; + } + } + + .last { + border: none; + padding: 0; + margin: 0; + } +} + + + +.pt-citizen {.data-table {.row { + border: none; +}}} \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/src/components/datewrap.scss b/frontend/micro-ui-internals/packages/css/src/components/datewrap.scss new file mode 100644 index 00000000000..1f3c8897774 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/datewrap.scss @@ -0,0 +1,21 @@ +.date-wrap { + @apply flex mb-md; + + img, + svg { + height: 22px; + width: 20px; + } + + p { + @apply text-text-primary text-body-l pl-sm; + } +} + +@screen dt { + .date-wrap { + p { + @apply text-body-l-dt; + } + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/detailscard.scss b/frontend/micro-ui-internals/packages/css/src/components/detailscard.scss new file mode 100644 index 00000000000..cfbc83a99e3 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/detailscard.scss @@ -0,0 +1,6 @@ +.details-card { + @apply bg-white m-sm px-sm pt-sm pb-lg shadow-card; + .card-label { + @apply font-bold text-legend text-text-primary mb-md; + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/detailscontainer.scss b/frontend/micro-ui-internals/packages/css/src/components/detailscontainer.scss new file mode 100644 index 00000000000..68f075f8ac2 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/detailscontainer.scss @@ -0,0 +1,13 @@ +.details-container { + @apply flex flex-col m-sm pt-md pb-md pl-sm pr-sm bg-white rounded; + .detail { + @apply flex flex-row items-baseline; + .label { + width: 138px; + @apply font-bold text-heading-s text-text-primary mb-md; + } + .name { + @apply pt-md; + } + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/filters.scss b/frontend/micro-ui-internals/packages/css/src/components/filters.scss new file mode 100644 index 00000000000..6fcfc9304cd --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/filters.scss @@ -0,0 +1,98 @@ +.filters-wrapper { + display: none; + padding: 20px 0px 0px; + z-index: 1; + + .filters-input { + flex-basis: 22%; + } + + .filters-input:not(:first-of-type) { + margin-left: 5%; + } + + .switch-wrapper { + display: flex; + justify-content: space-between; + max-width: 200px; + + .radio-switch { + display: none; + + &:checked ~ label { + border-color: #F47738; + color: #F47738; + } + } + + label { + border: 1px solid; + padding: 6px 10px; + display: block; + @apply border border-solid border-input-border; + &:hover{ + @apply border-2 border-solid border-primary-main; + } + } + } +} + +.pickerShadow { + box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); +} + +.filter-close { + @apply flex justify-end; +} + +.filter-header { + @apply flex; + + p { + font-weight: bold; + font-size: 24px; + line-height: 1; + margin: 0 12px 20px 8px; + } +} + +.clearText { + display: none; +} + +@screen dt { + .filters-wrapper { + display: flex; + } + + .filter-close, + .filter-header { + display: none; + } + + .clearText { + display: block; + text-align: right; + color: #f47738; + margin-top: 20px; + margin-left: 10px; + } +} + +@media (max-width: 780px) { + .filters-modal { + display: block; + position: fixed; + width: 100%; + height: 100vh; + left: 0; + top: 130px; + padding: 16px; + background-color: #fff; + z-index: 99; + } + + .rdrDefinedRangesWrapper { + display: none; + } +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/src/components/grey.scss b/frontend/micro-ui-internals/packages/css/src/components/grey.scss new file mode 100644 index 00000000000..eec759d99fe --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/grey.scss @@ -0,0 +1,3 @@ +.grey { + @apply text-text-secondary; +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/imageviewer.scss b/frontend/micro-ui-internals/packages/css/src/components/imageviewer.scss new file mode 100644 index 00000000000..1f0568f8d01 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/imageviewer.scss @@ -0,0 +1,33 @@ +.image-viewer-wrap { + @apply bg-text-primary p-md top-0 left-0 z-20 fixed w-full h-full; + + svg { + top: 90px; + right: 16px; + @apply absolute h-6 w-6; + } + + img { + margin-top: 40%; + @apply max-w-full h-auto; + } +} + +@screen dt { + .image-viewer-wrap { + @apply flex fixed top-0 left-0 w-full h-full z-20 bg-text-primary p-md; + + svg { + top: 90px; + right: 16px; + @apply absolute h-6 w-6; + } + + img { + width: auto; + height: auto; + max-width: 640px; + margin: auto; + } + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/info-banner.scss b/frontend/micro-ui-internals/packages/css/src/components/info-banner.scss new file mode 100644 index 00000000000..e592911c44a --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/info-banner.scss @@ -0,0 +1,34 @@ +.info-banner-wrap { + @apply bg-link-normal bg-opacity-25 m-sm p-md; + + svg { + margin-top: 5px; + @apply rounded-full; + } + + div { + @apply flex; + } + + h2 { + @apply text-heading-m text-link-normal mb-md font-bold ml-sm; + } + + p { + @apply text-body-l text-link-normal whitespace-pre-line; + } +} + +@screen dt { + .info-banner-wrap { + margin: 0; + + h2 { + @apply text-heading-m-dt; + } + + p { + @apply text-body-l-dt; + } + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/inputotp.scss b/frontend/micro-ui-internals/packages/css/src/components/inputotp.scss new file mode 100644 index 00000000000..686694452fc --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/inputotp.scss @@ -0,0 +1,15 @@ +.input-otp-wrap { + @apply mb-lg; + + input { + @apply border-2 border-solid border-input-border outline-none h-10 w-10 text-form-field text-text-primary mr-sm mb-sm text-center; + } + input::-webkit-outer-spin-button, + input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; + } + input[type="number"] { + -moz-appearance: textfield; + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/keynote.scss b/frontend/micro-ui-internals/packages/css/src/components/keynote.scss new file mode 100644 index 00000000000..df736c06aa4 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/keynote.scss @@ -0,0 +1,27 @@ +.key-note-pair { + @apply mb-md; + + h3 { + margin-bottom: 4px; + @apply font-bold text-text-primary text-heading-s; + } + + p { + @apply text-text-primary text-body-l; + } + + .caption { + @apply text-body-l text-text-secondary; + } +} + +@screen dt { + .key-note-pair { + p { + @apply text-body-l-dt; + } + .caption { + @apply text-body-l-dt text-text-secondary; + } + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/languageSelector.scss b/frontend/micro-ui-internals/packages/css/src/components/languageSelector.scss new file mode 100644 index 00000000000..386c5fa10f7 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/languageSelector.scss @@ -0,0 +1,7 @@ +.language-selector { + @apply flex; +} + +.language-selector div:not(:first-child) { + margin-left: 10px; +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/loader.scss b/frontend/micro-ui-internals/packages/css/src/components/loader.scss new file mode 100644 index 00000000000..7d860a1425c --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/loader.scss @@ -0,0 +1,96 @@ +.page-loader, +.module-loader { + text-align: center; +} + +.page-loader { + padding-top: 88px; +} + +.module-loader { + padding: 16px; +} + +@keyframes ldio-pjg92h09b2o { + 0% { + transform: translate(-50%, -50%) rotate(0deg); + } + + 100% { + transform: translate(-50%, -50%) rotate(360deg); + } +} + +.ldio-pjg92h09b2o div { + position: absolute; + width: 52px; + height: 52px; + border: 12px solid #22394d; + border-top-color: transparent; + border-radius: 50%; +} + +.ldio-pjg92h09b2o div { + animation: ldio-pjg92h09b2o 1s linear infinite; + top: 50px; + left: 50px; +} + +.loadingio-spinner-rolling-faewnb8ux8 { + width: 48px; + height: 48px; + display: inline-block; + overflow: hidden; + background: none; +} + +.ldio-pjg92h09b2o { + width: 100%; + height: 100%; + position: relative; + transform: translateZ(0) scale(0.48); + backface-visibility: hidden; + transform-origin: 0 0; + /* see note above */ +} + +.ldio-pjg92h09b2o div { + box-sizing: content-box; +} + +/* +.loader { + position: absolute; + left: 50%; + top: 50%; + z-index: 1; + width: 80px; + height: 80px; + margin: -80px 0 0 -40px; + border: 8px solid #f3f3f3; + border-radius: 50%; + border-top-color: #3498db; + -webkit-animation: loader-spin 1s linear infinite; + animation: loader-spin 1s linear infinite; +} + +@-webkit-keyframes loader-spin { + 0% { + -webkit-transform: rotate(0deg); + } + + 100% { + -webkit-transform: rotate(360deg); + } +} + +@keyframes loader-spin { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} +*/ diff --git a/frontend/micro-ui-internals/packages/css/src/components/map.scss b/frontend/micro-ui-internals/packages/css/src/components/map.scss new file mode 100644 index 00000000000..7e0fb5829ca --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/map.scss @@ -0,0 +1,30 @@ +.map-wrap { + @apply pb-lg; +} + +.map { + width: 100%; + height: 384px; + overflow: visible; + position: relative; +} + +.map-search-bar-wrap { + border-radius: 4px; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5); + margin-bottom: 4px; + display: flex; + width: 100%; +} + +.map-search-bar-icon { + @apply inline h-6 w-6 m-sm; +} + +.map-search-bar { + @apply block outline-none text-form-field text-text-primary h-10 w-full !important; +} + +.map-search-bar:focus { + border: none; +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/menu.scss b/frontend/micro-ui-internals/packages/css/src/components/menu.scss new file mode 100644 index 00000000000..e69de29bb2d diff --git a/frontend/micro-ui-internals/packages/css/src/components/metricsTable.scss b/frontend/micro-ui-internals/packages/css/src/components/metricsTable.scss new file mode 100644 index 00000000000..da811f60b1b --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/metricsTable.scss @@ -0,0 +1,20 @@ +.metricsTable { + @apply bg-white px-md pt-md pb-lg shadow-card; + max-width: 440px; + border-radius: 4px; + + .row { + @apply flex justify-between; + height: 68px; + } + + .lower_red { + @apply inline; + color: rgb(229, 77, 66); + } + + .upper_green { + @apply inline; + color: #00703C; + } +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/src/components/multiLink.scss b/frontend/micro-ui-internals/packages/css/src/components/multiLink.scss new file mode 100644 index 00000000000..16e8b83674a --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/multiLink.scss @@ -0,0 +1,73 @@ +.multilink-labelWrap{ + top: 73px; + @apply flex items-center align-middle text-center m-md absolute right-0 z-10; +} + +.multilink-link-button{ + margin: 0; + @apply text-heading-s text-primary-light +} + +.multilink-optionWrap{ + right: 0; + top:110px; + width: max-content; + @apply absolute shadow-card bg-white m-md z-10; + + .multilink-option{ + + svg{ + margin-top: auto; + margin-bottom: auto; + @apply mx-sm + } + + &:hover{ + @apply bg-grey-mid cursor-pointer; + } + @apply p-md; + } +} +.overCard{ + top: 23px; +} + +.multilink-block-wrapper{ + @apply relative; + .multilink-labelWrap{ + margin: 0 !important; + top: unset; + @apply relative text-text-primary !important; + svg{ + fill: #505A5F; + } + span{ + @apply text-text-primary !important; + } + } + .multilink-optionWrap{ + top: 8px; + right: -50%; + @apply block !important; + } +} + +@screen dt { + + .multilink-block-wrapper{ + .multilink-optionWrap{ + right: 0 !important; + } + } + + .multilink-labelWrap{ + right: 20%; + top: 80px; + } + + .multilink-optionWrap{ + right: 20%; + top: 110px; + @apply shadow-card rounded-sm; + } +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/src/components/multiSelectDropdown.scss b/frontend/micro-ui-internals/packages/css/src/components/multiSelectDropdown.scss new file mode 100644 index 00000000000..0107c820163 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/multiSelectDropdown.scss @@ -0,0 +1,73 @@ +.multi-select-dropdown-wrap{ + @apply relative text-form-field text-text-primary w-full; + .master, .master-active{ + @apply relative border border-solid border-input-border h-10 w-full; + input[type=text]{ + @apply absolute top-0 left-0 p-sm pl-sm min-h-full min-w-full opacity-0; + &:focus{ + @apply outline-none; + } + } + .label{ + @apply flex justify-between p-sm w-full h-full; + svg{ + @apply h-6 w-6; + } + } + + &:hover{ + @apply border-2 border-solid border-primary-main; + } + } + + .master-active{ + @apply border-2 border-primary-main; + input[type=text]{ + @apply opacity-100; + } + .label{ + @apply hidden; + } + } + + .server{ + + box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); + top:40px; + + max-height:20vmax; + overflow: scroll; + @apply absolute min-w-full z-20; + div{ + @apply flex w-full bg-white; + &:hover{ + @apply bg-grey-mid; + } + input{ + height: 44px; + @apply absolute min-w-full opacity-0 z-20 cursor-pointer; + } + p{ + padding: 12px; + @apply text-form-field text-text-primary; + } + .custom-checkbox{ + height: 28px; + width: 28px; + @apply border border-solid border-input-border m-sm; + svg{ + @apply opacity-0 z-10; + } + } + input:checked ~ .custom-checkbox, + input:hover ~ .custom-checkbox { + @apply border-2 border-primary-main; + } + + input:checked ~ .custom-checkbox svg { + @apply opacity-100; + } + + } + } +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/src/components/navbar.scss b/frontend/micro-ui-internals/packages/css/src/components/navbar.scss new file mode 100644 index 00000000000..e9182894d29 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/navbar.scss @@ -0,0 +1,101 @@ +.navbar { + @apply text-white bg-secondary p-md w-full; + position: fixed; + z-index: 9999; + + img { + display: inline-block; + min-width: 78px; + height: 24px; + } +} + +.img-circle { + border-radius: 50%; +} + +.profile-section { + height: auto; + display: flex; + flex-direction: column; + align-items: center; + padding-top: 30px; + padding-bottom: 30px; + background-color: rgb(224, 224, 224); + + img { + width: 89px; + height: 88px; + margin: 0px auto 16px; + } + + .label-container { + .label-text { + color: #767676; + } + &.name-Profile { + .label-text { + letter-spacing: 0.6px; + color: rgb(72, 72, 72); + font-weight: 500; + font-size: 14px; + } + } + } +} + +.drawer-list { + @apply pt-md pl-md pr-md; + position: relative; + min-height: 1px; + .menu-item { + border: 10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + cursor: pointer; + text-decoration: none; + margin: 0px; + padding: 0px; + outline: none; + font-size: 16px; + position: relative; + color: rgb(95, 92, 98); + line-height: 48px; + transition: all 450ms cubic-bezier(0.23, 1, 0.32, 1) 0ms; + min-height: 48px; + white-space: initial; + background: none; + .icon { + display: block; + color: rgb(117, 117, 117); + fill: rgb(117, 117, 117); + height: 21px; + width: 21px; + float: left; + margin-top: 12px; + } + .icon + .menu-label { + margin-left: 36px; + } + } +} + +/* .navbar-header{ + @apply text-navbarheader float-left px-sm +} + +.navbar-subheader{ + @apply font-light px-sm border-solid border-l border-white border-opacity-100 +}*/ + +.side-bar-footer{ + width: 200px; + margin-left: 50px; + @apply absolute bottom-0; +} + +.digit-footer{ + @apply flex h-4 mb-sm; + img{ + @apply mr-sm; + } +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/src/components/popup.scss b/frontend/micro-ui-internals/packages/css/src/components/popup.scss new file mode 100644 index 00000000000..baab1729fc1 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/popup.scss @@ -0,0 +1,12 @@ +.popup-wrap { + background: rgba(0, 0, 0, 0.7); + @apply flex fixed w-full h-full overflow-auto top-0 left-0 min-h-screen; + z-index: 10000; +} + +@screen dt { + .popup-wrap { + background: rgba(0, 0, 0, 0.7); + @apply min-h-screen; + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/radiobtn.scss b/frontend/micro-ui-internals/packages/css/src/components/radiobtn.scss new file mode 100644 index 00000000000..826a8504e35 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/radiobtn.scss @@ -0,0 +1,40 @@ +.radio-wrap { + @apply my-sm block leading-10 mb-lg; + + div { + @apply block mb-md; + } + + .radio-btn-wrap { + @apply block float-left relative; + &:hover { + .radio-btn-checkmark { + @apply border-primary-main; + } + } + } + + .radio-btn { + @apply opacity-0 absolute cursor-pointer h-10 w-10; + } + + .radio-btn-checkmark { + @apply h-10 w-10 border border-input-border border-solid rounded-full block; + } + + label { + @apply text-text-primary text-form-field ml-md; + } + + .radio-btn-checkmark:after { + content: ""; + } + + .radio-btn-wrap input:checked ~ .radio-btn-checkmark { + @apply border-2 border-primary-main; + } + + .radio-btn-wrap input:checked ~ .radio-btn-checkmark:after { + @apply block bg-primary-main h-5 w-5 rounded-full absolute top-10 left-10; + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/ratingstar.scss b/frontend/micro-ui-internals/packages/css/src/components/ratingstar.scss new file mode 100644 index 00000000000..e3429ab698d --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/ratingstar.scss @@ -0,0 +1,33 @@ +.rating-star-wrap { + @apply flex w-full mb-lg; + img { + width: 40px; + height: 38px; + display: block; + @apply mr-sm; + } + + svg { + width: 40px; + height: 38px; + display: block; + @apply mr-sm; + } +} + +@screen dt { + .rating-star-wrap { + @apply w-2/5; + } +} + +.rating-with-text { + @apply flex place-items-center w-full; + + svg { + width: 24px; + height: 38px; + display: block; + @apply mr-sm; + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/roundedLabel.scss b/frontend/micro-ui-internals/packages/css/src/components/roundedLabel.scss new file mode 100644 index 00000000000..ae734267665 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/roundedLabel.scss @@ -0,0 +1,10 @@ +.roundedLabel { + width: 24px; + height: 24px; + border-radius: 15px; + position: absolute; + z-index: 100; + bottom: 10px; + right: 70px; + @apply ml-sm bg-error text-center text-white; +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/searchAction.scss b/frontend/micro-ui-internals/packages/css/src/components/searchAction.scss new file mode 100644 index 00000000000..7f8825d35da --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/searchAction.scss @@ -0,0 +1,10 @@ +.searchBox { + @apply flex m-sm justify-between; + .searchAction { + position: relative; + @apply flex flex-row text-focus; + .searchText { + @apply ml-sm; + } + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/sectionalDropdown.scss b/frontend/micro-ui-internals/packages/css/src/components/sectionalDropdown.scss new file mode 100644 index 00000000000..c62103e66a7 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/sectionalDropdown.scss @@ -0,0 +1,43 @@ +.sect-dropdown-wrap { + @apply mb-lg relative; + + .sect-dropdown-input-wrap { + @apply block w-full h-10 border border-solid border-input-border; + + input[type="text"] { + width: calc(100% - 32px); + @apply h-full outline-none text-text-primary text-form-field pl-sm; + } + p { + padding-top: 9px; + @apply text-form-field text-text-primary float-left ml-sm; + } + + img { + @apply float-right h-6 w-6 mt-sm mr-sm; + } + + svg { + @apply float-right h-6 w-6 mt-sm mr-sm; + } + } + + .sect-dropdown-card { + width: 100% !important; + box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); + @apply absolute z-10 mt-xs pb-sm bg-white; + + h1 { + @apply pl-sm pt-md text-text-primary text-form-field; + } + + p { + padding-left: 21px; + @apply w-full pt-sm text-text-secondary text-form-field; + + &:hover { + @apply bg-grey-mid; + } + } + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/selectdropdown.scss b/frontend/micro-ui-internals/packages/css/src/components/selectdropdown.scss new file mode 100644 index 00000000000..a95aef3c287 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/selectdropdown.scss @@ -0,0 +1,173 @@ +/*.select { + + @apply mb-lg block border-2 border-input-border border-solid outline-none rounded-none w-full h-10 bg-white leading-10; + + option { + @apply h-10 text-form-field text-text-primary align-top text-left; + } + + } + +.select:active { + @apply border-focus border-2; +} + +@screen dt { + .select { + @apply w-2/5; + } +} +*/ +.employee-select-wrap { + @apply mb-lg relative; + + .select { + @apply relative block w-full h-10 border border-solid border-input-border; + &:hover { + @apply border-2 border-solid border-primary-main; + } + input[type="text"] { + width: calc(100% - 32px); + background-color: transparent; + + @apply absolute z-10 w-full h-full outline-none text-text-primary text-form-field pl-sm; + } + + p { + padding-top: 9px; + @apply text-form-field text-text-primary float-left ml-sm; + } + + img { + @apply float-right h-6 w-6 mt-sm mr-sm; + } + + svg { + @apply absolute right-0 float-right h-6 w-6 mt-sm mr-sm; + } + } + + .select-active { + @apply relative block w-full h-10 border-2 border-solid border-primary-main; + + input[type="text"] { + width: calc(100% - 32px); + background-color: transparent; + + @apply absolute z-10 w-full h-full outline-none text-text-primary text-form-field pl-sm; + } + + p { + @apply text-form-field text-text-primary float-left ml-sm; + } + + p { + padding-top: 9px; + } + + img { + @apply float-right h-6 w-6 mt-sm mr-sm; + } + + svg { + @apply absolute right-0 float-right h-6 w-6 mt-sm mr-sm; + } + } + + .options-card { + width: 100% !important; + box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); + max-height: 400px; + overflow: auto; + @apply absolute z-20 mt-xs bg-white max-w-full; + + p { + padding-top: 14px; + @apply w-full h-12 pl-sm text-text-primary text-form-field; + + &:hover { + @apply bg-grey-mid; + } + } + } +} + +.employee-select-wrap--elipses { + width: 85% !important; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.select-wrap { + @apply mb-lg relative; + + .select { + @apply relative block w-full h-10 border border-solid border-input-border; + + input[type="text"] { + width: calc(100% - 32px); + background-color: transparent; + + @apply absolute z-10 w-full h-full outline-none text-text-primary text-form-field pl-sm; + } + + p { + padding-top: 9px; + @apply text-form-field text-text-primary float-left ml-sm; + } + + img { + @apply float-right h-6 w-6 mt-sm mr-sm; + } + + svg { + @apply absolute right-0 float-right h-6 w-6 mt-sm mr-sm; + } + } + + .select-active { + @apply relative block w-full h-10 border-2 border-solid border-primary-main; + + input[type="text"] { + width: calc(100% - 32px); + background-color: transparent; + + @apply absolute z-10 w-full h-full outline-none text-text-primary text-form-field pl-sm; + } + + p { + @apply text-form-field text-text-primary float-left ml-sm; + } + + p { + padding-top: 9px; + } + + img { + @apply float-right h-6 w-6 mt-sm mr-sm; + } + + svg { + @apply absolute right-0 float-right h-6 w-6 mt-sm mr-sm; + } + } + + .options-card { + width: 100% !important; + box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); + @apply absolute z-20 mt-xs bg-white; + + p { + padding-top: 14px; + @apply w-full h-12 pl-sm text-text-primary text-form-field; + + &:hover { + @apply bg-grey-mid; + } + } + } +} + +@screen dt { +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/statushighlight.scss b/frontend/micro-ui-internals/packages/css/src/components/statushighlight.scss new file mode 100644 index 00000000000..dd03312007d --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/statushighlight.scss @@ -0,0 +1,17 @@ +.status-highlight { + --bg-opacity: 12% !important; + border-radius: 16px; + @apply h-8 w-20 bg-error mb-sm; + + p { + padding-top: 6px; + @apply block text-center text-caption-m text-error; + } + + &.success { + @apply bg-success; + p { + @apply text-success; + } + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/submiterrors.scss b/frontend/micro-ui-internals/packages/css/src/components/submiterrors.scss new file mode 100644 index 00000000000..f0f6c92c715 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/submiterrors.scss @@ -0,0 +1,11 @@ +.error-message-wrap { + @apply w-full mb-sm p-md border-4 border-solid border-error; + + h2 { + @apply font-bold text-caption-m block mb-sm; + } + + p { + @apply font-bold text-caption-m text-error block; + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/summary.scss b/frontend/micro-ui-internals/packages/css/src/components/summary.scss new file mode 100644 index 00000000000..839d7d60fb4 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/summary.scss @@ -0,0 +1,26 @@ +.summary-wrapper { + @apply flex justify-around; + + .wrapper-child { + @apply flex flex-col justify-center flex-grow; + } + + .blocks { + display: flex; + margin-bottom: 25px; + + p:only-child { + font-weight: bold; + font-size: 24px; + } + + div { + margin-right: 25px; + + p:not(:first-child) { + font-weight: bold; + font-size: 24px; + } + } + } +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/src/components/table.scss b/frontend/micro-ui-internals/packages/css/src/components/table.scss new file mode 100644 index 00000000000..b36d25d8833 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/table.scss @@ -0,0 +1,63 @@ +.table { + @apply bg-white w-full; + + thead { + th { + padding: 20px 18px; + @apply font-bold align-middle text-left; + &:first-child { + min-width: 256px; + } + } + } + + tbody { + border: none; + padding: 0; + margin: 0; + td { + @apply border-t border-border text-left align-middle; + padding: "20px 18px"; + } + } +} + +.pagination { + display: flex; + justify-content: flex-end; + background-color: rgba(255, 255, 255, var(--bg-opacity)); + border-top: 1px solid rgb(214, 213, 212); + padding: 20px 40px 20px 0px; + color: rgb(80, 90, 95); + + svg { + fill: #505a5f; + @apply ml-md; + } +} + +.pagination button:nth-child(1) span::after { + content: "\f105"; +} + +.fullWidth { + width: 100% !important; +} + +.customTable { + width: 100%; + th { + font-weight: bold; + } + + th, + td { + text-align: left; + border-bottom: 1px solid #B1B4B6; + padding: 15px 10px; + } + + tr:nth-child(even) { + background-color: #EEEEEE; + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/tag.scss b/frontend/micro-ui-internals/packages/css/src/components/tag.scss new file mode 100644 index 00000000000..35d39e0e509 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/tag.scss @@ -0,0 +1,23 @@ +.tag-container { + @apply flex flex-wrap mb-md; + .tag { + @apply bg-grey-mid rounded-2xl pt-sm pb-sm flex justify-between items-center; + padding-left: 12px; + padding-right: 12px; + font-size: 14px; + margin-left: 2px; + height: 2rem; + margin-top: 1rem; + .text { + padding-right: 5px; + } + + &:hover { + @apply cursor-pointer; + + .close { + fill: black; + } + } + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/telephone.scss b/frontend/micro-ui-internals/packages/css/src/components/telephone.scss new file mode 100644 index 00000000000..7b711d21f76 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/telephone.scss @@ -0,0 +1,17 @@ +.telephone { + @apply flex items-baseline; + img, + svg { + height: 22px; + width: 20px; + @apply text-primary-main ml-sm items-center; + } + + p { + @apply text-text-primary text-body-l pl-sm; + } +} + +.call { + @apply flex text-text-secondary text-body-l; +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/textfields.scss b/frontend/micro-ui-internals/packages/css/src/components/textfields.scss new file mode 100644 index 00000000000..496d4c1d938 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/textfields.scss @@ -0,0 +1,88 @@ +.card-input { + @apply mb-lg pl-sm outline-none mt-sm block border w-full h-10 border-input-border border-solid bg-white leading-10 text-form-field text-text-primary; +} + +.card-input-error { + @apply mb-lg pl-sm block w-full h-10 outline-none border-2 border-error border-solid bg-white leading-10 text-form-field text-text-primary; +} + +.employee-card-input { + @apply mb-lg pl-sm outline-none block border w-full h-10 border-input-border border-solid bg-white leading-10 text-form-field text-text-primary; +} +.employee-card-input--front { + width: fit-content !important; + display: flex; + align-items: center; + background: #eeeeee; + border-right: 0; + padding-right: 5px; +} +.employee-card-input-error { + @apply mb-lg pl-sm block w-full h-10 outline-none border-2 border-error border-solid bg-white leading-10 text-form-field text-text-primary; +} + +.card-textarea, +.employee-card-textarea { + @apply block outline-none mt-md mb-lg border w-full border-input-border border-solid bg-white h-24 text-form-field text-text-primary p-sm; +} + +.inputWrapper { + display: flex; + justify-content: space-between; + max-width: 500px; + + div { + max-width: 80px; + } + + span { + margin-top: 16px; + } +} + +@screen dt { + .card-input { + width: 480px; + } + + .card-input-emp { + width: 240px; + } + + .card-input-error { + width: 480px; + } + + .employee-card-input { + @apply w-full; + } + + .employee-card-input-error { + @apply w-full; + } + + .card-textarea { + width: 480px; + } + + .employee-card-textarea { + @apply w-full; + } + + .card-input-emp { + width: 240px; + } +} + +.citizen-card-input { + @apply mb-lg pl-sm outline-none block border w-full h-10 border-input-border border-solid bg-white leading-10 text-form-field text-text-primary; +} + +.citizen-card-input--front { + width: fit-content !important; + display: flex; + align-items: center; + background: #eeeeee; + border-right: 0; + padding-right: 5px; +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/toast.scss b/frontend/micro-ui-internals/packages/css/src/components/toast.scss new file mode 100644 index 00000000000..3a442bcf9d2 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/toast.scss @@ -0,0 +1,31 @@ +.toast-success { + max-width: 480px; + width: calc(100% - 20px); + bottom: 64px; + left: 0; + margin: 0 10px; + gap: 16px; + border-radius: 4px; + min-height: 48px; + @apply fixed flex bg-success leading-7 z-20 items-center pl-md pr-sm; + + svg { + height: 20px; + width: 20px; + } + + .toast-close-btn { + margin-left: auto; + } + + h2 { + @apply text-body-s-dt text-white; + } +} + +@screen dt { + .toast-success { + width: 100%; + left: calc(50% - 240px); + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/topbar.scss b/frontend/micro-ui-internals/packages/css/src/components/topbar.scss new file mode 100644 index 00000000000..0d403aa1f5c --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/topbar.scss @@ -0,0 +1,128 @@ +.topbar { + position: fixed; + top: 0; + width: 100%; + padding: 10px 24px; + background: white; + box-shadow: rgba(0, 0, 0, 0.24) 0 1px 4px; + z-index: 9999999; + @apply flex items-center; + + img { + display: inline; + + &.city { + margin-right: 8px; + height: 48px; + width: 48px; + } + + &.state { + height: 20px; + max-height: 20px; + width: auto; + } + } + + .ulb { + font-weight: bold; + display: inline-block; + } + + .right { + float: right; + margin-top: 12px; + position: relative; + + svg { + display: inline; + } + + .user-img-txt { + background: #f47738; + padding: 10px 15px; + border-radius: 50%; + color: white; + font-weight: 700; + } + } + + .left { + float: left; + } + + .w-80 { + width: 70%; + } + + .width-20 { + width: 30%; + } + + .margin-top-6 { + margin-top: 6px; + } + + .margin-right-30 { + margin-right: 30px; + } + + .margin-top-10 { + margin-top: 10px; + } + + .icon { + display: block; + color: rgb(117, 117, 117); + fill: rgb(117, 117, 117); + height: 21px; + width: 21px; + } + + .column-gap-15 { + column-gap: 15px; + } + + .column-gap-5 { + column-gap: 5px; + } + + .select-wrap, + .employee-select-wrap { + margin-bottom: 0px; + } +} + +.cp { + cursor: pointer; +} +.citizen { + .right { + margin-top: 5px; + margin-bottom: 5px; + } + + .topbar-select-wrap { + margin-bottom: 0; + } + + .flex-between { + @apply flex items-center justify-between; + } +} + +.profile-dropdown--item { + display: flex; + flex-direction: row; + padding: 10px; + column-gap: 10px; + + &:hover { + @apply bg-grey-mid; + } +} + +.flex-right { + @apply flex items-center justify-end; + min-width: 85px; +} diff --git a/frontend/micro-ui-internals/packages/css/src/components/uploadcomponents.scss b/frontend/micro-ui-internals/packages/css/src/components/uploadcomponents.scss new file mode 100644 index 00000000000..d23142dfa52 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/components/uploadcomponents.scss @@ -0,0 +1,95 @@ +.upload-wrap { + @apply flex w-full h-40 bg-grey-light relative mb-lg px-sm border border-border border-dashed; + + img { + display: block; + margin-top: 58px; + margin-left: calc(50% - 23px); + height: 42px; + width: 46px; + } + + svg { + display: block; + margin-top: 58px; + margin-left: calc(50% - 23px); + height: 42px; + width: 46px; + } + + input { + @apply absolute w-full h-full opacity-0 top-0; + } +} + +.multi-upload-wrap { + @apply flex mb-lg; + + div { + display: block; + position: relative; + background-color: #fafafa; + width: calc((100% - 16px) / 3); + margin-right: 8px; + + .delete { + position: absolute; + height: 24px; + width: 24px; + border-radius: 100%; + top: 2px; + right: 2px; + } + } + + .upload-img-container { + border: 1px dashed #d6d5d4; + margin: 0 !important; + + img { + margin-left: auto; + margin-right: auto; + padding-top: calc(33% - 21px); + } + + svg { + @apply flex; + margin: auto; + } + + svg { + margin-left: auto; + margin-right: auto; + top: calc(50% - 21px); + position: relative; + } + + input { + @apply absolute w-full h-full opacity-0 top-0; + } + } +} + +.upload-file { + height: 56px; + @apply relative border border-input-border w-full; + + div { + @apply flex flex-row h-full items-center pl-md; + + .file-upload-status { + @apply text-body-s-dt ml-sm; + } + } + input { + width: 160px; + @apply absolute top-0 left-0 opacity-0 h-full; + } +} + +@screen dt { + .multi-upload-wrap img { + width: 100%; + height: 158px; + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/index.scss b/frontend/micro-ui-internals/packages/css/src/index.scss new file mode 100644 index 00000000000..b869c0daede --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/index.scss @@ -0,0 +1,402 @@ +/*@import 'normalize.css';*/ + +/*@import url("https://fonts.googleapis.com/css2?family=Roboto+Condensed:wght@400;500;700&family=Roboto:wght@400;500;700&display=swap");*/ + +@import "tailwindcss/base"; + +@import "tailwindcss/components"; + +@import "tailwindcss/utilities"; + +@import "react-date-range/dist/styles.css"; +@import "react-date-range/dist/theme/default.css"; + +@import "./components/loader.scss"; + +@import "./components/body.scss"; +@import "./components/navbar.scss"; +@import "./components/card.scss"; +@import "./components/buttons.scss"; +@import "./components/radiobtn.scss"; +@import "./components/selectdropdown.scss"; +@import "./components/textfields.scss"; +@import "./components/bannercomponents.scss"; +@import "./components/datewrap.scss"; +@import "./components/datatable.scss"; +@import "./components/checkpoint.scss"; +@import "./components/checkbox.scss"; +@import "./components/inputotp.scss"; +@import "./components/map.scss"; +@import "./pages/employee/tooltip.scss"; +@import "./components/menu.scss"; +@import "./components/submiterrors.scss"; +@import "./components/ratingstar.scss"; +@import "./components/keynote.scss"; +@import "./components/statushighlight.scss"; +@import "./components/imageviewer.scss"; +@import "./components/actionbar.scss"; +@import "./components/table.scss"; +@import "./components/popup.scss"; +@import "./components/uploadcomponents.scss"; +@import "./components/toast.scss"; +@import "./components/detailscontainer.scss"; +@import "./components/telephone.scss"; +@import "./components/grey.scss"; +@import "./components/actionLink.scss"; +@import "./components/sectionalDropdown.scss"; +@import "./components/detailscard.scss"; +@import "./components/searchAction.scss"; +@import "./components/tag.scss"; +@import "./components/topbar.scss"; +@import "./components/languageSelector.scss"; +@import "./components/custombtn.scss"; +@import "./components/citizenInfoLabel.scss"; +@import "./components/roundedLabel.scss"; +@import "./components/changeLanguage.scss"; +@import "./components//metricsTable.scss"; +@import "./components/filters.scss"; +@import "./components//charts.scss"; +@import "./components/summary.scss"; +@import "./components/multiLink.scss"; +@import "./components/info-banner.scss"; +@import "./components/multiSelectDropdown.scss"; +@import "./components/EllipsisMenu.scss"; +@import "./components/CitizenHomeCard.scss"; +@import "./components/SearchForm.scss"; +@import "./components/cardHeaderWithOptions.scss"; + +@import "./pages/employee/index.scss"; +@import "./pages/employee/cardfix.scss"; +@import "./pages/employee/popupmodule.scss"; +@import "./pages/employee/container.scss"; +@import "./pages/employee/inbox.scss"; +@import "./pages/employee/response.scss"; +@import "./pages/employee/form-fields.scss"; +@import "./pages/employee/scroll-table.scss"; + +@import "./pages/citizen/payment/payment-type.scss"; +@import "./pages/citizen/container.scss"; + +.dark { + @apply text-text-primary; +} + +.mrlg{ + @apply mr-lg +} + +.mrsm{ + @apply mr-sm +} + +.home-link { + margin-left: 16px; + margin-bottom: 16px; + + a { + color: #1d70b8; + } +} + +.clear-search-label { + color: #f47738; + cursor: pointer; +} + +.search-submit-bar { + margin-top: 32; + margin-left: auto; +} + +.application-details-link-button { + @apply flex justify-between items-center; + + .download-button { + color: #f47738; + margin-left: 8px; + } +} + +.response-download-button { + @apply flex mb-sm; + + .download-button { + color: #f47738; + margin-left: 8px; + } +} + +.check-page-link-button { + color: #f47738 !important; +} + +.pt-application-download-btn { + display: flex; + justify-content: flex-end; + margin: 0px 8px; +} + +.form-pt-dropdown-only { + .options-card { + position: unset; + } +} +.application-table-container { + @apply mt-lg ml-lg flex-1; +} + +.primary-label-btn { + @apply flex; + gap: 10px; + + svg { + fill: #f47738; + } + + color: #f47738; + + cursor: pointer; + font-weight: 500; + width: fit-content; +} + +.primaryColor { + color: #0B0C0C !important; +} + +@media (hover: hover) { + .primary-label-btn { + &:hover { + color: #000; + + svg { + fill: #000; + } + } + } +} + +.disabled { + @apply border-grey-dark text-grey-dark !important; + pointer-events: none !important; +} + +.card-date-input { + @apply absolute top-0 left-0 w-3/4 bg-white pl-sm border border-input-border border-solid border-r-0; + outline: transparent solid 1px; + height: 2.5rem; +} + +.h4 { + @apply mb-sm; +} + +.react-time-picker { + width: 194px; + height: 2.5rem; + &__wrapper { + border: 2px solid #0b0c0c; + padding-left: 16px; + } + &__inputGroup__input { + @apply px-sm; + line-height: 2.5rem; + min-width: 16px; + &:focus { + outline: 2px solid black; + } + } +} + +.border-none { + border: none; +} + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} +input[type="number"] { + -moz-appearance: textfield; +} + +.static { + @apply flex flex-col; + min-height: 85vh; + + &-wrapper { + flex: 1; + max-height: 75vh; + overflow: scroll; + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ + + &::-webkit-scrollbar { + display: none; + } + } +} + +.bill-summary { + border: #e8e7e6 solid 1px; + @apply bg-grey-light w-full; + + .bill-account-details { + @apply flex mb-md; + padding: 5px; + + .label { + @apply w-1/2 font-bold; + } + + .value { + @apply w-1/2 text-right; + } + } + + .amount-details { + @apply flex mb-md items-center; + padding: 5px; + + .label { + @apply w-1/2 font-bold; + } + + .value { + @apply w-1/2 font-bold text-right; + font-size: 18px; + } + } +} + +.bill-payment-amount { + @apply sticky bottom-0 bg-white; + padding-bottom: 32px; + + .payment-amount-front { + @apply absolute z-10 w-10 flex justify-center items-center; + background-color: #efefef; + padding: 7px 12px; + color: #9a9a9a; + } +} + +.text-indent-xl input { + text-indent: 40px; +} + +.select-payment-type { + @apply flex justify-center font-bold items-center; + padding-top: 10px; + padding-bottom: 25px; + + .value { + font-size: 20px; + } +} + +.cheque-date { + @apply flex items-center mb-lg; + border: 2px solid #0b0c0c; + border-radius: 2px; + + input { + @apply outline-none w-full; + border: 0px; + background: transparent; + text-indent: 5px; + padding: 6px 0px; + } + + button { + @apply outline-none; + border: 0px; + background: transparent; + text-indent: 2px; + } +} + +.w-half { + @apply w-1/2; +} + +.ifsc-field { + @apply flex items-center mb-lg; + border: 2px solid #0b0c0c; + border-radius: 2px; + + input { + @apply outline-none w-full; + border: 0px; + background: transparent; + text-indent: 5px; + padding: 6px 0px; + } + button { + @apply outline-none; + border: 0px; + background: transparent; + text-indent: 2px; + } +} + +.text-input { + @apply relative w-full; + input{ + &:hover{ + @apply border-2 border-solid border-primary-main; + } + } +} + +.custom-time-picker { + @apply w-full; + max-width: 200px; +} + +.sla-cell { + @apply text-text-secondary; +} + +.submit-bar-search { + margin-top: 32px; + margin-left: 16px; + max-width: 256px; +} + +.clear-search-container { + @apply flex justify-between items-center; +} + +.card-label-smaller { + @apply w-1/3; + margin-bottom: revert; +} + +.underline { + border-color: #e7e6e6; + @apply mb-sm; +} + +.box-shadow-none { + box-shadow: none; +} + +.component-in-front { + @apply flex justify-center items-center; +} + +.subform-composer { + @apply flex; +} + +.inbox-search-container { + .result { + @apply mt-lg; + } +} + +.payment-form-text-input-correction { + width: 100% !important; +} diff --git a/frontend/micro-ui-internals/packages/css/src/pages/citizen/container.scss b/frontend/micro-ui-internals/packages/css/src/pages/citizen/container.scss new file mode 100644 index 00000000000..4d4afc62722 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/pages/citizen/container.scss @@ -0,0 +1,11 @@ +.citizen-home-footer{ + @apply flex fixed w-full right-0 bottom-0 h-10 bg-grey-bg pb-md pt-sm justify-center z-50; + img{ + @apply ml-sm + } +} +.fill-path-primary-main{ + path{ + fill: #F47738; + } +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/src/pages/citizen/payment/payment-type.scss b/frontend/micro-ui-internals/packages/css/src/pages/citizen/payment/payment-type.scss new file mode 100644 index 00000000000..2e2698b830c --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/pages/citizen/payment/payment-type.scss @@ -0,0 +1,3 @@ +.payment-amount-info{ + @apply flex justify-between; +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/src/pages/employee/cardfix.scss b/frontend/micro-ui-internals/packages/css/src/pages/employee/cardfix.scss new file mode 100644 index 00000000000..aad516a86b9 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/pages/employee/cardfix.scss @@ -0,0 +1,12 @@ +.flex-fit{ + @apply flex w-full px-md py-sm border-b border-solid border-border; +} +.card-count{ + @apply pr-xl; + div{ + @apply text-link; + span{ + @apply text-link font-bold; + } + } +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/src/pages/employee/container.scss b/frontend/micro-ui-internals/packages/css/src/pages/employee/container.scss new file mode 100644 index 00000000000..812bf6d083c --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/pages/employee/container.scss @@ -0,0 +1,43 @@ +.icon-bg-secondary { + @apply flex bg-secondary w-12 h-12; + + svg { + margin: auto; + @apply w-6 h-6; + } +} + +.heading-m { + @apply font-bold text-text-primary text-heading-m ml-md pt-sm; +} + +.break-line { + @apply border-border my-lg; +} + +.employee-home-footer{ + @apply flex fixed bottom-0 h-10 bg-grey-bg pb-md pt-sm justify-center w-full; + img{ + @apply ml-sm + } +} + +@screen dt { + .ground-container { + margin-bottom: 56px; + @apply p-md; + } + .heading-m { + @apply text-heading-m-dt; + } + .break-line { + margin-top: 40px; + margin-bottom: 40px; + } + .employee-home-footer{ + + } + .moduleCardWrapper{ + @apply flex flex-row flex-wrap !important; + } +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/src/pages/employee/form-fields.scss b/frontend/micro-ui-internals/packages/css/src/pages/employee/form-fields.scss new file mode 100644 index 00000000000..d5eb9b56939 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/pages/employee/form-fields.scss @@ -0,0 +1,13 @@ +.form-field{ + @apply w-full +} + +@screen dt { + .form-field{ + @apply w-1/2 + } + + .desktop-w-full{ + @apply w-full !important + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/pages/employee/inbox.scss b/frontend/micro-ui-internals/packages/css/src/pages/employee/inbox.scss new file mode 100644 index 00000000000..f31a04a1ce8 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/pages/employee/inbox.scss @@ -0,0 +1,355 @@ +.complaint-links-container { + @apply bg-white; + border-radius: 4px; + .header { + @apply flex items-center border-b border-border justify-between; + + .logo { + width: 56px; + height: 56px; + @apply bg-focus; + padding: 12px; + border-radius: 4px; + svg { + @apply w-8 h-8; + } + } + + .text { + @apply pl-md text-heading-m font-bold; + } + } + + .body { + padding: 10px; + @apply flex items-start flex-col; + margin-left: 46px; + + .link { + @apply p-sm text-primary-main items-center; + display: flex !important; + } + + .inbox-total { + padding: 4px; + display: table; + @apply whitespace-normal text-center text-white w-8 h-8 bg-primary-main rounded-full ml-xs ; + } + } + + .links-wrapper { + @apply pl-md py-sm text-text-btn; + .link { + padding: 0 !important; + padding-bottom: 4px !important; + svg { + @apply ml-sm; + } + } + } +} + +.filter-button { + @apply text-primary-main; + &:hover { + @apply text-primary-dark cursor-pointer; + } +} + +.employeeCard-info-box { + @apply flex justify-end ml-md; + background-color: #fafafa; + div { + margin-right: 32px; + span:nth-child(2) { + @apply font-bold; + color: #4f5a5f; + } + } + .employeeCard-info-data { + display: flex; + flex-direction: column; + } +} + +.inbox-container { + .filters-container { + .filter { + .filter-card { + @apply bg-white; + padding: 10px; + + .heading { + @apply flex justify-between; + + .clearAll { + display: none; + } + } + + .filter-label { + @apply font-bold text-heading-m; + padding-bottom: 6px; + } + } + } + + .search-complaint-container { + @apply items-center bg-white p-md; + + .complaint-input-container { + @apply w-full; + .complaint-input { + @apply flex flex-col; + + .clear-search { + @apply text-focus; + display: none; + &:hover { + color: #003078; + cursor: pointer; + } + } + } + + .mobile-input { + } + } + } + } + + .status-container { + margin-bottom: 50px; + } +} + +.clear-search, +.clear-search .link-label { + @apply text-focus; + @apply block; + cursor: pointer; + &:hover { + color: #000; + } +} +.button-clear { + @apply text-focus text-body-s-dt; +} + +.inbox-count { + @apply inline ml-sm p-sm bg-primary-main rounded-full text-white text-heading-s align-middle text-center; +} + +@screen dt { + .complaint-links-container { + @apply bg-white; + + .header { + @apply flex items-center border-b border-border; + + .logo { + @apply bg-focus; + padding: 12px; + border-radius: 4px; + } + + .text { + @apply pl-md text-heading-m-dt font-bold; + } + } + + .body { + padding: 10px; + @apply flex items-start flex-col; + margin-left: 46px; + + .link { + @apply p-sm text-primary-main; + } + } + } + + .inboxLinks { + margin: 0 !important; + padding: 0 !important; + .header { + border: none; + @apply justify-start; + .logo { + @apply bg-white; + svg { + path { + fill: #f47738; + } + } + } + } + .body { + margin-left: 0; + } + } + + .inbox-container { + @apply flex; + + .filters-container { + width: 270px; + + .filter { + @apply mt-md; + + .filter-card { + @apply p-md bg-white; + + .heading { + @apply flex justify-between; + } + + .label { + @apply text-heading-s; + } + } + } + } + + .search-container { + width: 874px; + + .search-complaint-container { + margin: auto; + @apply flex flex-col items-start mb-md bg-white p-md; + + .complaint-header { + display: flex; + @apply flex justify-between w-full; + margin-bottom: 20px; + } + + .complaint-input-container { + /* display: inline-block !important; */ + display: grid; + grid-template-columns: 33.33% 33.33% 33.33%; + + &.for-pt { + &.for-search { + grid-template-columns: 25% 25% 25% 25%; + + .input-fields:nth-child(3n) { + @apply mr-md !important; + } + + .input-fields:nth-child(4n) { + margin-right: 0 !important; + } + + .search-submit-wrapper { + grid-column: 4/5; + /* margin-top: 56px;*/ + max-width: unset; + margin-left: unset; + } + } + } + + .search-submit-wrapper { + grid-column: 3/4; + margin-left: 50%; + max-width: 50%; + grid-column: 3/4; + @apply flex flex-col justify-center text-center; + + .submit-bar-search { + margin-top: unset; + width: 100%; + margin-bottom: 20px; + margin-left: unset; + max-width: 100%; + width: 100%; + } + } + + .input-fields { + /*width: calc(50% - 16px);*/ + + @apply inline-block mr-md !important; + + .inbox-search-form-error { + padding-top: 0; + margin-top: 0; + @apply absolute; + } + } + + .input-fields:nth-child(3n) { + margin-right: 0 !important; + } + + .complaint-input { + @apply flex flex-col; + + .clear-search { + @apply text-focus; + @apply block; + cursor: pointer; + &:hover { + color: #003078; + cursor: pointer; + } + } + } + + .mobile-input { + @apply ml-sm; + } + } + + .search-action-wrapper { + width: 33%; + margin-top: 28px; + @apply inline-block align-middle text-center; + button { + margin: 0; + width: 100%; + max-width: 300px !important; + } + } + } + + .search-complaint-container-for-search { + } + } + } +} + +.cell-text { + color: #505a5f; +} + +.sla-cell-error { + color: #d4351c; + background-color: rgba(212, 53, 28, 0.12); + padding: 0 24px; + border-radius: 11px; +} + +.sla-cell-success { + color: #00703c; + background-color: rgba(0, 112, 60, 0.12); + padding: 0 24px; + border-radius: 11px; +} + +.complain-no-cell-text { + margin-top: "4px"; + color: "#505A5F"; +} + +.search-error-label { + @apply font-bold text-legend text-error mb-sm !important; +} + +.inbox-action-container { + display: flex; + justify-content: flex-end; + align-items: flex-start; +} diff --git a/frontend/micro-ui-internals/packages/css/src/pages/employee/index.scss b/frontend/micro-ui-internals/packages/css/src/pages/employee/index.scss new file mode 100644 index 00000000000..8d56a0794f1 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/pages/employee/index.scss @@ -0,0 +1,306 @@ +/* TODO: convert using tailwind */ +.employee { + .breadcrumb { + @apply ml-sm mb-lg; + } + .ground-container { + @apply flex flex-col; + } + .card-home { + font-size: 16px; + padding: 0 0 16px 0; + width: 92vw; + display: inline-block; + margin: 8px auto; + } + .topbar { + position: fixed; + top: 0; + width: 100%; + padding: 16px 24px; + background: white; + box-shadow: rgba(0, 0, 0, 0.24) 0 1px 4px; + z-index: 9999; + + img { + display: inline; + + &.city { + margin-right: 8px; + height: 48px; + width: 48px; + } + + &.state { + height: 20px; + max-height: 20px; + width: auto; + } + } + + .ulb { + font-weight: bold; + } + + .right { + float: right; + margin-top: 12px; + + .user-img-txt { + background: #f47738; + padding: 10px 15px; + border-radius: 50%; + color: white; + font-weight: 700; + } + } + } + + .main { + padding-top: 88px; + } + + .react-time-picker { + width: 100%; + max-width: 200px; + } + + .react-time-picker__wrapper { + border: 1px solid #464646; + } + + .react-time-picker__clock { + display: none; + } + + .react-time-picker__inputGroup__leadingZero { + padding-right: 8px; + display: inline !important; + } + + .react-time-picker__inputGroup__input { + padding: 0; + min-width: none; + outline: none !important; + border: none !important; + } + + .react-time-picker__wrapper { + padding-left: 8px; + } +} + +.citizen { + .main { + padding-top: 82px; + } +} + +.citizen, +.employee { + .sidebar { + position: fixed; + left: 0; + padding: 20px 0; + background: #22394d; + height: 100%; + color: white; + margin-top: 80px; + z-index: 1000; + + .actions { + cursor: pointer; + padding: 0 20px; + margin-bottom: 32px; + + &.active { + border-right: 4px solid #f47738; + padding-right: 16px; + } + } + } + + .wrapperStyles { + margin-top: -5px; + padding-left: 20px; + padding-top: 10px; + + .containerStyles { + border: 1px solid #505A5F; + padding: 16px; + margin-bottom: 20px; + } + + &.leftBorder { + border-left: 2px solid rgba(0, 0, 0, 0.12); + } + } + + .rowContainerStyles { + @apply flex flex-col; + } + + .tableContainerStyles { + border: 1px solid #505A5F; + padding: 16px; + margin-bottom: 20px; + } + + .historyTables { + display: grid; + grid-template-rows: 100px 100px; + grid-template-columns: repeat(5, minmax(100px, 1fr)); + } + + .historyContent { + margin: 0 10px; + position: relative; + padding-bottom: 5px; + } + + .historyCheckpoint { + background-color: #fe7a51; + border-radius: 100%; + width: 18px; + height: 18px; + display: inline-block; + position: relative; + left: -9px; + top: 4px; + + &.zIndex { + z-index: 10; + } + } + + .historyTableDateLabel { + color: rgba(0, 0, 0, 0.87); + font-size: 16px; + font-weight: 700; + line-height: 17px; + text-align: left; + display: inline-block; + padding-top: 5px; + + } + + .bottomMargin { + margin-bottom: 0px; + } + + .historyTableDate { + color: rgba(0, 0, 0, 0.87); + font-size: 19px; + font-weight: 400; + line-height: 17px; + text-align: left; + display: inline-block; + padding-top: 10px; + } + + .historyHorizontalBar { + background-color: rgba(0, 0, 0, 0.12); + width: auto; + height: 2px; + margin-left: 16px + } + + .smallText { + font-weight: 500; + font-size: 14px; + } +} + +.citizen { + .sidebar { + margin-top: 54px; + min-width: 200px; + .actions { + display: flex; + align-items: center; + gap: 10px; + } + } +} + +.link { + @apply text-primary-main; + + :hover { + @apply text-primary-dark; + } +} + +@media (min-width: 640px) { + .employee { + .ground-container { + @apply block ml-md; + } + .breadcrumb { + @apply mb-lg; + margin-left: 0; + } + .card-home { + width: 270px; + margin-right: 16px; + margin-bottom: 16px; + } + .card-home-hrms { + width: 405px; + padding: 0px; + margin-right: 16px; + margin-bottom: 16px; + } + .main { + padding-top: 80px; + margin-left: 72px; + width: calc(100%-83px); + } + } + + .citizen { + .main { + gap: 0.3rem; + width: 100%; + padding-top: 80px; + padding-left: 16px; + } + + .center-container { + width: 70%; + margin: 0 auto; + } + } +} + +.multi-select-container { + .disposal-text { + @apply font-bold; + } + + .disposal-info { + @apply my-md ml-sm; + } + + .disposal-action-bar { + @apply flex justify-between items-center; + } +} + +@screen dt { + .d-grid { + display: grid; + grid-template-columns: 250px 250px 250px 250px; + column-gap: 10px; + row-gap: 2px; + margin-left: -12px; + } +} + +.m-auto { + margin: auto !important; +} + +.mb-50{ + margin-bottom: 50px; +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/src/pages/employee/popupmodule.scss b/frontend/micro-ui-internals/packages/css/src/pages/employee/popupmodule.scss new file mode 100644 index 00000000000..b8a99b6f5d7 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/pages/employee/popupmodule.scss @@ -0,0 +1,34 @@ +.popup-module { + width: 480px; + margin: 0 auto; + @apply bg-white; + + .popup-module-main { + @apply px-lg pb-lg; + } + + .popup-module-action-bar { + gap: 16px; + @apply flex flex-row justify-end; + } +} + +@screen dt { + .popup-module { + width: 480px; + margin: auto; + @apply bg-white; + + .popup-module-main { + @apply px-lg pb-lg; + } + .popup-module-main { + @apply w-full p-sm h-full; + } + + .popup-module-action-bar { + gap: 16px; + @apply flex flex-row justify-end; + } + } +} diff --git a/frontend/micro-ui-internals/packages/css/src/pages/employee/response.scss b/frontend/micro-ui-internals/packages/css/src/pages/employee/response.scss new file mode 100644 index 00000000000..31a3993d26a --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/pages/employee/response.scss @@ -0,0 +1,3 @@ +.secondary-action{ + @apply inline float-right; +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/src/pages/employee/scroll-table.scss b/frontend/micro-ui-internals/packages/css/src/pages/employee/scroll-table.scss new file mode 100644 index 00000000000..7a56ce02a58 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/pages/employee/scroll-table.scss @@ -0,0 +1,38 @@ +.scroll-table-wrapper{ + &::-webkit-scrollbar { + display: none; + } + -ms-overflow-style: none; + scrollbar-width: none; + @apply relative overflow-x-scroll overflow-y-visible pb-sm text-center; + + .scroll-table-width-wrapper{ + &::-webkit-scrollbar { + display: none; + } + -ms-overflow-style: none; + scrollbar-width: none; + width: calc(100% - 110px); + margin: auto; + @apply overflow-x-scroll; + table{ + margin: auto; + } + } + + .first-col{ + width:110px; + @apply absolute left-0; + } + + .last-col{ + width:110px; + @apply absolute right-0; + } +} + +@screen dt{ + .scroll-table-wrapper{ + width: 60%; + } +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/src/pages/employee/tooltip.scss b/frontend/micro-ui-internals/packages/css/src/pages/employee/tooltip.scss new file mode 100644 index 00000000000..5a4f67caba6 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/src/pages/employee/tooltip.scss @@ -0,0 +1,36 @@ +.tooltip { + position: relative; + display: inline-block; + } + + .tooltip .tooltiptext { + visibility: hidden; + background-color: #555; + color: #fff; + text-align: left; + border-radius: 6px; + padding: 5px; + position: absolute; + z-index: 1; + bottom: 125%; + left: 50%; + margin-left: -60px; + opacity: 0; + transition: opacity 0.3s; + } + + .tooltip .tooltiptext::after { + position: absolute; + top: 100%; + left: 50%; + margin-left: -5px; + border-width: 5px; + border-style: solid; + border-color: #555 transparent transparent transparent; + } + + .tooltip:hover .tooltiptext { + visibility: visible; + opacity: 1; + cursor: pointer; + } \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/svg/arrowdown.svg b/frontend/micro-ui-internals/packages/css/svg/arrowdown.svg new file mode 100644 index 00000000000..b7456af64e7 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/svg/arrowdown.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/svg/arrowleft.svg b/frontend/micro-ui-internals/packages/css/svg/arrowleft.svg new file mode 100644 index 00000000000..291db649e0a --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/svg/arrowleft.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/svg/calendar.svg b/frontend/micro-ui-internals/packages/css/svg/calendar.svg new file mode 100644 index 00000000000..db8c32d6b24 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/svg/calendar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/svg/camera.svg b/frontend/micro-ui-internals/packages/css/svg/camera.svg new file mode 100644 index 00000000000..5f0b5297983 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/svg/camera.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/micro-ui-internals/packages/css/svg/check.svg b/frontend/micro-ui-internals/packages/css/svg/check.svg new file mode 100644 index 00000000000..88018af3276 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/svg/check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/svg/close.svg b/frontend/micro-ui-internals/packages/css/svg/close.svg new file mode 100644 index 00000000000..357ce662494 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/svg/close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/micro-ui-internals/packages/css/svg/error.svg b/frontend/micro-ui-internals/packages/css/svg/error.svg new file mode 100644 index 00000000000..2f3e7d76748 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/svg/error.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/svg/error2.svg b/frontend/micro-ui-internals/packages/css/svg/error2.svg new file mode 100644 index 00000000000..008d258c3d6 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/svg/error2.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/frontend/micro-ui-internals/packages/css/svg/searchicon.svg b/frontend/micro-ui-internals/packages/css/svg/searchicon.svg new file mode 100644 index 00000000000..bca3b004413 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/svg/searchicon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/svg/starempty.svg b/frontend/micro-ui-internals/packages/css/svg/starempty.svg new file mode 100644 index 00000000000..8d295e7219b --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/svg/starempty.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/svg/starfilled.svg b/frontend/micro-ui-internals/packages/css/svg/starfilled.svg new file mode 100644 index 00000000000..23481e8ccb2 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/svg/starfilled.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/svg/success.svg b/frontend/micro-ui-internals/packages/css/svg/success.svg new file mode 100644 index 00000000000..e846ff61864 --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/svg/success.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/css/tailwind.config.js b/frontend/micro-ui-internals/packages/css/tailwind.config.js new file mode 100644 index 00000000000..0357796e68d --- /dev/null +++ b/frontend/micro-ui-internals/packages/css/tailwind.config.js @@ -0,0 +1,103 @@ +module.exports = { + future: { + removeDeprecatedGapUtilities: true, + purgeLayersByDefault: true, + }, + purge: { enabled: true, content: ["./example/index.html"] }, + theme: { + screens: { + dt: "780px", + }, + colors: { + primary: { + light: "#F18F5E", + main: "#F47738", + dark: "#C8602B", + }, + secondary: "#22394D", + text: { + primary: "#0B0C0C", + secondary: "#505A5F", + }, + link: { + normal: "#1D70B8", + hover: "#003078", + }, + border: "#D6D5D4", + "input-border": "#464646", + focus: "#F47738", + error: "#D4351C", + success: "#00703C", + black: "#000000", + grey: { + dark: "#9E9E9E", + mid: "#EEEEEE", + light: "#FAFAFA", + bg: "#E3E3E3", + }, + white: "#FFFFFF", + }, + fontFamily: { + sans: ["Roboto", "sans-serif"], + rc: ['"Roboto Condensed"', "sans-serif"], + }, + fontSize: { + "heading-xl-dt": ["48px", "56px"], + "heading-xl": ["32px", "40px"], + "heading-l-dt": ["36px", "40px"], + "heading-l": ["24px", "32px"], + "heading-m-dt": ["24px", "32px"], + "heading-m": ["18px", "28px"], + "heading-s": ["16px", "24px"], + "caption-xl-dt": ["27px", "32px"], + "caption-xl": ["18px", "26px"], + "caption-l-dt": ["24px", "28px"], + "caption-l": ["18px", "21px"], + "caption-m-dt": ["19px", "23px"], + "caption-m": ["16px", "19px"], + "form-field": ["16px", "20px"], + "body-l-dt": ["19px", "28px"], + "body-l": ["16px", "24px"], + "body-s-dt": ["16px", "24px"], + legend: ["19px", "23px"], + link: ["16px", "24px"], + "text-btn": ["16px", "24px"], + }, + fontWeight: { + regular: 400, + medium: 500, + bold: 700, + }, + padding: { + sm: "8px", + md: "16px", + lg: "24px", + xl: "36px", + }, + margin: { + xs: "4px", + sm: "8px", + md: "16px", + lg: "24px", + xl: "64px", + }, + borderWidth: { + default: "1px", + 0: "0", + 2: "1px", + 4: "4px", + 10: "10px", + }, + boxShadow: { + card: "0 1px 2px 0 rgba(0, 0, 0, 0.16)", + radiobtn: "0 0 0 5px #F47738", + }, + inset: { + 0: 0, + 10: "10px", + }, + extend: {}, + }, + variants: {}, + plugins: [], +}; diff --git a/frontend/micro-ui-internals/packages/libraries/README.md b/frontend/micro-ui-internals/packages/libraries/README.md new file mode 100644 index 00000000000..39fc8cb4ee5 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/README.md @@ -0,0 +1,32 @@ +# digit-ui-libraries + +> Made with @egovernments/create-ui-library + +## Install + +```bash +npm install --save @egovernments/digit-ui-libraries +``` + +## Usage + +```jsx +import React from "react"; +import initLibraries from "@egovernments/digit-ui-libraries"; + +import defaultConfig from "./config"; + +const App = ({ deltaConfig, stateCode, cityCode, moduleCode }) => { + initLibraries(); + + const store = eGov.Services.useStore(defaultConfig, { deltaConfig, stateCode, cityCode, moduleCode }); + + return

Create React Library Example 😄

; +}; + +export default App; +``` + +## License + +MIT © [](https://github.com/) diff --git a/frontend/micro-ui-internals/packages/libraries/package.json b/frontend/micro-ui-internals/packages/libraries/package.json new file mode 100644 index 00000000000..3a62e161cf7 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/package.json @@ -0,0 +1,42 @@ +{ + "name": "@egovernments/digit-ui-libraries", + "version": "1.3.0", + "main": "dist/index.js", + "module": "dist/index.modern.js", + "source": "src/index.js", + "license": "MIT", + "files": [ + "dist" + ], + "scripts": { + "build": "microbundle-crl --no-compress --format modern,cjs", + "start": "microbundle-crl watch --no-compress --format modern,cjs", + "prepublish": "yarn build" + }, + "peerDependencies": { + "react": "^17.0.0" + }, + "devDependencies": { + "gh-pages": "^2.2.0", + "microbundle-crl": "^0.13.10", + "react-dom": "^17.0.0", + "react-scripts": "^4.0.1" + }, + "dependencies": { + "axios": "^0.20.0", + "babel-preset-react": "^6.24.1", + "date-fns": "^2.16.1", + "i18next": "^19.8.4", + "i18next-react-postprocessor": "^3.0.5", + "pdfmake": "^0.1.69", + "react": "^17.0.0", + "react-i18next": "^11.7.3", + "react-query": "^3.6.1", + "react-router-dom": "^5.2.0", + "react-redux": "^7.2.1", + "redux": "^4.0.5", + "jspdf": "^2.3.1", + "html2canvas": "^1.0.0-rc.7", + "xlsx": "^0.17.0" + } +} diff --git a/frontend/micro-ui-internals/packages/libraries/src/config/configUtils.js b/frontend/micro-ui-internals/packages/libraries/src/config/configUtils.js new file mode 100644 index 00000000000..05df9e7def6 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/config/configUtils.js @@ -0,0 +1,46 @@ +export const getSectionInfo = (formId, sectionId, defaultConfigCopy) => { + let sectionInfo; + let fieldToUpdate = { field: "", fields: [] }; + for (let section of defaultConfigCopy) { + sectionInfo = section.form.find((formDetail) => { + return formDetail.id === sectionId; + }); + if (sectionInfo) { + if (sectionInfo.fields) { + for (let field of sectionInfo.fields) { + if (field.id === formId) { + fieldToUpdate.field = field; + fieldToUpdate.fields = sectionInfo.fields; + break; + } else { + if (field.fields) { + for (let innerField of field.fields) { + if (innerField.id === formId) { + fieldToUpdate.field = innerField; + fieldToUpdate.fields = field.fields; + break; + } + } + } + } + } + } + } + } + return fieldToUpdate; +}; + +export const ifObjectContainsArray = (object) => { + if (Array.isArray(object)) { + return { hasArray: true, value: object }; + } + for (const property in object) { + if (object.hasOwnProperty(property)) { + const element = object[property]; + if (Array.isArray(element)) { + return { hasArray: true, value: element }; + } + } + } + return { hasArray: false, value: [] }; +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/config/index.js b/frontend/micro-ui-internals/packages/libraries/src/config/index.js new file mode 100644 index 00000000000..2bc6a46fbfc --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/config/index.js @@ -0,0 +1,31 @@ +export const getConfig = (ComponentMap, GetFunction, { config, state, repeatClicked, handlesubmit, register, onSubmit }) => { + if (!config || config.length === 0) return []; + return config.map((item) => { + const { component, name, fields, submit, ...props } = item; + return { + ...props, + // submit: submit ? GetFunction(submit) : undefined, + fields: + fields && fields.length > 0 + ? getConfig(ComponentMap, GetFunction, { + config: fields, + state, + repeatClicked, + handlesubmit, + register, + onSubmit, + }) + : null, + name, + value: state[name], + handlesubmit: component === "form" ? handlesubmit : null, + onSubmit: component === "form" ? onSubmit : null, + repeats: component === "form-section-repeat-group" ? state[name + "-repeats"] || 1 : null, + dorepeat: component === "form-section-repeat-group" ? repeatClicked(name) : null, + ref: component === "input-select" || component === "input-field" || component === "city-mohalla" ? register : null, + register: component === "input-select" || component === "input-field" || component === "city-mohalla" ? register : null, + // onChange: component === 'input-field' ? onChange(name) : null, + component: ComponentMap[component], + }; + }); +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/config/mergeConfig.js b/frontend/micro-ui-internals/packages/libraries/src/config/mergeConfig.js new file mode 100644 index 00000000000..07536fac504 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/config/mergeConfig.js @@ -0,0 +1,159 @@ +// let defaultConfig = require("./default2.json"); +import { ifObjectContainsArray } from "./configUtils"; + +let defaultConfigCopy = {}; +let sectionToBeUpdated = {}; +let currentUpdatableSection = []; +let selectedProperty = ""; + +const MergeConfigObj = (defaultConfig, deltaConfig) => { + defaultConfigCopy = JSON.parse(JSON.stringify(defaultConfig)); + let deltaConfigCopy = JSON.parse(JSON.stringify(deltaConfig)); + processStateConfig(deltaConfigCopy); + return defaultConfigCopy; +}; + +const processStateConfig = (deltaConfig) => { + if (Array.isArray(deltaConfig)) { + deltaConfig.forEach((forms) => { + sectionToBeUpdated = {}; + InitSectionToUpdate(forms); + }); + } +}; + +const InitSectionToUpdate = (forms) => { + if (forms.id && !forms.__property__) { + GetCurrentUpdatableSection(forms.id, defaultConfigCopy); + } + if (forms.__property__ && forms.__action__) { + selectedProperty = forms.__property__; + currentUpdatableSection = currentUpdatableSection.length === 0 ? defaultConfigCopy : currentUpdatableSection; + findSectionById(selectedProperty, currentUpdatableSection); + seachInDefaultConfig(forms.__property__, forms); + } else if (Array.isArray(forms)) { + forms.forEach((form) => { + InitSectionToUpdate(form); + }); + } else if (ifObjectContainsArray(forms).hasArray) { + let array = ifObjectContainsArray(forms).value; + InitSectionToUpdate(array); + } else { + throw new Error("__property__ or __action__ not found"); + } +}; + +const GetCurrentUpdatableSection = (id, defaultConfigCopy) => { + if (Array.isArray(defaultConfigCopy)) { + for (let i = 0; i < defaultConfigCopy.length; i++) { + if (defaultConfigCopy[i].id === id) { + currentUpdatableSection.push(defaultConfigCopy[i]); + //console.log("matched", currentUpdatableSection); + } else if (ifObjectContainsArray(defaultConfigCopy[i]).hasArray) { + let array = ifObjectContainsArray(defaultConfigCopy[i]).value; + GetCurrentUpdatableSection(id, array); + } + } + } +}; + +const findSectionById = (id, currentUpdatableSection) => { + if (Array.isArray(currentUpdatableSection)) { + for (let i = 0; i < currentUpdatableSection.length; i++) { + if (currentUpdatableSection[i].id === id) { + sectionToBeUpdated = currentUpdatableSection; + } else if (ifObjectContainsArray(currentUpdatableSection[i]).hasArray) { + let arr = ifObjectContainsArray(currentUpdatableSection[i]).value; + findSectionById(id, arr); + } + } + } + + return sectionToBeUpdated; +}; + +const seachInDefaultConfig = (id, action) => { + if (!Array.isArray(sectionToBeUpdated) && !sectionToBeUpdated.id) { + throw new Error("id not found"); + } + if (sectionToBeUpdated.id === id) { + actionHandler(action, id, sectionToBeUpdated); + } else if (Array.isArray(sectionToBeUpdated)) { + sectionToBeUpdated.forEach((section) => { + if (section.id === id) { + actionHandler(action, id, sectionToBeUpdated); + } + }); + } else if (ifObjectContainsArray(sectionToBeUpdated).hasArray) { + sectionToBeUpdated = ifObjectContainsArray(sectionToBeUpdated).value; + seachInDefaultConfig(id, action); + } +}; + +const actionHandler = (action, id, fieldList) => { + const index = getIndex(id, fieldList); + if (!action) { + console.log("no action found"); + return; + } + if (action.__action__ === "UPDATE") { + updateAt(index, action, fieldList); + deleteExtraKeys(action); + } + if (action.__action__ === "DELETE") { + deleteAt(index, fieldList); + deleteExtraKeys(action); + } + if (["INSERT_AFTER", "INSERT_BEFORE"].includes(action.__action__)) { + handleInsertion(index, action, fieldList); + } +}; + +const handleInsertion = (index, action, fields) => { + index = action.__action__ === "INSERT_BEFORE" ? index : index + 1; + insertAt(index, action, fields); + deleteExtraKeys(action); +}; + +const getIndex = (propertyValue, fields) => { + let index = fields.findIndex((option) => option.id === propertyValue); + + return index; +}; + +const insertAt = (index, data, fields) => { + if (!data.id) { + throw new Error("id is required is required to insert a record"); + } + fields.splice(index, 0, data); +}; + +const updateAt = (index, data, fields) => { + if (fields[index].id !== data.id) { + throw new Error(`id ${data.id} not matched`); + } + fields[index] = { ...fields[index], ...data }; +}; + +const deleteAt = (index, fields) => { + fields.splice(index, 1); +}; + +const deleteExtraKeys = (data) => { + delete data.__action__; + delete data.__property__; +}; + +const getMergedConfig = (defaultConfig, deltaConfig) => { + let mergedConfigObj = defaultConfig; + + for (const key in deltaConfig) { + if (deltaConfig.hasOwnProperty(key)) { + const mergedConfig = MergeConfigObj(defaultConfig[key], deltaConfig[key]); + mergedConfigObj[key] = mergedConfig; + } + } + return mergedConfigObj; +}; + +export default getMergedConfig; diff --git a/frontend/micro-ui-internals/packages/libraries/src/contexts/index.js b/frontend/micro-ui-internals/packages/libraries/src/contexts/index.js new file mode 100644 index 00000000000..383b1ec27d0 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/contexts/index.js @@ -0,0 +1,5 @@ +import React from "react"; + +const ComponentProvider = React.createContext(); + +export default { ComponentProvider }; diff --git a/frontend/micro-ui-internals/packages/libraries/src/enums/ConfigActionTypes.js b/frontend/micro-ui-internals/packages/libraries/src/enums/ConfigActionTypes.js new file mode 100644 index 00000000000..f0d76ead434 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/enums/ConfigActionTypes.js @@ -0,0 +1,5 @@ +const ConfigActionTypes = Object.freeze({ + CONFIG_UPDATE: "CONFIG_UPDATE", +}); + +export default ConfigActionTypes; diff --git a/frontend/micro-ui-internals/packages/libraries/src/enums/FormFields.js b/frontend/micro-ui-internals/packages/libraries/src/enums/FormFields.js new file mode 100644 index 00000000000..83ba271d1dc --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/enums/FormFields.js @@ -0,0 +1,5 @@ +const FormFields = Object.freeze({ + INPUT: "input-fields", +}); + +export default FormFields; diff --git a/frontend/micro-ui-internals/packages/libraries/src/enums/Pages.js b/frontend/micro-ui-internals/packages/libraries/src/enums/Pages.js new file mode 100644 index 00000000000..edba2497c27 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/enums/Pages.js @@ -0,0 +1,7 @@ +const Pages = Object.freeze({ + PGR_LIST: "pgr-list", + PGR_NEW_COMPLAINT: "pgr-new-complaint", + PGR_SEARCH: "pgr-search-complaint", +}); + +export default Pages; diff --git a/frontend/micro-ui-internals/packages/libraries/src/enums/index.js b/frontend/micro-ui-internals/packages/libraries/src/enums/index.js new file mode 100644 index 00000000000..8dbb59fea95 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/enums/index.js @@ -0,0 +1,7 @@ +import Pages from "./Pages"; +import ConfigActionTypes from "./ConfigActionTypes"; +// import FormFields from "./FormFields;" + +const Enums = { Pages, ConfigActionTypes }; + +export default Enums; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/dss/useDSSDashboard.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/dss/useDSSDashboard.js new file mode 100644 index 00000000000..0371e5a5cbc --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/dss/useDSSDashboard.js @@ -0,0 +1,8 @@ +import { useQueries } from "react-query"; +import { getDSSDashboardData } from "../../services/molecules/DSS/getDSSDashboardData"; + +const useDSSDashboard = (stateCode, mdmsType, moduleCode, config) => { + return useQueries(getDSSDashboardData(stateCode, mdmsType, moduleCode, config)); +}; + +export default useDSSDashboard; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/dss/useDashboardConfig.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/dss/useDashboardConfig.js new file mode 100644 index 00000000000..82ea22ce7bf --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/dss/useDashboardConfig.js @@ -0,0 +1,8 @@ +import { useQuery } from "react-query"; +import { DSSService } from "../../services/elements/DSS"; + +const useDashoardConfig = (moduleCode) => { + return useQuery(`DSS_DASHBOARD_CONFIG_${moduleCode}`, () => DSSService.getDashboardConfig(moduleCode)); +}; + +export default useDashoardConfig; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/dss/useGetChart.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/dss/useGetChart.js new file mode 100644 index 00000000000..d29796e06d5 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/dss/useGetChart.js @@ -0,0 +1,29 @@ +import { useQuery } from "react-query"; +import { startOfMonth, endOfMonth, getTime } from "date-fns"; +import { DSSService } from "../../services/elements/DSS"; + +const getRequest = (type, code, requestDate, filters) => ({ + aggregationRequestDto: { + visualizationType: type.toUpperCase(), + visualizationCode: code, + queryType: "", + filters: { ...filters }, + moduleLevel: "", + aggregationFactors: null, + requestDate, + }, +}); + +const useGetChart = (args) => { + const { key, type, tenantId, requestDate, filters } = args; + return useQuery([args], () => + DSSService.getCharts({ + ...getRequest(type, key, requestDate, filters), + headers: { + tenantId, + }, + }) + ); +}; + +export default useGetChart; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/dss/useMDMS.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/dss/useMDMS.js new file mode 100644 index 00000000000..9c54efc34ca --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/dss/useMDMS.js @@ -0,0 +1,15 @@ +import { useQuery } from "react-query"; +import { MdmsService } from "../../services/elements/MDMS"; + +const useDssMDMS = (tenantId, moduleCode, type, config) => { + const useDssDashboard = () => { + return useQuery("DSS_DASHBOARD", () => MdmsService.getDssDashboard(tenantId, moduleCode), config); + }; + + switch (type) { + case "DssDashboard": + return useDssDashboard(); + } +}; + +export default useDssMDMS; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useApplicationActions.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useApplicationActions.js new file mode 100644 index 00000000000..2b235ae28ab --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useApplicationActions.js @@ -0,0 +1,8 @@ +import { useMutation } from "react-query"; +import ApplicationUpdateActions from "../../services/molecules/FSM/ApplicationUpdateActions"; + +const useApplicationActions = (tenantId) => { + return useMutation((applicationData) => ApplicationUpdateActions(applicationData, tenantId)); +}; + +export default useApplicationActions; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useApplicationAudit.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useApplicationAudit.js new file mode 100644 index 00000000000..dfe34512093 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useApplicationAudit.js @@ -0,0 +1,10 @@ +import { FSMService } from "../../services/elements/FSM"; +import { useQuery, useQueryClient } from "react-query"; + +const useApplicationAudit = (tenantId, filters) => { + const client = useQueryClient(); + const query = useQuery(["FSM_APPLICATION_AUDIT", filters], () => FSMService.audit(tenantId, filters)); + return { ...query, revalidate: () => client.invalidateQueries(["FSM_APPLICATION_AUDIT", filters]) }; +}; + +export default useApplicationAudit; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useApplicationDetail.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useApplicationDetail.js new file mode 100644 index 00000000000..bd8c7499db4 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useApplicationDetail.js @@ -0,0 +1,8 @@ +import { Search } from "../../services/molecules/FSM/Search"; +import { useQuery } from "react-query"; + +const useApplicationDetail = (t, tenantId, applicationNos, config = {}, userType) => { + return useQuery(["FSM_CITIZEN_SEARCH", applicationNos, userType], () => Search.applicationDetails(t, tenantId, applicationNos, userType), config); +}; + +export default useApplicationDetail; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useApplicationStatus.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useApplicationStatus.js new file mode 100644 index 00000000000..4c59ce31088 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useApplicationStatus.js @@ -0,0 +1,76 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; +import { useQuery } from "react-query"; + +const useApplicationStatus = (select, isEnabled = true, statusMap=[]) => { + const { t } = useTranslation(); + + const userInfo = Digit.UserService.getUser(); + const userRoles = userInfo.info.roles.map((roleData) => roleData.code); + + const workflowOrder = [ + "CREATED", + "PENDING_APPL_FEE_PAYMENT", + "ASSING_DSO", + "PENDING_DSO_APPROVAL", + "DSO_REJECTED", + "DSO_INPROGRESS", + "REJECTED", + "CANCELED", + "COMPLETED", + "CITIZEN_FEEDBACK_PENDING", + ]; + + const DSO = Digit.UserService.hasAccess(["FSM_DSO"]); + const allowedStatusForDSO = ["PENDING_DSO_APPROVAL", "DSO_INPROGRESS", "COMPLETED", "DSO_REJECTED"]; + + const tenantId = Digit.ULBService.getCurrentTenantId(); + const fetch = async () => { + let WorkflowService = await Digit.WorkflowService.init(tenantId, "FSM"); + return workflowOrder.map( + (status) => WorkflowService.BusinessServices[0].states?.filter((workflowDetails) => status === workflowDetails?.state)[0] + ); + }; + + const roleWiseSelect = (WorkflowService) => { + const response = WorkflowService.filter((state) => state.applicationStatus) + .filter((status) => { + if (status.actions === null) return 0; + const ref = status.actions.reduce((prev, curr) => [...prev, ...curr.roles], []); + const res = [userRoles, ref].reduce((a, c) => a.filter((i) => c.includes(i))); + return res.length; + }) + .map((state) => { + const roles = state.actions?.map((e) => e.roles)?.flat(); + return { + name: t(`CS_COMMON_FSM_${state.applicationStatus}`), + code: state.applicationStatus, + id: statusMap?.filter(e => e.applicationstatus === state.applicationStatus)?.[0]?.statusid, + roles, + }; + }) + return response; + }; + + const defaultSelect = (WorkflowService) => { + let applicationStatus = WorkflowService.filter((state) => state.applicationStatus).map((state) => { + const roles = state.actions?.map((e) => e.roles)?.flat(); + return { + name: t(`CS_COMMON_FSM_${state.applicationStatus}`), + code: state.applicationStatus, + id: statusMap?.filter(e => e.applicationstatus === state.applicationStatus)?.[0]?.statusid, + roles, + }; + }); + + // console.log("find filter status",DSO ? allowedStatusForDSO.map(item => applicationStatus.filter(status => status.code === item)[0] ) : applicationStatus); + return DSO ? allowedStatusForDSO.map((item) => applicationStatus.filter((status) => status.code === item)[0]) : applicationStatus; + }; + return useQuery( + ["APPLICATION_STATUS", isEnabled], + () => fetch(), + select ? { select: roleWiseSelect, enabled: isEnabled } : { select: defaultSelect, enabled: isEnabled } + ); +}; + +export default useApplicationStatus; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useApplicationUpdate.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useApplicationUpdate.js new file mode 100644 index 00000000000..d500df23dbe --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useApplicationUpdate.js @@ -0,0 +1,8 @@ +import { useMutation } from "react-query"; +import { FSMService } from "../../services/elements/FSM"; + +const useApplicationUpdate = (tenantId) => { + return useMutation((details) => FSMService.update(details, tenantId)); +}; + +export default useApplicationUpdate; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useBillingDataWithAppDetails.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useBillingDataWithAppDetails.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useConfig.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useConfig.js new file mode 100644 index 00000000000..dc146d050d1 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useConfig.js @@ -0,0 +1,20 @@ +import { useQuery } from "react-query"; +import { MdmsService } from "../../services/elements/MDMS"; + +const useConfig = (tenantId) => { + return useQuery("FSM_CUSTOMIZATION_CONFIG", async () => + (await MdmsService.getCustomizationConfig(tenantId, "FSM"))["FSM"].Config.filter((item) => item.active === true).reduce( + (finalObject, itemConfig) => + Object.assign(finalObject, { + [itemConfig.code]: { + override: itemConfig.override, + default: itemConfig.default, + state: itemConfig.WFState, + }, + }), + {} + ) + ); +}; + +export default useConfig; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useDesludging.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useDesludging.js new file mode 100644 index 00000000000..2ed65bf8365 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useDesludging.js @@ -0,0 +1,8 @@ +import { FileDesludging } from "../../services/molecules/FSM/FileDesludging"; +import { useQuery, useMutation } from "react-query"; + +const useDesludging = (tenantId, config = {}) => { + return useMutation((data) => FileDesludging.create(tenantId, data)); +}; + +export default useDesludging; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useDsoSearch.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useDsoSearch.js new file mode 100644 index 00000000000..04ef150ef1c --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useDsoSearch.js @@ -0,0 +1,9 @@ +import React from "react"; +import { useQuery } from "react-query"; +import DsoDetails from "../../services/molecules/FSM/DsoDetails"; + +const useDsoSearch = (tenantId, filters, config = {}) => { + return useQuery(["DSO_SEARCH", filters], () => DsoDetails(tenantId, filters), config); +}; + +export default useDsoSearch; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useInbox.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useInbox.js new file mode 100644 index 00000000000..6ea210b5e6f --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useInbox.js @@ -0,0 +1,58 @@ +import React from "react" +import useInbox from "../useInbox" + +const useFSMInbox = (tenantId, filters, config = {}, overRideUUID=false) => { + + const { applicationNos, mobileNumber, limit, offset, sortBy, sortOrder } = filters; + const _filters = { + tenantId, + processSearchCriteria: { + businessService: ["FSM"], + ...(filters?.applicationStatus?.length > 0 ? {status: filters.applicationStatus.map((status) => status?.id)} : {}), + }, + moduleSearchCriteria: { + ...(mobileNumber ? {mobileNumber}: {}), + ...(applicationNos ? {applicationNos} : {}), + ...(sortBy ? {sortBy} : {}), + ...(sortOrder ? {sortOrder} : {}), + ...(filters?.locality?.length > 0 ? {locality: filters.locality.map((item) => item.code.split("_").pop()).join(",")} : {}), + }, + limit, + offset, + } + const appList = useInbox({tenantId, filters: _filters, config:{ + select: (data) => ({ + totalCount: data.totalCount, + statuses: data.statusMap, + table: data?.items?.map( application => ({ + tenantId: application.businessObject.tenantId, + totalCount: application.businessObject.totalCount, + applicationNo: application.businessObject.applicationNo, + createdTime: new Date(application.businessObject.auditDetails.createdTime), + locality: application.businessObject.address.locality.code, + status: application.businessObject.applicationStatus, + citizen:{ + name: application.ProcessInstance?.assigner?.name, + mobileNumber: application.ProcessInstance?.assigner?.mobileNumber + }, + propertyUsage: application.businessObject.propertyUsage, + sla: Math.round(application.ProcessInstance?.businesssServiceSla / (24 * 60 * 60 * 1000)) || "-", + mathsla: application.ProcessInstance?.businesssServiceSla, + })) + }), + ...config + }}) + if(filters?.uuid?.code === "ASSIGNED_TO_ME" && !overRideUUID){ + return { + data:{ + totalCount: 0, + statuses: [], + table: [] + }, + isLoading: false + } + } + return { ...appList } +} + +export default useFSMInbox \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useInbox2.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useInbox2.js new file mode 100644 index 00000000000..2f82e3272e5 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useInbox2.js @@ -0,0 +1,109 @@ +import { useQuery, useQueryClient } from "react-query"; +import { Search } from "../../services/molecules/FSM/Search"; + +const useInbox = (tenantId, filters, filterFsmFn, workFlowConfig = {}) => { + let { uuid } = Digit.UserService.getUser().info; + + const client = useQueryClient(); + + const fetchFilters = () => { + let filtersObj = {}; + const { applicationNos, mobileNumber, limit, offset, sortBy, sortOrder, total } = filters; + if (filters.applicationStatus && filters.applicationStatus?.[0]) { + filtersObj.applicationStatus = filters.applicationStatus.map((status) => status.code).join(","); + } + if (filters.locality) { + filtersObj.locality = filters.locality.map((item) => item.code.split("_").pop()).join(","); + } + if (filters.uuid && Object.keys(filters.uuid).length > 0) { + filtersObj.assignee = filters.uuid.code === "ASSIGNED_TO_ME" ? uuid : ""; + } + if (mobileNumber) { + filtersObj.mobileNumber = mobileNumber; + } + if (applicationNos) { + filtersObj.applicationNos = applicationNos; + } + if (sortBy) { + filtersObj.sortBy = sortBy; + } + if (sortOrder) { + filtersObj.sortOrder = sortOrder; + } + if (!total) return { limit, offset, sortBy, sortOrder, ...filtersObj }; + else return { limit: 100000, offset: 0, sortBy, sortOrder, ...filtersObj }; + }; + + const workflowFilters = fetchFilters().assignee ? { assignee: uuid } : {}; + const workFlowInstances = useQuery( + ["WORKFLOW", workflowFilters], + () => Digit.WorkflowService.getAllApplication(tenantId, { ...workflowFilters, businesssService: "FSM" }), + { ...workFlowConfig, select: (data) => data.ProcessInstances } + ); + + const { data: processInstances, isLoading: workflowLoading, isFetching: wfFetching, isSuccess: wfSuccess } = workFlowInstances; + let applicationNos = !wfFetching && wfSuccess ? { applicationNos: processInstances.map((e) => e.businessId).join() } : {}; + applicationNos = applicationNos?.applicationNos === "" ? { applicationNos: "xyz" } : applicationNos; + + if (!filterFsmFn) + filterFsmFn = (data) => { + const fsm = data.fsm + .filter((application) => processInstances.find((wfApp) => wfApp.businessId === application.applicationNo)) + .map((e) => ({ ...e, totalCount: data.totalCount })); + return combineResponses(fsm, processInstances); + }; + + const appList = useQuery( + [ + "FSM_SEARCH", + { ...fetchFilters(), applicationNos: fetchFilters().applicationNos ? fetchFilters().applicationNos : applicationNos.applicationNos }, + ], + () => + Search.all(tenantId, { + ...fetchFilters(), + applicationNos: fetchFilters().applicationNos ? fetchFilters().applicationNos : applicationNos.applicationNos, + }), + { + enabled: !wfFetching && wfSuccess, + select: filterFsmFn, + } + ); + + const revalidate = () => { + client.refetchQueries(["WORKFLOW"]); + client.refetchQueries(["FSM_SEARCH"]); + }; + + client.setQueryData("FUNCTION_RESET_INBOX", { revalidate }); + + return { + ...appList, + revalidate, + }; +}; + +const mapWfBybusinessId = (wfs) => { + return wfs.reduce((object, item) => { + return { ...object, [item["businessId"]]: item }; + }, {}); +}; + +const combineResponses = (applicationDetails, workflowInstances) => { + let wfMap = mapWfBybusinessId(workflowInstances); + const response = applicationDetails.map((application) => ({ + applicationNo: application.applicationNo, + createdTime: new Date(application.auditDetails.createdTime), + locality: application.address.locality.code, + status: application.applicationStatus, + taskOwner: wfMap[application.applicationNo]?.assigner?.name, + sla: Math.round(wfMap[application.applicationNo]?.businesssServiceSla / (24 * 60 * 60 * 1000)) || "-", + mathsla: wfMap[application.applicationNo]?.businesssServiceSla, + tenantId: application.tenantId, + totalCount: application.totalCount, + })); + // console.log("find combine Response here", applicationDetails, workflowInstances, response) + + return response; +}; + +export default useInbox; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useMDMS.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useMDMS.js new file mode 100644 index 00000000000..81cf08b42cc --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useMDMS.js @@ -0,0 +1,113 @@ +import { MdmsService } from "../../services/elements/MDMS"; +import { useQuery } from "react-query"; + +const useMDMS = (tenantId, moduleCode, type, config = {}, payload = []) => { + const queryConfig = { staleTime: Infinity, ...config }; + + const useSanitationType = () => { + return useQuery("FSM_SANITATION_TYPE", () => MdmsService.getSanitationType(tenantId, moduleCode), queryConfig); + }; + + const usePitType = () => { + return useQuery("FSM_PIT_TYPE", () => MdmsService.getPitType(tenantId, moduleCode, queryConfig)); + }; + + const useApplicationChannel = () => { + return useQuery("FSM_APPLICATION_NEW_APPLICATION_CHANNEL", () => MdmsService.getApplicationChannel(tenantId, moduleCode, type), queryConfig); + }; + + const useEmployeeApplicationChannel = () => { + async function onlyEmployeeChannels() { + const allApplicationChannels = await MdmsService.getApplicationChannel(tenantId, moduleCode, type); + return allApplicationChannels.filter((type) => !type.citizenOnly); + } + return useQuery("FSM_APPLICATION_EDIT_APPLICATION_CHANNEL", () => onlyEmployeeChannels(), queryConfig); + }; + + const usePropertyType = () => { + return useQuery("FSM_PROPERTY_TYPE", () => MdmsService.getPropertyType(tenantId, moduleCode, type), queryConfig); + }; + + const usePropertySubType = () => { + return useQuery("FSM_PROPERTY_SUBTYPE", () => MdmsService.getPropertyType(tenantId, moduleCode, type), queryConfig); + }; + + const useChecklist = () => { + return useQuery("FSM_CHECKLIST", () => MdmsService.getChecklist(tenantId, moduleCode), queryConfig); + }; + + const useVehicleType = () => { + return useQuery("FSM_VEHICLE_TYPE", () => MdmsService.getVehicleType(tenantId, moduleCode, type), queryConfig); + }; + + const useSlumLocality = () => { + return useQuery( + ["SLUM_LOCALITY_MAPPING", tenantId, moduleCode], + () => MdmsService.getSlumLocalityMapping(tenantId, moduleCode, type), + queryConfig + ); + }; + + const useReason = () => { + return useQuery("CANCELLATION_REASON", () => MdmsService.getReason(tenantId, moduleCode, type, payload), queryConfig); + }; + + const useRoleStatusMapping = () => { + return useQuery("ROLE_STATUS_MAPPING", () => MdmsService.getRoleStatus(tenantId, moduleCode, type)); + }; + const useCommonFieldsConfig = () => { + return useQuery("COMMON_FIELDS", () => MdmsService.getCommonFieldsConfig(tenantId, moduleCode, type, payload)); + }; + + const usePreFieldsConfig = () => { + return useQuery("PRE_FIELDS", () => MdmsService.getPreFieldsConfig(tenantId, moduleCode, type, payload)); + }; + + const usePostFieldsConfig = () => { + return useQuery("POST_FIELDS", () => MdmsService.getPostFieldsConfig(tenantId, moduleCode, type, payload)); + }; + + switch (type) { + case "SanitationType": + return useSanitationType(); + + case "ApplicationChannel": + return useApplicationChannel(); + + case "EmployeeApplicationChannel": + return useEmployeeApplicationChannel(); + + case "PropertyType": + return usePropertyType(); + + case "PropertySubtype": + return usePropertySubType(); + + case "PitType": + return usePitType(); + + case "VehicleType": + return useVehicleType(); + + case "Checklist": + return useChecklist(); + + case "Slum": + return useSlumLocality(); + + case "Reason": + return useReason(); + + case "RoleStatusMapping": + return useRoleStatusMapping(); + + case "CommonFieldsConfig": + return useCommonFieldsConfig(); + case "PreFieldsConfig": + return usePreFieldsConfig(); + case "PostFieldsConfig": + return usePostFieldsConfig(); + } +}; + +export default useMDMS; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/usePaymentHistory.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/usePaymentHistory.js new file mode 100644 index 00000000000..9bdd147cb5c --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/usePaymentHistory.js @@ -0,0 +1,8 @@ +import { useQuery } from "react-query"; +import { PaymentService } from "../../services/elements/Payment"; + +const usePaymentHistory = (tenantId, id, config = {}) => { + return useQuery(["PAYMENT_HISTORY", id], () => PaymentService.getReciept(tenantId, "FSM.TRIP_CHARGES", { consumerCodes: id }), { ...config }); +}; + +export default usePaymentHistory; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useRouteSubscription.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useRouteSubscription.js new file mode 100644 index 00000000000..b817b629caf --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useRouteSubscription.js @@ -0,0 +1,17 @@ +import React, { useEffect, useState } from "react"; + +const useRouteSubscription = (pathname) => { + const [classname, setClassname] = useState("citizen"); + useEffect(() => { + const isEmployeeUrl = Digit.Utils.detectDsoRoute(pathname); + if (isEmployeeUrl && classname === "citizen") { + setClassname("employee"); + } else if (!isEmployeeUrl && classname === "employee") { + setClassname("citizen"); + } + }, [pathname]); + + return classname; +}; + +export default useRouteSubscription; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useSearch.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useSearch.js new file mode 100644 index 00000000000..c2740c13040 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useSearch.js @@ -0,0 +1,8 @@ +import { Search } from "../../services/molecules/FSM/Search"; +import { useQuery } from "react-query"; + +const useSearch = (tenantId, filters, config = {}) => { + return useQuery(["FSM_CITIZEN_SEARCH", filters], () => Search.application(tenantId, filters), config); +}; + +export default useSearch; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useSearchAll.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useSearchAll.js new file mode 100644 index 00000000000..2a9e0a73aed --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useSearchAll.js @@ -0,0 +1,12 @@ +import { Search } from "../../services/molecules/FSM/Search"; +import { useQuery } from "react-query"; + +const useSearchAll = (tenantId, filters, queryFn, config = {}) => { + const defaultSelect = (data) => ({ data: {table: data.fsm}, totalCount: data.totalCount }); + return useQuery(["FSM_CITIZEN_SEARCH", filters], typeof queryFn === "function" ? queryFn : () => Search.all(tenantId, filters), { + select: defaultSelect, + ...config, + }); +}; + +export default useSearchAll; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useSearchForAudit.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useSearchForAudit.js new file mode 100644 index 00000000000..05135f70861 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useSearchForAudit.js @@ -0,0 +1,10 @@ +import { FSMService } from "../../services/elements/FSM"; +import { useQuery, useQueryClient } from "react-query"; + +const useSearchForAuditData = (tenantId, filters, options = {}) => { + const client = useQueryClient(); + const query = useQuery(["FSM_APPLICATION_AUDIT", filters], () => FSMService.search(tenantId, filters), options); + return { ...query, revalidate: () => client.invalidateQueries(["FSM_APPLICATION_AUDIT", filters]) }; +}; + +export default useSearchForAuditData; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useSlum.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useSlum.js new file mode 100644 index 00000000000..b1526cbb9e0 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useSlum.js @@ -0,0 +1,19 @@ +const useSlum = (tenantId, slumCode, localityCode, config = {}) => { + const { data: slumData } = Digit.Hooks.fsm.useMDMS(tenantId, "FSM", "Slum", config); + + if (!slumData || !slumCode || !localityCode) return; + + if (slumData[localityCode]) { + return slumData[localityCode].find((slum) => slum?.code === slumCode); + } else { + const slumDataArray = Object.values(slumData); + for (let i = 0; i < slumDataArray.length; i++) { + const slumFound = slumDataArray[i].find((slum) => slum.code === slumCode); + if (slumFound) { + return slumFound; + } + } + } +}; + +export default useSlum; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useTenants.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useTenants.js new file mode 100644 index 00000000000..17530a2a5d8 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useTenants.js @@ -0,0 +1,10 @@ +import { useState } from "react"; + +const useTenants = () => { + const tenantInfo = Digit.SessionStorage.get("FSM_TENANTS"); + // console.log("tenantInfo", tenantInfo); + const [tenants, setTenants] = useState(tenantInfo ? tenantInfo : null); + return tenants; +}; + +export default useTenants; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useVehicleSearch.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useVehicleSearch.js new file mode 100644 index 00000000000..781f9ba321d --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useVehicleSearch.js @@ -0,0 +1,14 @@ +import { useQuery } from "react-query"; +import { Search } from "../../services/molecules/FSM/Search"; + +const useVehicleSearch = (args) => { + const { tenantId, filters, config, options } = args; + const searchWithDSO = options?.searchWithDSO; + return useQuery( + ["FSM_VEHICLE_DATA", args], + () => (searchWithDSO ? Search.allVehiclesWithDSO(tenantId, filters) : Search.allVehicles(tenantId, filters)), + config + ); +}; + +export default useVehicleSearch; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useVehicleUpdate.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useVehicleUpdate.js new file mode 100644 index 00000000000..95fdca58d15 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useVehicleUpdate.js @@ -0,0 +1,8 @@ +import { useMutation } from "react-query"; +import { FSMService } from "../../services/elements/FSM"; + +const useVehicleUpdate = () => { + return useMutation((details) => FSMService.vehicleUpdate(details)); +}; + +export default useVehicleUpdate; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useVehiclesSearch.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useVehiclesSearch.js new file mode 100644 index 00000000000..1bd7a60064c --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useVehiclesSearch.js @@ -0,0 +1,9 @@ +import { useQuery } from "react-query"; +import { FSMService } from "../../services/elements/FSM"; + +const useVehiclesSearch = (args) => { + const { tenantId, filters, config } = args; + return useQuery(["FSM_VEICLES_SEARCH", filters], () => FSMService.vehiclesSearch(tenantId, filters), config); +}; + +export default useVehiclesSearch; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useVendorDetail.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useVendorDetail.js new file mode 100644 index 00000000000..24197046249 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useVendorDetail.js @@ -0,0 +1,10 @@ +import { useQuery } from "react-query"; +import { FSMService } from "../../services/elements/FSM"; + +const useVendorDetail = (filters = {}, config = {}) => { + const tenantId = Digit.ULBService.getCurrentTenantId(); + const { uuid } = Digit.UserService.getUser().info; + return useQuery(["FSM_VENDOR_SEARCH", filters], () => FSMService.vendorSearch(tenantId, { ...filters, ownerIds: uuid }), config); +}; + +export default useVendorDetail; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useWorkflowData.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useWorkflowData.js new file mode 100644 index 00000000000..694ec23c017 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/fsm/useWorkflowData.js @@ -0,0 +1,9 @@ +import React from "react"; +import { useQuery } from "react-query"; +import { WorkflowService } from "../../services/elements/WorkFlow"; + +const useWorkflowData = (tenantId, businessIds) => { + return useQuery("WORKFLOW_BY_ID", () => WorkflowService.getByBusinessId(tenantId, businessIds), { staleTime: Infinity }); +}; + +export default useWorkflowData; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/hrms/useHRMSCount.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/hrms/useHRMSCount.js new file mode 100644 index 00000000000..50b63dadb63 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/hrms/useHRMSCount.js @@ -0,0 +1,8 @@ +import { useQuery, useQueryClient } from "react-query"; +import HrmsService from "../../services/elements/HRMS"; + +export const useHRMSCount = (tenantId, config = {}) => { + return useQuery(["HRMS_COUNT", tenantId], () => HrmsService.count(tenantId), config); +}; + +export default useHRMSCount; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/hrms/useHRMSGender.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/hrms/useHRMSGender.js new file mode 100644 index 00000000000..7d7e97b0fbf --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/hrms/useHRMSGender.js @@ -0,0 +1,18 @@ +import { useQuery } from "react-query"; +import { MdmsService } from "../../services/elements/MDMS"; + +const useHRMSGenderMDMS = (tenantId, moduleCode, type, config = {}) => { + const useHRGenders = () => { + return useQuery("HR_GENDER_DETAILS", () => MdmsService.HRGenderType(tenantId, moduleCode ,type), config); + }; + + + switch (type) { + case "GenderType": + return useHRGenders(); + } +}; + + + +export default useHRMSGenderMDMS; \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/hrms/useHRMSGenderMDMS.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/hrms/useHRMSGenderMDMS.js new file mode 100644 index 00000000000..7d7e97b0fbf --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/hrms/useHRMSGenderMDMS.js @@ -0,0 +1,18 @@ +import { useQuery } from "react-query"; +import { MdmsService } from "../../services/elements/MDMS"; + +const useHRMSGenderMDMS = (tenantId, moduleCode, type, config = {}) => { + const useHRGenders = () => { + return useQuery("HR_GENDER_DETAILS", () => MdmsService.HRGenderType(tenantId, moduleCode ,type), config); + }; + + + switch (type) { + case "GenderType": + return useHRGenders(); + } +}; + + + +export default useHRMSGenderMDMS; \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/hrms/useHRMSMDMS.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/hrms/useHRMSMDMS.js new file mode 100644 index 00000000000..6616cbe0889 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/hrms/useHRMSMDMS.js @@ -0,0 +1,25 @@ +import { MdmsService } from "../../services/elements/MDMS"; +import { useQuery } from "react-query"; + +const useHrmsMDMS = (tenantId, moduleCode, type, config = {}) => { + const useHrmsRolesandDesignations = () => { + return useQuery(["HRMS_EMP_RD", tenantId], () => MdmsService.getHrmsEmployeeRolesandDesignation(tenantId), config); + }; + const useHrmsEmployeeTypes = () => { + return useQuery(["HRMS_EMP_TYPE", tenantId], () => MdmsService.getHrmsEmployeeTypes(tenantId, moduleCode, type), config); + }; + + const useHrmsEmployeeReasons = () => { + return useQuery(["HRMS_EMP_REASON", tenantId], () => MdmsService.getHrmsEmployeeReason(tenantId, moduleCode, type), config); + }; + + switch (type) { + case "HRMSRolesandDesignation": + return useHrmsRolesandDesignations(); + case "EmployeeType": + return useHrmsEmployeeTypes(); + case "DeactivationReason": + return useHrmsEmployeeReasons(); + } +}; +export default useHrmsMDMS; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/hrms/useHRMSUpdate.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/hrms/useHRMSUpdate.js new file mode 100644 index 00000000000..509462726b8 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/hrms/useHRMSUpdate.js @@ -0,0 +1,8 @@ +import { useQuery, useMutation } from "react-query"; +import HrmsService from "../../services/elements/HRMS"; + +export const useHRMSUpdate = (tenantId, config = {}) => { + return useMutation((data) => HrmsService.update(data, tenantId)); +}; + +export default useHRMSUpdate; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/hrms/useHRMScreate.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/hrms/useHRMScreate.js new file mode 100644 index 00000000000..85d0af95e90 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/hrms/useHRMScreate.js @@ -0,0 +1,8 @@ +import { useQuery, useMutation } from "react-query"; +import HrmsService from "../../services/elements/HRMS"; + +export const useHRMSCreate = (tenantId, config = {}) => { + return useMutation((data) => HrmsService.create(data, tenantId)); +}; + +export default useHRMSCreate; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/hrms/useHRMSsearch.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/hrms/useHRMSsearch.js new file mode 100644 index 00000000000..77822d3a731 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/hrms/useHRMSsearch.js @@ -0,0 +1,8 @@ +import { useQuery, useQueryClient } from "react-query"; +import HrmsService from "../../services/elements/HRMS"; + +export const useHRMSSearch = (searchparams, tenantId, filters, isupdated, config = {}) => { + return useQuery(["HRMS_SEARCH", searchparams, tenantId, filters, isupdated], () => HrmsService.search(tenantId, filters, searchparams), config); +}; + +export default useHRMSSearch; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/index.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/index.js new file mode 100644 index 00000000000..5f5757283c8 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/index.js @@ -0,0 +1,261 @@ +import { useInitStore } from "./store"; +import useWorkflowDetails from "./workflow"; +import useSessionStorage from "./useSessionStorage"; +import useQueryParams from "./useQueryParams"; +import useClickOutside from "./useClickOutside"; +import { + useFetchPayment, + usePaymentUpdate, + useFetchCitizenBillsForBuissnessService, + useFetchBillsForBuissnessService, + useGetPaymentRulesForBusinessServices, + useDemandSearch, + useRecieptSearch, +} from "./payment"; +import { useUserSearch } from "./userSearch"; +import { useApplicationsForBusinessServiceSearch } from "./useApplicationForBillSearch"; +import useBoundaryLocalities from "./useLocalities"; +import useCommonMDMS from "./useMDMS"; +import useInboxGeneral from "./useInboxGeneral/useInboxGeneral"; +import useApplicationStatusGeneral from "./useStatusGeneral"; +import useModuleTenants from "./useModuleTenants"; +import useStore from "./useStore"; +import { useTenants } from "./useTenants" +import useInbox from "./useInbox" +import useNewInboxGeneral from "./useInboxGeneral/useNewInbox"; + +import useComplaintDetails from "./pgr/useComplaintDetails"; +import { useComplaintsList, useComplaintsListByMobile } from "./pgr/useComplaintList"; +import useComplaintStatus from "./pgr/useComplaintStatus"; +import useComplaintTable from "./pgr/useComplaintTable"; +import useComplaintTypes from "./pgr/useComplaintTypes"; +import useEmployeeFilter from "./pgr/useEmployeeFilter"; +import useInboxData from "./pgr/useInboxData"; +import useLocalities from "./pgr/useLocalities"; +import useServiceDefs from "./pgr/useServiceDefs"; +import usePGRTenants from "./pgr/useTenants"; +import useComplaintSubType from "./pgr/useComplaintSubType"; +import useComplaintStatusCount from "./pgr/useComplaintStatusWithCount"; + +import useTenantsFSM from "./fsm/useTenants"; +import useDesludging from "./fsm/useDesludging"; +import useApplicationStatus from "./fsm/useApplicationStatus"; +import useMDMS from "./fsm/useMDMS"; +import useSearch from "./fsm/useSearch"; +import useSearchAll from "./fsm/useSearchAll"; +import useVehicleSearch from "./fsm/useVehicleSearch"; +import useVehicleUpdate from "./fsm/useVehicleUpdate"; +import useFSMInbox from "./fsm/useInbox"; +import useApplicationUpdate from "./fsm/useApplicationUpdate"; +import useWorkflowData from "./fsm/useWorkflowData"; +import useRouteSubscription from "./fsm/useRouteSubscription"; +import useDsoSearch from "./fsm/useDsoSearch"; +import usePropertySearch from "./pt/usePropertySearch"; +import usePropertyPayment from "./pt/usePropertyPayment"; +import useApplicationDetail from "./fsm/useApplicationDetail"; +import useApplicationActions from "./fsm/useApplicationActions"; +import useApplicationAudit from "./fsm/useApplicationAudit"; +import useSearchForAuditData from "./fsm/useSearchForAudit"; +import useVehiclesSearch from "./fsm/useVehiclesSearch"; +import useConfig from "./fsm/useConfig"; +import useVendorDetail from "./fsm/useVendorDetail"; +import useSlum from "./fsm/useSlum"; +import usePaymentHistory from "./fsm/usePaymentHistory"; + +import useEmployeeSearch from "./useEmployeeSearch"; + +import usePropertyMDMS from "./pt/usePropertyMDMS"; +import usePropertyAPI from "./pt/usePropertyAPI"; +import usePropertyDocumentSearch from "./pt/usePropertyDocumentSearch"; +import useTenantsPT from "./pt/useTenants"; +import usePtApplicationDetail from "./pt/useApplicationDetail"; +import usePtApplicationActions from "./pt/useApplicationActions"; +import usePtMDMS from "./pt/useMDMS"; +import usePropertyAssessment from "./pt/usePropertyAssessment"; +import usePtCalculationEstimate from "./pt/usePtCalculationEstimate"; +import useGenderMDMS from "./pt/useGenderMDMS"; +import usePTGenderMDMS from "./pt/usePTGenderMDMS"; + +import useDssMdms from "./dss/useMDMS"; +import useDashboardConfig from "./dss/useDashboardConfig"; +import useDSSDashboard from "./dss/useDSSDashboard"; +import useGetChart from "./dss/useGetChart"; + +import useMCollectMDMS from "./mcollect/useMCollectMDMS"; +import useMCollectSearch from "./mcollect/useMCollectSearch"; +import useMcollectSearchBill from "./mcollect/useMcollectSearchBill"; +import usemcollectTenants from "./mcollect/useTenants"; +import useMCollectCount from "./mcollect/useMCollectCount"; + +import useTenantsTL from "./tl/useTenants"; +import useTradeLicenseMDMS from "./tl/useTradeLicenseMDMS"; +import useTLDocumentSearch from "./tl/useTLDocumentSearch"; +import useTradeLicenseAPI from "./tl/useTradeLicenseAPI"; +import useTradeLicenseSearch from "./tl/useTradeLicenseSearch"; +import { useTLSearchApplication, useTLApplicationDetails } from "./tl/useTLsearchApplication"; +import useTLPaymentHistory from "./tl/userPaymentHistory"; +import useTLApplicationDetail from "./tl/useApplicationDetail"; +import useTLApplicationActions from "./tl/useApplicationActions"; +import useTLFetchBill from "./tl/useFetchBill"; + +import useTLGenderMDMS from "./tl/useTLGenderMDMS"; +import useTLInbox from "./tl/useInbox"; +import useTradeLicenseBillingslab from "./tl/useTradeLicenseBillingslab"; +import useTLMDMS from "./tl/useMDMS"; +import useTLSearch from "./tl/useSearch"; + +import useHRMSSearch from "./hrms/useHRMSsearch"; +import useHrmsMDMS from "./hrms/useHRMSMDMS"; +import useHRMSCreate from "./hrms/useHRMScreate"; +import useHRMSUpdate from "./hrms/useHRMSUpdate"; +import useHRMSCount from "./hrms/useHRMSCount"; +import useHRMSGenderMDMS from "./hrms/useHRMSGender"; + + +import useReceiptsSearch from "./receipts/useReceiptsSearch"; +import useReceiptsMDMS from "./receipts/useReceiptsMDMS"; +import useReceiptsUpdate from "./receipts/useReceiptsUpdate"; + +const pgr = { + useComplaintDetails, + useComplaintsList, + useComplaintsListByMobile, + useComplaintStatus, + useComplaintTable, + useComplaintTypes, + useEmployeeFilter, + useInboxData, + useLocalities, + useServiceDefs, + useTenants: usePGRTenants, + useComplaintSubType, + usePropertyMDMS, + useComplaintStatusCount, + useTradeLicenseBillingslab +}; + +const fsm = { + useTenants: useTenantsFSM, + useDesludging: useDesludging, + useMDMS: useMDMS, + useSearch, + useRouteSubscription, + useSearchAll, + useInbox: useFSMInbox, + useApplicationUpdate, + useApplicationStatus, + useWorkflowData, + useDsoSearch, + useApplicationDetail, + useApplicationActions, + useApplicationAudit, + useSearchForAuditData, + useVehicleSearch, + useVehicleUpdate, + useVendorDetail, + useVehiclesSearch, + useConfig, + useSlum, + usePaymentHistory, +}; + +const pt = { + usePropertySearch, + usePropertyPayment, + usePropertyMDMS, + usePropertyAPI, + usePropertyDocumentSearch, + useTenants: useTenantsPT, + useApplicationDetail: usePtApplicationDetail, + useApplicationActions: usePtApplicationActions, + useMDMS: usePtMDMS, + usePropertyAssessment, + usePtCalculationEstimate, + useGenderMDMS, + usePTGenderMDMS, +}; + +const dss = { + useMDMS: useDssMdms, + useDashboardConfig, + useDSSDashboard, + useGetChart, +}; + +const mcollect = { + useMCollectMDMS, + useMCollectSearch, + useMcollectSearchBill, + usemcollectTenants, + useMCollectCount +}; + +const hrms = { + useHRMSSearch, + useHrmsMDMS, + useHRMSCreate, + useHRMSUpdate, + useHRMSCount, + useHRMSGenderMDMS +}; +const tl = { + useTenants: useTenantsTL, + useTradeLicenseMDMS, + useTLDocumentSearch, + useTradeLicenseAPI, + useTLSearchApplication, + useTLPaymentHistory, + useTradeLicenseSearch, + useTLGenderMDMS, + useTradeLicenseBillingslab, + useInbox:useTLInbox, + useMDMS: useTLMDMS, + useSearch: useTLSearch, + useApplicationDetail: useTLApplicationDetail, + useApplicationActions: useTLApplicationActions, + useFetchBill: useTLFetchBill, + useTLApplicationDetails +}; + +const receipts = { + useReceiptsMDMS, + useReceiptsSearch, + useReceiptsUpdate, +}; + +const Hooks = { + useSessionStorage, + useQueryParams, + useFetchPayment, + usePaymentUpdate, + useFetchCitizenBillsForBuissnessService, + useFetchBillsForBuissnessService, + useGetPaymentRulesForBusinessServices, + useWorkflowDetails, + useInitStore, + useClickOutside, + useUserSearch, + useApplicationsForBusinessServiceSearch, + useDemandSearch, + useInboxGeneral, + useEmployeeSearch, + useBoundaryLocalities, + useCommonMDMS, + useApplicationStatusGeneral, + useModuleTenants, + useRecieptSearch, + useNewInboxGeneral, + useStore, + useTenants, + useInbox: useTLInbox, + pgr, + fsm, + pt, + dss, + mcollect, + hrms, + tl, + receipts +}; + +export default Hooks; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/mcollect/useMCollectCount.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/mcollect/useMCollectCount.js new file mode 100644 index 00000000000..5bfe64cb992 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/mcollect/useMCollectCount.js @@ -0,0 +1,7 @@ +import { useQuery, useQueryClient } from "react-query"; + +const useMCollectCount = (tenantId, config = {}) => { + return useQuery(["MCOLLECT_COUNT", tenantId], () => Digit.MCollectService.count(tenantId), config); +}; + +export default useMCollectCount; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/mcollect/useMCollectMDMS.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/mcollect/useMCollectMDMS.js new file mode 100644 index 00000000000..9f40b3b2cd1 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/mcollect/useMCollectMDMS.js @@ -0,0 +1,20 @@ +import { useQuery } from "react-query"; +import { MdmsService } from "../../services/elements/MDMS"; + +const useMCollectMDMS = (tenantId, moduleCode, type, filter, config = {}) => { + const useMCollectBillingService = () => { + return useQuery("MCOLLECT_BILLING_SERVICE", () => MdmsService.getMCollectBillingService(tenantId, moduleCode, type, filter), config); + }; + const useMCollectApplcationStatus = () => { + return useQuery("MCOLLECT_APPLICATION_STATUS", () => MdmsService.getMCollectApplcationStatus(tenantId, moduleCode, type, filter), config); + }; + + switch (type) { + case "BusinessService": + return useMCollectBillingService(); + case "applicationStatus": + return useMCollectApplcationStatus(); + } +}; + +export default useMCollectMDMS; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/mcollect/useMCollectSearch.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/mcollect/useMCollectSearch.js new file mode 100644 index 00000000000..aac81e64f49 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/mcollect/useMCollectSearch.js @@ -0,0 +1,26 @@ +import { useQuery, useQueryClient } from "react-query"; + +const useMCollectSearch = ({ tenantId, filters, isMcollectAppChanged }, config = {}) => { + if (filters.status && filters.status.length > 0) { + filters.status = filters.status.toString(); + } else if (filters.status && filters.status.length === 0) { + delete filters.status; + } + + if (filters.businessService && filters.businessService.length > 0) { + filters.businessService = filters.businessService.toString(); + } else if (filters.businessService && filters.businessService.length === 0) { + delete filters.businessService; + } + + const client = useQueryClient(); + const args = tenantId ? { tenantId, filters } : { filters }; + const { isLoading, error, data } = useQuery( + ["mCollectSearchList", tenantId, filters, isMcollectAppChanged], + () => Digit.MCollectService.search(args), + config + ); + return { isLoading, error, data, revalidate: () => client.invalidateQueries(["propertySearchList", tenantId, filters]) }; +}; + +export default useMCollectSearch; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/mcollect/useMcollectSearchBill.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/mcollect/useMcollectSearchBill.js new file mode 100644 index 00000000000..5ec62b9739f --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/mcollect/useMcollectSearchBill.js @@ -0,0 +1,10 @@ +import { useQuery, useQueryClient } from "react-query"; + +const useMcollectSearchBill = ({ tenantId, filters }, config = {}) => { + const client = useQueryClient(); + const args = tenantId ? { tenantId, filters } : { filters }; + const { isLoading, error, data } = useQuery(["billSearchList", tenantId, filters], () => Digit.MCollectService.search_bill(args), config); + return { isLoading, error, data, revalidate: () => client.invalidateQueries(["billSearchList", tenantId, filters]) }; +}; + +export default useMcollectSearchBill; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/mcollect/useTenants.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/mcollect/useTenants.js new file mode 100644 index 00000000000..da3317bcda7 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/mcollect/useTenants.js @@ -0,0 +1,13 @@ +import React, { useEffect, useState } from "react"; + +const usemcollectTenants = () => { + const tenantInfo = Digit.SessionStorage.get("MCollect_TENANTS"); + // console.log("tenantInfo", tenantInfo); + const [tenants, setTenants] = useState(tenantInfo ? tenantInfo : null); + // useEffect(() => { + // setTenants(tenantInfo.filter((tenant) => tenant.type === "CITY")); + // }, [tenantInfo]); + return tenants; +}; + +export default usemcollectTenants; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/payment.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/payment.js new file mode 100644 index 00000000000..f0bb360a371 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/payment.js @@ -0,0 +1,115 @@ +import { useQuery, useQueryClient } from "react-query"; + +export const useFetchCitizenBillsForBuissnessService = ({ businessService, ...filters }, config = {}) => { + const queryClient = useQueryClient(); + const { mobileNumber, tenantId } = Digit.UserService.getUser()?.info || {}; + + const params = { mobileNumber, businessService, ...filters }; + + if (!params["mobileNumber"]) delete params["mobileNumber"]; + + const { isLoading, error, isError, data, status } = useQuery( + ["citizenBillsForBuisnessService", businessService, { ...params }], + () => Digit.PaymentService.fetchBill(tenantId, { ...params }), + { + refetchOnMount: true, + // retry: (failureCount, error) => { + // console.log("retried from hook"); + // if (error?.response?.data?.Errors?.[0]?.code === "EG_BS_BILL_NO_DEMANDS_FOUND") return false; + // else return failureCount < 1; + // }, + retry: false, + ...config, + } + ); + return { + isLoading, + error, + isError, + data, + status, + revalidate: () => queryClient.invalidateQueries(["citizenBillsForBuisnessService", businessService]), + }; +}; + +export const useFetchBillsForBuissnessService = ({ tenantId, businessService, ...filters }, config = {}) => { + const queryClient = useQueryClient(); + let isPTAccessDone = sessionStorage.getItem("IsPTAccessDone"); + const params = { businessService, ...filters }; + + const _tenantId = tenantId || Digit.UserService.getUser()?.info?.tenantId; + + const { isLoading, error, isError, data, status } = useQuery( + ["billsForBuisnessService", businessService, { ...filters }, config,isPTAccessDone], + () => Digit.PaymentService.fetchBill(_tenantId, params), + { + retry: (count, err) => { + console.log(err, "inside the payment hook"); + return false; + }, + ...config, + } + ); + return { + isLoading, + error, + isError, + data, + status, + revalidate: () => queryClient.invalidateQueries(["billsForBuisnessService", businessService]), + }; +}; + +export const useFetchPayment = ({ tenantId, consumerCode, businessService }, config) => { + const queryClient = useQueryClient(); + + const fetchBill = async () => { + return Digit.PaymentService.fetchBill(tenantId, { consumerCode, businessService }); + }; + + const retry = (failureCount, error) => { + if (error?.response?.data?.Errors?.[0]?.code === "EG_BS_BILL_NO_DEMANDS_FOUND") return false; + else return failureCount < 3; + }; + + const queryData = useQuery(["paymentFetchDetails", tenantId, consumerCode, businessService], () => fetchBill(), { retry, ...config }); + + return { + ...queryData, + revalidate: () => queryClient.invalidateQueries(["paymentFetchDetails", tenantId, consumerCode, businessService]), + }; +}; + +export const usePaymentUpdate = ({ egId }, businessService, config) => { + const getPaymentData = async (egId) => { + const transaction = await Digit.PaymentService.updateCitizenReciept(egId); + const payments = await Digit.PaymentService.getReciept(transaction.Transaction[0].tenantId, businessService, { + consumerCodes: transaction.Transaction[0].consumerCode, + }); + return { payments, applicationNo: transaction.Transaction[0].consumerCode, txnStatus: transaction.Transaction[0].txnStatus }; + }; + + return useQuery(["paymentUpdate", egId], () => getPaymentData(egId), config); +}; + +export const useGetPaymentRulesForBusinessServices = (tenantId) => { + return useQuery(["getPaymentRules", tenantId], () => Digit.MDMSService.getPaymentRules(tenantId)); +}; + +export const useDemandSearch = ({ consumerCode, businessService, tenantId }, config = {}) => { + if (!tenantId) tenantId = Digit.ULBService.getCurrentTenantId(); + const queryFn = () => Digit.PaymentService.demandSearch(tenantId, consumerCode, businessService); + const queryData = useQuery(["demand_search", { consumerCode, businessService, tenantId }], queryFn, { refetchOnMount: "always", ...config }); + return queryData; +}; + +export const useRecieptSearch = ({ tenantId, businessService, ...params }, config = {}) => { + return useQuery( + ["reciept_search", { tenantId, businessService, params }], + () => Digit.PaymentService.recieptSearch(tenantId, businessService, params), + { + refetchOnMount: false, + ...config, + } + ); +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useComplaintDetails.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useComplaintDetails.js new file mode 100644 index 00000000000..58fe2a1ba12 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useComplaintDetails.js @@ -0,0 +1,78 @@ +import { useQuery, useQueryClient } from "react-query"; + +// TODO: move to service +const getThumbnails = async (ids, tenantId) => { + const res = await Digit.UploadServices.Filefetch(ids, tenantId); + if (res.data.fileStoreIds && res.data.fileStoreIds.length !== 0) { + return { thumbs: res.data.fileStoreIds.map((o) => o.url.split(",")[3]), images: res.data.fileStoreIds.map((o) => o.url.split(",")[1]) }; + } else { + return null; + } +}; + +const getDetailsRow = ({ id, service, complaintType }) => ({ + CS_COMPLAINT_DETAILS_COMPLAINT_NO: id, + CS_COMPLAINT_DETAILS_APPLICATION_STATUS: `CS_COMMON_${service.applicationStatus}`, + CS_ADDCOMPLAINT_COMPLAINT_TYPE: complaintType === "" ? `SERVICEDEFS.OTHERS` : `SERVICEDEFS.${complaintType}`, + CS_ADDCOMPLAINT_COMPLAINT_SUB_TYPE: `SERVICEDEFS.${service.serviceCode.toUpperCase()}`, + CS_COMPLAINT_ADDTIONAL_DETAILS: service.description, + CS_COMPLAINT_FILED_DATE: Digit.DateUtils.ConvertTimestampToDate(service.auditDetails.createdTime), + ES_CREATECOMPLAINT_ADDRESS: [ + service.address.landmark, + Digit.Utils.locale.getLocalityCode(service.address.locality, service.tenantId), + service.address.city, + service.address.pincode, + ], +}); + +const isEmptyOrNull = (obj) => obj === undefined || obj === null || Object.keys(obj).length === 0; + +const transformDetails = ({ id, service, workflow, thumbnails, complaintType }) => { + const { Customizations, SessionStorage } = window.Digit; + // console.log("find customizations here", Customizations, SessionStorage); + const role = (SessionStorage.get("user_type") || "CITIZEN").toUpperCase(); + const customDetails = Customizations?.PGR?.getComplaintDetailsTableRows + ? Customizations.PGR.getComplaintDetailsTableRows({ id, service, role }) + : {}; + return { + details: !isEmptyOrNull(customDetails) ? customDetails : getDetailsRow({ id, service, complaintType }), + thumbnails: thumbnails?.thumbs, + images: thumbnails?.images, + workflow: workflow, + service, + audit: { + citizen: service.citizen, + details: service.auditDetails, + source: service.source, + rating: service.rating, + serviceCode: service.serviceCode, + }, + service: service, + }; +}; + +const fetchComplaintDetails = async (tenantId, id) => { + var serviceDefs = await Digit.MDMSService.getServiceDefs(tenantId, "PGR"); + const { service, workflow } = (await Digit.PGRService.search(tenantId, { serviceRequestId: id })).ServiceWrappers[0] || {}; + Digit.SessionStorage.set("complaintDetails", { service, workflow }); + if (service && workflow && serviceDefs) { + const complaintType = serviceDefs.filter((def) => def.serviceCode === service.serviceCode)[0].menuPath.toUpperCase(); + const ids = workflow.verificationDocuments + ? workflow.verificationDocuments.filter((doc) => doc.documentType === "PHOTO").map((photo) => photo.fileStoreId || photo.id) + : null; + const thumbnails = ids ? await getThumbnails(ids, service.tenantId) : null; + const details = transformDetails({ id, service, workflow, thumbnails, complaintType }); + return details; + } else { + console.log("error fetching complaint details or service defs"); + return {}; + } +}; + +const useComplaintDetails = ({ tenantId, id }) => { + const queryClient = useQueryClient(); + const { isLoading, error, data } = useQuery(["complaintDetails", tenantId, id], () => fetchComplaintDetails(tenantId, id)); + return { isLoading, error, complaintDetails: data, revalidate: () => queryClient.invalidateQueries(["complaintDetails", tenantId, id]) }; +}; + +export default useComplaintDetails; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useComplaintList.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useComplaintList.js new file mode 100644 index 00000000000..33f3a5c23bb --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useComplaintList.js @@ -0,0 +1,12 @@ +import { useQuery, useQueryClient } from "react-query"; + +export const useComplaintsList = (tenantId, filters) => { + // TODO: move city to state + const client = useQueryClient(); + const { isLoading, error, data } = useQuery(["complaintsList", filters], () => Digit.PGRService.search(tenantId, filters), {}); + return { isLoading, error, data, revalidate: () => client.invalidateQueries(["complaintsList", filters]) }; +}; + +export const useComplaintsListByMobile = (tenantId, mobileNumber) => { + return useComplaintsList(tenantId, { mobileNumber }); +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useComplaintStatus.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useComplaintStatus.js new file mode 100644 index 00000000000..f75ec847554 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useComplaintStatus.js @@ -0,0 +1,31 @@ +import React, { useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; + +const useComplaintStatus = () => { + const { t } = useTranslation(); + const [complaintStatus, setComplaintStatus] = useState([]); + const tenantId = Digit.ULBService.getCurrentTenantId(); + + useEffect(() => { + let WorkflowService = null; + // const user = Digit.UserService.getUser(); + // const tenantId = user?.info?.tenantId; + (async () => { + // let stateCode = + // Digit.SessionStorage.get("userType") == "employee" + // ? Digit.SessionStorage.get("Employee.tenantId") + // : Digit.SessionStorage.get("Citizen.tenantId"); + WorkflowService = await Digit.WorkflowService.init(tenantId, "PGR"); + let applicationStatus = WorkflowService.BusinessServices[0].states + .filter((state) => state.applicationStatus) + .map((state) => ({ + name: t(`CS_COMMON_${state.applicationStatus}`), + code: state.applicationStatus, + })); + setComplaintStatus(applicationStatus); + })(); + }, [t, tenantId]); + + return complaintStatus; +}; +export default useComplaintStatus; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useComplaintStatusWithCount.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useComplaintStatusWithCount.js new file mode 100644 index 00000000000..c2337fcf21f --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useComplaintStatusWithCount.js @@ -0,0 +1,27 @@ +import { useEffect, useState } from "react"; +import useComplaintStatus from "./useComplaintStatus"; + +const useComplaintStatusCount = (complaints) => { + const [complaintStatusWithCount, setcomplaintStatusWithCount] = useState([]); + let complaintStatus = useComplaintStatus(); + let tenantId = Digit.ULBService.getCurrentTenantId(); + + const getCount = async (value) => { + let response = await Digit.PGRService.count(tenantId, { applicationStatus: value }); + return response?.count || ""; + }; + + useEffect(() => { + let getStatusWithCount = async () => { + let statusWithCount = complaintStatus.map(async (status) => ({ + ...status, + count: await getCount(status.code), + })); + setcomplaintStatusWithCount(await Promise.all(statusWithCount)); + }; + getStatusWithCount(); + }, [complaints, complaintStatus]); + return complaintStatusWithCount; +}; + +export default useComplaintStatusCount; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useComplaintSubType.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useComplaintSubType.js new file mode 100644 index 00000000000..e9552e6b3d5 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useComplaintSubType.js @@ -0,0 +1,19 @@ +import React, { useEffect, useState } from "react"; + +const useComplaintSubType = (complaintType, t) => { + const [subTypeMenu, setSubTypeMenu] = useState([]); + + useEffect(() => { + (async () => { + // console.log("find complaintType here", complaintType); + if (complaintType) { + const menu = await Digit.GetServiceDefinitions.getSubMenu(Digit.ULBService.getCurrentTenantId(), complaintType, t); + setSubTypeMenu(menu); + } + })(); + }, [complaintType]); + + return subTypeMenu; +}; + +export default useComplaintSubType; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useComplaintTable.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useComplaintTable.js new file mode 100644 index 00000000000..9716bb3415b --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useComplaintTable.js @@ -0,0 +1,23 @@ +import React, { useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; + +const useComplaintTable = ({ data }) => { + const { t } = useTranslation(); + const [details, setDetails] = useState([]); + + useEffect(() => { + const details = { + CS_COMPLAINT_DETAILS_COMPLAINT_NO: data.serviceRequestId, + CS_COMPLAINT_DETAILS_COMPLAINT_SUBTYPE: t(data.complaintSubType), + CS_COMPLAINT_DETAILS_APPLICATION_STATUS: data.applicationStatus, + CS_COMPLAINT_DETAILS_LOCALITY: t(data.locality), + CS_COMPLAINT_DETAILS_TASK_OWNER: "task owner", + CS_COMPLAINT_SLA_REMAINING: "", + }; + setDetails(details); + }, []); + + return details; +}; + +export default useComplaintTable; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useComplaintTypes.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useComplaintTypes.js new file mode 100644 index 00000000000..6110a9549d7 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useComplaintTypes.js @@ -0,0 +1,20 @@ +import React, { useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; + +const useComplaintTypes = ({ stateCode }) => { + const [complaintTypes, setComplaintTypes] = useState(null); + const { t } = useTranslation(); + + useEffect(() => { + (async () => { + const res = await Digit.GetServiceDefinitions.getMenu(stateCode, t); + let menu = res.filter((o) => o.key !== ""); + menu.push({ key: "Others", name: t("SERVICEDEFS.OTHERS") }); + setComplaintTypes(menu); + })(); + }, [t, stateCode]); + + return complaintTypes; +}; + +export default useComplaintTypes; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useEmployeeFilter.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useEmployeeFilter.js new file mode 100644 index 00000000000..d8fecdbc5d6 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useEmployeeFilter.js @@ -0,0 +1,37 @@ +import React, { useState, useEffect } from "react"; +import { useTranslation } from "react-i18next"; + +const useEmployeeFilter = (tenantId, roles, complaintDetails) => { + const [employeeDetails, setEmployeeDetails] = useState(null); + const { t } = useTranslation(); + useEffect(() => { + (async () => { + // const _roles = roles.join(","); + const searchResponse = await Digit.PGRService.employeeSearch(tenantId, roles); + + const serviceDefs = await Digit.MDMSService.getServiceDefs(tenantId, "PGR"); + const serviceCode = complaintDetails.service.serviceCode; + const service = serviceDefs?.find((def) => def.serviceCode === serviceCode); + // console.log("find service service details here", service, searchResponse.Employees) + const department = service?.department; + const employees = searchResponse.Employees.filter((employee) => + employee.assignments.map((assignment) => assignment.department).includes(department) + ); + + // console.log("useEMployeefilter", employees, searchResponse); + //emplpoyess data sholld only conatin name uuid dept + setEmployeeDetails([ + { + department: t(`COMMON_MASTERS_DEPARTMENT_${department}`), + employees: employees.map((employee) => { + return { uuid: employee.user.uuid, name: employee.user.name }; + }), + }, + ]); + })(); + }, [tenantId, roles, t, complaintDetails]); + + return employeeDetails; +}; + +export default useEmployeeFilter; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useInboxData.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useInboxData.js new file mode 100644 index 00000000000..884dd96e9c3 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useInboxData.js @@ -0,0 +1,62 @@ +import { useQuery, useQueryClient } from "react-query"; + +const useInboxData = (searchParams) => { + const client = useQueryClient(); + // const [complaintList, setcomplaintList] = useState([]); + // const user = Digit.UserService.getUser(); + // const tenantId = user?.info?.tenantId; + + // console.log("find search params here", searchParams); + + const fetchInboxData = async () => { + const tenantId = Digit.ULBService.getCurrentTenantId(); + let serviceIds = []; + let commonFilters = { start: 1, end: 10 }; + const { limit, offset } = searchParams; + let appFilters = { ...commonFilters, ...searchParams.filters.pgrQuery, ...searchParams.search, limit, offset }; + let wfFilters = { ...commonFilters, ...searchParams.filters.wfQuery }; + let complaintDetailsResponse = null; + let combinedRes = []; + complaintDetailsResponse = await Digit.PGRService.search(tenantId, appFilters); + complaintDetailsResponse.ServiceWrappers.forEach((service) => serviceIds.push(service.service.serviceRequestId)); + const serviceIdParams = serviceIds.join(); + const workflowInstances = await Digit.WorkflowService.getByBusinessId(tenantId, serviceIdParams, wfFilters, false); + if (workflowInstances.ProcessInstances.length) { + combinedRes = combineResponses(complaintDetailsResponse, workflowInstances).map((data) => ({ + ...data, + sla: Math.round(data.sla / (24 * 60 * 60 * 1000)), + })); + } + return combinedRes; + }; + + const result = useQuery(["fetchInboxData", + ...Object.keys(searchParams).map(i => + typeof searchParams[i] === "object" ? Object.keys(searchParams[i]).map(e => searchParams[i][e]) : searchParams[i] + )], + fetchInboxData, + { staleTime: Infinity } + ); + return { ...result, revalidate: () => client.refetchQueries(["fetchInboxData"]) }; +}; + +const mapWfBybusinessId = (wfs) => { + return wfs.reduce((object, item) => { + return { ...object, [item["businessId"]]: item }; + }, {}); +}; + +const combineResponses = (complaintDetailsResponse, workflowInstances) => { + let wfMap = mapWfBybusinessId(workflowInstances.ProcessInstances); + return complaintDetailsResponse.ServiceWrappers.map((complaint) => ({ + serviceRequestId: complaint.service.serviceRequestId, + complaintSubType: complaint.service.serviceCode, + locality: complaint.service.address.locality.code, + status: complaint.service.applicationStatus, + taskOwner: wfMap[complaint.service.serviceRequestId]?.assigner?.name, + sla: wfMap[complaint.service.serviceRequestId]?.businesssServiceSla, + tenantId: complaint.service.tenantId, + })); +}; + +export default useInboxData; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useLocalities.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useLocalities.js new file mode 100644 index 00000000000..560f0823fe8 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useLocalities.js @@ -0,0 +1,34 @@ +import React, { useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; + +const useLocalities = ({ city }) => { + const { t } = useTranslation(); + let locality = []; + const [localityList, setLocalityList] = useState(null); + const [localities, setLocalities] = useState(null); + useEffect(() => { + (async () => { + let tenantId = Digit.ULBService.getCurrentTenantId(); + let response = await Digit.LocationService.getLocalities(tenantId); + let __localityList = []; + if (response && response.TenantBoundary.length > 0) { + __localityList = Digit.LocalityService.get(response.TenantBoundary[0]); + } + setLocalityList(__localityList); + })(); + }, [city]); + + useEffect(() => { + if (localityList) { + const __localities = localityList; + __localities.forEach((element) => { + locality.push({ name: t(element.code), code: element.code }); + }); + setLocalities(locality); + } + }, [localityList]); + + return localities; +}; + +export default useLocalities; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useServiceDefs.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useServiceDefs.js new file mode 100644 index 00000000000..7309c9bec88 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useServiceDefs.js @@ -0,0 +1,24 @@ +import { useTranslation } from "react-i18next"; + +const { useState, useEffect } = require("react"); + +const useServiceDefs = (tenantId, moduleCode) => { + const [localMenu, setLocalMenu] = useState([]); + const SessionStorage = Digit.SessionStorage; + let { t } = useTranslation(); + + useEffect(() => { + (async () => { + const serviceDefs = await Digit.MDMSService.getServiceDefs(tenantId, moduleCode); + SessionStorage.set("serviceDefs", serviceDefs); + + const serviceDefsWithKeys = serviceDefs.map((def) => ({ ...def, i18nKey: t("SERVICEDEFS." + def.serviceCode.toUpperCase()) })); + // console.log("find serviceDefs here", serviceDefsWithKeys); + setLocalMenu(serviceDefsWithKeys); + })(); + }, [t, tenantId, moduleCode]); + + return localMenu; +}; + +export default useServiceDefs; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useTenants.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useTenants.js new file mode 100644 index 00000000000..011832f0f23 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pgr/useTenants.js @@ -0,0 +1,13 @@ +import React, { useEffect, useState } from "react"; + +const useTenants = () => { + const tenantInfo = Digit.SessionStorage.get("PGR_TENANTS"); + // console.log("tenantInfo", tenantInfo); + const [tenants, setTenants] = useState(tenantInfo ? tenantInfo : null); + // useEffect(() => { + // setTenants(tenantInfo.filter((tenant) => tenant.type === "CITY")); + // }, [tenantInfo]); + return tenants; +}; + +export default useTenants; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/useApplicationActions.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/useApplicationActions.js new file mode 100644 index 00000000000..b49981c0a19 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/useApplicationActions.js @@ -0,0 +1,8 @@ +import { useMutation } from "react-query"; +import ApplicationUpdateActions from "../../services/molecules/PT/ApplicationUpdateActions"; + +const useApplicationActions = (tenantId) => { + return useMutation((applicationData) => ApplicationUpdateActions(applicationData, tenantId)); +}; + +export default useApplicationActions; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/useApplicationDetail.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/useApplicationDetail.js new file mode 100644 index 00000000000..889369e1645 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/useApplicationDetail.js @@ -0,0 +1,28 @@ +import { PTSearch } from "../../services/molecules/PT/Search"; +import { useQuery } from "react-query"; + +const useApplicationDetail = (t, tenantId, propertyIds, config = {}, userType, args) => { + const defaultSelect = (data) => { + let applicationDetails = data.applicationDetails.map((obj) => { + const { additionalDetails, title } = obj; + if (title === "PT_OWNERSHIP_INFO_SUB_HEADER") { + additionalDetails.owners = additionalDetails.owners.filter((e) => e.status === "ACTIVE"); + const values = additionalDetails.documents[0]?.values?.filter((e) => e.status === "ACTIVE"); + additionalDetails.documents[0] = { ...additionalDetails.documents[0], values }; + return { ...obj, additionalDetails }; + } + return obj; + }); + data.applicationData.units=data?.applicationData?.units?.filter(unit=>unit?.active)||[]; + return { ...data, applicationDetails }; + }; + + return useQuery( + ["APPLICATION_SEARCH", "PT_SEARCH", propertyIds, userType, args], + () => PTSearch.applicationDetails(t, tenantId, propertyIds, userType, args), + { select: defaultSelect, ...config } + // config + ); +}; + +export default useApplicationDetail; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/useGenderMDMS.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/useGenderMDMS.js new file mode 100644 index 00000000000..5dffd8c6443 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/useGenderMDMS.js @@ -0,0 +1,18 @@ +import { useQuery } from "react-query"; +import { MdmsService } from "../../services/elements/MDMS"; + +const useGenderMDMS = (tenantId, moduleCode, type, config = {}) => { + const useGenderDetails = () => { + return useQuery("PT_GENDER_DETAILS", () => MdmsService.getGenderType(tenantId, moduleCode ,type), config); + }; + + + switch (type) { + case "GenderType": + return useGenderDetails(); + } +}; + + + +export default useGenderMDMS; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/useMDMS.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/useMDMS.js new file mode 100644 index 00000000000..c80d1d12f0e --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/useMDMS.js @@ -0,0 +1,31 @@ +import { MdmsService, getGeneralCriteria } from "../../services/elements/MDMS"; +import { useQuery } from "react-query"; + +const useMDMS = (tenantId, moduleCode, type, config = {}, payload = []) => { + const useFinancialYears = () => { + return useQuery("PT_FINANCIAL_YEARLS", () => MdmsService.getDataByCriteria(tenantId, payload, moduleCode)); + }; + + const usePropertyTaxDocuments = () => { + return useQuery("PT_PROPERTY_TAX_DOCUMENTS", () => MdmsService.getDataByCriteria(tenantId, payload, moduleCode)); + }; + + /*const useGenderDetails = () => { + return useQuery("PT_GENDER_DETAILS", () => MdmsService.getGenderTypeDetails(tenantId, type, filter), config); + };*/ + + switch (type) { + case "FINANCIAL_YEARLS": + return useFinancialYears(); + case "PROPERTY_TAX_DOCUMENTS": + return usePropertyTaxDocuments(); + + /*case "GenderType": + return useGenderDetails();*/ + + default: + return useQuery(type, () => MdmsService.getDataByCriteria(tenantId, getGeneralCriteria(tenantId, moduleCode, type), moduleCode), config); + } +}; + +export default useMDMS; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePTGenderMDMS.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePTGenderMDMS.js new file mode 100644 index 00000000000..10bd1cd63f4 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePTGenderMDMS.js @@ -0,0 +1,18 @@ +import { useQuery } from "react-query"; +import { MdmsService } from "../../services/elements/MDMS"; + +const usePTGenderMDMS = (tenantId, moduleCode, type, config = {}) => { + const usePTGenders = () => { + return useQuery("PT_FORM_GENDER_DETAILS", () => MdmsService.PTGenderType(tenantId, moduleCode ,type), config); + }; + + + switch (type) { + case "GenderType": + return usePTGenders(); + } +}; + + + +export default usePTGenderMDMS; \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePropertyAPI.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePropertyAPI.js new file mode 100644 index 00000000000..6b916b0a294 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePropertyAPI.js @@ -0,0 +1,12 @@ +import { PTService } from "../../services/elements/PT"; +import { useMutation } from "react-query"; + +const usePropertyAPI = (tenantId, type = true) => { + if (type) { + return useMutation((data) => PTService.create(data, tenantId)); + } else { + return useMutation((data) => PTService.update(data, tenantId)); + } +}; + +export default usePropertyAPI; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePropertyAssessment.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePropertyAssessment.js new file mode 100644 index 00000000000..bc670b5a934 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePropertyAssessment.js @@ -0,0 +1,8 @@ +import { PTService } from "../../services/elements/PT"; +import { useMutation } from "react-query"; + +const usePropertyAssessment = (tenantId, config = {}) => { + return useMutation((data) => PTService.assessmentCreate(data, tenantId)); +}; + +export default usePropertyAssessment; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePropertyDocumentSearch.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePropertyDocumentSearch.js new file mode 100644 index 00000000000..2fd29d79283 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePropertyDocumentSearch.js @@ -0,0 +1,13 @@ +import { useQuery, useQueryClient } from "react-query"; + +const usePropertyDocumentSearch = ({ property }, config = {}) => { + const client = useQueryClient(); + const tenantId = property?.tenantId || Digit.ULBService.getCurrentTenantId(); + const tenant = tenantId.split(".")[0]; + const propertyId = property?.propertyId; + const filesArray = property?.documents?.map((value) => value?.fileStoreId); + const { isLoading, error, data } = useQuery([`ptDocuments-${propertyId}`, filesArray], () => Digit.UploadServices.Filefetch(filesArray, tenant)); + return { isLoading, error, data: { pdfFiles: data?.data }, revalidate: () => client.invalidateQueries([`ptDocuments-${propertyId}`, filesArray]) }; +}; + +export default usePropertyDocumentSearch; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePropertyMDMS.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePropertyMDMS.js new file mode 100644 index 00000000000..34771d1b269 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePropertyMDMS.js @@ -0,0 +1,61 @@ +import { MdmsService } from "../../services/elements/MDMS"; +import { useQuery } from "react-query"; + +const usePropertyMDMS = (tenantId, moduleCode, type, config = {}) => { + const usePropertyOwnerType = () => { + return useQuery("PT_OWNERSHIP_CATEGORY", () => MdmsService.getPropertyOwnerType(tenantId, moduleCode, type), config); + }; + const usePropertyOwnerShipCategory = () => { + return useQuery("PT_OWNER_TYPE", () => MdmsService.getPropertyOwnerShipCategory(tenantId, moduleCode, type), config); + }; + const useSubOwnerShipCategory = () => { + return useQuery("PT_SUB_OWNERSHIP_CATEGORY", () => MdmsService.getPropertySubOwnerShipCategory(tenantId, moduleCode, type), config); + }; + const useDocumentRequiredScreen = () => { + return useQuery("PT_DOCUMENT_REQ_SCREEN", () => MdmsService.getDocumentRequiredScreen(tenantId, moduleCode), config); + }; + const useUsageCategory = () => { + return useQuery("PT_USAGE_CATEGORY", () => MdmsService.getUsageCategory(tenantId, moduleCode, type), config); + }; + const usePTPropertyType = () => { + return useQuery("PT_PROPERTY_TYPE", () => MdmsService.getPTPropertyType(tenantId, moduleCode, type), config); + }; + const useRentalDetails = () => { + return useQuery("PT_RENTAL_DETAILS", () => MdmsService.getRentalDetails(tenantId, moduleCode), config); + }; + const useFloorList = () => { + return useQuery("PT_FLOOR_LIST", () => MdmsService.getFloorList(tenantId, moduleCode), config); + }; + const useMapConfig = () => { + return useQuery("PT_MAP_CONFIG", () => MdmsService.getMapConfig(tenantId, moduleCode), config); + }; + + const _default = () => { + return useQuery([tenantId, moduleCode, type], () => MdmsService.getMultipleTypes(tenantId, moduleCode, type), config); + }; + + switch (type) { + case "OwnerShipCategory": + return usePropertyOwnerShipCategory(); + case "OwnerType": + return usePropertyOwnerType(); + case "SubOwnerShipCategory": + return useSubOwnerShipCategory(); + case "Documents": + return useDocumentRequiredScreen(); + case "UsageCategory": + return useUsageCategory(); + case "PTPropertyType": + return usePTPropertyType(); + case "RentalDetails": + return useRentalDetails(); + case "Floor": + return useFloorList(); + case "MapConfig": + return useMapConfig(); + default: + return _default(); + } +}; + +export default usePropertyMDMS; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePropertyPayment.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePropertyPayment.js new file mode 100644 index 00000000000..10d50c5efcf --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePropertyPayment.js @@ -0,0 +1,13 @@ +import { useQuery, useQueryClient } from "react-query"; + +const usePropertyPayment = ({ tenantId, consumerCodes }) => { + const client = useQueryClient(); + const { isLoading, error, data } = useQuery( + ["propertyPaymentList", tenantId, consumerCodes], + () => Digit.PTService.fetchPaymentDetails({ tenantId, consumerCodes }), + {} + ); + return { isLoading, error, data, revalidate: () => client.invalidateQueries(["propertyPaymentList", tenantId, consumerCodes]) }; +}; + +export default usePropertyPayment; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePropertySearch.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePropertySearch.js new file mode 100644 index 00000000000..eea7e202df9 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePropertySearch.js @@ -0,0 +1,28 @@ +import { useQuery, useQueryClient } from "react-query"; + +const usePropertySearch = ({ tenantId, filters, auth,searchedFrom="" }, config = {}) => { + const client = useQueryClient(); + + const args = tenantId ? { tenantId, filters, auth } : { filters, auth }; + + const defaultSelect = (data) => { + data.Properties[0].units = data.Properties[0].units || []; + data.Properties[0].units = data.Properties[0].units.filter((unit) => unit.active); + data.Properties[0].owners = data.Properties[0].owners || []; + if(searchedFrom=="myPropertyCitizen"){ + data.Properties.map(property=>{ + property.owners =property.owners.filter((owner) => owner.status ===(property.creationReason=="MUTATION" ?"INACTIVE": "ACTIVE")); + }) + } + return data; + }; + + const { isLoading, error, data } = useQuery(["propertySearchList", tenantId, filters, auth], () => Digit.PTService.search(args), { + select: defaultSelect, + ...config, + }); + + return { isLoading, error, data, revalidate: () => client.invalidateQueries(["propertySearchList", tenantId, filters, auth]) }; +}; + +export default usePropertySearch; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePtCalculationEstimate.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePtCalculationEstimate.js new file mode 100644 index 00000000000..45ff7b64a84 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/usePtCalculationEstimate.js @@ -0,0 +1,8 @@ +import { PTService } from "../../services/elements/PT"; +import { useMutation } from "react-query"; + +const usePtCalculationEstimate = (tenantId, config = {}) => { + return useMutation((data) => PTService.ptCalculationEstimate(data, tenantId)); +}; + +export default usePtCalculationEstimate; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/useTenants.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/useTenants.js new file mode 100644 index 00000000000..9f858672f78 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/pt/useTenants.js @@ -0,0 +1,11 @@ +import React, { useEffect, useState } from "react"; + +const useTenants = () => { + const tenantInfo = Digit.SessionStorage.get("PT_TENANTS"); + + const [tenants, setTenants] = useState(tenantInfo ? tenantInfo : null); + + return tenants; +}; + +export default useTenants; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/receipts/useReceiptsMDMS.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/receipts/useReceiptsMDMS.js new file mode 100644 index 00000000000..81d08e243ec --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/receipts/useReceiptsMDMS.js @@ -0,0 +1,80 @@ +import { useQuery } from "react-query"; +import { MdmsService } from "../../services/elements/MDMS"; + +const useReceiptsMDMS = (tenantId, type, config = {}) => { + const useReceiptsBusinessServices = () => { + const { isLoading, error, data } = useQuery(["RECEIPTS_SERVICES", tenantId], () => MdmsService.getReceiptKey(tenantId, 'common-masters'), config); + if (!isLoading && data && data[`common-masters`] && data[`common-masters`]?.uiCommonPay && Array.isArray(data[`common-masters`].uiCommonPay)) { + data[`common-masters`].uiCommonPay = data[`common-masters`].uiCommonPay.filter((unit) => unit.cancelReceipt) || []; + data.dropdownData = [...data[`common-masters`].uiCommonPay.map(config => { + return { + code: config.code, + name: `BILLINGSERVICE_BUSINESSSERVICE_${config.code}` + } + })] || [] + } + return { isLoading, error, data, revalidate: () => client.invalidateQueries(["RECEIPTS_SERVICES", tenantId]) }; + }; + + const useCancelReceiptReason = () => { + const { isLoading, error, data } = useQuery(["RECEIPTS_CANCEL_REASON", tenantId], () => MdmsService.getCancelReceiptReason(tenantId, 'common-masters'), config); + if (!isLoading && data && data[`common-masters`] && data[`common-masters`]?.CancelReceiptReason && Array.isArray(data[`common-masters`].CancelReceiptReason)) { + data[`common-masters`].CancelReceiptReason = data[`common-masters`].CancelReceiptReason.filter((unit) => unit.active) || []; + data.dropdownData = [...data[`common-masters`].CancelReceiptReason.map(config => { + return { + code: config.code, + name: `CR_REASON_${config.code}` + } + })] || [] + } + return { isLoading, error, data, revalidate: () => client.invalidateQueries(["RECEIPTS_CANCEL_REASON", tenantId]) }; + }; + const useCancelReceiptStatus = () => { + const { isLoading, error, data } = useQuery(["RECEIPTS_CANCEL_STATUS", tenantId], () => MdmsService.getReceiptStatus(tenantId, 'common-masters'), config); + if (!isLoading && data && data[`common-masters`] && data[`common-masters`]?.ReceiptStatus && Array.isArray(data[`common-masters`].ReceiptStatus)) { + data[`common-masters`].ReceiptStatus = data[`common-masters`].ReceiptStatus.filter((unit) => unit.active) || []; + data.dropdownData = [...data[`common-masters`].ReceiptStatus.map(config => { + return { + code: config.code, + name: `RC_${config.code}` + } + })] || [] + } + return { isLoading, error, data, revalidate: () => client.invalidateQueries(["RECEIPTS_CANCEL_STATUS", tenantId]) }; + }; + const useCancelReceiptReasonAndStatus = () => { + const { isLoading, error, data } = useQuery(["RECEIPTS_CANCEL_REASON_STATUS", tenantId], () => MdmsService.getCancelReceiptReasonAndStatus(tenantId, 'common-masters'), config); + if (!isLoading && data && data[`common-masters`] && data[`common-masters`]?.uiCommonPay && Array.isArray(data[`common-masters`].uiCommonPay)) { + data[`common-masters`].uiCommonPay = data[`common-masters`].uiCommonPay.filter((unit) => unit.cancelReceipt) || []; + data.dropdownData = [...data[`common-masters`].uiCommonPay.map(config => { + return { + code: config.code, + name: `BILLINGSERVICE_BUSINESSSERVICE_${config.code}` + } + })] || [] + if (data[`common-masters`]?.ReceiptStatus && Array.isArray(data[`common-masters`].ReceiptStatus)) { + data[`common-masters`].ReceiptStatus = data[`common-masters`].ReceiptStatus.filter((unit) => unit.active) || []; + data.dropdownDataStatus = [...data[`common-masters`].ReceiptStatus.map(config => { + return { + code: config.code, + name: `RC_${config.code}` + } + })] || [] + } + + } + return { isLoading, error, data, revalidate: () => client.invalidateQueries(["RECEIPTS_CANCEL_REASON_STATUS", tenantId]) }; + }; + + switch (type) { + case "ReceiptsBusinessServices": + return useReceiptsBusinessServices(); + case "CancelReceiptReason": + return useCancelReceiptReason(); + case "CancelReceiptStatus": + return useCancelReceiptStatus(); + case "CancelReceiptReasonAndStatus": + return useCancelReceiptReasonAndStatus(); + } +}; +export default useReceiptsMDMS; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/receipts/useReceiptsSearch.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/receipts/useReceiptsSearch.js new file mode 100644 index 00000000000..8fa9afcd749 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/receipts/useReceiptsSearch.js @@ -0,0 +1,11 @@ +import { useQuery, useQueryClient } from "react-query"; +import ReceiptsService from "../../services/elements/Receipts"; + +export const useReceiptsSearch = (searchparams, tenantId, filters, isupdated, config = {}) => { + const client = useQueryClient(); + let businessService = searchparams?.businessServices; + const { isLoading, error, data, ...rest } = useQuery(["RECEIPTS_SEARCH", searchparams, tenantId, filters, isupdated], () => ReceiptsService.search(tenantId, filters, searchparams, businessService), config); + return { isLoading, error, data, revalidate: () => client.invalidateQueries(["RECEIPTS_SEARCH", searchparams, tenantId, filters, isupdated]), ...rest }; +}; + +export default useReceiptsSearch; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/receipts/useReceiptsUpdate.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/receipts/useReceiptsUpdate.js new file mode 100644 index 00000000000..205fa889175 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/receipts/useReceiptsUpdate.js @@ -0,0 +1,8 @@ +import { useMutation } from "react-query"; +import ReceiptsService from "../../services/elements/Receipts"; + +export const useReceiptsUpdate = (tenantId, businessService) => { + return useMutation((data) => ReceiptsService.update(data, tenantId, businessService)); +}; + +export default useReceiptsUpdate; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/revalidateQuery.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/revalidateQuery.js new file mode 100644 index 00000000000..3514b6779f4 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/revalidateQuery.js @@ -0,0 +1,6 @@ +import { useQueryClient } from "react-query"; + +export const useRevalidateQuery = async (key) => { + const client = useQueryClient(); + return client.refetchQueries(key); +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/store.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/store.js new file mode 100644 index 00000000000..477ee4bd39e --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/store.js @@ -0,0 +1,19 @@ +import { useState, useEffect } from "react"; +import { useQuery } from "react-query"; +// import mergeConfig from "../../config/mergeConfig"; +import { StoreService } from "../services/molecules/Store/service"; + +export const useStore = ({ stateCode, moduleCode, language }) => { + return useQuery(["store", stateCode, moduleCode, language], () => StoreService.defaultData(stateCode, moduleCode, language)); +}; + +export const useInitStore = (stateCode, enabledModules) => { + const { isLoading, error, isError, data } = useQuery( + ["initStore", stateCode, enabledModules], + () => StoreService.digitInitData(stateCode, enabledModules), + { + staleTime: Infinity, + } + ); + return { isLoading, error, isError, data }; +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useApplicationActions.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useApplicationActions.js new file mode 100644 index 00000000000..3e8424a64e9 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useApplicationActions.js @@ -0,0 +1,8 @@ +import { useMutation } from "react-query"; +import ApplicationUpdateActions from "../../services/molecules/TL/ApplicationUpdateActions"; + +const useApplicationActions = (tenantId) => { + return useMutation((applicationData) => ApplicationUpdateActions(applicationData, tenantId)); +}; + +export default useApplicationActions; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useApplicationDetail.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useApplicationDetail.js new file mode 100644 index 00000000000..ae9da329746 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useApplicationDetail.js @@ -0,0 +1,12 @@ +import { TLSearch } from "../../services/molecules/TL/Search"; +import { useQuery } from "react-query"; + +const useApplicationDetail = (t, tenantId, applicationNumber, config = {}, userType) => { + return useQuery( + ["APPLICATION_SEARCH", "TL_SEARCH", applicationNumber, userType], + () => TLSearch.applicationDetails(t, tenantId, applicationNumber, userType), + config + ); +}; + +export default useApplicationDetail; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useFetchBill.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useFetchBill.js new file mode 100644 index 00000000000..48e4dc65be0 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useFetchBill.js @@ -0,0 +1,20 @@ +import React from "react" +import { useFetchCitizenBillsForBuissnessService } from "../payment" + +const useFetchBill = ({params, config}) => { + return useFetchCitizenBillsForBuissnessService({ businessService: "TL", ...params },{ + ...config, + select: (data) => { + const {Bill: _data} = data + return _data.map(i => ({ + TL_COMMON_BILL_NUMBER: i.billNumber, + TL_COMMON_TOTAL_AMOUNT: i.totalAmount, + TL_COMMON_PAYER_NAME: i.payerName, + TL_COMMON_CONSUMER_CODE: i.consumerCode, + raw: { ...i, applicationNumber: i.consumerCode } + })) + } + }) +} + +export default useFetchBill \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useInbox.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useInbox.js new file mode 100644 index 00000000000..286999c5a54 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useInbox.js @@ -0,0 +1,46 @@ +import React from "react" +import useInbox from "../useInbox" + +const useTLInbox = ({ tenantId, filters, config }) => { + + const {applicationStatus, mobileNumber, applicationNumber, sortBy, sortOrder, locality, uuid, limit, offset } = filters + const USER_UUID = Digit.UserService.getUser()?.info?.uuid; + + const _filters = { + tenantId, + processSearchCriteria: { + moduleName: "tl-services", + businessService: ["NewTL", "DIRECTRENEWAL","EDITRENEWAL"], + ...(applicationStatus?.length > 0 ? {status: applicationStatus} : {}), + ...(uuid && Object.keys(uuid).length > 0 ? {assignee: uuid.code === "ASSIGNED_TO_ME" ? USER_UUID : ""} : {}), + }, + moduleSearchCriteria: { + ...(mobileNumber ? {mobileNumber}: {}), + ...(applicationNumber ? {applicationNumber} : {}), + ...(sortBy ? {sortBy} : {}), + ...(sortOrder ? {sortOrder} : {}), + ...(locality?.length > 0 ? {locality: locality.map((item) => item.code.split("_").pop()).join(",")} : {}), + }, + limit, + offset + } + + return useInbox({tenantId, filters: _filters, config:{ + select: (data) =>({ + statuses: data.statusMap, + table: data?.items.map( application => ({ + applicationId: application.businessObject.applicationNumber, + date: application.businessObject.applicationDate, + businessService: application?.ProcessInstance?.businessService, + locality: `${application.businessObject?.tenantId?.toUpperCase()?.split(".")?.join("_")}_REVENUE_${application.businessObject?.tradeLicenseDetail?.address?.locality?.code?.toUpperCase()}`, + status: application.businessObject.status, + owner: application.ProcessInstance?.assigner?.name, + sla: Math.round(application.ProcessInstance?.businesssServiceSla / (24 * 60 * 60 * 1000)) + })), + totalCount: data.totalCount + }), + ...config + }}) +} + +export default useTLInbox \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useMDMS.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useMDMS.js new file mode 100644 index 00000000000..b7f8759692c --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useMDMS.js @@ -0,0 +1,25 @@ +import React from "react" +import { useQuery } from "react-query" +import { MdmsService } from "../../services/elements/MDMS" + +const useMDMS = { + applicationTypes : (tenantId) => useQuery([tenantId, "TL_MDMS_APPLICATION_STATUS"], () => MdmsService.getDataByCriteria(tenantId, { + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: "TradeLicense", + masterDetails: [ + { + name: "ApplicationType" + } + ] + } + ] + } + }, "TL"), { + select: (data) => data.TradeLicense.ApplicationType.map(type => ({code: type.code.split(".")[1], i18nKey: `TL_APPLICATIONTYPE.${type.code.split(".")[1]}` })) + } ) +} + +export default useMDMS \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useSearch.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useSearch.js new file mode 100644 index 00000000000..e8fc2a5ea9c --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useSearch.js @@ -0,0 +1,15 @@ +import React from "react"; +import { useQuery } from "react-query"; +import { TLService } from "../../services/elements/TL" + +const useSearch = ({tenantId, filters, config={}}) => useQuery( + ["TL_SEARCH", tenantId, ...Object.keys(filters)?.map( e => filters?.[e] )], + () => TLService.TLsearch({tenantId, filters}), + { + select: (data) => data.Licenses, + ...config + } + ) + + +export default useSearch diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTLDocumentSearch.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTLDocumentSearch.js new file mode 100644 index 00000000000..69bd32aba50 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTLDocumentSearch.js @@ -0,0 +1,18 @@ +import { useQuery, useQueryClient } from "react-query"; + +const useTLDocumentSearch = (data1 = {}, config = {}) => { + const client = useQueryClient(); + const tenantId = Digit.ULBService.getCurrentTenantId(); + const tenant = tenantId.split(".")[0]; + //const propertyId = property?.propertyId; + //const filesArray = property?.documents?.map((value) => value?.fileStoreId); + let filesArray = [ + data1.value.owners.documents["OwnerPhotoProof"].fileStoreId, + data1.value.owners.documents["ProofOfIdentity"].fileStoreId, + data1.value.owners.documents["ProofOfOwnership"].fileStoreId, + ]; + const { isLoading, error, data } = useQuery([`tlDocuments-${1}`, filesArray], () => Digit.UploadServices.Filefetch(filesArray, tenant)); + return { isLoading, error, data: { pdfFiles: data?.data }, revalidate: () => client.invalidateQueries([`tlDocuments-${1}`, filesArray]) }; +}; + +export default useTLDocumentSearch; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTLGenderMDMS.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTLGenderMDMS.js new file mode 100644 index 00000000000..d06d3cd491b --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTLGenderMDMS.js @@ -0,0 +1,18 @@ +import { useQuery } from "react-query"; +import { MdmsService } from "../../services/elements/MDMS"; + +const useTLGenderMDMS = (tenantId, moduleCode, type, config = {}) => { + const useTLGenders = () => { + return useQuery("TL_GENDER_DETAILS", () => MdmsService.TLGenderType(tenantId, moduleCode ,type), config); + }; + + + switch (type) { + case "GenderType": + return useTLGenders(); + } +}; + + + +export default useTLGenderMDMS; \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTLsearchApplication.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTLsearchApplication.js new file mode 100644 index 00000000000..d5435ba63e9 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTLsearchApplication.js @@ -0,0 +1,65 @@ +import { useEffect, useState } from "react"; +import { useQuery, useQueryClient } from "react-query"; + +const useTLSearch = (params, config) => { + return async () => { + const data = await Digit.TLService.search(params, config); + let UpdatedData = []; + + if (data && data?.Licenses && Array.isArray(data.Licenses) && data.Licenses.length > 0) { + + return(UpdatedData = await Promise.all( + data.Licenses?.map(async (service) => { + const workflowdata = await Digit.WorkflowService.getDetailsById({ tenantId:service.tenantId, id : service.applicationNumber, moduleCode : "TL", role:"CITIZEN" }).then((workflowdata) => workflowdata); + const res = Object.assign({}, service, { + SLA: workflowdata?.processInstances[0].businesssServiceSla, + }); + return res; + }) + )); + } + }; +} + +export const useTLSearchApplication = (params, config = {},t) => { + + const client = useQueryClient(); + let multiownername = ""; + const result = useQuery(["TL_APPLICATIONS_LIST", params], useTLSearch( params, config ), { staleTime: Infinity, + select: (data) => { + return data.map(i => ({ + TL_COMMON_TABLE_COL_APP_NO: i.applicationNumber, + TL_APPLICATION_CATEGORY: "ACTION_TEST_TRADE_LICENSE", + TL_COMMON_TABLE_COL_OWN_NAME: i?.tradeLicenseDetail?.owners?.map((ele,index) => index == 0 ? multiownername = ele.name : multiownername = multiownername + " , " + ele.name), + TL_COMMON_TABLE_COL_STATUS: `WF_NEWTL_${i?.status}`, + TL_COMMON_TABLE_COL_SLA_NAME: `${Math.round(i?.SLA / (1000 * 60 * 60 * 24))} ${t("TL_SLA_DAYS")}`, + TL_COMMON_TABLE_COL_TRD_NAME: i?.tradeName, + raw: i + })) + } + }); + return { ...result, revalidate: () => client.invalidateQueries(["TL_APPLICATIONS_LIST", params]) }; +}; + + +export const useTLApplicationDetails = (params, config) => { + const client = useQueryClient(); + + const result = useQuery(["TL_APPLICATION_DETAILS", params], useTLSearch( params, config ), { staleTime: Infinity, + // select: (data) => { + // return data.map(i => ({ + // TL_COMMON_TABLE_COL_APP_NO: i.applicationNumber, + // TL_APPLICATION_CATEGORY: "ACTION_TEST_TRADE_LICENSE", + // TL_COMMON_TABLE_COL_OWN_NAME: i?.tradeLicenseDetail?.owners?.map((ele) => ele?.name), + // TL_COMMON_TABLE_COL_STATUS: `WF_NEWTL_${i?.status}`, + // TL_COMMON_TABLE_COL_SLA_NAME: `${i?.SLA / (1000 * 60 * 60 * 24)} Days`, + // TL_COMMON_TABLE_COL_TRD_NAME: i?.tradeName, + // TL_COMMON_CITY_NAME: i.tenantId, + // raw: i + // })) + // } + }); + return { ...result, revalidate: () => client.invalidateQueries(["TL_APPLICATION_DETAILS", params]) }; +} + +export default useTLSearchApplication; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTenants.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTenants.js new file mode 100644 index 00000000000..9bc9966a961 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTenants.js @@ -0,0 +1,11 @@ +import React, { useEffect, useState } from "react"; + +const useTenants = () => { + const tenantInfo = Digit.SessionStorage.get("TL_TENANTS"); + + const [tenants, setTenants] = useState(tenantInfo ? tenantInfo : null); + + return tenants; +}; + +export default useTenants; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTradeLicenseAPI.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTradeLicenseAPI.js new file mode 100644 index 00000000000..9007a343c59 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTradeLicenseAPI.js @@ -0,0 +1,12 @@ +import { TLService } from "../../services/elements/TL"; +import { useMutation } from "react-query"; + +const useTradeLicenseAPI = (tenantId, type = true) => { + if(type){ + return useMutation((data) => TLService.create(data, tenantId)); +} else { + return useMutation((data) => TLService.update(data, tenantId)); +} +}; + +export default useTradeLicenseAPI; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTradeLicenseBillingslab.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTradeLicenseBillingslab.js new file mode 100644 index 00000000000..255d9a29ed8 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTradeLicenseBillingslab.js @@ -0,0 +1,11 @@ +import { useQuery, useQueryClient } from "react-query"; + + +const useTradeLicenseBillingslab = ({ tenantId, filters, auth }, config = {}) => { + const client = useQueryClient(); + const args = tenantId ? { tenantId, filters, auth } : { filters, auth }; + const { isLoading, error, data } = useQuery(["TLbillingSlabSerach", tenantId, filters], () => Digit.TLService.billingslab(args), config); + return { isLoading, error, data, revalidate: () => client.invalidateQueries(["TLbillingSlabSerach", tenantId, filters]) }; +}; + +export default useTradeLicenseBillingslab; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTradeLicenseMDMS.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTradeLicenseMDMS.js new file mode 100644 index 00000000000..c8813010760 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTradeLicenseMDMS.js @@ -0,0 +1,45 @@ +import { MdmsService } from "../../services/elements/MDMS"; +import { useQuery } from "react-query"; + +const useTradeLicenseMDMS = (tenantId, moduleCode, type, filter, config = {}) => { + const useTLDocuments = () => { + return useQuery("TL_DOCUMENTS", () => MdmsService.getTLDocumentRequiredScreen(tenantId, moduleCode, type), config); + }; + const useStructureType = () => { + return useQuery("TL_STRUCTURE_TYPE", () => MdmsService.getTLStructureType(tenantId, moduleCode, type), config); + }; + const useTradeUnitsData = () => { + return useQuery("TL_TRADE_UNITS", () => MdmsService.getTradeUnitsData(tenantId, moduleCode, type, filter), config); + }; + const useTradeOwnerShipCategory = () => { + return useQuery("TL_TRADE_OWNERSHIP_CATEGORY", () => MdmsService.GetTradeOwnerShipCategory(tenantId, moduleCode, type), config); + }; + const useTLAccessoriesType = () => { + return useQuery("TL_TRADE_ACCESSORY_CATEGORY", () => MdmsService.getTLAccessoriesType(tenantId, moduleCode, type), config); + }; + const useTLFinancialYear = () => { + return useQuery("TL_TRADE_FINANCIAL_YEAR", () => MdmsService.getTLFinancialYear(tenantId, moduleCode, type), config); + }; + const _default = () => { + return useQuery([tenantId, moduleCode, type], () => MdmsService.getMultipleTypes(tenantId, moduleCode, type), config); + }; + + switch (type) { + case "TLDocuments": + return useTLDocuments(); + case "StructureType": + return useStructureType(); + case "TradeUnits": + return useTradeUnitsData(); + case "TLOwnerShipCategory": + return useTradeOwnerShipCategory(); + case "AccessoryCategory": + return useTLAccessoriesType(); + case "FinancialYear": + return useTLFinancialYear(); + default: + return _default(); + } +}; + +export default useTradeLicenseMDMS; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTradeLicenseSearch.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTradeLicenseSearch.js new file mode 100644 index 00000000000..dfb1bde05a0 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/useTradeLicenseSearch.js @@ -0,0 +1,22 @@ +import { useEffect } from "react"; +import { useQuery, useQueryClient } from "react-query"; + +const useTradeLicenseSearch = ({ tenantId, filters, auth }, config = {}) => { + const client = useQueryClient(); + + const args = tenantId ? { tenantId, filters, auth } : { filters, auth }; + const { isLoading, error, data } = useQuery(["tradeSearchList", tenantId, filters], () => Digit.TLService.TLsearch(args), config); + useEffect (() => { + if(config?.filters?.tenantId) + Digit.LocalizationService.getLocale({modules: [`rainmaker-${config.filters?.tenantId}`], locale: Digit.StoreData.getCurrentLanguage(), tenantId: `${config?.filters?.tenantId}`}); + },[config?.filters?.tenantId]); +// if (!isLoading && data && data?.Properties && Array.isArray(data.Properties) && data.Properties.length > 0) { +// data.Properties[0].units = data.Properties[0].units || []; +// data.Properties[0].units = data.Properties[0].units.filter((unit) => unit.active); +// data.Properties[0].owners = data.Properties[0].owners || []; +// data.Properties[0].owners = data.Properties[0].owners.filter((owner) => owner.status === "ACTIVE"); +// } + return { isLoading, error, data, revalidate: () => client.invalidateQueries(["tradeSearchList", tenantId, filters]) }; +}; + +export default useTradeLicenseSearch; \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/userPaymentHistory.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/userPaymentHistory.js new file mode 100644 index 00000000000..61dce382c54 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/tl/userPaymentHistory.js @@ -0,0 +1,8 @@ +import { useQuery } from "react-query"; +import { PaymentService } from "../../services/elements/Payment"; + +const useTLPaymentHistory = (tenantId, id, config = {}) => { + return useQuery(["PAYMENT_HISTORY", id], () => PaymentService.getReciept(tenantId, "", { consumerCodes: id }), { ...config }); +}; + +export default useTLPaymentHistory; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/useApplicationForBillSearch.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/useApplicationForBillSearch.js new file mode 100644 index 00000000000..32417925276 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/useApplicationForBillSearch.js @@ -0,0 +1,65 @@ +import { FSMService } from "../services/elements/FSM"; +import { PTService } from "../services/elements/PT"; +import { useQuery } from "react-query"; +import { MCollectService } from "../services/elements/MCollect"; + +const fsmApplications = async (tenantId, filters) => { + return (await FSMService.search(tenantId, { ...filters, limit: 10000 })).fsm; +}; + +const ptApplications = async (tenantId, filters) => { + return (await PTService.search({ tenantId, filters })).Properties; +}; + +const advtApplications = async (tenantId, filters) => { + return (await MCollectService.search_bill({ tenantId, filters })).Bills; +}; +const tlApplications = async (tenantId, filters) => { + return (await TLService.search_bill({ tenantId, filters })).Bills; +}; + +const refObj = (tenantId, filters) => { + let consumerCodes = filters?.consumerCodes; + // delete filters.consumerCodes; + + return { + pt: { + searchFn: () => ptApplications(null, { ...filters, propertyIds: consumerCodes }), + key: "propertyId", + label: "PT_UNIQUE_PROPERTY_ID", + }, + fsm: { + searchFn: () => fsmApplications(tenantId, filters), + key: "applicationNo", + label: "FSM_APPLICATION_NO", + }, + mcollect: { + searchFn: () => advtApplications(tenantId, filters), + key: "consumerCode", + label: "UC_CHALLAN_NO", + }, + TL: { + searchFn: () => tlApplications(tenantId, filters), + key: "consumerCode", + label: "REFERENCE_NO", + }, + }; +}; + +export const useApplicationsForBusinessServiceSearch = ({ tenantId, businessService, filters }, config = {}) => { + let _key = businessService?.toLowerCase().split(".")[0]; + //debugger; + if (window.location.href.includes("mcollect")) { + _key = "mcollect"; + } + if (window.location.href.includes("TL")) { + _key = "TL"; + } + /* key from application ie being used as consumer code in bill */ + const { searchFn, key, label } = refObj(tenantId, filters)[_key]; + const applications = useQuery(["applicationsForBillDetails", { tenantId, businessService, filters, searchFn }], searchFn, { + ...config, + }); + + return { ...applications, key, label }; +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/useClickOutside.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/useClickOutside.js new file mode 100644 index 00000000000..70a6186f353 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/useClickOutside.js @@ -0,0 +1,24 @@ +import { useEffect } from "react"; + +const useOnClickOutside = (ref, handler, isActive) => { + useEffect(() => { + if (isActive) { + document.addEventListener("click", handleClickOutSide, false); + } else { + document.removeEventListener("click", handleClickOutSide, false); + } + return () => { + // console.log("removeEventListener event fired:::::>", event); + document.removeEventListener("click", handleClickOutSide, false); + }; + }, [isActive]); + + const handleClickOutSide = (event) => { + if (ref.current && ref.current.contains(event.target)) { + return; + } + handler(event); + } +}; + +export default useOnClickOutside; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/useEmployeeSearch.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/useEmployeeSearch.js new file mode 100644 index 00000000000..93651fcd599 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/useEmployeeSearch.js @@ -0,0 +1,10 @@ +import { useQuery } from "react-query"; + +const useEmployeeSearch = (tenantId, filters, config = {}) => { + if (filters.roles) { + filters.roles = filters.roles.map((role) => role.code).join(","); + } + return useQuery(["EMPLOYEE_SEARCH", filters], () => Digit.UserService.employeeSearch(tenantId, filters), config); +}; + +export default useEmployeeSearch; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/useInbox.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/useInbox.js new file mode 100644 index 00000000000..2f6bed8496b --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/useInbox.js @@ -0,0 +1,11 @@ +import React from "react"; +import { useQuery } from "react-query"; +import { InboxGeneral } from "../services/elements/InboxService" + +const useInbox = ({tenantId, filters, config}) => useQuery( + ["INBOX_DATA",tenantId, ...Object.keys(filters)?.map( e => filters?.[e] )], + () => InboxGeneral.Search({inbox: {...filters}}), + { ...config } + ) + +export default useInbox; \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/useInboxGeneral/filterFn.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/useInboxGeneral/filterFn.js new file mode 100644 index 00000000000..7736e52c1af --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/useInboxGeneral/filterFn.js @@ -0,0 +1,108 @@ +export const filterFunctions = { + PT: (filtersArg) => { + let { uuid } = Digit.UserService.getUser()?.info || {}; + + const searchFilters = {}; + const workflowFilters = {}; + + const { propertyIds, mobileNumber, limit, offset, sortBy, sortOrder, total, applicationStatus, services } = filtersArg || {}; + + if (filtersArg?.acknowledgementIds) { + searchFilters.acknowledgementIds = filtersArg?.acknowledgementIds; + } + if (filtersArg?.propertyIds) { + searchFilters.propertyIds = propertyIds; + } + if (filtersArg?.oldpropertyids) { + searchFilters.oldpropertyids = filtersArg?.oldpropertyids; + } + if (applicationStatus && applicationStatus?.[0]) { + workflowFilters.applicationStatus = applicationStatus.map((status) => status.code).join(","); + } + if (filtersArg?.locality?.length) { + searchFilters.locality = filtersArg?.locality.map((item) => item.code.split("_").pop()).join(","); + } + + if (filtersArg?.locality?.code) { + searchFilters.locality = filtersArg?.locality?.code; + } + + if (filtersArg?.uuid && filtersArg?.uuid.code === "ASSIGNED_TO_ME") { + workflowFilters.assignee = uuid; + } + if (mobileNumber) { + searchFilters.mobileNumber = mobileNumber; + } + if (propertyIds) { + searchFilters.propertyIds = propertyIds; + } + if (sortBy) { + searchFilters.sortBy = sortBy; + } + if (sortOrder) { + searchFilters.sortOrder = sortOrder; + } + if (services) { + workflowFilters.businessServices = services.join(); + } + if (limit) { + searchFilters.limit = limit; + } + if (offset) { + searchFilters.offset = offset; + } + + return { searchFilters, workflowFilters }; + }, + TL: (filtersArg) => { + let { uuid } = Digit.UserService.getUser()?.info || {}; + + const searchFilters = {}; + const workflowFilters = {}; + + const { propertyIds, mobileNumber, limit, offset, sortBy, sortOrder, total, applicationStatus, services } = filtersArg || {}; + + if (filtersArg?.acknowledgementIds) { + searchFilters.acknowledgementIds = filtersArg?.acknowledgementIds; + } + if (filtersArg?.propertyIds) { + searchFilters.propertyIds = propertyIds; + } + if (filtersArg?.oldpropertyids) { + searchFilters.oldpropertyids = filtersArg?.oldpropertyids; + } + if (applicationStatus && applicationStatus?.[0]) { + workflowFilters.applicationStatus = applicationStatus.map((status) => status.code).join(","); + } + if (filtersArg?.locality?.length) { + searchFilters.locality = filtersArg?.locality.map((item) => item.code.split("_").pop()).join(","); + } + + if (filtersArg?.uuid && filtersArg?.uuid.code === "ASSIGNED_TO_ME") { + workflowFilters.assignee = uuid; + } + if (mobileNumber) { + searchFilters.mobileNumber = mobileNumber; + } + if (propertyIds) { + searchFilters.propertyIds = propertyIds; + } + if (sortBy) { + searchFilters.sortBy = sortBy; + } + if (sortOrder) { + searchFilters.sortOrder = sortOrder; + } + if (services) { + workflowFilters.businessServices = services.join(); + } + if (limit) { + searchFilters.limit = limit; + } + if (offset) { + searchFilters.offset = offset; + } + + return { searchFilters, workflowFilters }; + }, +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/useInboxGeneral/newFilterFn.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/useInboxGeneral/newFilterFn.js new file mode 100644 index 00000000000..5d2e60dd885 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/useInboxGeneral/newFilterFn.js @@ -0,0 +1,53 @@ +export const filterFunctions = { + PT: (filtersArg) => { + let { uuid } = Digit.UserService.getUser()?.info || {}; + + // console.log(filtersArg.uuid, "in filter fn"); + const searchFilters = {}; + const workflowFilters = {}; + + const { propertyIds, mobileNumber, limit, offset, sortBy, sortOrder, total, applicationStatus, services } = filtersArg || {}; + + if (filtersArg?.acknowledgementIds) { + searchFilters.applicationNumber = filtersArg?.acknowledgementIds; + } + if (filtersArg?.propertyIds) { + searchFilters.propertyId = propertyIds; + } + if (filtersArg?.oldpropertyids) { + searchFilters.oldpropertyids = filtersArg?.oldpropertyids; + } + if (applicationStatus && applicationStatus?.[0]) { + workflowFilters.status = applicationStatus.map((status) => status.uuid); + if (applicationStatus?.some((e) => e.nonActionableRole)) { + searchFilters.fetchNonActionableRecords = true; + } + } + if (filtersArg?.locality?.length) { + searchFilters.locality = filtersArg?.locality.map((item) => item.code.split("_").pop()); + } + if (filtersArg?.uuid && filtersArg?.uuid.code === "ASSIGNED_TO_ME") { + workflowFilters.assignee = uuid; + } + if (mobileNumber) { + searchFilters.mobileNumber = mobileNumber; + } + if (services) { + workflowFilters.businessService = services; + } + searchFilters["isInboxSearch"] = true; + searchFilters["creationReason"] = ["CREATE", "MUTATION", "UPDATE"]; + workflowFilters["moduleName"] = "PT"; + + // if (limit) { + // searchFilters.limit = limit; + // } + // if (offset) { + // searchFilters.offset = offset; + // } + + // workflowFilters.businessService = "PT.CREATE"; + // searchFilters.mobileNumber = "9898568989"; + return { searchFilters, workflowFilters, limit, offset, sortBy, sortOrder }; + }, +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/useInboxGeneral/searchFields.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/useInboxGeneral/searchFields.js new file mode 100644 index 00000000000..05cd3d163db --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/useInboxGeneral/searchFields.js @@ -0,0 +1,67 @@ +const inboxSearchFields = { + PT: [ + { + label: "PT_PROPERTY_APPLICATION_NO", + name: "acknowledgementIds", + roles: [], + }, + { + label: "ES_SEARCH_UNIQUE_PROPERTY_ID", + name: "propertyIds", + // minLength: "10", + roles: [], + }, + { + label: "ES_SEARCH_APPLICATION_MOBILE_NO", + name: "mobileNumber", + type: "mobileNumber", + maxLength: 10, + minLength: 0, + roles: [], + pattern: "^$|[6-9][0-9]{9}", + errorMessages: { + pattern: "", + minLength: "", + maxLength: "", + }, + }, + ], +}; + +const searchFieldsForSearch = { + PT: [ + { + label: "ES_INBOX_LOCALITY", + name: "locality", + type: "Locality", + isMendatory: true, + }, + { + label: "ES_INBOX_UNIQUE_PROPERTY_ID", + name: "propertyIds", + roles: [], + }, + { + label: "ES_SEARCH_EXISTING_PROPERTY_ID", + name: "oldpropertyids", + title: "ES_SEARCH_APPLICATION_MOBILE_INVALID", + roles: [], + }, + { + label: "ES_SEARCH_APPLICATION_MOBILE_NO", + name: "mobileNumber", + type: "mobileNumber", + maxLength: 10, + minLength: 0, + roles: [], + pattern: "^$|[6-9][0-9]{9}", + errorMessages: { + pattern: "", + minLength: "", + maxLength: "", + }, + }, + ], +}; + +export const getSearchFields = (isInbox) => (isInbox ? inboxSearchFields : searchFieldsForSearch); diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/useInboxGeneral/useInboxGeneral.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/useInboxGeneral/useInboxGeneral.js new file mode 100644 index 00000000000..a53cf09fc31 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/useInboxGeneral/useInboxGeneral.js @@ -0,0 +1,175 @@ +import { useTranslation } from "react-i18next"; +import { useQuery, useQueryClient } from "react-query"; +import { FSMService } from "../../services/elements/FSM"; +import { PTService } from "../../services/elements/PT"; + +import { filterFunctions } from "./filterFn"; +import { getSearchFields } from "./searchFields"; +import { TLService } from "../../services/elements/TL"; + +const inboxConfig = (tenantId, filters) => ({ + PT: { + services: ["PT.CREATE"], + searchResponseKey: "Properties", + businessIdsParamForSearch: "acknowledgementIds", + businessIdAliasForSearch: "acknowldgementNumber", + fetchFilters: filterFunctions.PT, + _searchFn: () => PTService.search({ tenantId, filters }), + }, + FSM: { + services: ["FSM"], + searchResponseKey: "fsm", + businessIdsParamForSearch: "applicationNos", + businessIdAliasForSearch: "applicationNo", + fetchFilters: filterFunctions.FSM, + _searchFn: () => FSMService.search(tenantId, filters), + }, + TL: { + services: ["TL"], + searchResponseKey: "items", + businessIdsParamForSearch: "businessId", + businessIdAliasForSearch: "businessId", + fetchFilters: filterFunctions.TL, + _searchFn: () => TLService.search(tenantId, filters), + }, +}); + +const defaultCombineResponse = ({ totalCount, ...d }, wf) => { + return { totalCount, searchData: { ...d }, workflowData: { ...wf } }; +}; + +const defaultRawSearchHandler = ({ totalCount, ...data }, searchKey, businessIdAlias) => { + return { [searchKey]: data[searchKey].map((e) => ({ totalCount, ...e })) }; +}; + +const defaultCatchSearch = (Err) => { + if ( + Err?.response?.data?.Errors?.some( + (e) => + e.code === "EG_PT_INVALID_SEARCH" && + e.message === " Search is not allowed on empty Criteria, Atleast one criteria should be provided with tenantId for EMPLOYEE" + ) + ) + return []; + console.log(Err?.response?.data, " this is error"); + throw Err; +}; + +/** + * + * @param {*} data + * @param {Array of Objects containing async or pure functions} middlewares + * @returns {object} + */ + +const callMiddlewares = async (data, middlewares) => { + let applyBreak = false; + let itr = -1; + let _break = () => (applyBreak = true); + let _next = async (data) => { + if (!applyBreak && ++itr < middlewares.length) { + let key = Object.keys(middlewares[itr])[0]; + let nextMiddleware = middlewares[itr][key]; + let isAsync = nextMiddleware.constructor.name === "AsyncFunction"; + if (isAsync) return await nextMiddleware(data, _break, _next); + else return nextMiddleware(data, _break, _next); + } else return data; + }; + let ret = await _next(data); + return ret || []; +}; + +const useInboxGeneral = ({ + tenantId, + businessService, + filters, + rawWfHandler = (d) => d, + rawSearchHandler = defaultRawSearchHandler, + combineResponse = defaultCombineResponse, + isInbox = true, + wfConfig = {}, + searchConfig = {}, + middlewaresWf = [], + middlewareSearch = [], + catchSearch = defaultCatchSearch, +}) => { + const client = useQueryClient(); + const { t } = useTranslation(); + + const { services, fetchFilters, searchResponseKey, businessIdAliasForSearch, businessIdsParamForSearch } = inboxConfig()[businessService]; + + let { workflowFilters, searchFilters } = fetchFilters(filters); + + const { data: processInstances, isFetching: wfFetching, isFetched, isSuccess: wfSuccess } = useQuery( + ["WORKFLOW_INBOX", businessService, workflowFilters], + () => + Digit.WorkflowService.getAllApplication(tenantId, { businessServices: services.join(), ...workflowFilters }) + .then(rawWfHandler) + .then((data) => callMiddlewares(data.ProcessInstances, middlewaresWf)), + { + enabled: isInbox, + select: (d) => { + return d; + }, + ...wfConfig, + } + ); + + const applicationNoFromWF = processInstances?.map((e) => e.businessId).join() || ""; + + if (isInbox && applicationNoFromWF && !searchFilters[businessIdAliasForSearch]) + searchFilters = { [businessIdsParamForSearch]: applicationNoFromWF, ...searchFilters }; + + const { _searchFn } = inboxConfig(tenantId, { ...searchFilters })[businessService]; + + /** + * Convert Wf Array to Object + */ + + const processInstanceBuisnessIdMap = processInstances?.reduce((object, item) => { + return { ...object, [item?.["businessId"]]: item }; + }, {}); + + const allowSearch = isInbox ? isFetched && wfSuccess && !!searchFilters[businessIdsParamForSearch] : true; + + const searchResult = useQuery( + ["SEARCH_INBOX", businessService, searchFilters, workflowFilters, isInbox], + () => { + if (allowSearch) + return _searchFn() + .then((d) => rawSearchHandler(d, searchResponseKey, businessIdAliasForSearch)) + .then((data) => callMiddlewares(data[searchResponseKey], middlewareSearch)) + .catch(catchSearch); + }, + { + enabled: allowSearch, + select: (d) => { + return d.map((searchResult) => ({ + totalCount: d.totalCount, + ...combineResponse(searchResult, processInstanceBuisnessIdMap?.[searchResult?.[businessIdAliasForSearch]]), + })); + }, + ...searchConfig, + } + ); + + const revalidate = () => { + client.refetchQueries(["WORKFLOW_INBOX"]); + client.refetchQueries(["SEARCH_INBOX"]); + }; + + client.setQueryData(`FUNCTION_RESET_INBOX_${businessService}`, { revalidate }); + + return { + ...searchResult, + revalidate, + searchResponseKey, + businessIdsParamForSearch, + businessIdAliasForSearch, + + searchFields: getSearchFields(isInbox)[businessService], + wfFetching, + }; +}; + +export default useInboxGeneral; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/useInboxGeneral/useNewInbox.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/useInboxGeneral/useNewInbox.js new file mode 100644 index 00000000000..19645496acf --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/useInboxGeneral/useNewInbox.js @@ -0,0 +1,93 @@ +import { useTranslation } from "react-i18next"; +import { useQuery, useQueryClient } from "react-query"; +import { FSMService } from "../../services/elements/FSM"; +import { PTService } from "../../services/elements/PT"; + +import { filterFunctions } from "./newFilterFn"; +import { getSearchFields } from "./searchFields"; +import { InboxGeneral } from "../../services/elements/InboxService"; + +const inboxConfig = (tenantId, filters) => ({ + PT: { + services: ["PT.CREATE"], + searchResponseKey: "Properties", + businessIdsParamForSearch: "acknowledgementIds", + businessIdAliasForSearch: "acknowldgementNumber", + fetchFilters: filterFunctions.PT, + _searchFn: () => PTService.search({ tenantId, filters }), + }, + FSM: { + services: ["FSM"], + searchResponseKey: "fsm", + businessIdsParamForSearch: "applicationNos", + businessIdAliasForSearch: "applicationNo", + fetchFilters: filterFunctions.FSM, + _searchFn: () => FSMService.search(tenantId, filters), + }, +}); + +const callMiddlewares = async (data, middlewares) => { + let applyBreak = false; + let itr = -1; + let _break = () => (applyBreak = true); + let _next = async (data) => { + if (!applyBreak && ++itr < middlewares.length) { + let key = Object.keys(middlewares[itr])[0]; + let nextMiddleware = middlewares[itr][key]; + let isAsync = nextMiddleware.constructor.name === "AsyncFunction"; + if (isAsync) return await nextMiddleware(data, _break, _next); + else return nextMiddleware(data, _break, _next); + } else return data; + }; + let ret = await _next(data); + return ret || []; +}; + +const useNewInboxGeneral = ({ tenantId, ModuleCode, filters, middleware = [], config = {} }) => { + const client = useQueryClient(); + const { t } = useTranslation(); + const { fetchFilters, searchResponseKey, businessIdAliasForSearch, businessIdsParamForSearch } = inboxConfig()[ModuleCode]; + let { workflowFilters, searchFilters, limit, offset, sortBy, sortOrder } = fetchFilters(filters); + + const query = useQuery( + ["INBOX", workflowFilters, searchFilters, ModuleCode, limit, offset, sortBy, sortOrder], + () => + InboxGeneral.Search({ + inbox: { tenantId, processSearchCriteria: workflowFilters, moduleSearchCriteria: { ...searchFilters, sortBy, sortOrder }, limit, offset }, + }), + { + select: (data) => { + const { statusMap, totalCount } = data; + // client.setQueryData(`INBOX_STATUS_MAP_${ModuleCode}`, (oldStatusMap) => { + // if (!oldStatusMap) return statusMap; + // else return [...oldStatusMap.filter((e) => statusMap.some((f) => f.stateId === e.stateId))]; + // }); + + client.setQueryData(`INBOX_STATUS_MAP_${ModuleCode}`, statusMap); + + if (data.items.length) { + return data.items?.map((obj) => ({ + searchData: obj.businessObject, + workflowData: obj.ProcessInstance, + statusMap, + totalCount, + })); + } else { + return [{ statusMap, totalCount, dataEmpty: true }]; + } + }, + retry: false, + ...config, + } + ); + + return { + ...query, + searchResponseKey, + businessIdsParamForSearch, + businessIdAliasForSearch, + searchFields: getSearchFields(true)[ModuleCode], + }; +}; + +export default useNewInboxGeneral; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/useLocalities.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/useLocalities.js new file mode 100644 index 00000000000..622e17fb65e --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/useLocalities.js @@ -0,0 +1,18 @@ +import { useQuery } from "react-query"; +import { getLocalities } from "../services/molecules/getLocalities"; +import { LocalityService } from "../services/elements/Localities"; + +const useLocalities = (tenant, boundaryType = "admin", config, t) => { + // console.log("find boundary type here",boundaryType) + return useQuery(["BOUNDARY_DATA", tenant, boundaryType], () => getLocalities[boundaryType](tenant), { + select: (data) => { + return LocalityService.get(data).map((key) => { + return { ...key, i18nkey: t(key.i18nkey) }; + }); + }, + staleTime: Infinity, + ...config, + }); +}; + +export default useLocalities; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/useMDMS.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/useMDMS.js new file mode 100644 index 00000000000..bc56fe8a74a --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/useMDMS.js @@ -0,0 +1,32 @@ +import { MdmsService } from "../services/elements/MDMS"; +import { useQuery } from "react-query"; + +const useMDMS = (tenantId, moduleCode, type, config = {}, payload = []) => { + const usePaymentGateway = () => { + return useQuery("PAYMENT_GATEWAY", () => MdmsService.getPaymentGateway(tenantId, moduleCode, type), { + select: (data) => { + return data?.[moduleCode]?.[type].filter((e) => e.active).map(({ gateway }) => gateway); + }, + ...config, + }); + }; + + const useReceiptKey = () => { + return useQuery("RECEIPT_KEY", () => MdmsService.getReceiptKey(tenantId, moduleCode, type), config); + }; + + const useFSTPPlantInfo = () => { + return useQuery("FSTP_PLANTINFO", () => MdmsService.getFSTPPlantInfo(tenantId, moduleCode, type), config); + }; + + switch (type) { + case "PaymentGateway": + return usePaymentGateway(); + case "ReceiptKey": + return useReceiptKey(); + case "FSTPPlantInfo": + return useFSTPPlantInfo(); + } +}; + +export default useMDMS; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/useModuleTenants.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/useModuleTenants.js new file mode 100644 index 00000000000..c249142624f --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/useModuleTenants.js @@ -0,0 +1,39 @@ +import React from "react"; +import { useQuery } from "react-query"; +import { useTranslation } from "react-i18next"; + +const useModuleTenants = (module, config = {}) => { + const { t } = useTranslation(); + + return useQuery(["ULB_TENANTS", module], () => Digit.SessionStorage.get("initData"), { + select: (data) => ({ + ddr: data.modules + .find((e) => e.module === module) + .tenants.map((tenant) => ({ + ...tenant, + ulbKey: t(`TENANT_TENANTS_${tenant.code.toUpperCase().replace(".", "_")}`), + ddrKey: t( + `DDR_${data.tenants + .filter((t) => t.code === tenant.code)[0] + .city.districtTenantCode.toUpperCase() + .replace(".", "_")}` + ), + })) + .filter((item, i, arr) => i === arr.findIndex((t) => t.ddrKey === item.ddrKey)), + ulb: data.modules + .find((e) => e.module === module) + .tenants.map((tenant) => ({ + ...tenant, + ulbKey: t(`TENANT_TENANTS_${tenant.code.toUpperCase().replace(".", "_")}`), + ddrKey: t( + `DDR_${data.tenants + .filter((t) => t.code === tenant.code)[0] + .city.districtTenantCode.toUpperCase() + .replace(".", "_")}` + ), + })), + }), + ...config, + }); +}; +export default useModuleTenants; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/useQueryParams.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/useQueryParams.js new file mode 100644 index 00000000000..b4275c4d56b --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/useQueryParams.js @@ -0,0 +1,11 @@ +const useQueryParams = () => { + const queryString = window.location.search; + const urlParams = new URLSearchParams(queryString); + const params = {}; + urlParams.forEach((value, key) => { + params[key] = value; + }); + return params; +}; + +export default useQueryParams; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/useSessionStorage.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/useSessionStorage.js new file mode 100644 index 00000000000..79525084de2 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/useSessionStorage.js @@ -0,0 +1,31 @@ +import { useState } from "react"; + +const useSessionStorage = (key, initialValue) => { + const [storedValue, setStoredValue] = useState(() => { + try { + const data = Digit.SessionStorage.get(key); + return data ? data : initialValue; + } catch (err) { + return initialValue; + } + }); + + const setValue = (value) => { + try { + const valueToStore = value instanceof Function ? value(storedValue) : value; + setStoredValue(valueToStore); + Digit.SessionStorage.set(key, valueToStore); + } catch (err) { + console.log(err); + } + }; + + const clearValue = () => { + setStoredValue(initialValue); + Digit.SessionStorage.set(key, initialValue); + }; + + return [storedValue, setValue, clearValue]; +}; + +export default useSessionStorage; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/useStatusGeneral.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/useStatusGeneral.js new file mode 100644 index 00000000000..f36c64ac541 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/useStatusGeneral.js @@ -0,0 +1,44 @@ +import { useQuery } from "react-query"; + +const useApplicationStatusGeneral = ({ businessServices = [], tenantId }, config) => { + tenantId = tenantId || Digit.ULBService.getCurrentTenantId(); + + const userInfo = Digit.UserService.getUser(); + const userRoles = userInfo.info.roles.map((roleData) => roleData.code); + + const fetch = async () => + await Digit.WorkflowService.init(tenantId, businessServices.join()).then((res) => { + const { BusinessServices: data } = res; + return data; + }); + + const select = (data) => { + let states = []; + const filteredData = data.filter((e) => businessServices.includes(e.businessService)); + filteredData.forEach((service) => { + states = [...states, ...service.states.map((e) => ({ ...e, stateBusinessService: service.businessService }))]; + }); + + // console.log(JSON.stringify(data.filter((service) => service.business === "PT").map((e) => e.businessService))); + + const addRoleToState = (state) => { + const roles = state.actions?.map((act) => act.roles).flat(); + return { ...state, roles }; + }; + + const roleStateMapArray = states?.map(addRoleToState).filter((e) => !!e.state); + + const userRoleStates = roleStateMapArray.filter(({ roles }) => roles?.some((role) => userRoles.includes(role))); + const otherRoleStates = roleStateMapArray + .filter(({ roles }) => !roles?.some((role) => userRoles.includes(role))) + .map((e) => ({ ...e, nonActionableRole: true })); + + return { userRoleStates, otherRoleStates }; + }; + + const queryData = useQuery(["workflow_states", tenantId, ...businessServices], () => fetch(), { select, ...config }); + + return queryData; +}; + +export default useApplicationStatusGeneral; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/useStore.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/useStore.js new file mode 100644 index 00000000000..27d4ccc135f --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/useStore.js @@ -0,0 +1,11 @@ +import { useQuery } from "react-query"; +import StoreData from "../services/molecules/StoreData"; + +const useStore = { + getInitData: () => + useQuery(["STORE_DATA"], () => StoreData.getInitData(), { + staleTime: Infinity, + }), +}; + +export default useStore; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/useTenants.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/useTenants.js new file mode 100644 index 00000000000..2bfe4e6d756 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/useTenants.js @@ -0,0 +1,3 @@ +import { useQuery } from "react-query"; + +export const useTenants = () => useQuery(["ALL_TENANTS"], () => Digit.SessionStorage.get("initData").tenants) diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/userSearch.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/userSearch.js new file mode 100644 index 00000000000..0506a95227f --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/userSearch.js @@ -0,0 +1,8 @@ +import { useQuery, useQueryClient } from "react-query"; +import { UserService } from "../services/elements/User"; + +export const useUserSearch = (tenantId, data, filters, options = {}) => { + const client = useQueryClient(); + const queryData = useQuery(["USER_SEARCH", filters, data], () => UserService.userSearch(tenantId, data, filters), options); + return { ...queryData, revalidate: () => client.invalidateQueries(["USER_SEARCH", filters, data]) }; +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/hooks/workflow.js b/frontend/micro-ui-internals/packages/libraries/src/hooks/workflow.js new file mode 100644 index 00000000000..4772aeb65b3 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/hooks/workflow.js @@ -0,0 +1,21 @@ +import { useQuery, useQueryClient } from "react-query"; + +const useWorkflowDetails = ({ tenantId, id, moduleCode, role = "CITIZEN", serviceData = {}, getStaleData, config }) => { + const queryClient = useQueryClient(); + + const staleDataConfig = { staleTime: Infinity }; + + // console.log("ok this ", getStaleData, staleDataConfig); + + const { isLoading, error, isError, data } = useQuery( + ["workFlowDetails", tenantId, id, moduleCode, role], + () => Digit.WorkflowService.getDetailsById({ tenantId, id, moduleCode, role }), + getStaleData ? { ...staleDataConfig, ...config } : config + ); + + if (getStaleData) return { isLoading, error, isError, data }; + + return { isLoading, error, isError, data, revalidate: () => queryClient.invalidateQueries(["workFlowDetails", tenantId, id, moduleCode, role]) }; +}; + +export default useWorkflowDetails; diff --git a/frontend/micro-ui-internals/packages/libraries/src/index.js b/frontend/micro-ui-internals/packages/libraries/src/index.js new file mode 100644 index 00000000000..2fdfd5e8b90 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/index.js @@ -0,0 +1,92 @@ +import i18next from "i18next"; +import Enums from "./enums/index"; +import mergeConfig from "./config/mergeConfig"; +import { useStore } from "./services/index"; +import { initI18n } from "./translations/index"; + +import { Storage, PersistantStorage } from "./services/atoms/Utils/Storage"; +import { UploadServices } from "./services/atoms/UploadServices"; + +import { LocationService } from "./services/elements/Location"; +import { LocalityService } from "./services/elements/Localities"; +import { LocalizationService } from "./services/elements/Localization/service"; +import { LoginService } from "./services/elements/Login"; +import { PGRService } from "./services/elements/PGR"; +import { FSMService } from "./services/elements/FSM"; +import { PaymentService } from "./services/elements/Payment"; +import * as dateUtils from "./services/atoms/Utils/Date"; +import Download from "./services/atoms/Download"; +import { WorkflowService } from "./services/elements/WorkFlow"; +import { MdmsService } from "./services/elements/MDMS"; +import { Complaint } from "./services/elements/Complaint"; +import { UserService } from "./services/elements/User"; +import { PTService } from "./services/elements/PT"; +import { TLService } from "./services/elements/TL"; +import { MCollectService } from "./services/elements/MCollect"; +import HrmsService from "./services/elements/HRMS"; +import { InboxGeneral } from "./services/elements/InboxService"; + +import ShareFiles from "./services/molecules/ShareFiles"; +import { GetServiceDefinitions } from "./services/molecules/ServiceDefinitions"; +import { ULBService } from "./services/molecules/Ulb"; +import { FileDesludging } from "./services/molecules/FSM/FileDesludging"; +import { ComponentRegistryService } from "./services/elements/ComponentRegistry"; +import StoreData from "./services/molecules/StoreData"; + +import Contexts from "./contexts"; +import Hooks from "./hooks"; +import Utils from "./utils"; +import { subFormRegistry } from "./subFormRegistry"; +import ReceiptsService from "./services/elements/Receipts"; + +const setupLibraries = (Library, props) => { + window.Digit = window.Digit || {}; + window.Digit[Library] = window.Digit[Library] || {}; + window.Digit[Library] = { ...window.Digit[Library], ...props }; +}; + +const initLibraries = () => { + setupLibraries("SessionStorage", Storage); + setupLibraries("PersistantStorage", PersistantStorage); + setupLibraries("UserService", UserService); + setupLibraries("ULBService", ULBService); + + setupLibraries("Config", { mergeConfig }); + setupLibraries("Services", { useStore }); + setupLibraries("Enums", Enums); + setupLibraries("LocationService", LocationService); + setupLibraries("LocalityService", LocalityService); + setupLibraries("LoginService", LoginService); + setupLibraries("LocalizationService", LocalizationService); + setupLibraries("PGRService", PGRService); + setupLibraries("FSMService", FSMService); + setupLibraries("PTService", PTService); + setupLibraries("TLService", TLService); + setupLibraries("HRMSService", HrmsService); + setupLibraries("ReceiptsService", ReceiptsService); + setupLibraries("MCollectService", MCollectService); + setupLibraries("PaymentService", PaymentService); + setupLibraries("DateUtils", dateUtils); + setupLibraries("WorkflowService", WorkflowService); + setupLibraries("MDMSService", MdmsService); + setupLibraries("UploadServices", UploadServices); + setupLibraries("GetServiceDefinitions", GetServiceDefinitions); + setupLibraries("Complaint", Complaint); + setupLibraries("FileDesludging", FileDesludging); + setupLibraries("ComponentRegistryService", ComponentRegistryService); + setupLibraries("StoreData", StoreData); + + setupLibraries("InboxGeneral", InboxGeneral); + setupLibraries("ShareFiles", ShareFiles); + setupLibraries("Contexts", Contexts); + setupLibraries("Hooks", Hooks); + setupLibraries("Customizations", {}); + setupLibraries("Utils", Utils); + setupLibraries("Download", Download); + + return new Promise((resolve) => { + initI18n(resolve); + }); +}; + +export { initLibraries, Enums, Hooks, subFormRegistry }; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/atoms/ApiCacheService.js b/frontend/micro-ui-internals/packages/libraries/src/services/atoms/ApiCacheService.js new file mode 100644 index 00000000000..4bdeb581dad --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/atoms/ApiCacheService.js @@ -0,0 +1,56 @@ +import { PersistantStorage } from "./Utils/Storage"; + +const defaultApiCachingSettings = [ + { + serviceName: "localization", + cacheTimeInSecs: 86400, + }, + { + serviceName: "egov-mdms-service", + cacheTimeInSecs: 3600, + debounceTimeInMS: 100, + moduleSettings: [ + { + moduleName: "FSM", + cacheTimeInSecs: 7200, + }, + ], + }, +]; + +const storageKey = "cachingService"; +const getCachedSetting = () => { + if (Digit.ApiCacheSetting) { + return Digit.ApiCacheSetting; + } + const setting = PersistantStorage.get(storageKey) || defaultApiCachingSettings; + Digit.ApiCacheSetting = setting; + return setting; +}; +const getSetting = (serviceName, moduleName) => { + const setting = getCachedSetting(); + const serviceSetting = setting.find((item) => item.serviceName === serviceName); + const responseSetting = { + cacheTimeInSecs: serviceSetting.cacheTimeInSecs, + debounceTimeInMS: serviceSetting.cacheTimeInSecs || 100, + }; + if (!moduleName) { + return responseSetting; + } + const moduleSettings = serviceSetting?.moduleSettings?.find((item) => item.moduleName === moduleName); + if (!moduleSettings) { + return responseSetting; + } + return { + cacheTimeInSecs: moduleSettings.cacheTimeInSecs || responseSetting.cacheTimeInSecs, + debounceTimeInMS: moduleSettings.debounceTimeInMS || responseSetting.debounceTimeInMS, + }; +}; +export const ApiCacheService = { + saveSetting: (setting) => { + PersistantStorage.set(storageKey, setting || defaultApiCachingSettings); + }, + getSettingByServiceUrl: (serviceUrl, moduleName) => { + return getSetting(serviceUrl.split("/")[1], moduleName); + }, +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/atoms/Download.js b/frontend/micro-ui-internals/packages/libraries/src/services/atoms/Download.js new file mode 100644 index 00000000000..39bb391e3d4 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/atoms/Download.js @@ -0,0 +1,86 @@ +import ReactDOM from "react-dom"; +import html2canvas from "html2canvas"; +import jsPDF from "jspdf"; +import XLSX from "xlsx"; + +const Download = { + Image: (node, fileName, share, resolve = null) => { + const saveAs = (uri, filename) => { + const link = document.createElement("a"); + + if (typeof link.download === "string") { + link.href = uri; + link.download = filename; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } else { + window.open(uri); + } + }; + + const element = ReactDOM.findDOMNode(node.current); + html2canvas(element, { + scrollY: -window.scrollY, + scrollX: 0, + useCORS: true, + scale: 1.5, + }).then((canvas) => { + return share + ? canvas.toBlob((blob) => resolve(new File([blob], `${fileName}.jpeg`, { type: "image/jpeg" })), "image/jpeg", 1) + : saveAs(canvas.toDataURL("image/jpeg", 1), `${fileName}.jpeg`); + }); + }, + + Excel: (data, filename) => { + const wb = XLSX.utils.book_new(); + let ws = null; + ws = XLSX.utils.json_to_sheet(data) + wb.SheetNames.push(filename); + wb.Sheets[filename] = ws; + XLSX.writeFile(wb, `${filename}.xlsx`); + }, + + PDF: (node, fileName, share) => { + const getPDF = (canvas) => { + const width = canvas.width; + const height = canvas.height; + const o = width > height ? "l" : "p"; + const format = "a4"; + + return new jsPDF(o, "mm", format); + }; + + const element = ReactDOM.findDOMNode(node.current); + return html2canvas(element, { + scrollY: -window.scrollY, + scrollX: 0, + useCORS: true, + scale: 1.5, + windowWidth: document.documentElement.offsetWidth, + windowHeight: document.documentElement.offsetHeight, + }).then((canvas) => { + const pdf = getPDF(canvas); + const jpegImage = canvas.toDataURL("image/jpeg"); + const imgProps = pdf.getImageProperties(jpegImage); + const margin = 0.1; + const pageHeight = 295; + // const pdfWidth = pdf.internal.pageSize.width * (1 - margin); + const pdfWidth = (imgProps.width * pageHeight) / imgProps.height + const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width; + const x = (pdf.internal.pageSize.width - pdfWidth) / 2; + let position = 5; + // let heightLeft = pdfHeight; + pdf.addImage(jpegImage, "JPEG", x, position, pdfWidth, pdfHeight, "a", "FAST"); + // heightLeft -= pageHeight; + // while (heightLeft > 0) { + // position += heightLeft - pdfHeight; + // pdf.addPage(); + // pdf.addImage(jpegImage, "JPEG", x, position, pdfWidth, pdfHeight, "a", "FAST"); + // heightLeft -= pageHeight; + // } + return share ? new File([pdf.output("blob")], `${fileName}.pdf`, { type: "application/pdf" }) : pdf.save(`${fileName}.pdf`); + }); + }, +}; +export default Download; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/atoms/UploadServices.js b/frontend/micro-ui-internals/packages/libraries/src/services/atoms/UploadServices.js new file mode 100644 index 00000000000..365f98ae40e --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/atoms/UploadServices.js @@ -0,0 +1,31 @@ +import Axios from "axios"; +import Urls from "./urls"; +export const UploadServices = { + Filestorage: async (module, filedata, tenantId) => { + const formData = new FormData(); + + formData.append("file", filedata, filedata.name); + formData.append("tenantId", tenantId); + formData.append("module", module); + var config = { + method: "post", + url: Urls.FileStore, + data: formData, + }; + + return Axios(config); + }, + + Filefetch: async (filesArray, tenantId) => { + var config = { + method: "get", + url: Urls.FileFetch, + params: { + tenantId: tenantId, + fileStoreIds: filesArray?.join(","), + }, + }; + const res = await Axios(config); + return res; + }, +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/atoms/Utils/Date.js b/frontend/micro-ui-internals/packages/libraries/src/services/atoms/Utils/Date.js new file mode 100644 index 00000000000..d615fd14b9b --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/atoms/Utils/Date.js @@ -0,0 +1,18 @@ +import { format, toDate } from "date-fns"; + +export const ConvertTimestampToDate = (timestamp, dateFormat = "d-MMM-yyyy") => { + return timestamp ? format(toDate(timestamp), dateFormat) : null; +}; + +export const ConvertEpochToDate = dateEpoch => { + if(dateEpoch == null || dateEpoch == undefined || dateEpoch == ''){ + return "NA" ; + } + const dateFromApi = new Date(dateEpoch); + let month = dateFromApi.getMonth() + 1; + let day = dateFromApi.getDate(); + let year = dateFromApi.getFullYear(); + month = (month > 9 ? "" : "0") + month; + day = (day > 9 ? "" : "0") + day; + return `${day}/${month}/${year}`; +}; \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/atoms/Utils/Request.js b/frontend/micro-ui-internals/packages/libraries/src/services/atoms/Utils/Request.js new file mode 100644 index 00000000000..ba84ba2a939 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/atoms/Utils/Request.js @@ -0,0 +1,151 @@ +import Axios from "axios"; + +Axios.interceptors.response.use( + (res) => res, + (err) => { + const isEmployee = window.location.pathname.split("/").includes("employee"); + if (err?.response?.data?.Errors) { + for (const error of err.response.data.Errors) { + if (error.message.includes("InvalidAccessTokenException")) { + window.location.href = + (isEmployee ? "/employee/user/login" : "/digit-ui/citizen/login") + + `?from=${encodeURIComponent(window.location.pathname + window.location.search)}`; + } + } + } + throw err; + } +); + +const requestInfo = () => ({ + authToken: Digit.UserService.getUser().access_token, +}); + +const authHeaders = () => ({ + "auth-token": Digit.UserService.getUser().access_token, +}); + +const userServiceData = () => ({ userInfo: Digit.UserService.getUser().info }); + +window.Digit = window.Digit || {}; +window.Digit = { ...window.Digit, RequestCache: window.Digit.RequestCache || {} }; +export const Request = async ({ + method = "POST", + url, + data = {}, + headers = {}, + useCache = false, + params = {}, + auth, + urlParams = {}, + userService, + locale = false, + authHeader = false, + setTimeParam = true, + userDownload = false, + noRequestInfo = false, +}) => { + // console.log("params:", params); + // console.log("in request", method); + // console.log("url:", url); + if (method.toUpperCase() === "POST") { + data.RequestInfo = { + apiId: "Rainmaker", + }; + if (noRequestInfo) { + delete data.RequestInfo; + } + if (auth) { + data.RequestInfo = { ...data.RequestInfo, ...requestInfo() }; + } + if (userService) { + data.RequestInfo = { ...data.RequestInfo, ...userServiceData() }; + } + if (locale) { + data.RequestInfo = { ...data.RequestInfo, msgId: `string|${Digit.StoreData.getCurrentLanguage()}` }; + } + } + + const headers1 = { + "Content-Type": "application/json", + Accept: "application/pdf", + }; + + if (authHeader) headers = { ...headers, ...authHeaders() }; + + if (userDownload) headers = { ...headers, ...headers1 }; + + let key = ""; + if (useCache) { + // console.log("find request params here",JSON.stringify(params, null, 0)); + // console.log("find request data here",JSON.stringify(data, null, 0)); + key = `${method.toUpperCase()}.${url}.${btoa(escape(JSON.stringify(params, null, 0)))}.${btoa(escape(JSON.stringify(data, null, 0)))}`; + const value = window.Digit.RequestCache[key]; + if (value) { + return value; + } + } else if (setTimeParam) { + params._ = Date.now(); + } + + let _url = url + .split("/") + .map((path) => { + let key = path.split(":")?.[1]; + return urlParams[key] ? urlParams[key] : path; + }) + .join("/"); + + const res = userDownload + ? await Axios({ method, url: _url, data, params, headers, responseType: "arraybuffer" }) + : await Axios({ method, url: _url, data, params, headers }); + + if (userDownload) return res; + + const returnData = res?.data || res?.response?.data || {}; + if (useCache && res?.data && Object.keys(returnData).length !== 0) { + window.Digit.RequestCache[key] = returnData; + } + return returnData; +}; + +/** + * + * @param {*} serviceName + * + * preHook: + * ({params, data}) => ({params, data}) + * + * postHook: + * ({resData}) => ({resData}) + * + */ + +export const ServiceRequest = async ({ + serviceName, + method = "POST", + url, + data = {}, + headers = {}, + useCache = false, + params = {}, + auth, + userService, +}) => { + const preHookName = `${serviceName}Pre`; + const postHookName = `${serviceName}Post`; + + let reqParams = params; + let reqData = data; + if (window[preHookName] && typeof window[preHookName] === "function") { + let preHookRes = await window[preHookName]({ params, data }); + reqParams = preHookRes.params; + reqData = preHookRes.data; + } + const resData = await Request({ method, url, data: reqData, headers, useCache, params: reqParams, auth, userService }); + + if (window[postHookName] && typeof window[postHookName] === "function") { + return await window[postHookName](resData); + } + return resData; +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/atoms/Utils/Storage.js b/frontend/micro-ui-internals/packages/libraries/src/services/atoms/Utils/Storage.js new file mode 100644 index 00000000000..e53725bb611 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/atoms/Utils/Storage.js @@ -0,0 +1,55 @@ +const localStoreSupport = () => { + try { + return "sessionStorage" in window && window["sessionStorage"] !== null; + } catch (e) { + return false; + } +}; + +const k = (key) => `Digit.${key}`; +const getStorage = (storageClass) => ({ + get: (key) => { + if (localStoreSupport() && key) { + let valueInStorage = storageClass.getItem(k(key)); + if (!valueInStorage || valueInStorage === "undefined") { + return null; + } + const item = JSON.parse(valueInStorage); + if (Date.now() > item.expiry) { + storageClass.removeItem(k(key)); + return null; + } + return item.value; + } else if (typeof window !== "undefined") { + return window?.eGov?.Storage && window.eGov.Storage[k(key)].value; + } else { + return null; + } + }, + set: (key, value, ttl = 86400) => { + const item = { + value, + ttl, + expiry: Date.now() + ttl * 1000, + }; + if (localStoreSupport()) { + storageClass.setItem(k(key), JSON.stringify(item)); + } else if (typeof window !== "undefined") { + window.eGov = window.eGov || {}; + window.eGov.Storage = window.eGov.Storage || {}; + window.eGov.Storage[k(key)] = item; + } + }, + del: (key) => { + if (localStoreSupport()) { + storageClass.removeItem(k(key)); + } else if (typeof window !== "undefined") { + window.eGov = window.eGov || {}; + window.eGov.Storage = window.eGov.Storage || {}; + delete window.eGov.Storage[k(key)]; + } + }, +}); + +export const Storage = getStorage(window.sessionStorage); +export const PersistantStorage = getStorage(window.localStorage); diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/atoms/urls.js b/frontend/micro-ui-internals/packages/libraries/src/services/atoms/urls.js new file mode 100644 index 00000000000..4ea1b49430e --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/atoms/urls.js @@ -0,0 +1,105 @@ +const Urls = { + MDMS: `/egov-mdms-service/v1/_search`, + WorkFlow: `/egov-workflow-v2/egov-wf/businessservice/_search`, + WorkFlowProcessSearch: `/egov-workflow-v2/egov-wf/process/_search`, + localization: `/localization/messages/v1/_search`, + location: { + localities: `/egov-location/location/v11/boundarys/_search?hierarchyTypeCode=ADMIN&boundaryType=Locality`, + revenue_localities: `/egov-location/location/v11/boundarys/_search?hierarchyTypeCode=REVENUE&boundaryType=Locality`, + }, + + pgr_search: `/pgr-services/v2/request/_search`, + pgr_update: `/pgr-services/v2/request/_update`, + filter_data: `https://run.mocky.io/v3/597a50a0-90e5-4a45-b82e-8a2186b760bd`, + FileStore: "/filestore/v1/files", + + FileFetch: "/filestore/v1/files/url", + PGR_Create: `/pgr-services/v2/request/_create`, + pgr_count: `/pgr-services/v2/request/_count`, + + OTP_Send: "/user-otp/v1/_send", + Authenticate: "/user/oauth/token", + RegisterUser: "/user/citizen/_create", + ChangePassword: "/user/password/nologin/_update", + UserProfileUpdate: "/user/profile/_update", + EmployeeSearch: "/egov-hrms/employees/_search", + + InboxSearch: "/inbox/v1/_search", + + UserSearch: "/user/_search", + + Shortener: "/egov-url-shortening/shortener", + + fsm: { + search: "/fsm/v1/_search", + create: "/fsm/v1/_create", + update: "/fsm/v1/_update", + vendorSearch: "/vendor/v1/_search", + vehicleSearch: "/vehicle/v1/_search", + audit: "/fsm/v1/_audit", + vehicleTripSearch: "/vehicle/trip/v1/_search", + billingSlabSearch: "/fsm-calculator/v1/billingSlab/_search", + vehilceUpdate: "/vehicle/trip/v1/_update", + }, + + payment: { + fetch_bill: "/billing-service/bill/v2/_fetchbill", + demandSearch: "/billing-service/demand/_search", + create_reciept: "/collection-services/payments/_create", + print_reciept: "/collection-services/payments", + generate_pdf: "/pdf-service/v1/_create", + create_citizen_reciept: "/pg-service/transaction/v1/_create", + update_citizen_reciept: "/pg-service/transaction/v1/_update", + search_bill: "/billing-service/bill/v2/_search", + reciept_search: "/collection-services/payments/:buisnessService/_search", + }, + + pt: { + fectch_property: "/property-services/property/_search", + fetch_payment_details: "/billing-service/bill/v2/_fetchbill", + create: "/property-services/property/_create", + search: "/property-services/property/_search", + update: "/property-services/property/_update", + pt_calculation_estimate: "/pt-calculator-v2/propertytax/v2/_estimate", + assessment_create: "/property-services/assessment/_create", + assessment_search: "/property-services/assessment/_search", + }, + + dss: { + dashboardConfig: "/dashboard-analytics/dashboard/getDashboardConfig", + getCharts: "/dashboard-analytics/dashboard/getChartV2", + }, + + mcollect: { + search: "/echallan-services/eChallan/v1/_search", + create: "/echallan-services/eChallan/v1/_create?", + fetch_bill: "/billing-service/bill/v2/_fetchbill?", + search_bill: "/egov-searcher/bill-genie/mcollectbills/_get", + search_bill_pt: "/egov-searcher/bill-genie/billswithaddranduser/_get", + update: "/echallan-services/eChallan/v1/_update", + download_pdf: "/egov-pdf/download/UC/mcollect-challan", + receipt_download: "/egov-pdf/download/PAYMENT/consolidatedreceipt", + count: "/echallan-services/eChallan/v1/_count" + }, + hrms: { + search: "/egov-hrms/employees/_search", + count: "/egov-hrms/employees/_count", + create: "/egov-hrms/employees/_create", + update: "/egov-hrms/employees/_update", + }, + tl: { + create: "/tl-services/v1/_create", + search: "/tl-services/v1/_search", + fetch_payment_details: "/billing-service/bill/v2/_fetchbill", + download_pdf: "/egov-pdf/download/TL/", + update:"/tl-services/v1/_update", + billingslab: "/tl-calculator/billingslab/_search" + }, + receipts: { + receipt_download: "/egov-pdf/download/PAYMENT/consolidatedreceipt", + payments: "/collection-services/payments", + count: "/egov-hrms/employees/_count" + }, +}; + +export default Urls; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/elements/Complaint.js b/frontend/micro-ui-internals/packages/libraries/src/services/elements/Complaint.js new file mode 100644 index 00000000000..f9e41ee5602 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/elements/Complaint.js @@ -0,0 +1,96 @@ +export const Complaint = { + create: async ({ + cityCode, + complaintType, + description, + landmark, + city, + district, + region, + state, + pincode, + localityCode, + localityName, + uploadedImages, + mobileNumber, + name, + }) => { + const tenantId = Digit.ULBService.getCurrentTenantId(); + const defaultData = { + service: { + tenantId: cityCode, + serviceCode: complaintType, + description: description, + additionalDetail: {}, + source: Digit.Utils.browser.isWebview() ? "mobile" : "web", + address: { + landmark: landmark, + city: city, + district: district, + region: region, + state: state, + pincode: pincode, + locality: { + code: localityCode, + name: localityName, + }, + geoLocation: {}, + }, + }, + workflow: { + action: "APPLY", + verificationDocuments: uploadedImages, + }, + }; + + if (Digit.SessionStorage.get("user_type") === "employee") { + defaultData.service.citizen = { + name: name, + type: "CITIZEN", + mobileNumber: mobileNumber, + roles: [ + { + id: null, + name: "Citizen", + code: "CITIZEN", + tenantId: tenantId, + }, + ], + tenantId: tenantId, + }; + } + const response = await Digit.PGRService.create(defaultData, cityCode); + return response; + }, + + assign: async (complaintDetails, action, employeeData, comments, uploadedDocument, tenantId) => { + // console.log("assign complaint service call", action, employeeData, comments, uploadedDocument, complaintDetails); + complaintDetails.workflow.action = action; + complaintDetails.workflow.assignes = employeeData ? [employeeData.uuid] : null; + complaintDetails.workflow.comments = comments; + uploadedDocument + ? complaintDetails.workflow.verificationDocuments + ? complaintDetails.workflow.verificationDocuments.push({ + documentType: "PHOTO", + fileStoreId: uploadedDocument, + documentUid: "", + additionalDetails: {}, + }) + : (complaintDetails.workflow.verificationDocuments = [ + { + documentType: "PHOTO", + fileStoreId: uploadedDocument, + documentUid: "", + additionalDetails: {}, + }, + ]) + : null; + + // console.log("assign complaintg whole call", complaintDetails); + + //TODO: get tenant id + const response = await Digit.PGRService.update(complaintDetails, tenantId); + // console.log("find complaint assign response", response); + return response; + }, +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/elements/ComponentRegistry.js b/frontend/micro-ui-internals/packages/libraries/src/services/elements/ComponentRegistry.js new file mode 100644 index 00000000000..2d8c5c23d63 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/elements/ComponentRegistry.js @@ -0,0 +1,19 @@ +import ComponentRegistry from "../../utils/componentRegistry"; +const componentRegistry = new ComponentRegistry(); + +export const ComponentRegistryService = { + getComponent: (id) => { + return componentRegistry.getComponent(id); + }, + + setComponent: (id, component = {}) => { + return componentRegistry.setComponent(id, component); + }, + + setupRegistry: (components) => { + // should be call only once at the starting + return componentRegistry.setAllComponents(components); + }, + + getRegistry: () => componentRegistry, +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/elements/DSS.js b/frontend/micro-ui-internals/packages/libraries/src/services/elements/DSS.js new file mode 100644 index 00000000000..355821d2d90 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/elements/DSS.js @@ -0,0 +1,22 @@ +import Urls from "../atoms/urls"; +import { Request } from "../atoms/Utils/Request"; + +export const DSSService = { + getDashboardConfig: (moduleCode) => + Request({ + url: Urls.dss.dashboardConfig + `/${moduleCode}`, + useCache: false, + userService: false, + method: "GET", + authHeader: true, + }), + getCharts: (data) => + Request({ + url: Urls.dss.getCharts, + useCache: false, + userService: false, + method: "POST", + auth: true, + data, + }), +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/elements/FSM.js b/frontend/micro-ui-internals/packages/libraries/src/services/elements/FSM.js new file mode 100644 index 00000000000..3a33f2c0621 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/elements/FSM.js @@ -0,0 +1,89 @@ +import Urls from "../atoms/urls"; +import { Request } from "../atoms/Utils/Request"; + +export const FSMService = { + search: (tenantId, filters = {}) => + Request({ + url: Urls.fsm.search, + useCache: false, + method: "POST", + auth: true, + userService: false, + params: { tenantId, ...filters }, + }), + create: (details, tenantId) => + Request({ + url: Urls.fsm.create, + data: details, + useCache: true, + userService: true, + method: "POST", + params: { tenantId }, + auth: true, + }), + update: (details, tenantId) => + Request({ + url: Urls.fsm.update, + data: details, + useCache: false, + userService: true, + method: "POST", + params: { tenantId }, + auth: true, + }), + vendorSearch: (tenantId, filters) => + Request({ + url: Urls.fsm.vendorSearch, + useCache: true, + userService: true, + method: "POST", + params: { tenantId, ...filters }, + auth: true, + }), + audit: (tenantId, filters) => + Request({ + url: Urls.fsm.audit, + useCache: false, + userService: true, + method: "POST", + params: { tenantId, ...filters }, + auth: true, + }), + vehicleSearch: (tenantId, details) => + Request({ + url: Urls.fsm.vehicleTripSearch, + useCache: false, + userService: true, + method: "POST", + params: { tenantId, ...details }, + auth: true, + }), + vehiclesSearch: (tenantId, details) => + Request({ + url: Urls.fsm.vehicleSearch, + useCache: false, + userService: true, + method: "POST", + params: { tenantId, ...details }, + auth: true, + }), + billingSlabSearch: (tenantId, filters) => + Request({ + url: Urls.fsm.billingSlabSearch, + useCache: false, + userService: true, + method: "POST", + params: { tenantId, ...filters }, + auth: true, + }), + vehicleUpdate: (details) => { + Request({ + url: Urls.fsm.vehilceUpdate, + data: details, + useCache: false, + userService: true, + method: "POST", + auth: true, + }); + }, +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/elements/HRMS.js b/frontend/micro-ui-internals/packages/libraries/src/services/elements/HRMS.js new file mode 100644 index 00000000000..1fe9a3f4267 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/elements/HRMS.js @@ -0,0 +1,46 @@ +import { roundToNearestMinutes } from "date-fns/esm"; +import Urls from "../atoms/urls"; +import { Request } from "../atoms/Utils/Request"; + +const HrmsService = { + search: (tenantId, filters, searchParams) => + Request({ + url: Urls.hrms.search, + useCache: false, + method: "POST", + auth: true, + userService: true, + params: { tenantId, ...filters, ...searchParams }, + }), + create: (data, tenantId) => + Request({ + data: data, + url: Urls.hrms.create, + useCache: false, + method: "POST", + auth: true, + userService: true, + params: { tenantId }, + }), + update: (data, tenantId) => + Request({ + data: data, + url: Urls.hrms.update, + useCache: false, + method: "POST", + auth: true, + userService: true, + params: { tenantId }, + }), + count: (tenantId) => + Request({ + url: Urls.hrms.count, + useCache: false, + method: "POST", + auth: true, + userService: true, + params: { tenantId }, + }), +}; + +export default HrmsService; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/elements/InboxService.js b/frontend/micro-ui-internals/packages/libraries/src/services/elements/InboxService.js new file mode 100644 index 00000000000..6b6b45e8d51 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/elements/InboxService.js @@ -0,0 +1,15 @@ +import Urls from "../atoms/urls"; +import { Request } from "../atoms/Utils/Request"; + +export const InboxGeneral = { + Search: ({ ...filters }) =>{ + return Request({ + url: Urls.InboxSearch, + useCache: false, + method: "POST", + auth: true, + userService: true, + data: { ...filters }, + }) + }, +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/elements/Localities.js b/frontend/micro-ui-internals/packages/libraries/src/services/elements/Localities.js new file mode 100644 index 00000000000..2b3a6b0ade1 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/elements/Localities.js @@ -0,0 +1,28 @@ +import { LocalizationService } from "./Localization/service"; + +const ADMIN_CODE = ({ tenantId, hierarchyType }) => { + return tenantId.replace(".", "_").toUpperCase() + "_" + hierarchyType.code; +}; + +const getI18nKeys = (localitiesWithLocalizationKeys) => { + return localitiesWithLocalizationKeys.map((locality) => ({ + code: locality.code, + message: locality.name, + })); +}; + +const getLocalities = (tenantBoundry) => { + const adminCode = ADMIN_CODE(tenantBoundry); + const localitiesWithLocalizationKeys = tenantBoundry.boundary.map((boundaryObj) => ({ + ...boundaryObj, + i18nkey: adminCode + "_" + boundaryObj.code, + })); + // console.log("find translation data here", localitiesWithLocalizationKeys) + // let I18nKeyMessage = getI18nKeys(localitiesWithLocalizationKeys); + // LocalizationService.updateResources("en_IN", I18nKeyMessage); + return localitiesWithLocalizationKeys; +}; + +export const LocalityService = { + get: (tenantBoundry) => getLocalities(tenantBoundry), +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/elements/Localization/service.js b/frontend/micro-ui-internals/packages/libraries/src/services/elements/Localization/service.js new file mode 100644 index 00000000000..16f15b626f7 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/elements/Localization/service.js @@ -0,0 +1,91 @@ +import Urls from "../../atoms/urls"; +import { PersistantStorage } from "../../atoms/Utils/Storage"; +import i18next from "i18next"; +import { Request } from "../../atoms/Utils/Request"; +import { ApiCacheService } from "../../atoms/ApiCacheService"; + +const LOCALE_LIST = (locale) => `Locale.${locale}.List`; +const LOCALE_ALL_LIST = () => `Locale.List`; +const LOCALE_MODULE = (locale, module) => `Locale.${locale}.${module}`; + +const TransformArrayToObj = (traslationList) => { + return traslationList.reduce( + // eslint-disable-next-line + (obj, item) => ((obj[item.code] = item.message), obj), + {} + ); + // return trasformedTraslation; +}; + +const getUnique = (arr) => { + return arr.filter((value, index, self) => self.indexOf(value) === index); +}; + +const LocalizationStore = { + getCaheData: (key) => PersistantStorage.get(key), + setCacheData: (key, value) => { + const cacheSetting = ApiCacheService.getSettingByServiceUrl(Urls.localization); + PersistantStorage.set(key, value, cacheSetting.cacheTimeInSecs); + }, + getList: (locale) => LocalizationStore.getCaheData(LOCALE_LIST(locale)) || [], + setList: (locale, namespaces) => LocalizationStore.setCacheData(LOCALE_LIST(locale), namespaces), + getAllList: () => LocalizationStore.getCaheData(LOCALE_ALL_LIST()) || [], + setAllList: (namespaces) => LocalizationStore.setCacheData(LOCALE_ALL_LIST(), namespaces), + store: (locale, modules, messages) => { + const AllNamespaces = LocalizationStore.getAllList(); + const Namespaces = LocalizationStore.getList(locale); + modules.forEach((module) => { + if (!Namespaces.includes(module)) { + Namespaces.push(module); + const moduleMessages = messages.filter((message) => message.module === module); + LocalizationStore.setCacheData(LOCALE_MODULE(locale, module), moduleMessages); + } + }); + LocalizationStore.setCacheData(LOCALE_LIST(locale), Namespaces); + LocalizationStore.setAllList(getUnique([...AllNamespaces, ...Namespaces])); + }, + get: (locale, modules) => { + const storedModules = LocalizationStore.getList(locale); + const newModules = modules.filter((module) => !storedModules.includes(module)); + const messages = []; + storedModules.forEach((module) => { + messages.push(...LocalizationStore.getCaheData(LOCALE_MODULE(locale, module))); + }); + return [newModules, messages]; + }, + + updateResources: (locale, messages) => { + let locales = TransformArrayToObj(messages); + i18next.addResources(locale, "translations", locales); + }, +}; + +export const LocalizationService = { + getLocale: async ({ modules = [], locale = "en_IN", tenantId }) => { + if (locale.indexOf("_IN") === -1) { + locale += "_IN"; + } + const [newModules, messages] = LocalizationStore.get(locale, modules); + if (newModules.length > 0) { + const data = await Request({ url: Urls.localization, params: { module: newModules.join(","), locale, tenantId }, useCache: false }); + messages.push(...data.messages); + setTimeout(() => LocalizationStore.store(locale, newModules, data.messages), 100); + } + LocalizationStore.updateResources(locale, messages); + return messages; + }, + changeLanguage: (locale, tenantId) => { + const modules = LocalizationStore.getList(locale); + const allModules = LocalizationStore.getAllList(); + const uniqueModules = allModules.filter((module) => !modules.includes(module)); + LocalizationService.getLocale({ modules: uniqueModules, locale, tenantId }); + Digit.SessionStorage.set("locale", locale); + i18next.changeLanguage(locale); + }, + updateResources: (locale = "en_IN", messages) => { + if (locale.indexOf("_IN") === -1) { + locale += "_IN"; + } + LocalizationStore.updateResources(locale, messages); + }, +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/elements/Location.js b/frontend/micro-ui-internals/packages/libraries/src/services/elements/Location.js new file mode 100644 index 00000000000..0d0a84eeae8 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/elements/Location.js @@ -0,0 +1,24 @@ +import Urls from "../atoms/urls"; +import { ServiceRequest } from "../atoms/Utils/Request"; + +export const LocationService = { + getLocalities: (tenantId) => { + return ServiceRequest({ + serviceName: "getLocalities", + url: Urls.location.localities, + params: { tenantId: tenantId }, + useCache: true, + }); + }, + getRevenueLocalities: async (tenantId) => { + // console.log("ok im at revenue localities") + const response = await ServiceRequest({ + serviceName: "getRevenueLocalities", + url: Urls.location.revenue_localities, + params: { tenantId: tenantId }, + useCache: true, + }); + // console.log("ok im at revenue localities ___",response) + return response; + }, +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/elements/Login.js b/frontend/micro-ui-internals/packages/libraries/src/services/elements/Login.js new file mode 100644 index 00000000000..3e91c705465 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/elements/Login.js @@ -0,0 +1,50 @@ +import Axios from "axios"; +import Urls from "../atoms/urls"; +import { Request } from "../atoms/Utils/Request"; + +export const LoginService = { + sendOtp: (details, stateCode) => + Request({ + url: Urls.OTP_Send, + data: details, + auth: false, + method: "POST", + params: { tenantId: stateCode }, + }), + authenticate: async (details, stateCode) => { + const params = new URLSearchParams(); + Object.entries(details).forEach(([key, value]) => params.append(key, value)); + params.append("scope", "read"); + params.append("grant_type", "password"); + const config = { + url: Urls.Authenticate, + method: "post", + params, + headers: { + authorization: "Basic ZWdvdi11c2VyLWNsaWVudDo=", + "Content-Type": "application/x-www-form-urlencoded", + }, + }; + + return Axios(config); + }, + registerUser: async (details, stateCode) => + Request({ + url: Urls.Register_User, + data: { + User: details, + }, + method: "POST", + params: { tenantId: stateCode }, + }), + updateUser: async (details, stateCode) => + Request({ + url: Urls.UserProfileUpdate, + auth: true, + data: { + user: details, + }, + method: "POST", + params: { tenantId: stateCode }, + }), +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/elements/MCollect.js b/frontend/micro-ui-internals/packages/libraries/src/services/elements/MCollect.js new file mode 100644 index 00000000000..052236ea452 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/elements/MCollect.js @@ -0,0 +1,87 @@ +import Urls from "../atoms/urls"; +import { Request } from "../atoms/Utils/Request"; + +export const MCollectService = { + search: ({ tenantId, filters }) => + Request({ + url: Urls.mcollect.search, + useCache: false, + method: "POST", + auth: true, + userService: true, + params: { tenantId, ...filters }, + }), + create: (details, tenantId) => + Request({ + url: Urls.mcollect.create, + data: details, + useCache: true, + method: "POST", + params: { tenantId }, + auth: true, + userService: true, + }), + generateBill: (consumerCode, tenantId, businessService, operation) => + Request({ + url: Urls.mcollect.fetch_bill, + data: {}, + useCache: true, + method: "POST", + params: { consumerCode, tenantId, businessService }, + auth: true, + userService: true, + }), + search_bill: ({ tenantId, filters }) => + Request({ + url: filters.businesService !== "PT" ? Urls.mcollect.search_bill : Urls.mcollect.search_bill_pt, + useCache: false, + method: "POST", + data: { searchCriteria: { tenantId, ...filters } }, + auth: true, + userService: false, + //params: { tenantId, ...filters }, + }), + update: (details, tenantId) => + Request({ + url: Urls.mcollect.update, + data: details, + useCache: true, + method: "POST", + //params: { tenantId }, + auth: true, + userService: true, + }), + downloadPdf: (challanNo, tenantId) => + Request({ + url: Urls.mcollect.download_pdf, + data: {}, + useCache: true, + method: "POST", + params: { challanNo, tenantId }, + auth: true, + locale: true, + userService: true, + userDownload: true, + }), + receipt_download: (bussinessService, consumerCode, tenantId) => + Request({ + url: Urls.mcollect.receipt_download, + data: {}, + useCache: true, + method: "POST", + params: { bussinessService, consumerCode, tenantId }, + auth: true, + locale: true, + userService: true, + userDownload: true, + }), + count: (tenantId) => + Request({ + url: Urls.mcollect.count, + useCache: false, + method: "POST", + auth: true, + userService: true, + params: { tenantId }, + }), +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/elements/MDMS.js b/frontend/micro-ui-internals/packages/libraries/src/services/elements/MDMS.js new file mode 100644 index 00000000000..ccb53e8bfd4 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/elements/MDMS.js @@ -0,0 +1,1314 @@ +import { stringReplaceAll } from "@egovernments/digit-ui-module-pt/src/utils"; +import { ApiCacheService } from "../atoms/ApiCacheService"; +import Urls from "../atoms/urls"; +import { Request, ServiceRequest } from "../atoms/Utils/Request"; +import { PersistantStorage } from "../atoms/Utils/Storage"; + +const SortByName = (na, nb) => { + if (na < nb) { + return -1; + } + if (na > nb) { + return 1; + } + return 0; +}; + +const GetCitiesWithi18nKeys = (MdmsRes, moduleCode) => { + const cityList = (MdmsRes.tenant.citymodule && MdmsRes.tenant.citymodule.find((module) => module.code === moduleCode).tenants) || []; + const citiesMap = cityList.map((city) => city.code); + const cities = MdmsRes.tenant.tenants + .filter((city) => citiesMap.includes(city.code)) + .map(({ code, name, logoId, emailId, address, contactNumber }) => ({ + code, + name, + logoId, + emailId, + address, + contactNumber, + i18nKey: "TENANT_TENANTS_" + code.replace(".", "_").toUpperCase(), + })) + .sort((cityA, cityB) => { + const na = cityA.name.toLowerCase(), + nb = cityB.name.toLowerCase(); + return SortByName(na, nb); + }); + return cities; +}; + +const initRequestBody = (tenantId) => ({ + MdmsCriteria: { + tenantId, + moduleDetails: [ + { + moduleName: "common-masters", + masterDetails: [{ name: "Department" }, { name: "Designation" }, { name: "StateInfo" }, { name: "wfSlaConfig" }], + }, + { + moduleName: "tenant", + masterDetails: [{ name: "tenants" }, { name: "citymodule" }], + }, + { + moduleName: "DIGIT-UI", + masterDetails: [{ name: "ApiCachingSettings" }], + }, + ], + }, +}); + +const getCriteria = (tenantId, moduleDetails) => { + return { + MdmsCriteria: { + tenantId, + ...moduleDetails, + }, + }; +}; + +export const getGeneralCriteria = (tenantId, moduleCode, type) => ({ + details: { + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [ + { + name: type, + }, + ], + }, + ], + }, +}); + +export const getMultipleTypes = (tenantId, moduleCode, types) => ({ + details: { + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: types.map((type) => ({ name: type })), + }, + ], + }, +}); + +const getReceiptKey = (tenantId, moduleCode) => ({ + details: { + tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [ + { + name: "uiCommonPay", + }, + ], + }, + ], + }, +}); + +const getModuleServiceDefsCriteria = (tenantId, moduleCode) => ({ + type: "serviceDefs", + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: `RAINMAKER-${moduleCode}`, + masterDetails: [ + { + name: "ServiceDefs", + }, + ], + }, + ], + }, +}); + +const getSanitationTypeCriteria = (tenantId, moduleCode) => ({ + type: "SanitationType", + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [ + { + name: "SanitationType", + filter: null, + }, + ], + }, + ], + }, +}); + +const getPitTypeCriteria = (tenantId, moduleCode) => ({ + type: "PitType", + details: { + tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [ + { + name: "PitType", + filter: null, + }, + ], + }, + ], + }, +}); + +const getApplicationChannelCriteria = (tenantId, moduleCode) => ({ + type: "ApplicationChannel", + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [ + { + name: "ApplicationChannel", + filter: null, + }, + ], + }, + ], + }, +}); + +const getPropertyTypeCriteria = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [ + { + name: "PropertyType", + filter: null, + }, + ], + }, + ], + }, +}); + +const getPropertyUsageCriteria = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [ + { + name: "PropertyType", + filter: null, + }, + ], + }, + ], + }, +}); + +const getCommonFieldsCriteria = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [ + { + name: "CommonFieldsConfig", + filter: null, + }, + ], + }, + ], + }, +}); + +const getPreFieldsCriteria = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [ + { + name: "PreFieldsConfig", + filter: null, + }, + ], + }, + ], + }, +}); + +const getPostFieldsCriteria = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [ + { + name: "PostFieldsConfig", + filter: null, + }, + ], + }, + ], + }, +}); + +const getConfig = (tenantId, moduleCode) => ({ + type: "Config", + details: { + tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [ + { + name: "Config", + }, + ], + }, + ], + }, +}); + +const getVehicleTypeCriteria = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [ + { + name: "VehicleMakeModel", + filter: null, + }, + ], + }, + ], + }, +}); + +const getChecklistCriteria = (tenantId, moduleCode) => ({ + details: { + tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [ + { + name: "CheckList", + filter: null, + }, + ], + }, + ], + }, +}); + +const getSlumLocalityCriteria = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [ + { + name: "Slum", + }, + ], + }, + ], + }, +}); +const getPropertyOwnerTypeCriteria = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [{ name: "OwnerType" }], + }, + ], + }, +}); + +const getSubPropertyOwnerShipCategoryCriteria = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [{ name: "SubOwnerShipCategory" }], + }, + ], + }, +}); +const getPropertyOwnerShipCategoryCriteria = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [{ name: "OwnerShipCategory" }], + }, + ], + }, +}); + +const getTradeOwnerShipCategoryCriteria = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [{ name: "OwnerShipCategory" }], + }, + ], + }, +}); + +const getDocumentRequiredScreenCategory = (tenantId, moduleCode) => ({ + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [ + { + name: "Documents", + }, + ], + }, + ], + }, +}); + +const getDefaultMapConfig = (tenantId, moduleCode) => ({ + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [ + { + name: "MapConfig", + }, + ], + }, + ], + }, +}); + +const getUsageCategoryList = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [{ name: "UsageCategory" }], + }, + ], + }, +}); + +const getPTPropertyTypeList = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [{ name: "PropertyType" }], + }, + ], + }, +}); + +const getTLStructureTypeList = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [{ name: "StructureType" }], + }, + ], + }, +}); + +const getTLAccessoriesTypeList = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [{ name: "AccessoriesCategory" }], + }, + ], + }, +}); + +const getTLFinancialYearList = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [{ name: "FinancialYear", filter: `[?(@.module == "TL")]` }], + }, + ], + }, +}); + +const getPTFloorList = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [{ name: "Floor" }], + }, + ], + }, +}); + +const getReasonCriteria = (tenantId, moduleCode, type, payload) => ({ + type, + details: { + tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: payload.map((mdmsLoad) => ({ + name: mdmsLoad, + })), + }, + ], + }, +}); + +const getBillingServiceForBusinessServiceCriteria = (filter) => ({ + moduleDetails: [ + { + moduleName: "BillingService", + masterDetails: [ + { name: "BusinessService", filter }, + { + name: "TaxHeadMaster", + }, + { + name: "TaxPeriod", + }, + ], + }, + ], +}); + +const getRoleStatusCriteria = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [ + { + name: "RoleStatusMapping", + filter: null, + }, + ], + }, + ], + }, +}); +const getRentalDetailsCategoryCriteria = (tenantId, moduleCode) => ({ + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [ + { + name: "RentalDetails", + }, + ], + }, + ], + }, +}); + + +const getGenderTypeList = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [ + { + name: "GenderType", + }, + ], + }, + ], + }, +}); + + +const getDssDashboardCriteria = (tenantId, moduleCode) => ({ + details: { + tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [ + { + name: "dashboard-config", + }, + ], + }, + ], + }, +}); + +const getMCollectBillingServiceCriteria = (tenantId, moduleCode, type, filter) => ({ + type, + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [{ name: "BusinessService", filter: filter }], + }, + ], + }, +}); + +const getTradeUnitsDataList = (tenantId, moduleCode, type, filter) => ({ + type, + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [{ name: "TradeType", filter: filter }], + }, + ], + }, +}); + +const getMCollectApplicationStatusCriteria = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [{ name: "applicationStatus" }], + }, + ], + }, +}); + +const getHrmsEmployeeRolesandDesignations = () => ({ + moduleDetails: [ + { + moduleName: "common-masters", + masterDetails: [ + { name: "Department", filter: "[?(@.active == true)]" }, + { name: "Designation", filter: "[?(@.active == true)]" }, + ], + }, + { + moduleName: "tenant", + masterDetails: [{ name: "tenants" }], + }, + { + moduleName: "ACCESSCONTROL-ROLES", + masterDetails: [{ name: "roles", filter: "$.[?(@.code!='CITIZEN')]" }], + }, + { moduleName: "egov-location", masterDetails: [{ name: "TenantBoundary" }] }, + ], +}); +const getFSTPPlantCriteria = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [{ name: "FSTPPlantInfo" }], + }, + ], + }, +}); +const getCancelReceiptReason = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [{ name: "CancelReceiptReason" }], + }, + ], + }, +}); +const getReceiptStatus = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [{ name: "ReceiptStatus" }], + }, + ], + }, +}); +const getCancelReceiptReasonAndStatus = (tenantId, moduleCode, type) => ({ + type, + details: { + tenantId, + moduleDetails: [ + { + moduleName: moduleCode, + masterDetails: [{ name: "ReceiptStatus" },{ name: "uiCommonPay" }], + }, + ], + }, +}); + +const GetEgovLocations = (MdmsRes) => { + return MdmsRes["egov-location"].TenantBoundary[0].boundary.children.map((obj) => ({ + name: obj.localname, + i18nKey: obj.localname, + })); +}; + +const GetServiceDefs = (MdmsRes, moduleCode) => MdmsRes[`RAINMAKER-${moduleCode}`].ServiceDefs.filter((def) => def.active); + +const GetSanitationType = (MdmsRes) => MdmsRes["FSM"].SanitationType.filter((type) => type.active); + +const GetPitType = (MdmsRes) => + MdmsRes["FSM"].PitType.filter((item) => item.active).map((type) => ({ ...type, i18nKey: `PITTYPE_MASTERS_${type.code}` })); + +const GetApplicationChannel = (MdmsRes) => + MdmsRes["FSM"].ApplicationChannel.filter((type) => type.active).map((channel) => ({ + ...channel, + i18nKey: `ES_APPLICATION_DETAILS_APPLICATION_CHANNEL_${channel.code}`, + })); + +const GetPropertyType = (MdmsRes) => + MdmsRes["FSM"].PropertyType.filter((property) => property.active && !property.propertyType).map((item) => ({ + ...item, + i18nKey: `PROPERTYTYPE_MASTERS_${item.code}`, + code: item.code, + })); + +const GetPropertySubtype = (MdmsRes) => + MdmsRes["FSM"].PropertyType.filter((property) => property.active && property.propertyType).map((item) => ({ + ...item, + i18nKey: `PROPERTYTYPE_MASTERS_${item.code}`, + code: item.code, + })); + +const GetVehicleType = (MdmsRes) => + MdmsRes["Vehicle"].VehicleMakeModel.filter((vehicle) => vehicle.active) + .filter((vehicle) => vehicle.make) + .map((vehicleDetails) => { + return { + ...vehicleDetails, + i18nKey: `COMMON_MASTER_VEHICLE_${vehicleDetails.code}`, + }; + }); + +const GetSlumLocalityMapping = (MdmsRes, tenantId) => + MdmsRes["FSM"].Slum.filter((type) => type.active).reduce((prev, curr) => { + // console.log("find prev",prev, curr) + return prev[curr.locality] + ? { + ...prev, + [curr.locality]: [ + ...prev[curr.locality], + { + ...curr, + i18nKey: `${tenantId.toUpperCase().replace(".", "_")}_${curr.locality}_${curr.code}`, + }, + ], + } + : { + ...prev, + [curr.locality]: [ + { + ...curr, + i18nKey: `${tenantId.toUpperCase().replace(".", "_")}_${curr.locality}_${curr.code}`, + }, + ], + }; + }, {}); + +const GetPropertyOwnerShipCategory = (MdmsRes) => + MdmsRes["PropertyTax"].OwnerShipCategory.filter((ownerShip) => ownerShip.active).map((ownerShipDetails) => { + return { + ...ownerShipDetails, + i18nKey: `COMMON_MASTER_OWNER_TYPE_${ownerShipDetails.code}`, + }; + }); + +const GetTradeOwnerShipCategory = (MdmsRes) => + MdmsRes["common-masters"].OwnerShipCategory.filter((ownerShip) => ownerShip.active).map((ownerShipDetails) => { + return { + ...ownerShipDetails, + i18nKey: `COMMON_MASTER_OWNER_TYPE_${ownerShipDetails.code}`, + }; + }); + +const GetPropertyOwnerType = (MdmsRes) => + MdmsRes["PropertyTax"].OwnerType.filter((owner) => owner.active).map((ownerDetails) => { + return { + ...ownerDetails, + i18nKey: `PROPERTYTAX_OWNERTYPE_${ownerDetails.code}`, + }; + }); + +const getSubPropertyOwnerShipCategory = (MdmsRes) => { + MdmsRes["PropertyTax"].SubOwnerShipCategory.filter((category) => category.active).map((subOwnerShipDetails) => { + return { + ...subOwnerShipDetails, + i18nKey: `PROPERTYTAX_BILLING_SLAB_${subOwnerShipDetails.code}`, + }; + }); + sessionStorage.setItem("getSubPropertyOwnerShipCategory", JSON.stringify(MdmsRes)); +}; + +const getDocumentRequiredScreen = (MdmsRes) => { + MdmsRes["PropertyTax"].Documents.filter((Documents) => Documents.active).map((dropdownData) => { + return { + ...Documents, + i18nKey: `${dropdownData.code}`, + }; + }); +}; + +const getTLDocumentRequiredScreen = (MdmsRes) => { + MdmsRes["TradeLicense"].Documents.filter((Documents) => Documents.active).map((dropdownData) => { + return { + ...Documents, + i18nKey: `${dropdownData.code}`, + }; + }); +}; + +const getMapConfig = (MdmsRes) => { + MdmsRes["PropertyTax"].MapConfig.filter((MapConfig) => MapConfig).map((MapData) => { + return { + ...MapConfig, + defaultconfig: MapData.defaultConfig, + }; + }); +}; + +const getUsageCategory = (MdmsRes) => + MdmsRes["PropertyTax"].UsageCategory.filter((UsageCategory) => UsageCategory.active).map((UsageCategorylist) => { + return { + ...UsageCategorylist, + i18nKey: `PROPERTYTAX_BILLING_SLAB_${UsageCategorylist.code}`, + }; + }); + +const getPTPropertyType = (MdmsRes) => + MdmsRes["PropertyTax"].UsageCategory.filter((PropertyType) => PropertyType.active).map((PTPropertyTypelist) => { + return { + ...UsageCategorylist, + i18nKey: `COMMON_PROPTYPE_${stringReplaceAll(PTPropertyTypelist.code, ".", "_")}`, + }; + }); + +const getTLStructureType = (MdmsRes) => + MdmsRes["common-masters"].StructureType.filter((StructureType) => StructureType.active).map((TLStructureTypeList) => { + return { + ...TLStructureTypeList, + i18nKey: `COMMON_MASTERS_STRUCTURETYPE_${stringReplaceAll(TLStructureTypeList.code, ".", "_")}`, + }; + }); + +const getTLAccessoriesType = (MdmsRes) => + MdmsRes["TradeLicense"].AccessoriesCategory.filter((AccessoriesCategory) => AccessoriesCategory.active).map((TLAccessoryTypeList) => { + return { + ...TLAccessoryTypeList, + i18nKey: `TRADELICENSE_ACCESSORIESCATEGORY_${stringReplaceAll(TLAccessoryTypeList.code, ".", "_")}`, + }; + }); + + const getTLFinancialYear = (MdmsRes) => + MdmsRes["egf-master"].FinancialYear.filter((FinancialYear) => FinancialYear.active && FinancialYear.module === "TL").map((FinancialYearList) => { + return { + ...FinancialYearList, + //i18nKey: `TRADELICENSE_ACCESSORIESCATEGORY_${stringReplaceAll(TLAccessoryTypeList.code, ".", "_")}`, + }; + }); +const getFloorList = (MdmsRes) => + MdmsRes["PropertyTax"].Floor.filter((PTFloor) => PTFloor.active).map((PTFloorlist) => { + return { + ...PTFloorlist, + i18nKey: `PROPERTYTAX_FLOOR_${PTFloorlist.code}`, + }; + }); + +const GetReasonType = (MdmsRes, type, moduleCode) => + Object.assign( + {}, + ...Object.keys(MdmsRes[moduleCode]).map((collection) => ({ + [collection]: MdmsRes[moduleCode][collection] + .filter((reason) => reason.active) + .map((reason) => ({ + ...reason, + i18nKey: `ES_ACTION_REASON_${reason.code}`, + })), + })) + ); + +const getRentalDetailsCategory = (MdmsRes) => { + MdmsRes["PropertyTax"].RentalDetails.filter((category) => category.active).map((RentalDetailsInfo) => { + return { + ...RentalDetailsInfo, + i18nKey: `PROPERTYTAX_BILLING_SLAB_${RentalDetailsInfo.code}`, + }; + }); +}; + +const getGenderType = (MdmsRes) => { + return MdmsRes["common-masters"].GenderType.filter((GenderType) => GenderType.active).map((genderDetails) => { + return{ + ...genderDetails, + i18nKey: `PT_COMMON_GENDER_${genderDetails.code}`, + }; + }); + //return MdmsRes; +}; + +const TLGenderType = (MdmsRes) => { + MdmsRes["common-masters"].GenderType.filter((GenderType) => GenderType.active).map((genders) => { + return { + ...genders, + i18nKey: `TL_GENDER_${genders.code}`, + }; + }); +}; + +const PTGenderType = (MdmsRes) => { + MdmsRes["common-masters"].GenderType.filter((GenderType) => GenderType.active).map((formGender) => { + return { + ...formGender, + i18nKey: `PT_FORM3_${formGender.code}`, + }; + }); +}; + +const HRGenderType = (MdmsRes) => { + MdmsRes["common-masters"].GenderType.filter((GenderType) => GenderType.active).map((comGender) => { + return { + ...comGender, + i18nKey: `COMMON_GENDER_${comGender.code}`, + }; + }); +}; + +const GetMCollectBusinessService = (MdmsRes) => + MdmsRes["BillingService"].BusinessService.map((businesServiceDetails) => { + return { + ...businesServiceDetails, + i18nKey: `BILLINGSERVICE_BUSINESSSERVICE_${businesServiceDetails.code}`, + }; + }); + +const GetMCollectApplicationStatus = (MdmsRes) => + MdmsRes["mCollect"].applcationStatus.map((appStatusDetails) => { + return { + ...appStatusDetails, + i18nKey: `BILLINGSERVICE_BUSINESSSERVICE_${appStatusDetails.code}`, + }; + }); + +const getDssDashboard = () => MdmsRes["dss-dashboard"]["dashboard-config"]; + +const GetRoleStatusMapping = (MdmsRes) => MdmsRes["DIGIT-UI"].RoleStatusMapping; +const GetCommonFields = (MdmsRes) => MdmsRes["FSM"].CommonFieldsConfig; + +const GetPreFields = (MdmsRes) => MdmsRes["FSM"].PreFieldsConfig; + +const GetPostFields = (MdmsRes) => MdmsRes["FSM"].PostFieldsConfig; + +const GetFSTPPlantInfo = (MdmsRes) => MdmsRes["FSM"].FSTPPlantInfo; + +const transformResponse = (type, MdmsRes, moduleCode, tenantId) => { + switch (type) { + case "citymodule": + return GetCitiesWithi18nKeys(MdmsRes, moduleCode); + case "egovLocation": + return GetEgovLocations(MdmsRes); + case "serviceDefs": + return GetServiceDefs(MdmsRes, moduleCode); + case "ApplicationChannel": + return GetApplicationChannel(MdmsRes); + case "SanitationType": + return GetSanitationType(MdmsRes); + case "PropertyType": + return GetPropertyType(MdmsRes); + case "PropertySubtype": + return GetPropertySubtype(MdmsRes); + case "PitType": + return GetPitType(MdmsRes); + case "VehicleType": + return GetVehicleType(MdmsRes); + case "Slum": + return GetSlumLocalityMapping(MdmsRes, tenantId); + case "OwnerShipCategory": + return GetPropertyOwnerShipCategory(MdmsRes); + case "TLOwnerShipCategory": + return GetTradeOwnerShipCategory(MdmsRes); + case "OwnerType": + return GetPropertyOwnerType(MdmsRes); + case "SubOwnerShipCategory": + return getSubPropertyOwnerShipCategory(MdmsRes); + case "Documents": + return getDocumentRequiredScreen(MdmsRes); + case "TLDocuments": + return getTLDocumentRequiredScreen(MdmsRes); + case "MapConfig": + return getMapConfig(MdmsRes); + case "UsageCategory": + return getUsageCategory(MdmsRes); + case "PTPropertyType": + return getPTPropertyType(MdmsRes); + case "StructureType": + return getTLStructureType(MdmsRes); + case "AccessoryCategory": + return getTLAccessoriesType(MdmsRes); + case "FinancialYear": + return getTLFinancialYear(MdmsRes); + case "Floor": + return getFloorList(MdmsRes); + case "Reason": + return GetReasonType(MdmsRes, type, moduleCode); + case "RoleStatusMapping": + return GetRoleStatusMapping(MdmsRes); + case "CommonFieldsConfig": + return GetCommonFields(MdmsRes); + case "PreFieldsConfig": + return GetPreFields(MdmsRes); + case "PostFieldsConfig": + return GetPostFields(MdmsRes); + case "RentalDeatils": + return getRentalDetailsCategory(MdmsRes); + case "DssDashboard": + return getDssDashboard(MdmsRes); + case "BusinessService": + return GetMCollectBusinessService(MdmsRes); + case "applcatonStatus": + return GetMCollectApplicationStatus(MdmsRes); + case "FSTPPlantInfo": + return GetFSTPPlantInfo(MdmsRes); + case "GenderType": + return getGenderType(MdmsRes); + case "TLGendertype": + return TLGenderType(MdmsRes); + case "PTGenderType": + return PTGenderType(MdmsRes); + case "HRGenderType": + return HRGenderType(MdmsRes); + default: + return MdmsRes; + } +}; + +const getCacheSetting = (moduleName) => { + return ApiCacheService.getSettingByServiceUrl(Urls.MDMS, moduleName); +}; + +const mergedData = {}; +const mergedPromises = {}; +const callAllPromises = (success, promises = [], resData) => { + promises.forEach((promise) => { + if (success) { + promise.resolve(resData); + } else { + promise.reject(resData); + } + }); +}; +const mergeMDMSData = (data, tenantId) => { + if (!mergedData[tenantId] || Object.keys(mergedData[tenantId]).length === 0) { + mergedData[tenantId] = data; + } else { + data.MdmsCriteria.moduleDetails.forEach((dataModuleDetails) => { + const moduleName = dataModuleDetails.moduleName; + const masterDetails = dataModuleDetails.masterDetails; + let found = false; + mergedData[tenantId].MdmsCriteria.moduleDetails.forEach((moduleDetail) => { + if (moduleDetail.moduleName === moduleName) { + found = true; + moduleDetail.masterDetails = [...moduleDetail.masterDetails, ...masterDetails]; + } + }); + if (!found) { + mergedData[tenantId].MdmsCriteria.moduleDetails.push(dataModuleDetails); + } + }); + } +}; +const debouncedCall = ({ serviceName, url, data, useCache, params }, resolve, reject) => { + if (!mergedPromises[params.tenantId] || mergedPromises[params.tenantId].length === 0) { + const cacheSetting = getCacheSetting(); + setTimeout(() => { + let callData = JSON.parse(JSON.stringify(mergedData[params.tenantId])); + mergedData[params.tenantId] = {}; + let callPromises = [...mergedPromises[params.tenantId]]; + mergedPromises[params.tenantId] = []; + // console.log("calling merged mdms service", callData); + ServiceRequest({ + serviceName, + url, + data: callData, + useCache, + params, + }) + .then((data) => { + callAllPromises(true, callPromises, data); + }) + .catch((err) => { + callAllPromises(false, callPromises, err); + }); + }, cacheSetting.debounceTimeInMS || 500); + } + mergeMDMSData(data, params.tenantId); + if (!mergedPromises[params.tenantId]) { + mergedPromises[params.tenantId] = []; + } + mergedPromises[params.tenantId].push({ resolve, reject }); + // console.log("debouncing mdms", JSON.stringify(data, null, 2), JSON.stringify(mergedData[params.tenantId], null, 2)); +}; + +export const MdmsService = { + init: (stateCode) => + ServiceRequest({ + serviceName: "mdmsInit", + url: Urls.MDMS, + data: initRequestBody(stateCode), + useCache: true, + params: { tenantId: stateCode }, + }), + call: (tenantId, details) => { + return new Promise((resolve, reject) => + debouncedCall( + { + serviceName: "mdmsCall", + url: Urls.MDMS, + data: getCriteria(tenantId, details), + useCache: true, + params: { tenantId }, + }, + resolve, + reject + ) + ); + }, + getDataByCriteria: async (tenantId, mdmsDetails, moduleCode) => { + const key = `MDMS.${tenantId}.${moduleCode}.${mdmsDetails.type}.${JSON.stringify(mdmsDetails.details)}`; + const inStoreValue = PersistantStorage.get(key); + if (inStoreValue) { + return inStoreValue; + } + const { MdmsRes } = await MdmsService.call(tenantId, mdmsDetails.details); + const responseValue = transformResponse(mdmsDetails.type, MdmsRes, moduleCode.toUpperCase(), tenantId); + const cacheSetting = getCacheSetting(mdmsDetails.details.moduleDetails[0].moduleName); + PersistantStorage.set(key, responseValue, cacheSetting.cacheTimeInSecs); + return responseValue; + }, + getServiceDefs: (tenantId, moduleCode) => { + return MdmsService.getDataByCriteria(tenantId, getModuleServiceDefsCriteria(tenantId, moduleCode), moduleCode); + }, + getSanitationType: (tenantId, moduleCode) => { + return MdmsService.getDataByCriteria(tenantId, getSanitationTypeCriteria(tenantId, moduleCode), moduleCode); + }, + getApplicationChannel: (tenantId, moduleCode) => { + return MdmsService.getDataByCriteria(tenantId, getApplicationChannelCriteria(tenantId, moduleCode), moduleCode); + }, + getPropertyType: (tenantId, moduleCode, type) => { + return MdmsService.getDataByCriteria(tenantId, getPropertyTypeCriteria(tenantId, moduleCode, type), moduleCode); + }, + getPropertyUsage: (tenantId, moduleCode, type) => { + return MdmsService.getDataByCriteria(tenantId, getPropertyUsageCriteria(tenantId, moduleCode, type), moduleCode); + }, + getPropertySubtype: (tenantId, moduleCode, type) => { + return MdmsService.getDataByCriteria(tenantId, getPropertyTypeCriteria(tenantId, moduleCode, type), moduleCode); + }, + getPitType: (tenantId, moduleCode) => { + return MdmsService.getDataByCriteria(tenantId, getPitTypeCriteria(tenantId, moduleCode), moduleCode); + }, + getVehicleType: (tenantId, moduleCode, type) => { + return MdmsService.getDataByCriteria(tenantId, getVehicleTypeCriteria(tenantId, moduleCode, type), moduleCode); + }, + getChecklist: (tenantId, moduleCode) => { + return MdmsService.getDataByCriteria(tenantId, getChecklistCriteria(tenantId, moduleCode), moduleCode); + }, + getPaymentRules: (tenantId, filter) => { + return MdmsService.call(tenantId, getBillingServiceForBusinessServiceCriteria(filter)); + }, + + getCustomizationConfig: (tenantId, moduleCode) => { + return MdmsService.getDataByCriteria(tenantId, getConfig(tenantId, moduleCode), moduleCode); + }, + getSlumLocalityMapping: (tenantId, moduleCode, type) => + MdmsService.getDataByCriteria(tenantId, getSlumLocalityCriteria(tenantId, moduleCode, type), moduleCode), + + getReason: (tenantId, moduleCode, type, payload) => + MdmsService.getDataByCriteria(tenantId, getReasonCriteria(tenantId, moduleCode, type, payload), moduleCode), + + getRoleStatus: (tenantId, moduleCode, type) => + MdmsService.getDataByCriteria(tenantId, getRoleStatusCriteria(tenantId, moduleCode, type), moduleCode), + + getCommonFieldsConfig: (tenantId, moduleCode, type, payload) => + MdmsService.getDataByCriteria(tenantId, getCommonFieldsCriteria(tenantId, moduleCode, type, payload), moduleCode), + + getPreFieldsConfig: (tenantId, moduleCode, type, payload) => + MdmsService.getDataByCriteria(tenantId, getPreFieldsCriteria(tenantId, moduleCode, type, payload), moduleCode), + + getPostFieldsConfig: (tenantId, moduleCode, type, payload) => + MdmsService.getDataByCriteria(tenantId, getPostFieldsCriteria(tenantId, moduleCode, type, payload), moduleCode), + + getPropertyOwnerShipCategory: (tenantId, moduleCode, type) => { + return MdmsService.getDataByCriteria(tenantId, getPropertyOwnerShipCategoryCriteria(tenantId, moduleCode, type), moduleCode); + }, + + GetTradeOwnerShipCategory: (tenantId, moduleCode, type) => { + return MdmsService.getDataByCriteria(tenantId, getTradeOwnerShipCategoryCriteria(tenantId, moduleCode, type), moduleCode); + }, + + getPropertyOwnerType: (tenantId, moduleCode, type) => { + return MdmsService.getDataByCriteria(tenantId, getPropertyOwnerTypeCriteria(tenantId, moduleCode, type), moduleCode); + }, + getPropertySubOwnerShipCategory: (tenantId, moduleCode, type) => { + return MdmsService.getDataByCriteria(tenantId, getSubPropertyOwnerShipCategoryCriteria(tenantId, moduleCode, type), moduleCode); + }, + getDocumentRequiredScreen: (tenantId, moduleCode) => { + return MdmsService.getDataByCriteria(tenantId, getDocumentRequiredScreenCategory(tenantId, moduleCode), moduleCode); + }, + getTLDocumentRequiredScreen: (tenantId, moduleCode) => { + return MdmsService.getDataByCriteria(tenantId, getDocumentRequiredScreenCategory(tenantId, moduleCode), moduleCode); + }, + getTradeUnitsData: (tenantId, moduleCode, type, filter) => { + return MdmsService.getDataByCriteria(tenantId, getTradeUnitsDataList(tenantId, moduleCode, type, filter), moduleCode); + }, + getMapConfig: (tenantId, moduleCode) => { + return MdmsService.getDataByCriteria(tenantId, getDefaultMapConfig(tenantId, moduleCode), moduleCode); + }, + getUsageCategory: (tenantId, moduleCode, type) => { + return MdmsService.getDataByCriteria(tenantId, getUsageCategoryList(tenantId, moduleCode), moduleCode); + }, + getPTPropertyType: (tenantId, moduleCode, type) => { + return MdmsService.getDataByCriteria(tenantId, getPTPropertyTypeList(tenantId, moduleCode), moduleCode); + }, + getTLStructureType: (tenantId, moduleCode, type) => { + return MdmsService.getDataByCriteria(tenantId, getTLStructureTypeList(tenantId, moduleCode), moduleCode); + }, + getTLAccessoriesType: (tenantId, moduleCode, type) => { + return MdmsService.getDataByCriteria(tenantId, getTLAccessoriesTypeList(tenantId, moduleCode), moduleCode); + }, + getTLFinancialYear: (tenantId, moduleCode, type) => { + return MdmsService.getDataByCriteria(tenantId, getTLFinancialYearList(tenantId, moduleCode), moduleCode); + }, + getFloorList: (tenantId, moduleCode, type) => { + return MdmsService.getDataByCriteria(tenantId, getPTFloorList(tenantId, moduleCode, type), moduleCode); + }, + getRentalDetails: (tenantId, moduleCode) => { + return MdmsService.getDataByCriteria(tenantId, getRentalDetailsCategoryCriteria(tenantId, moduleCode), moduleCode); + }, + getDssDashboard: (tenantId, moduleCode) => { + return MdmsService.getDataByCriteria(tenantId, getDssDashboardCriteria(tenantId, moduleCode), moduleCode); + }, + getPaymentGateway: (tenantId, moduleCode, type) => { + return MdmsService.getDataByCriteria(tenantId, getGeneralCriteria(tenantId, moduleCode, type), moduleCode); + }, + getReceiptKey: (tenantId, moduleCode) => { + return MdmsService.getDataByCriteria(tenantId, getReceiptKey(tenantId, moduleCode), moduleCode); + }, + getHelpText: (tenantId, moduleCode, type) => { + return MdmsService.getDataByCriteria(tenantId, getGeneralCriteria(tenantId, moduleCode, type), moduleCode); + }, + getMCollectBillingService: (tenantId, moduleCode, type, filter) => { + return MdmsService.getDataByCriteria(tenantId, getMCollectBillingServiceCriteria(tenantId, moduleCode, type, filter), moduleCode); + }, + getMCollectApplcationStatus: (tenantId, moduleCode, type, filter) => { + return MdmsService.getDataByCriteria(tenantId, getMCollectApplicationStatusCriteria(tenantId, moduleCode, type, filter), moduleCode); + }, + getHrmsEmployeeRolesandDesignation: (tenantId) => { + return MdmsService.call(tenantId, getHrmsEmployeeRolesandDesignations()); + }, + getHrmsEmployeeTypes: (tenantId, moduleCode, type, filter) => { + return MdmsService.getDataByCriteria(tenantId, getGeneralCriteria(tenantId, moduleCode, type), moduleCode); + }, + getHrmsEmployeeReason: (tenantId, moduleCode, type) => { + return MdmsService.getDataByCriteria(tenantId, getGeneralCriteria(tenantId, moduleCode, type), moduleCode); + }, + getMultipleTypes: (tenantId, moduleCode, types) => { + return MdmsService.getDataByCriteria(tenantId, getMultipleTypes(tenantId, moduleCode, types), moduleCode); + }, + getFSTPPlantInfo: (tenantId, moduleCode, types) => { + return MdmsService.getDataByCriteria(tenantId, getFSTPPlantCriteria(tenantId, moduleCode, types), moduleCode); + }, + getCancelReceiptReason: (tenantId,moduleCode) => { + return MdmsService.getDataByCriteria(tenantId, getCancelReceiptReason(tenantId, moduleCode), moduleCode); + }, + getReceiptStatus: (tenantId,moduleCode) => { + return MdmsService.getDataByCriteria(tenantId, getReceiptStatus(tenantId, moduleCode), moduleCode); + }, + getCancelReceiptReasonAndStatus: (tenantId,moduleCode) => { + return MdmsService.getDataByCriteria(tenantId, getCancelReceiptReasonAndStatus(tenantId, moduleCode), moduleCode); + }, + + getGenderType: (tenantId,moduleCode, type) => { + return MdmsService.getDataByCriteria(tenantId, getGenderTypeList(tenantId,moduleCode, type), moduleCode); + + }, + + TLGenderType: (tenantId, moduleCode, type) => { + return MdmsService.getDataByCriteria(tenantId, getGenderTypeList(tenantId, moduleCode, type), moduleCode); + }, + + PTGenderType: (tenantId, moduleCode, type) => { + return MdmsService.getDataByCriteria(tenantId, getGenderTypeList(tenantId, moduleCode, type), moduleCode); + }, + + HRGenderType: (tenantId, moduleCode, type) => { + return MdmsService.getDataByCriteria(tenantId, getGenderTypeList(tenantId, moduleCode, type), moduleCode); + }, + +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/elements/PGR.js b/frontend/micro-ui-internals/packages/libraries/src/services/elements/PGR.js new file mode 100644 index 00000000000..b38b2577503 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/elements/PGR.js @@ -0,0 +1,52 @@ +import Urls from "../atoms/urls"; +import { Request } from "../atoms/Utils/Request"; + +export const PGRService = { + search: (tenantId, filters = {}) => { + // console.log("----------------------------", tenantId,filters); + return Request({ + url: Urls.pgr_search, + useCache: false, + method: "POST", + auth: true, + userService: true, + params: { tenantId: tenantId, ...filters }, + }); + }, + create: (details, tenantId) => + Request({ + url: Urls.PGR_Create, + data: details, + useCache: true, + method: "POST", + params: { tenantId }, + auth: true, + userService: true, + }), + update: (details) => + Request({ + url: Urls.pgr_update, + data: details, + useCache: true, + auth: true, + method: "POST", + params: { tenantId: details.tenantId }, + userService: true, + }), + count: (tenantId, params) => + Request({ + url: Urls.pgr_count, + useCache: true, + auth: true, + method: "POST", + params: { tenantId, ...params }, + }), + + employeeSearch: (tenantId, roles) => { + return Request({ + url: Urls.EmployeeSearch, + params: { tenantId, roles }, + auth: true, + }); + }, +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/elements/PT.js b/frontend/micro-ui-internals/packages/libraries/src/services/elements/PT.js new file mode 100644 index 00000000000..9d86096a8be --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/elements/PT.js @@ -0,0 +1,96 @@ +import Urls from "../atoms/urls"; +import { Request } from "../atoms/Utils/Request"; + +export const PTService = { + search: ({ tenantId, filters, auth }) => + Request({ + url: Urls.pt.search, + useCache: false, + method: "POST", + auth: auth === false ? auth : true, + userService: auth === false ? auth : true, + params: { tenantId, ...filters }, + }), + fetchPaymentDetails: ({ tenantId, consumerCodes }) => + Request({ + url: Urls.pt.fetch_payment_details, + useCache: false, + method: "POST", + auth: true, + userService: true, + params: { tenantId, consumerCode: consumerCodes, businessService: "PT" }, + }), + create: (details, tenantId) => + Request({ + url: Urls.pt.create, + data: details, + useCache: false, + setTimeParam: false, + userService: true, + method: "POST", + params: {}, + auth: true, + }), + update: (details, tenantId) => + Request({ + url: Urls.pt.update, + data: details, + useCache: false, + setTimeParam: false, + userService: true, + method: "POST", + params: {}, + auth: true, + }), + ptCalculationEstimate: (details, tenantId) => + Request({ + url: Urls.pt.pt_calculation_estimate, + data: details, + useCache: false, + userService: true, + method: "POST", + params: { tenantId }, + auth: true, + }), + assessmentCreate: (details, tenantId) => + Request({ + url: Urls.pt.assessment_create, + data: details, + useCache: false, + userService: true, + method: "POST", + params: { tenantId }, + auth: true, + }), + assessmentSearch: ({ tenantId, filters }) => + Request({ + url: Urls.pt.assessment_search, + useCache: false, + method: "POST", + auth: true, + userService: true, + params: { tenantId, ...filters }, + }), +}; + +// export const PTService = { +// fetchProperties: ({ tenantId, filters }) => +// Request({ +// url: Urls.pt.fectch_property, +// useCache: false, +// method: "POST", +// auth: true, +// userService: true, +// params: { tenantId, ...filters }, +// }), + +// fetchPaymentDetails: ({ tenantId, consumerCodes }) => +// Request({ +// url: Urls.pt.fetch_payment_details, +// useCache: false, +// method: "POST", +// auth: true, +// userService: true, +// params: { tenantId, consumerCode: consumerCodes, businessService: "PT" }, +// }), +// }; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/elements/Payment.js b/frontend/micro-ui-internals/packages/libraries/src/services/elements/Payment.js new file mode 100644 index 00000000000..132aa1895a5 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/elements/Payment.js @@ -0,0 +1,114 @@ +import Urls from "../atoms/urls"; +import { Request } from "../atoms/Utils/Request"; + +export const PaymentService = { + fetchBill: (tenantId, filters = {}) => + Request({ + url: Urls.payment.fetch_bill, + useCache: false, + method: "POST", + auth: false, + userService: false, + params: { tenantId, ...filters }, + }) + .then((d) => { + return d; + }) + .catch((err) => { + if (err?.response?.data?.Errors?.[0]?.code === "EG_BS_BILL_NO_DEMANDS_FOUND") return { Bill: [] }; + else throw err; + }), + searchBill: (tenantId, filters = {}) => + Request({ + url: Urls.payment.search_bill, + useCache: false, + method: "POST", + auth: true, + userService: true, + params: { tenantId, ...filters }, + }), + createReciept: (tenantId, details = {}) => + Request({ + url: Urls.payment.create_reciept, + useCache: false, + method: "POST", + auth: true, + userService: true, + locale: true, + params: { tenantId }, + data: { ...details }, + }), + + getReciept: (tenantId, businessservice, filters = {}) => + Request({ + url: businessservice ? `${Urls.payment.print_reciept}/${businessservice}/_search` : `${Urls.payment.print_reciept}/_search`, + useCache: false, + method: "POST", + auth: true, + userService: true, + params: { tenantId, ...filters }, + }), + + generatePdf: (tenantId, data = {}, key) => + Request({ + url: Urls.payment.generate_pdf, + useCache: false, + method: "POST", + auth: true, + userService: true, + locale: true, + params: { tenantId, key }, + data: data, + }), + + printReciept: (tenantId, filters = {}) => + Request({ + url: Urls.FileFetch, + useCache: false, + method: "GET", + auth: true, + userService: true, + params: { tenantId, ...filters }, + }), + + createCitizenReciept: (tenantId, details = {}) => + Request({ + url: Urls.payment.create_citizen_reciept, + useCache: false, + method: "POST", + auth: false, + userService: false, + params: { tenantId }, + data: { ...details }, + }), + + updateCitizenReciept: (transactionId) => + Request({ + url: Urls.payment.update_citizen_reciept, + useCache: false, + method: "POST", + auth: true, + userService: true, + params: { transactionId }, + }), + + demandSearch: (tenantId, consumerCode, businessService) => + Request({ + url: Urls.payment.demandSearch, + useCache: false, + method: "POST", + auth: true, + userService: true, + params: { tenantId, consumerCode, businessService }, + }), + + recieptSearch: (tenantId, businessService, params) => + Request({ + url: Urls.payment.reciept_search, + urlParams: { buisnessService: businessService }, + method: "POST", + // do not change this directly add a param if needed + auth: true, + params: { tenantId, ...params }, + }), +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/elements/Receipts.js b/frontend/micro-ui-internals/packages/libraries/src/services/elements/Receipts.js new file mode 100644 index 00000000000..d62200dba98 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/elements/Receipts.js @@ -0,0 +1,38 @@ +import Urls from "../atoms/urls"; +import { Request } from "../atoms/Utils/Request"; + +const ReceiptsService = { + search: (tenantId, filters, searchParams, businessService) => + Request({ + url: Digit.SessionStorage.get("userType") == "citizen" ? `${Urls.receipts.payments}/_search` : `${Urls.receipts.payments}/${businessService}/_search`, + useCache: false, + method: "POST", + auth: true, + userService: true, + params: { tenantId, ...filters, ...searchParams }, + }), + receipt_download: (bussinessService, consumerCode, tenantId,pdfKey) => + Request({ + url: Urls.receipts.receipt_download, + data: {}, + useCache: true, + method: "POST", + params: { bussinessService, consumerCode, tenantId,pdfKey }, + auth: true, + userService: true, + locale: true, + userDownload: true, + }), + update: (data, tenantId, businessService) => + Request({ + data: data, + url: `${Urls.receipts.payments}/${businessService}/_workflow`, + useCache: false, + method: "POST", + auth: true, + userService: true, + params: { tenantId }, + }), +} + +export default ReceiptsService; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/elements/TL.js b/frontend/micro-ui-internals/packages/libraries/src/services/elements/TL.js new file mode 100644 index 00000000000..1fa73848778 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/elements/TL.js @@ -0,0 +1,66 @@ +import Urls from "../atoms/urls"; +import { Request } from "../atoms/Utils/Request"; + +export const TLService = { + create: (details, tenantId) => + Request({ + url: Urls.tl.create, + data: details, + useCache: false, + setTimeParam: false, + userService: true, + method: "POST", + params: {}, + auth: true, + }), + search: (details) => + Request({ + url: Urls.tl.search, + useCache: false, + setTimeParam: false, + userService: true, + method: "POST", + params: details, + auth: true, + }), + search_bill: ({ tenantId, filters }) => + Request({ + url: filters.businesService !== "PT" ? Urls.mcollect.search_bill : Urls.mcollect.search_bill_pt, + useCache: false, + method: "POST", + data: { searchCriteria: { tenantId, ...filters } }, + auth: true, + userService: false, + //params: { tenantId, ...filters }, + }), + TLsearch: ({ tenantId, filters }) => + Request({ + url: Urls.tl.search, + useCache: false, + method: "POST", + auth: true, + userService: false, + params: { tenantId, ...filters }, + }), + update: (details, tenantId) => + Request({ + url: Urls.tl.update, + data: details, + useCache: false, + setTimeParam: false, + userService: true, + method: "POST", + params: {}, + auth: true, + }), + billingslab: ({ tenantId, filters, auth }) => + Request({ + url: Urls.tl.billingslab, + useCache: false, + setTimeParam: false, + userService: true, + method: "POST", + params: { tenantId }, + auth: true, + }), +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/elements/UrlShortener.js b/frontend/micro-ui-internals/packages/libraries/src/services/elements/UrlShortener.js new file mode 100644 index 00000000000..3886b332aa9 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/elements/UrlShortener.js @@ -0,0 +1,15 @@ +import { Request } from "../atoms/Utils/Request"; +import Urls from "../atoms/urls"; + +const UrlShortener = (fileStoreId) => + Request({ + data: { url: fileStoreId }, + url: Urls.Shortener, + useCache: false, + method: "POST", + auth: false, + userService: false, + noRequestInfo: true, + }); + +export default UrlShortener; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/elements/User/index.js b/frontend/micro-ui-internals/packages/libraries/src/services/elements/User/index.js new file mode 100644 index 00000000000..ef3a103858d --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/elements/User/index.js @@ -0,0 +1,109 @@ +import Urls from "../../atoms/urls"; +import { Request, ServiceRequest } from "../../atoms/Utils/Request"; +import { Storage } from "../../atoms/Utils/Storage"; + +export const UserService = { + authenticate: (details) => { + const data = new URLSearchParams(); + Object.entries(details).forEach(([key, value]) => data.append(key, value)); + data.append("scope", "read"); + data.append("grant_type", "password"); + return ServiceRequest({ + serviceName: "authenticate", + url: Urls.Authenticate, + data, + headers: { + authorization: "Basic ZWdvdi11c2VyLWNsaWVudDo=", + "Content-Type": "application/x-www-form-urlencoded", + }, + }); + }, + getType: () => { + return Storage.get("userType") || "citizen"; + }, + getUser: () => { + return Digit.SessionStorage.get("User"); + }, + logout: () => { + const userType = UserService.getType(); + Digit.SessionStorage.set("User", {}); + window.localStorage.clear(); + window.sessionStorage.clear(); + if (userType === "citizen") { + window.location.replace("/digit-ui/citizen"); + } else { + window.location.replace("/employee"); + } + }, + sendOtp: (details, stateCode) => + ServiceRequest({ + serviceName: "sendOtp", + url: Urls.OTP_Send, + data: details, + auth: false, + params: { tenantId: stateCode }, + }), + setUser: (data) => { + return Digit.SessionStorage.set("User", data); + }, + setExtraRoleDetails: (data) => { + const userDetails = Digit.SessionStorage.get("User"); + return Digit.SessionStorage.set("User", { ...userDetails, extraRoleInfo: data }); + }, + getExtraRoleDetails: () => { + return Digit.SessionStorage.get("User")?.extraRoleInfo; + }, + registerUser: (details, stateCode) => + ServiceRequest({ + serviceName: "registerUser", + url: Urls.RegisterUser, + data: { + User: details, + }, + params: { tenantId: stateCode }, + }), + updateUser: async (details, stateCode) => + ServiceRequest({ + serviceName: "updateUser", + url: Urls.UserProfileUpdate, + auth: true, + data: { + user: details, + }, + params: { tenantId: stateCode }, + }), + hasAccess: (accessTo) => { + const user = Digit.UserService.getUser(); + if (!user || !user.info) return false; + const { roles } = user.info; + return roles && Array.isArray(roles) && roles.filter((role) => accessTo.includes(role.code)).length; + }, + + changePassword: (details, stateCode) => + ServiceRequest({ + serviceName: "changePassword", + url: Urls.ChangePassword, + data: { + ...details, + }, + params: { tenantId: stateCode }, + }), + + employeeSearch: (tenantId, filters) => { + return Request({ + url: Urls.EmployeeSearch, + params: { tenantId, ...filters }, + auth: true, + }); + }, + userSearch: async (tenantId, data, filters) => { + return Request({ + url: Urls.UserSearch, + params: { ...filters }, + method: "POST", + auth: true, + userService: true, + data: data.pageSize ? { tenantId, ...data } : { tenantId, ...data, pageSize: "100" }, + }); + }, +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/elements/WorkFlow.js b/frontend/micro-ui-internals/packages/libraries/src/services/elements/WorkFlow.js new file mode 100644 index 00000000000..f7d4fc3611f --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/elements/WorkFlow.js @@ -0,0 +1,129 @@ +import Urls from "../atoms/urls"; +import { Request } from "../atoms/Utils/Request"; +import cloneDeep from "lodash/cloneDeep"; + +export const WorkflowService = { + init: (stateCode, businessServices) => { + return Request({ + url: Urls.WorkFlow, + useCache: true, + method: "POST", + params: { tenantId: stateCode, businessServices }, + auth: true, + }); + }, + + getByBusinessId: (stateCode, businessIds, params = {}, history = true) => { + return Request({ + url: Urls.WorkFlowProcessSearch, + useCache: false, + method: "POST", + params: { tenantId: stateCode, businessIds: businessIds, ...params, history }, + auth: true, + }); + }, + + getDetailsById: async ({ tenantId, id, moduleCode, role }) => { + // console.log("getWorkflowDetails", tenantId, id, moduleCode, role); + // console.log(Digit); + const workflow = await Digit.WorkflowService.getByBusinessId(tenantId, id); + const applicationProcessInstance = cloneDeep(workflow?.ProcessInstances); + const businessServiceResponse = (await Digit.WorkflowService.init(tenantId, moduleCode))?.BusinessServices[0]?.states; + if (workflow && workflow.ProcessInstances) { + const processInstances = workflow.ProcessInstances; + const nextStates = processInstances[0]?.nextActions.map((action) => ({ action: action?.action, nextState: action.nextState })); + const nextActions = nextStates.map((id) => ({ + action: id.action, + state: businessServiceResponse?.find((state) => state.uuid === id.nextState), + })); + + /* To check state is updatable and provide edit option*/ + const currentState = businessServiceResponse?.find((state) => state.uuid === processInstances[0]?.state.uuid); + if (currentState && currentState?.isStateUpdatable) { + if (moduleCode === "FSM" || moduleCode === "FSM_VEHICLE_TRIP" || moduleCode === "PGR") null; + else nextActions.push({ action: "EDIT", state: currentState }); + } + + const getStateForUUID = (uuid) => businessServiceResponse?.find((state) => state.uuid === uuid); + + const actionState = businessServiceResponse + ?.filter((state) => state.uuid === processInstances[0]?.state.uuid) + .map((state) => { + let _nextActions = state.actions?.map?.((ac) => { + let actionResultantState = getStateForUUID(ac.nextState); + let assignees = actionResultantState?.actions?.reduce?.((acc, act) => { + return [...acc, ...act.roles]; + }, []); + return { ...actionResultantState, assigneeRoles: assignees, action: ac.action, roles: ac.roles }; + }); + return { ...state, nextActions: _nextActions, roles: state?.action, roles: state?.actions?.reduce((acc, el) => [...acc, ...el.roles], []) }; + })?.[0]; + + const actionRolePair = nextActions?.map((action) => ({ + action: action?.action, + roles: action.state?.actions?.map((action) => action.roles).join(","), + })); + + if (processInstances.length > 0) { + const timeline = processInstances + .filter((e) => e.action !== "COMMENT") + .map((instance, ind) => { + const checkPoint = { + performedAction: instance.action, + status: instance.state.applicationStatus, + state: instance.state.state, + assigner: instance?.assigner, + rating: instance?.rating, + comment: instance?.comment, + documents: instance?.documents, + caption: instance.assignes ? instance.assignes.map((assignee) => ({ name: assignee.name, mobileNumber: assignee.mobileNumber })) : null, + auditDetails: { + created: Digit.DateUtils.ConvertTimestampToDate(instance.auditDetails.createdTime), + lastModified: Digit.DateUtils.ConvertTimestampToDate(instance.auditDetails.lastModifiedTime), + }, + timeLineActions: instance.nextActions + ? instance.nextActions.filter((action) => action.roles.includes(role)).map((action) => action?.action) + : null, + }; + return checkPoint; + }); + + const nextActions = actionRolePair; + + if (role !== "CITIZEN" && moduleCode === "PGR") { + timeline.push({ + status: "COMPLAINT_FILED", + }); + } + + if (timeline[timeline.length - 1].status !== "CREATED" && moduleCode === "FSM") + timeline.push({ + status: "CREATED", + }); + + const details = { + timeline, + nextActions, + actionState, + applicationBusinessService: workflow?.ProcessInstances?.[0]?.businessService, + processInstances: applicationProcessInstance, + }; + return details; + } + } else { + console.warn("error fetching workflow services"); + throw new Error("error fetching workflow services"); + } + return {}; + }, + + getAllApplication: (tenantId, filters) => { + return Request({ + url: Urls.WorkFlowProcessSearch, + useCache: false, + method: "POST", + params: { tenantId, ...filters }, + auth: true, + }); + }, +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/index.js b/frontend/micro-ui-internals/packages/libraries/src/services/index.js new file mode 100644 index 00000000000..d74d967a9de --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/index.js @@ -0,0 +1,3 @@ +import { useStore, useInitStore } from "../hooks/store"; + +export { useStore, useInitStore }; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/molecules/DSS/getDSSDashboardData.js b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/DSS/getDSSDashboardData.js new file mode 100644 index 00000000000..cdc4605ad33 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/DSS/getDSSDashboardData.js @@ -0,0 +1,11 @@ +import useDssMDMS from "../../../hooks/dss/useMDMS"; + +export const getDSSDashboardData = (stateCode, mdmsType, moduleCode) => { + const { data: dssConfig, isLoading: configLoading, isSuccess: configLoaded } = useDssMDMS(stateCode, mdmsType, moduleCode); + return [ + { + queryKey: ["DSS_DASHBOARD_DATA", mdmsType, moduleCode], + queryFn: () => dssConfig, + }, + ]; +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/molecules/FSM/ApplicationUpdateActions.js b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/FSM/ApplicationUpdateActions.js new file mode 100644 index 00000000000..9caa3076f3b --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/FSM/ApplicationUpdateActions.js @@ -0,0 +1,15 @@ +import { FSMService } from "../../elements/FSM"; + +const ApplicationUpdateActions = async (applicationData, tenantId) => { + // console.log("find application update action here", applicationData, action, tenantId) + try { + const response = await FSMService.update(applicationData, tenantId); + // console.log("find me here", response) + return response; + } catch (error) { + // console.log("find error here", error?.response?.data?.Errors) + throw new Error(error?.response?.data?.Errors[0].message); + } +}; + +export default ApplicationUpdateActions; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/molecules/FSM/DsoDetails.js b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/FSM/DsoDetails.js new file mode 100644 index 00000000000..43a1ad35db4 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/FSM/DsoDetails.js @@ -0,0 +1,31 @@ +import { FSMService } from "../../elements/FSM"; + +const DsoDetails = async (tenantId, filters = {}) => { + const dsoDetails = await FSMService.vendorSearch(tenantId, filters); + + //TODO get possible dates to book dso + + const data = dsoDetails.vendor.map((dso) => ({ + displayName: dso.name + (dso.owner?.name ? ` - ${dso.owner?.name}` : ""), + mobileNumber: dso.owner?.mobileNumber, + name: dso.name, + username: dso.owner?.userName, + ownerId: dso.ownerId, + id: dso.id, + vehicles: dso.vehicles + ?.filter((vehicle) => vehicle.status === "ACTIVE") + ?.map((vehicle) => ({ + id: vehicle.id, + registrationNumber: vehicle?.registrationNumber, + type: vehicle.type, + i18nKey: `FSM_VEHICLE_TYPE_${vehicle.type}`, + capacity: vehicle.tankCapacity, + suctionType: vehicle.suctionType, + model: vehicle.model, + })), + })); + + return data; +}; + +export default DsoDetails; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/molecules/FSM/FileDesludging.js b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/FSM/FileDesludging.js new file mode 100644 index 00000000000..d9201e8311d --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/FSM/FileDesludging.js @@ -0,0 +1,78 @@ +import { FSMService } from "../../elements/FSM"; + +export const FileDesludging = { + create: async (tenantId, data) => { + // const data = + // UserService.getType() === "citizen" + // ? { + // fsm: { + // tenantId: tenantId, + // description: "my description", + // additionalDetails: {}, + // propertyUsage: "BUILTUP", + // address: { + // tenantId: tenantId, + // landmark: "my landmark", + // city: "amritsar", + // pincode: "143001", + // additionDetails: null, + // locality: { + // code: "SUN178", + // name: "Mohalla Singh kia - Area2", + // }, + // geoLocation: { + // latitude: 0, + // longitude: 0, + // additionalDetails: {}, + // }, + // }, + // }, + // workflow: null, + // } + // : { + // fsm: { + // citizen: { + // // mandatory + // name: "test", + // mobileNumber: "9999999999", + // }, + // tenantId: tenantId, //mandatory + // description: "my description", + // source: "TELEPHON1E", //mandatory + // sanitationtype: "CONVENTIONAL_DUAL_PIT", //mandatory + // propertyUsage: "BUILTUP", //mdnaaotry + // additionalDetails: { + // tripAmount: 100, + // }, + // noOfTrips: 1, + // address: { + // // mandatory + // tenantId: tenantId, + // landmark: "my landmark", + // city: "amritsar", + // pincode: "143001", + // additionDetails: null, + // locality: { + // code: "SUN178", + // name: "Mohalla Singh kia - Area2", + // label: "Locality", + // latitude: null, + // longitude: null, + // area: "Area2", + // pincode: null, + // boundaryNum: 1, + // children: [], + // }, + // geoLocation: { + // latitude: 0, + // longitude: 0, + // additionalDetails: {}, + // }, + // }, + // }, + // workflow: null, + // }; + const response = await FSMService.create(data, tenantId); + return response; + }, +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/molecules/FSM/Search.js b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/FSM/Search.js new file mode 100644 index 00000000000..949777e42f4 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/FSM/Search.js @@ -0,0 +1,242 @@ +import { PaymentService } from "../../elements/Payment"; +import { FSMService } from "../../elements/FSM"; +import { MdmsService } from "../../../services/elements/MDMS"; +import DsoDetails from "./DsoDetails"; +import { getPropertyTypeLocale, getPropertySubtypeLocale, getVehicleType } from "../../../utils/fsm"; + +const displayPitDimension = (pitDeminsion) => { + const result = []; + if (pitDeminsion.length) { + result.push(`${pitDeminsion.length}m`); + } + if (pitDeminsion.width) { + result.push(`${pitDeminsion.width}m`); + } + if (pitDeminsion.diameter) { + result.push(`${pitDeminsion.diameter}m`); + } + if (pitDeminsion.height) { + result.push(`${pitDeminsion.height}m`); + } + return result.join(" x "); +}; + +const getPitDimensionCaption = (sanitationtype, diameter, length, t) => { + if (diameter && diameter > 0) return `(${t("CS_COMMON_DIAMETER")} x ${t("CS_COMMON_DEPTH")})`; + if (length && length > 0) return `(${t("CS_COMMON_LENGTH")} x ${t("CS_COMMON_BREADTH")} x ${t("CS_COMMON_DEPTH")})`; +}; + +const displayServiceDate = (timeStamp) => { + if (timeStamp === 0) return "N/A"; + const date = new Date(timeStamp); + return date.getDate() + "/" + (date.getMonth() + 1) + "/" + date.getFullYear(); +}; + +export const Search = { + all: async (tenantId, filters = {}) => { + const response = await FSMService.search(tenantId, { ...filters }); + return response; + }, + + application: async (tenantId, filters = {}) => { + const response = await FSMService.search(tenantId, { ...filters }); + return response.fsm[0]; + }, + + applicationDetails: async (t, tenantId, applicationNos, userType) => { + const filter = { applicationNos }; + let dsoDetails = {}; + let vehicle = {}; + const response = await Search.application(tenantId, filter); + if (response?.dsoId) { + const dsoFilters = { ids: response.dsoId, vehicleIds: response?.vehicleId }; + [dsoDetails] = await DsoDetails(tenantId, dsoFilters); + + if (response?.vehicleId) { + vehicle = dsoDetails.vehicles.find((vehicle) => vehicle.id === response.vehicleId); + } + } + + const stateId = tenantId?.split(".")[0]; + let slumLabel = ""; + if (response?.address?.slumName && response?.address?.locality?.code && response?.tenantId) { + const slumData = await MdmsService.getSlumLocalityMapping(response?.tenantId, "FSM", "Slum"); + if (slumData[response?.address?.locality?.code]) { + slumLabel = slumData[response?.address?.locality?.code].find((slum) => slum?.code === response?.address?.slumName); + } else { + const slumDataArray = Object.values(slumData); + for (let i = 0; i < slumDataArray.length; i++) { + const slumFound = slumDataArray[i].find((slum) => slum.code === response?.address?.slumName); + if (slumFound) { + slumLabel = slumFound; + } + } + } + } + const slumName = slumLabel ? slumLabel.i18nKey : "N/A"; + + const state = tenantId.split(".")[0]; + const vehicleMenu = await MdmsService.getVehicleType(state, "Vehicle", "VehicleType"); + const _vehicle = vehicleMenu?.find((vehicle) => response?.vehicleType === vehicle?.code); + + const vehicleMake = _vehicle?.i18nKey; + const vehicleCapacity = _vehicle?.capacity; + + const demandDetails = await PaymentService.demandSearch(tenantId, applicationNos, "FSM.TRIP_CHARGES"); + // console.log("find demand detail here", demandDetails) + const amountPerTrip = + response?.additionalDetails && response?.additionalDetails.tripAmount + ? response.additionalDetails.tripAmount + : demandDetails?.Demands[0]?.demandDetails[0]?.taxAmount || "N/A"; + // const totalAmount = response?.noOfTrips === 0 || amountPerTrip === "N/A" ? "N/A" : response?.noOfTrips * Number(amountPerTrip); + const totalAmount = demandDetails?.Demands[0]?.demandDetails?.map((detail) => detail?.taxAmount)?.reduce((a, b) => a + b) || "N/A"; + + const employeeResponse = [ + { + title: "ES_TITLE_APPLICATION_DETAILS", + values: [ + { title: "CS_FILE_DESLUDGING_APPLICATION_NO", value: response?.applicationNo }, + { title: "ES_APPLICATION_CHANNEL", value: `ES_APPLICATION_DETAILS_APPLICATION_CHANNEL_${response?.source}` }, + ], + }, + { + title: t("ES_TITLE_APPLICANT_DETAILS"), + values: [ + { title: "ES_APPLICATION_DETAILS_APPLICANT_NAME", value: response?.citizen?.name }, + { title: "ES_APPLICATION_DETAILS_APPLICANT_MOBILE_NO", value: response?.citizen?.mobileNumber }, + ], + }, + { + title: "ES_APPLICATION_DETAILS_PROPERTY_DETAILS", + values: [ + { title: "ES_APPLICATION_DETAILS_PROPERTY_TYPE", value: getPropertyTypeLocale(response?.propertyUsage) }, + { title: "ES_APPLICATION_DETAILS_PROPERTY_SUB-TYPE", value: getPropertySubtypeLocale(response?.propertyUsage) }, + ], + }, + { + title: "ES_APPLICATION_DETAILS_LOCATION_DETAILS", + values: [ + { + title: "ES_APPLICATION_DETAILS_LOCATION_LOCALITY", + value: `${response?.tenantId?.toUpperCase()?.split(".")?.join("_")}_REVENUE_${response?.address?.locality?.code}`, + }, + { title: "ES_APPLICATION_DETAILS_LOCATION_CITY", value: response?.address?.city }, + { title: "ES_APPLICATION_DETAILS_LOCATION_PINCODE", value: response?.address?.pincode }, + { title: "PT_PROPERTY_ADDRESS_STREET_NAME", value: response?.address?.street }, + { title: "PT_PROPERTY_ADDRESS_HOUSE_NO", value: response?.address?.doorNo }, + { title: "CS_FILE_APPLICATION_PROPERTY_LOCATION_LANDMARK_LABEL", value: response?.address?.landmark }, + { title: "CS_FILE_APPLICATION_PROPERTY_LOCATION_SLUM_LABEL", value: slumName }, + { + title: "ES_APPLICATION_DETAILS_LOCATION_GEOLOCATION", + value: + response?.address?.geoLocation?.latitude && response?.address?.geoLocation?.longitude + ? Digit.Utils.getStaticMapUrl(response?.address?.geoLocation?.latitude, response?.address?.geoLocation?.longitude) + : "N/A", + map: true, + child: + response?.address?.geoLocation?.latitude && response?.address?.geoLocation?.longitude + ? { + element: "img", + src: Digit.Utils.getStaticMapUrl(response?.address?.geoLocation?.latitude, response?.address?.geoLocation?.longitude), + } + : null, + }, + ], + }, + { + title: "CS_CHECK_PIT_SEPTIC_TANK_DETAILS", + values: [ + { + title: "ES_APPLICATION_DETAILS_PIT_TYPE", + value: !!response?.sanitationtype ? `PITTYPE_MASTERS_${response?.sanitationtype}` : "", + }, + { + title: "ES_APPLICATION_DETAILS_PIT_DIMENSION", + value: displayPitDimension({ + length: response?.pitDetail?.length, + width: response?.pitDetail?.width, + height: response?.pitDetail?.height, + diameter: response?.pitDetail?.diameter, + }), + caption: getPitDimensionCaption(response?.sanitationtype, response?.pitDetail?.diameter, response?.pitDetail?.length, t), + }, + // { + // title: t("ES_NEW_APPLICATION_DISTANCE_FROM_ROAD"), + // value: response?.pitDetail?.distanceFromRoad, + // }, + { title: "ES_APPLICATION_DETAILS_PAYMENT_NO_OF_TRIPS", value: response?.noOfTrips === 0 ? "N/A" : response?.noOfTrips }, + { + title: "ES_APPLICATION_DETAILS_AMOUNT_PER_TRIP", + value: amountPerTrip, + }, + { title: "ES_PAYMENT_DETAILS_TOTAL_AMOUNT", value: totalAmount }, + ], + }, + { + title: "ES_APPLICATION_DETAILS_DSO_DETAILS", + values: [ + { title: "ES_APPLICATION_DETAILS_ASSIGNED_DSO", value: dsoDetails?.displayName || "N/A" }, + { title: "ES_APPLICATION_DETAILS_VEHICLE_MAKE", value: vehicleMake || "N/A" }, + { title: "ES_APPLICATION_DETAILS_VEHICLE_NO", value: vehicle?.registrationNumber || "N/A" }, + { title: "ES_APPLICATION_DETAILS_VEHICLE_CAPACITY", value: vehicleCapacity || "N/A" }, + { title: "ES_APPLICATION_DETAILS_POSSIBLE_SERVICE_DATE", value: displayServiceDate(response?.possibleServiceDate) || "N/A" }, + ], + }, + ]; + + if (userType !== "CITIZEN") + return { + tenantId: response.tenantId, + applicationDetails: employeeResponse, + additionalDetails: response?.additionalDetails, + }; + + const citizenResp = employeeResponse.reduce((arr, curr) => { + return arr.concat(curr.values); + }, []); + + const citizenResponse = citizenResp.map((detail) => { + // detail.title = detail.title?.replace("ES_", "CS_"); + if (!detail.map) return detail; + delete detail.value; + return detail; + }); + + return { + tenantId: response.tenantId, + applicationDetails: citizenResponse, + pdfData: { ...response, amountPerTrip, totalAmount, vehicleMake, vehicleCapacity, slumName, dsoDetails }, + }; + }, + + allVehicles: (tenantId, filters) => { + return FSMService.vehicleSearch(tenantId, filters); + }, + allVehiclesWithDSO: async (tenantId, filters) => { + const response = await FSMService.vehicleSearch(tenantId, filters); + const { vehicleTrip } = response; + let result = vehicleTrip; + if (vehicleTrip.length > 0) { + const ownerIds = response.vehicleTrip.map((trip) => trip.tripOwnerId); + const vendorsResponse = await FSMService.vendorSearch(tenantId, { ownerIds: ownerIds.join(",") }); + const vendorOwnerKey = vendorsResponse.vendor.reduce((acc, vendor) => { + return { ...acc, [vendor.ownerId]: vendor }; + }, {}); + result = Search.combineResponse(vehicleTrip, vendorOwnerKey); + } + return { + ...response, + vehicleTrip: result, + }; + }, + + combineResponse: (vehicleTrip, vendorOwnerKey) => { + return vehicleTrip.map((trip) => { + return { ...trip, dsoName: vendorOwnerKey[trip.tripOwnerId].name }; + }); + }, + + applicationWithBillSlab: async (t, tenantId, applicationNos) => { + const app = await Search.applicationDetails(t, tenantId, applicationNos); + }, +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/molecules/PT/ApplicationUpdateActions.js b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/PT/ApplicationUpdateActions.js new file mode 100644 index 00000000000..7b225704aa1 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/PT/ApplicationUpdateActions.js @@ -0,0 +1,15 @@ +import { PTService } from "../../elements/PT"; + +const ApplicationUpdateActions = async (applicationData, tenantId) => { + // console.log("find application update action here", applicationData, action, tenantId) + try { + const response = await PTService.update(applicationData, tenantId); + // console.log("find me here", response) + return response; + } catch (error) { + // console.log("find error here", error?.response); + throw new Error(error?.response?.data?.Errors[0].message); + } +}; + +export default ApplicationUpdateActions; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/molecules/PT/Search.js b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/PT/Search.js new file mode 100644 index 00000000000..91479546339 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/PT/Search.js @@ -0,0 +1,224 @@ +import { PTService } from "../../elements/PT"; +import { getPropertyTypeLocale, getPropertySubtypeLocale } from "../../../utils/pt"; + +export const PTSearch = { + all: async (tenantId, filters = {}) => { + const response = await PTService.search({ tenantId, filters }); + return response; + }, + application: async (tenantId, filters = {}) => { + const response = await PTService.search({ tenantId, filters }); + return response.Properties[0]; + }, + transformPropertyToApplicationDetails: ({ property: response, t }) => { + return [ + { + title: "PT_PROPERTY_ADDRESS_SUB_HEADER", + asSectionHeader: true, + values: [ + { title: "PT_PROPERTY_ADDRESS_PINCODE", value: response?.address?.pincode }, + { title: "PT_PROPERTY_ADDRESS_CITY", value: response?.address?.city }, + { + title: "PT_PROPERTY_ADDRESS_MOHALLA", + value: `${response?.tenantId?.toUpperCase()?.split(".")?.join("_")}_REVENUE_${response?.address?.locality?.code}`, + }, + { title: "PT_PROPERTY_ADDRESS_STREET_NAME", value: response?.address?.street }, + { title: "PT_PROPERTY_ADDRESS_HOUSE_NO", value: response?.address?.doorNo }, + ], + }, + { + title: "PT_ASSESMENT_INFO_SUB_HEADER", + values: [ + { title: "PT_ASSESMENT_INFO_TYPE_OF_BUILDING", value: getPropertyTypeLocale(response?.propertyType) }, + { title: "PT_ASSESMENT_INFO_USAGE_TYPE", value: getPropertySubtypeLocale(response?.usageCategory) }, + { title: "PT_ASSESMENT_INFO_PLOT_SIZE", value: response?.landArea }, + { title: "PT_ASSESMENT_INFO_NO_OF_FLOOR", value: response?.noOfFloors }, + ], + additionalDetails: { + floors: response?.units + ?.filter((e) => e.active) + ?.sort?.((a, b) => a.floorNo - b.floorNo) + ?.map((unit, index) => { + let floorName = `PROPERTYTAX_FLOOR_${unit.floorNo}`; + const values = [ + { + title: "PT_ASSESSMENT_UNIT_USAGE_TYPE", + value: `PROPERTYTAX_BILLING_SLAB_${ + unit?.usageCategory != "RESIDENTIAL" ? unit?.usageCategory?.split(".")[1] : unit?.usageCategory + }`, + }, + { + title: "PT_ASSESMENT_INFO_OCCUPLANCY", + value: unit?.occupancyType, + }, + { + title: "PT_FORM2_BUILT_AREA", + value: unit?.constructionDetail?.builtUpArea, + }, + ]; + + if (unit.occupancyType === "RENTED") values.push({ title: "PT_FORM2_TOTAL_ANNUAL_RENT", value: unit.arv }); + + return { + title: floorName, + values: [ + { + title: `${t("ES_APPLICATION_DETAILS_UNIT")} ${index + 1}`, + values, + }, + ], + }; + }), + }, + }, + { + title: "PT_OWNERSHIP_INFO_SUB_HEADER", + additionalDetails: { + owners: response?.owners?.map((owner, index) => { + return { + status: owner.status, + title: "ES_OWNER", + values: [ + { title: "PT_OWNERSHIP_INFO_NAME", value: owner?.name }, + { title: "PT_OWNERSHIP_INFO_GENDER", value: owner?.gender }, + { title: "PT_OWNERSHIP_INFO_MOBILE_NO", value: owner?.mobileNumber }, + { title: "PT_OWNERSHIP_INFO_USER_CATEGORY", value: `COMMON_MASTERS_OWNERTYPE_${owner?.ownerType}` || "NA" }, + { title: "PT_SEARCHPROPERTY_TABEL_GUARDIANNAME", value: owner?.fatherOrHusbandName }, + { title: "PT_FORM3_OWNERSHIP_TYPE", value: response?.ownershipCategory }, + { title: "PT_OWNERSHIP_INFO_EMAIL_ID", value: owner?.emailId }, + { title: "PT_OWNERSHIP_INFO_CORR_ADDR", value: owner?.correspondenceAddress }, + ], + }; + }), + documents: [ + { + title: "PT_COMMON_DOCS", + values: response?.documents + // ?.filter((e) => e.status === "ACTIVE") + ?.map((document) => { + return { + title: `PT_${document?.documentType.replace(".", "_")}`, + documentType: document?.documentType, + documentUid: document?.documentUid, + fileStoreId: document?.fileStoreId, + status: document.status, + }; + }), + }, + ], + }, + }, + ]; + }, + applicationDetails: async (t, tenantId, propertyIds, userType, args) => { + const filter = { propertyIds, ...args }; + const response = await PTSearch.application(tenantId, filter); + // console.log(response, "from hook"); + + return { + tenantId: response.tenantId, + applicationDetails: PTSearch.transformPropertyToApplicationDetails({ property: response, t }), + additionalDetails: response?.additionalDetails, + applicationData: response, + transformToAppDetailsForEmployee: PTSearch.transformPropertyToApplicationDetails, + }; + }, +}; + +// const employeeResponse = [ +// { +// title: "PT_PROPERTY_ADDRESS_SUB_HEADER", +// asSectionHeader: true, +// values: [ +// { title: "PT_PROPERTY_ADDRESS_PINCODE", value: response?.address?.pincode }, +// { title: "PT_PROPERTY_ADDRESS_CITY", value: response?.address?.city }, +// { +// title: "PT_PROPERTY_ADDRESS_MOHALLA", +// value: `${response?.tenantId?.toUpperCase()?.split(".")?.join("_")}_REVENUE_${response?.address?.locality?.code}`, +// }, +// { title: "PT_PROPERTY_ADDRESS_STREET_NAME", value: response?.address?.street }, +// { title: "PT_PROPERTY_ADDRESS_HOUSE_NO", value: response?.address?.doorNo }, +// ], +// }, +// { +// title: "PT_ASSESMENT_INFO_SUB_HEADER", +// values: [ +// { title: "PT_ASSESMENT_INFO_TYPE_OF_BUILDING", value: getPropertyTypeLocale(response?.propertyType) }, +// { title: "PT_ASSESMENT_INFO_USAGE_TYPE", value: getPropertySubtypeLocale(response?.usageCategory) }, +// { title: "PT_ASSESMENT_INFO_PLOT_SIZE", value: response?.landArea }, +// { title: "PT_ASSESMENT_INFO_NO_OF_FLOOR", value: response?.noOfFloors }, +// ], +// additionalDetails: { +// floors: response?.units +// ?.sort?.((a, b) => a.floorNo - b.floorNo) +// ?.map((unit, index) => { +// let floorName = `PROPERTYTAX_FLOOR_${unit.floorNo}`; +// const values = [ +// { +// title: "PT_ASSESSMENT_UNIT_USAGE_TYPE", +// value: `PROPERTYTAX_BILLING_SLAB_${ +// unit?.usageCategory != "RESIDENTIAL" ? unit?.usageCategory?.split(".")[1] : unit?.usageCategory +// }`, +// }, +// { +// title: "PT_ASSESMENT_INFO_OCCUPLANCY", +// value: unit?.occupancyType, +// }, +// { +// title: "PT_FORM2_BUILT_AREA", +// value: unit?.constructionDetail?.builtUpArea, +// }, +// ]; + +// if (unit.occupancyType === "RENTED") values.push({ title: "PT_FORM2_TOTAL_ANNUAL_RENT", value: unit.arv }); + +// return { +// title: floorName, +// values: [ +// { +// title: `${t("ES_APPLICATION_DETAILS_UNIT")} ${index + 1}`, +// values, +// }, +// ], +// }; +// }), +// }, +// }, +// { +// title: "PT_OWNERSHIP_INFO_SUB_HEADER", +// additionalDetails: { +// owners: response?.owners?.map((owner, index) => { +// return { +// status: owner.status, +// title: "ES_OWNER", +// values: [ +// { title: "PT_OWNERSHIP_INFO_NAME", value: owner?.name }, +// { title: "PT_OWNERSHIP_INFO_GENDER", value: owner?.gender }, +// { title: "PT_OWNERSHIP_INFO_MOBILE_NO", value: owner?.mobileNumber }, +// { title: "PT_OWNERSHIP_INFO_USER_CATEGORY", value: `COMMON_MASTERS_OWNERTYPE_${owner?.ownerType}` || "NA" }, +// { title: "PT_SEARCHPROPERTY_TABEL_GUARDIANNAME", value: owner?.fatherOrHusbandName }, +// { title: "PT_FORM3_OWNERSHIP_TYPE", value: response?.ownershipCategory }, +// { title: "PT_OWNERSHIP_INFO_EMAIL_ID", value: owner?.emailId }, +// { title: "PT_OWNERSHIP_INFO_CORR_ADDR", value: owner?.permanentAddress }, +// ], +// }; +// }), +// documents: [ +// { +// title: "PT_COMMON_DOCS", +// values: response?.documents +// // ?.filter((e) => e.status === "ACTIVE") +// ?.map((document) => { +// return { +// title: `PT_${document?.documentType.replace(".", "_")}`, +// documentType: document?.documentType, +// documentUid: document?.documentUid, +// fileStoreId: document?.fileStoreId, +// status: document.status, +// }; +// }), +// }, +// ], +// }, +// }, +// ]; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/molecules/ServiceDefinitions.js b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/ServiceDefinitions.js new file mode 100644 index 00000000000..17c076705d8 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/ServiceDefinitions.js @@ -0,0 +1,57 @@ +import { MdmsService } from "../elements/MDMS"; +import { Storage } from "../atoms/Utils/Storage"; + +export const GetServiceDefinitions = { + get: async (tenantId) => { + const criteria = { + type: "serviceDefs", + details: { + tenantId: tenantId, + moduleDetails: [ + { + moduleName: "RAINMAKER-PGR", + masterDetails: [ + { + name: "ServiceDefs", + }, + ], + }, + ], + }, + }; + + const serviceDefs = await MdmsService.getDataByCriteria(tenantId, criteria, "PGR"); + Storage.set("serviceDefinitions", serviceDefs); + return serviceDefs; + }, + getMenu: async (stateCode, t) => { + var Menu = []; + const response = await GetServiceDefinitions.get(stateCode); + await Promise.all( + response.map((def) => { + if (!Menu.find((e) => e.key === def.menuPath)) { + def.menuPath === "" + ? Menu.push({ + name: t("SERVICEDEFS.OTHERS"), + key: def.menuPath, + }) + : Menu.push({ + name: t("SERVICEDEFS." + def.menuPath.toUpperCase()), + key: def.menuPath, + }); + } + }) + ); + return Menu; + }, + + getSubMenu: async (tenantId, selectedType, t) => { + const fetchServiceDefs = await GetServiceDefinitions.get(tenantId); + return fetchServiceDefs + .filter((def) => def.menuPath === selectedType.key) + .map((id) => ({ + key: id.serviceCode, + name: t("SERVICEDEFS." + id.serviceCode.toUpperCase()), + })); + }, +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/molecules/ShareFiles.js b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/ShareFiles.js new file mode 100644 index 00000000000..52b91a0e310 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/ShareFiles.js @@ -0,0 +1,49 @@ +import Download from "../atoms/Download"; +import { UploadServices } from "../atoms/UploadServices"; +import UrlShortener from "../elements/UrlShortener"; + +const ShareFiles = { + targetLink: (target, shortUrl) => { + switch (target) { + case "mail": + return window.open(`mailto:?body=${shortUrl}`, "_blank"); + case "whatsapp": + return window.open(`https://web.whatsapp.com/send?text=${shortUrl}`, "_blank"); + default: + return window.open(shortUrl, "_blank"); + } + }, + + getShortener: async (tenantId, data) => { + const fileUploadId = await UploadServices.Filestorage("DSS", data, tenantId); + const fileUrl = await UploadServices.Filefetch([fileUploadId.data.files[0].fileStoreId], fileUploadId.data.files[0].tenantId); + // console.log("fileUploadId", fileUploadId, fileUrl) + return UrlShortener(fileUrl.data[fileUploadId.data.files[0].fileStoreId].split(",")[0]); + }, + + PDF: async (tenantId, node, filename, target) => { + const pdfData = await Download.PDF(node, filename, true); + if (!target && navigator.share) { + return navigator.share({ + files: [pdfData], + title: filename, + }); + } + const shortUrl = await ShareFiles.getShortener(tenantId, pdfData); + ShareFiles.targetLink(target, shortUrl); + }, + + Image: async (tenantId, node, filename, target) => { + const imageData = await new Promise((resolve) => Download.Image(node, filename, true, resolve)); + if (!target && navigator.share) { + return navigator.share({ + files: [imageData], + title: filename, + }); + } + const shortUrl = await ShareFiles.getShortener(tenantId, imageData); + ShareFiles.targetLink(target, shortUrl); + }, +}; + +export default ShareFiles; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/molecules/Store/service.js b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/Store/service.js new file mode 100644 index 00000000000..ed32ccc71a4 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/Store/service.js @@ -0,0 +1,152 @@ +import { LocalizationService } from "../../elements/Localization/service"; +import { MdmsService } from "../../elements/MDMS"; +import { Storage } from "../../atoms/Utils/Storage"; +import { ApiCacheService } from "../../atoms/ApiCacheService"; + +const getImgUrl = (url, fallbackUrl) => { + if (!url && fallbackUrl) { + return fallbackUrl; + } + if (url.includes("s3.ap-south-1.amazonaws.com")) { + const baseDomain = window?.location?.origin; + return url.replace("https://s3.ap-south-1.amazonaws.com", baseDomain); + } + return url; +}; +const addLogo = (id, url, fallbackUrl = "") => { + const containerDivId = "logo-img-container"; + let containerDiv = document.getElementById(containerDivId); + if (!containerDiv) { + containerDiv = document.createElement("div"); + containerDiv.id = containerDivId; + containerDiv.style = "position: absolute; top: 0; left: -9999px;"; + document.body.appendChild(containerDiv); + } + const img = document.createElement("img"); + img.src = getImgUrl(url, fallbackUrl); + img.id = `logo-${id}`; + containerDiv.appendChild(img); +}; + +const renderTenantLogos = (stateInfo, tenants) => { + addLogo(stateInfo.code, stateInfo.logoUrl); + tenants.forEach((tenant) => { + addLogo(tenant.code, tenant.logoId, stateInfo.logoUrl); + }); +}; + +export const StoreService = { + getInitData: () => { + return Storage.get("initData"); + }, + + getBoundries: async (tenants) => { + let allBoundries = []; + allBoundries = tenants.map((tenant) => { + return Digit.LocationService.getLocalities(tenant.code); + }); + return await Promise.all(allBoundries); + }, + getRevenueBoundries: async (tenants) => { + let allBoundries = []; + allBoundries = tenants.map((tenant) => { + return Digit.LocationService.getRevenueLocalities(tenant.code); + }); + return await Promise.all(allBoundries); + }, + digitInitData: async (stateCode, enabledModules) => { + const { MdmsRes } = await MdmsService.init(stateCode); + const stateInfo = MdmsRes["common-masters"].StateInfo[0]; + const localities = {}; + const revenue_localities = {}; + const initData = { + languages: stateInfo.hasLocalisation ? stateInfo.languages : [{ label: "ENGLISH", value: "en_IN" }], + stateInfo: { + code: stateInfo.code, + name: stateInfo.name, + logoUrl: stateInfo.logoUrl, + logoUrlWhite: stateInfo.logoUrlWhite, + bannerUrl: stateInfo.bannerUrl, + }, + localizationModules: stateInfo.localizationModules, + modules: MdmsRes?.tenant?.citymodule.filter((module) => module.active).filter((module) => enabledModules.includes(module.code)), + }; + initData.selectedLanguage = Digit.SessionStorage.get("locale") || initData.languages[0].value; + + ApiCacheService.saveSetting(MdmsRes["DIGIT-UI"]?.ApiCachingSettings); + + const moduleTenants = initData.modules + .map((module) => module.tenants) + .flat() + .reduce((unique, ele) => (unique.find((item) => item.code === ele.code) ? unique : [...unique, ele]), []); + initData.tenants = MdmsRes?.tenant?.tenants + .filter((item) => !!moduleTenants.find((mt) => mt.code === item.code)) + .map((tenant) => ({ i18nKey: `TENANT_TENANTS_${tenant.code.replace(".", "_").toUpperCase()}`, ...tenant })); + + // TODO: remove the FSM & Payment temp data once added in mdms master + initData.modules.push({ + module: "Payment", + code: "Payment", + tenants: initData.tenants.map((tenant) => ({ code: tenant.code })), + }); + + initData.modules.push({ + module: "MCollect", + code: "MCollect", + tenants: initData.tenants.map((tenant) => ({ code: tenant.code })), + }); + + initData.modules.push({ + module: "HRMS", + code: "HRMS", + tenants: initData.tenants.map((tenant) => ({ code: tenant.code })), + }); + + initData.modules.push({ + module: "TL", + code: "TL", + tenants: initData.tenants.map((tenant) => ({ code: tenant.code })), + }); + + initData.modules.push({ + module: "Receipts", + code: "Receipts", + tenants: initData.tenants.map((tenant) => ({ code: tenant.code })), + }); + + + initData.modules.push({ + module: "DSS", + code: "DSS", + tenants: initData.tenants.map((tenant) => ({ code: tenant.code })), + }); + + + await LocalizationService.getLocale({ + modules: [ + `rainmaker-common`, + `rainmaker-${stateCode.toLowerCase()}`, + // ...initData.tenants.map((tenant) => `rainmaker-${tenant.code.toLowerCase()}`), + ], + locale: initData.selectedLanguage, + tenantId: stateCode, + }); + Storage.set("initData", initData); + initData.revenue_localities = revenue_localities; + initData.localities = localities; + setTimeout(() => { + renderTenantLogos(stateInfo, initData.tenants); + }, 0); + return initData; + }, + defaultData: async (stateCode, moduleCode, language) => { + console.log(moduleCode, stateCode); + const LocalePromise = LocalizationService.getLocale({ + modules: [`rainmaker-${moduleCode.toLowerCase()}`], + locale: language, + tenantId: stateCode, + }); + await LocalePromise; + return {}; + }, +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/molecules/StoreData.js b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/StoreData.js new file mode 100644 index 00000000000..7f14d805d94 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/StoreData.js @@ -0,0 +1,8 @@ +import { StoreService } from "./Store/service"; + +const StoreData = { + getInitData: () => StoreService.getInitData(), + getCurrentLanguage: () => Digit.SessionStorage.get("locale") || `en_IN`, +}; + +export default StoreData; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/molecules/TL/ApplicationUpdateActions.js b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/TL/ApplicationUpdateActions.js new file mode 100644 index 00000000000..bed22ae6378 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/TL/ApplicationUpdateActions.js @@ -0,0 +1,15 @@ +import { TLService } from "../../elements/TL"; + +const ApplicationUpdateActions = async (applicationData, tenantId) => { + // console.log("find application update action here", applicationData, action, tenantId) + try { + const response = await TLService.update(applicationData, tenantId); + // console.log("find me here", response) + return response; + } catch (error) { + // console.log("find error here", error?.response); + throw new Error(error?.response?.data?.Errors[0].message); + } +}; + +export default ApplicationUpdateActions; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/molecules/TL/Search.js b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/TL/Search.js new file mode 100644 index 00000000000..1eb91e8e4cc --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/TL/Search.js @@ -0,0 +1,189 @@ +import cloneDeep from "lodash/cloneDeep"; +import { TLService } from "../../elements/TL"; + +const stringReplaceAll = (str = "", searcher = "", replaceWith = "") => { + if (searcher == "") return str; + while (str.includes(searcher)) { + str = str.replace(searcher, replaceWith); + } + return str; +}; + + +/* methid to get date from epoch */ +const convertEpochToDate = (dateEpoch) => { + // Returning null in else case because new Date(null) returns initial date from calender + if (dateEpoch) { + const dateFromApi = new Date(dateEpoch); + let month = dateFromApi.getMonth() + 1; + let day = dateFromApi.getDate(); + let year = dateFromApi.getFullYear(); + month = (month > 9 ? "" : "0") + month; + day = (day > 9 ? "" : "0") + day; + return `${day}/${month}/${year}`; + } else { + return null; + } +}; + +export const TLSearch = { + all: async (tenantId, filters = {}) => { + const response = await TLService.TLsearch({ tenantId, filters }); + return response; + }, + application: async (tenantId, filters = {}) => { + const response = await TLService.TLsearch({ tenantId, filters }); + return response.Licenses[0]; + }, + + numberOfApplications: async (tenantId, filters = {}) => { + const response = await TLService.TLsearch({ tenantId, filters }); + return response.Licenses; + }, + + applicationDetails: async (t, tenantId, applicationNumber, userType) => { + const filter = { applicationNumber }; + const response = await TLSearch.application(tenantId, filter); + let numOfApplications = []; + if(response?.licenseNumber) { + const licenseNumbers = response?.licenseNumber; + const filters = { licenseNumbers, offset: 0 }; + numOfApplications = await TLSearch.numberOfApplications(tenantId, filters); + } + + let employeeResponse = []; + const tradedetails = { + title: "TL_COMMON_TR_DETAILS", + asSectionHeader: true, + values: [ + { title: "TL_FINANCIAL_YEAR_LABEL", value: response?.financialYear ? `FY${response?.financialYear}` : "NA" }, + { title: "TL_NEW_TRADE_DETAILS_LIC_TYPE_LABEL", value: response?.licenseType ? `TRADELICENSE_LICENSETYPE_${response?.licenseType}` : "NA" }, + { title: "TL_COMMON_TABLE_COL_TRD_NAME", value: response?.tradeName }, + { title: "TL_NEW_TRADE_DETAILS_STRUCT_TYPE_LABEL", value: response?.tradeLicenseDetail?.structureType ? `COMMON_MASTERS_STRUCTURETYPE_${response?.tradeLicenseDetail?.structureType?.split('.')[0]}` : "NA" }, + { title: "TL_NEW_TRADE_DETAILS_STRUCT_SUB_TYPE_LABEL", value: response?.tradeLicenseDetail?.structureType ? `COMMON_MASTERS_STRUCTURETYPE_${stringReplaceAll(response?.tradeLicenseDetail?.structureType, ".", "_")}` : "NA" }, + { title: "TL_NEW_TRADE_DETAILS_TRADE_COMM_DATE_LABEL", value: response?.commencementDate ? convertEpochToDate(response?.commencementDate) : "NA" }, + { title: "TL_NEW_GST_NUMBER_LABEL", value: response?.tradeLicenseDetail?.additionalDetail?.gstNo || "NA" }, + { title: "TL_NEW_OPERATIONAL_SQ_FT_AREA_LABEL", value: response?.tradeLicenseDetail?.operationalArea || "NA" }, + { title: "TL_NEW_NUMBER_OF_EMPLOYEES_LABEL", value: response?.tradeLicenseDetail?.noOfEmployees || "NA" }, + ], + }; + + const tradeUnits = { + title: "TL_TRADE_UNITS_HEADER", + additionalDetails: { + units: response?.tradeLicenseDetail?.tradeUnits?.map((unit, index) => { + let tradeSubType = stringReplaceAll(unit?.tradeType, ".", "_"); + tradeSubType = stringReplaceAll(tradeSubType, "-", "_"); + return { + title: "TL_UNIT_HEADER", + values: [ + { title: "TRADELICENSE_TRADECATEGORY_LABEL", value: unit?.tradeType ? `TRADELICENSE_TRADETYPE_${unit?.tradeType?.split('.')[0]}` : "NA" }, + { title: "TRADELICENSE_TRADETYPE_LABEL", value: unit?.tradeType ? `TRADELICENSE_TRADETYPE_${unit?.tradeType?.split('.')[1]}` : "NA" }, + { title: "TL_NEW_TRADE_SUB_TYPE_LABEL", value: tradeSubType ? `TRADELICENSE_TRADETYPE_${tradeSubType}` : "NA" }, + { title: "TL_NEW_TRADE_DETAILS_UOM_UOM_PLACEHOLDER", value: unit?.uom || "NA" }, + { title: "TL_NEW_TRADE_DETAILS_UOM_VALUE_LABEL", value: unit?.uomValue || "NA" }, + ], + }; + }) + }, + }; + + const accessories = { + title: "TL_NEW_TRADE_DETAILS_HEADER_ACC", + // asSectionHeader: true, + additionalDetails: { + accessories: response?.tradeLicenseDetail?.accessories?.map((unit, index) => { + let accessoryCategory = "NA"; + if (unit?.accessoryCategory) { + accessoryCategory = stringReplaceAll(unit?.accessoryCategory, ".", "_"); + accessoryCategory = `TRADELICENSE_ACCESSORIESCATEGORY_${stringReplaceAll(accessoryCategory, "-", "_")}`; + } + return { + title: "TL_ACCESSORY_LABEL", + values: [ + { title: "TL_NEW_TRADE_DETAILS_ACC_LABEL", value: accessoryCategory }, + { title: "TL_NEW_TRADE_DETAILS_UOM_UOM_PLACEHOLDER", value: unit?.uom || "NA" }, + { title: "TL_NEW_TRADE_DETAILS_UOM_VALUE_LABEL", value: unit?.uomValue || "NA" }, + { title: "TL_ACCESSORY_COUNT_LABEL", value: unit?.count || "NA" } + ], + }; + }) + }, + }; + + const cityOfApp = cloneDeep(response?.tradeLicenseDetail?.address?.city); + const localityCode = cloneDeep(response?.tradeLicenseDetail?.address?.locality?.code); + const tradeAddress = { + title: "TL_CHECK_ADDRESS", + values: [ + { title: "CORE_COMMON_PINCODE", value: response?.tradeLicenseDetail?.address?.pincode || "NA" }, + { title: "MYCITY_CODE_LABEL", value: response?.tradeLicenseDetail?.address?.city || "NA" }, + { title: "TL_LOCALIZATION_LOCALITY", value: `${stringReplaceAll(cityOfApp?.toUpperCase(), ".", "_")}_REVENUE_${localityCode}` }, + { title: "TL_LOCALIZATION_BUILDING_NO", value: response?.tradeLicenseDetail?.address?.doorNo || "NA" }, + { title: "TL_LOCALIZATION_STREET_NAME", value: response?.tradeLicenseDetail?.address?.street || "NA" } + ], + }; + + const checkOwnerLength = response?.tradeLicenseDetail?.owners?.length || 1; + const owners = { + title: "ES_NEW_APPLICATION_OWNERSHIP_DETAILS", + additionalDetails: { + owners: response?.tradeLicenseDetail?.owners?.map((owner, index) => { + let subOwnerShipCategory = response?.tradeLicenseDetail?.subOwnerShipCategory ? `COMMON_MASTERS_OWNERSHIPCATEGORY_${stringReplaceAll(response?.tradeLicenseDetail?.subOwnerShipCategory, ".", "_")}` : "NA"; + return { + title: (Number(checkOwnerLength) > 1) ? "TL_PAYMENT_PAID_BY_PLACEHOLDER" : "", + values: [ + { title: "TL_NEW_OWNER_DETAILS_OWNERSHIP_TYPE_LABEL", value: subOwnerShipCategory }, + { title: "TL_OWNER_S_NAME_LABEL", value: owner?.name || "NA" }, + { title: "TL_OWNER_S_MOBILE_NUM_LABEL", value: owner?.mobileNumber || "NA" }, + // { title: "TL_GUARDIAN_S_NAME_LABEL", value: owner?.fatherOrHusbandName || "NA" }, + // { title: "TL_RELATIONSHIP_WITH_GUARDIAN_LABEL", value: owner?.relationship || "NA" }, + { title: "TL_NEW_OWNER_DETAILS_GENDER_LABEL", value: owner?.gender || "NA" }, + { title: "TL_NEW_OWNER_DETAILS_EMAIL_LABEL", value: owner?.emailId || "NA" }, + { title: "TL_OWNER_SPECIAL_CATEGORY", value: owner?.ownerType ? `COMMON_MASTERS_OWNERTYPE_${owner?.ownerType}` : "NA" }, + { title: "TL_NEW_OWNER_DETAILS_ADDR_LABEL", value: owner?.permanentAddress || "NA" }, + ], + }; + }), + documents: [ + { + title: "PT_COMMON_DOCS", + values: response?.tradeLicenseDetail?.applicationDocuments?.map((document) => { + return { + title: `TL_NEW_${document?.documentType.replace(".", "_")}`, + documentType: document?.documentType, + documentUid: document?.documentUid, + fileStoreId: document?.fileStoreId, + }; + }), + }, + ] + }, + }; + + if(response?.workflowCode == "NewTL" && response?.status !== "APPROVED") { + const details = { + title: "", + values: [ + { title: "TL_COMMON_TABLE_COL_APP_NO", value: response?.applicationNumber || "NA" }, + { title: "TL_APPLICATION_CHALLAN_LABEL", value: response?.tradeLicenseDetail?.channel&&`TL_CHANNEL_${response?.tradeLicenseDetail?.channel}` || "NA" } + ], + }; + response && employeeResponse.push(details); + } + + response && employeeResponse.push(tradedetails); + response?.tradeLicenseDetail?.tradeUnits && employeeResponse.push(tradeUnits); + response?.tradeLicenseDetail?.accessories && employeeResponse.push(accessories); + response && employeeResponse.push(tradeAddress); + response?.tradeLicenseDetail?.owners && employeeResponse.push(owners); + + return { + tenantId: response.tenantId, + applicationDetails: employeeResponse, + additionalDetails: response?.additionalDetails, + applicationData: response, + numOfApplications: numOfApplications + }; + }, +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/molecules/Ulb/index.js b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/Ulb/index.js new file mode 100644 index 00000000000..d84dc3ef3ab --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/Ulb/index.js @@ -0,0 +1,30 @@ +import { StoreService } from "../Store/service"; +import { UserService } from "../../elements/User"; + +export const ULBService = { + getCurrentTenantId: () => { + // TODO: change when setter is done. + const user = UserService.getUser(); + if (user?.extraRoleInfo) { + const isDsoRoute = Digit.Utils.detectDsoRoute(window.location.pathname); + // Check if route is employee route + // if (window.location.pathname.split("/").includes("employee")) return user.extraRoleInfo.tenantId; + // if (window.location.pathname.split("/").includes("dso-dashboard")) return user.extraRoleInfo.tenantId; + if (isDsoRoute) { + return user.extraRoleInfo?.tenantId; + } + } + //TODO: fix tenant id from userinfo + const tenantId = + user?.info?.type === "EMPLOYEE" && user?.info?.tenantId ? user?.info?.tenantId : globalConfigs.getConfig("STATE_LEVEL_TENANT_ID"); + return tenantId; + }, + getStateId: () => { + return ULBService.getCurrentTenantId()?.split(".")[0]; + }, + getCurrentUlb: () => { + const initData = StoreService.getInitData(); + const tenantId = ULBService.getCurrentTenantId(); + return initData.tenants.find((tenant) => tenant.code === tenantId); + }, +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/services/molecules/getLocalities.js b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/getLocalities.js new file mode 100644 index 00000000000..a4815d71208 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/services/molecules/getLocalities.js @@ -0,0 +1,14 @@ +import { LocationService } from "../elements/Location"; +import { StoreService } from "./Store/service"; + +export const getLocalities = { + admin: async (tenant) => { + await StoreService.defaultData(tenant, tenant, Digit.StoreData.getCurrentLanguage()); + return (await LocationService.getLocalities(tenant)).TenantBoundary[0]; + }, + revenue: async (tenant) => { + // console.log("find me here", tenant) + await StoreService.defaultData(tenant, tenant, Digit.StoreData.getCurrentLanguage()); + return (await LocationService.getRevenueLocalities(tenant)).TenantBoundary[0]; + }, +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/subFormRegistry.js b/frontend/micro-ui-internals/packages/libraries/src/subFormRegistry.js new file mode 100644 index 00000000000..ebf2aca3dea --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/subFormRegistry.js @@ -0,0 +1,44 @@ +export class SubformRegistry { + constructor(registry = {}) { + this._registry = registry; + } + + getSubform = (key) => this._registry[key]; + + addSubForm = (key, config) => (this._registry[key] = config); + + changeConfig = async (key, callBack) => { + let config = this.getSubform(key); + let newConfig = await callBack(config); + this._registry[key] = newConfig; + }; + + addMiddleware = ( + subFormKey, + middlewareKey, + middlewareFn, + { functionName, preceedingName = "", preceedingIndex = null, exceedingName = "", exceedingIndex = null } + ) => { + let config = this.getSubform(subFormKey); + let { middlewares } = config; + const setPreceedingIndex = (preceedingIndex) => { + let firstChunk = middlewares.splice(0, preceedingIndex + 1); + middlewares = [...firstChunk, { [functionName]: middlewareFn }, ...middlewares]; + }; + + const setExceedingIndex = (exceedingIndex) => { + let firstChunk = middlewares.splice(0, exceedingIndex); + middlewares = [...firstChunk, { [functionName]: middlewareFn }, ...middlewares]; + }; + + if (preceedingIndex) setPreceedingIndex(preceedingIndex); + else if (exceedingIndex) setExceedingIndex(exceedingIndex); + else if (preceedingName) { + let element = middlewares.filter((e) => Object.keys(e)[0] === preceedingName)[0] || null; + if (!element) console.error(`no middleware with ${preceedingName} found in ${key} subForm `); + } else if (exceedingName) { + } + }; +} + +export const subFormRegistry = new SubformRegistry({}); diff --git a/frontend/micro-ui-internals/packages/libraries/src/translations/index.js b/frontend/micro-ui-internals/packages/libraries/src/translations/index.js new file mode 100644 index 00000000000..3a0cadc6ee8 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/translations/index.js @@ -0,0 +1,62 @@ +import i18next from "i18next"; +import { initReactI18next } from "react-i18next"; +import ReactPostprocessor from "i18next-react-postprocessor"; + +const i18nextConfig = () => ({ + lng: Digit.StoreData.getCurrentLanguage(), + fallbackLng: "en_IN", + debug: false, + ns: ["translations"], + defaultNS: "translations", + keySeparator: false, + saveMissing: false, + saveMissingTo: "current", + interpolation: { + escapeValue: false, + formatSeparator: ",", + }, + postProcess: [`reactPostprocessor`, "templatePostprocessor"], + react: { + wait: true, + useSuspense: true, + bindI18n: "loaded", + bindI18nStore: "added", + }, + resources: { + en_IN: { + translations: { + welcome: "Welcome", + }, + }, + }, +}); + +function replaceLiterals(text = "", dynamicValues = {}) { + let returnText = text; + const regex = /[^\{\{][\{]\w+/; + if (regex.exec(text) !== null) { + Object.keys(dynamicValues).forEach((key) => { + returnText = returnText.replace(`{${key.toUpperCase()}}`, dynamicValues[key]); + }); + } + return returnText; +} + +const templatePostprocessor = { + type: "postProcessor", + name: "templatePostprocessor", + process: function (value, key, options, translator) { + return replaceLiterals(value, options); + }, +}; + +export const initI18n = (callback) => { + return i18next + .use(new ReactPostprocessor()) + .use(templatePostprocessor) + .use(initReactI18next) + .init(i18nextConfig(), () => { + window.i18next = i18next; + callback(); + }); +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/utils/browser.js b/frontend/micro-ui-internals/packages/libraries/src/utils/browser.js new file mode 100644 index 00000000000..e0a914d0e75 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/utils/browser.js @@ -0,0 +1,36 @@ +const checkWebview = () => { + const ua = navigator.userAgent; + let rules = [ + // if it says it's a webview, let's go with that + "WebView", + // iOS webview will be the same as safari but missing "Safari" + "(iPhone|iPod|iPad)(?!.*Safari)", + // Android Lollipop and Above: webview will be the same as native but it will contain "wv" + // Android KitKat to lollipop webview will put {version}.0.0.0 + "Android.*(wv|.0.0.0)", + // old chrome android webview agent + "Linux; U; Android", + ]; + + const webviewRegExp = new RegExp("(" + rules.join("|") + ")", "ig"); + return !!ua.match(webviewRegExp); +}; + +const mobileCheck = () => { + let check = false; + (function (a) { + if ( + /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test( + a + ) || + /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test( + a.substr(0, 4) + ) + ) + check = true; + })(navigator.userAgent || navigator.vendor || window.opera); + console.log("check", check); + return check; +}; + +export default { isWebview: checkWebview, isMobile: mobileCheck }; diff --git a/frontend/micro-ui-internals/packages/libraries/src/utils/componentRegistry.js b/frontend/micro-ui-internals/packages/libraries/src/utils/componentRegistry.js new file mode 100644 index 00000000000..8c1a5a2bbec --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/utils/componentRegistry.js @@ -0,0 +1,23 @@ +class ComponentRegistry { + constructor() { + this._registry = {}; + } + + getComponent(id) { + return this._registry[id]; + } + + setComponent(id, component) { + this._registry[id] = component; + return true; + } + + setAllComponents(components) { + Object.entries(components).forEach(([key, value]) => { + this.setComponent(key, value); + }); + return this._registry; + } +} + +export default ComponentRegistry; diff --git a/frontend/micro-ui-internals/packages/libraries/src/utils/date.js b/frontend/micro-ui-internals/packages/libraries/src/utils/date.js new file mode 100644 index 00000000000..c6a547946a3 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/utils/date.js @@ -0,0 +1,20 @@ +function getDate(timestamp) { + const dt = timestamp ? new Date(timestamp) : new Date(); + let dd = dt.getDate(); + let mm = dt.getMonth() + 1; + var yyyy = dt.getFullYear(); + + if (dd < 10) { + dd = "0" + dd; + } + + if (mm < 10) { + mm = "0" + mm; + } + + return yyyy + "-" + mm + "-" + dd; +} + +const monthNames = ["Jan", "Feb", "March", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"]; + +export { getDate, monthNames }; diff --git a/frontend/micro-ui-internals/packages/libraries/src/utils/dss/index.js b/frontend/micro-ui-internals/packages/libraries/src/utils/dss/index.js new file mode 100644 index 00000000000..b4861e10c81 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/utils/dss/index.js @@ -0,0 +1,55 @@ +import { startOfYear, endOfYear, getTime, format, addMonths } from "date-fns"; + +const amountFormatter = (value, denomination) => { + const currencyFormatter = new Intl.NumberFormat("en-IN", { currency: "INR" }); + switch (denomination) { + case "Lac": + return `₹ ${currencyFormatter.format((value / 100000).toFixed(2) || 0)} Lac`; + case "Cr": + return `₹ ${currencyFormatter.format((value / 10000000).toFixed(2) || 0)} Cr`; + case "Unit": + return `₹ ${currencyFormatter.format(value?.toFixed(2) || 0)}`; + default: + return ""; + } +}; + +export const formatter = (value, symbol, unit, commaSeparated = false) => { + if (!value && value !== 0) return ""; + switch (symbol) { + case "amount": + return amountFormatter(value, unit); + case "number": + if (!commaSeparated) { + return parseInt(value); + } + const Nformatter = new Intl.NumberFormat("en-IN"); + return Nformatter.format(Math.round(value)); + case "percentage": + const Pformatter = new Intl.NumberFormat("en-IN", { maximumSignificantDigits: 3 }); + return `${Pformatter.format(value.toFixed(2))} %`; + default: + return ""; + } +}; + +export const getDuration = (startDate, endDate) => { + let noOfDays = (new Date(endDate).getTime() - new Date(startDate).getTime()) / (1000 * 3600 * 24); + if (noOfDays > 91) { + return "month"; + } + if (noOfDays < 90 && noOfDays >= 14) { + return "week"; + } + if (noOfDays <= 14) { + return "day"; + } +}; + +export const getInitialRange = () => { + const startDate = addMonths(startOfYear(new Date()), 3); + const endDate = addMonths(endOfYear(new Date()), 3); + const title = `${format(startDate, "MMM d, yy")} - ${format(endDate, "MMM d, yy")}`; + const duration = Digit.Utils.dss.getDuration(startDate, endDate); + return { startDate, endDate, title, duration }; +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/utils/fonts.js b/frontend/micro-ui-internals/packages/libraries/src/utils/fonts.js new file mode 100644 index 00000000000..74947298390 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/utils/fonts.js @@ -0,0 +1,6 @@ +export const Fonts = { + "Hind-Bold.ttf": + "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AAL5AwAC+t4AAvx+AAL+sgADAJ8AAwMtAAMG0gADCbIAAwywAAMOIQADEJMAAxJEAAMTyQADFWAAAxblAAMYhwADGoEAAxxnAAMfVgADIJQAAyK2AAMjcwADJIkAAyZmAAMnPgADKRAAAyu+AAMuuQADMDQAAzJZAAM0CgADNXUAAzaVAAM4OgADOaAAAztUAAM89wADPlQAA0AyAANCIgADQtYAA0QNAANE0wADRrIAA0d2AANItQADSZMAA0qAAANLwQADTNcAA03IAANPRgADUA8AA1EdAANR7gADUsIAA1OFAANVugADWAsAA1s3AANcawADXXUAA165AANfyAADYTgAA2IjAANjiAADZZUAA2hgAANp/QADas0AA2u8AANssgADbfkAA28hAANwlAADcikAA3M6AAN0zAADdeEAA3bVAAN4HAADeU8AA3peAAN7ZAADfTQAA36UAAOAAQADgH0AA4E3AAOBcgADgcEAA4JEAAODZAADhDQAA4V9AAOGmQADhzYAA4hXAAOJdgADiesAA4rhAAOL+gADjLUAA42/AAOPNwADj8wAA5CZAAORXAADkkUAA5MMAAOUMwADlKYAA5VNAAOWEAADl00AA5jXAAOaGwADm0MAA5yFAAOeRgADnsYAA59DAAOfvQADoDkAA6C3AAOhNQADobMAA6IxAAOirwADozAAA6OxAAOkMgADpLMAA6U0AAOltQADpjYAA6a3AAOnOAADp7kAA6g3AAOotQADqTMAA6mxAAOqLwADqq0AA6srAAOrsQADrGcAA60rAAOt7gABAAAAAgBCoWBzqF8PPPUADwPoAAAAANCVMlYAAAAA1TIQEv4j/fsI6gQkAAEACAACAAEAAAAAAvQAoAAAAAABTQAAAAAAAAAAAAAA+gAAASEANAGDACgC9QAtAgIAIgPNAC0C5gAyAMoAKAFSACgBUv/sAfwAHAJNAC0BJv/5AWUALQECACgB0P/+AiMAIwF8AAoB9QAeAeMAHgIyAB4B9AAjAhkAIwHgABQCIQAjAhUAFAEeADcBJv/5Ak0ALQJNAC0CTQAtAcoAQQPRACgCsgAXAl0AQQJlACgCqwBBAiAAQQH6AEECwgAoAq4AQQEwAEsBiAAeApYAQQHoAEEDfQAyArkAQQLgACgCMwBBAuUAKAJmAEECAgAnAiAAHgKcADwCkwATA8sAEwKXABsCgwANAm0APAFrAEEB0P/TAWsADwHrACECIgAUAfQAhgIEACMCYwA8AdUAIwJjACMCFQAjAVoAHgJJACgCRAA8ARQANQES/9gCJAA8ARQAQQNbADwCRAA8AjcAIwJjADwCYwAjAXIAOwG0ADUBggAKAkQANwIYAAUDJgAFAg4AEAIUAAUB3wAoAXwAKAEYAEYBfAAZAo4AHAD6AAABIQA0Ad4AHgIcACwCOwAcAnsACQEYAEYCVwA5AfQAIQL5ACMBkAAKAlAAGgJbAC0BZQAtAewACgH0AEgBuAAeAk0ALQFtACMBYQAjAfQAhgJJADwCUAAKAQwALQH0AKABFwAKAboACgJPACkDPQAKA0EACgOCABcBygBBArIAFwKyABcCsgAXArIAFwKyABcCsgAXA6wACAJlACgCIABBAiAAQQIgADYCIAA3ATD/6AEwAEsBMP/AATD/xQLtAEECuQBBAuAAKALgACgC4AAoAuAAKALgACgCEgAqAsoAJgKcADwCnAA8ApwAPAKcADwCgwANAjMAQQJWADwCBAAjAgQAIwIEACMCBAAjAgQAIwIEACMDKAAoAdUAIwIVACMCFQAjAhUAIwIVACMBFP/VARQAQQEU/7EBFP+yAi0AIwJEADwCNwAjAjcAIwI3ACMCNwAjAjcAIwJNAC0CMgAjAkQANwJEADcCRAA3AkQANwIUAAUCYwA8AhQABQKyABcCBAAjArIAFwIEACMCqAASAf8AIwJlACgB1QAjAmUAKAHVACMCqwBBAukAIwLtAEECYwAjAiAAQQIVACMCIABBAhUAIwIgAEECFQAjAiAAPQIVACMCwgAoAkkAKALCACgCSQAoATD/5gEU/9gBMP/7ART/6QEwAEcBFABBApYAQQIkADwB6ABBARQAQQHoAEEBFP/1AegAQQEUAEECMwAtAVUAGQK5AEECRAA8ArkAQQJEADwCuQBBAkQAPALgACgCNwAjAuAAKAI3ACMD6AAoA28AIwJmAEEBcgA7AmYAQQFy/+wCZgBBAXL/+gICACcBtAA1AgIAJwG0ADUCAgAnAbQAFQIgAB4BggAKAiAAHgGCAAoCnAA8AkQANwKcADwCRAA3ApwAPAJEADcCnAA8AkQANwKDAA0CbQA8Ad8AKAJtADwB3wAoAm0APAHfACgCCv/iAgIAJwG0ADUCIAAeAYIACgELABwB9AAgAfQAIAH0AEgB9AA0AfQApwH0AHIB9AB/AfQANAH0ACUCXgAUAAD+iAAA/yIBHQBYAr4AHgPVAB4CEf/iAhH/4gHQ/+IC1v/iA5H/4gM3/+ICQf/iAkH/4gJB/+ID1wAeA9cAHgPXAB4DKf/iA0n/4gJJ/+ICfv/iAo//4gKU/+ICkf/iApL/4gMN/+ICsv/iAgj/4gI//+ICFv/iAjT/4gLy/+ICYP/iAqIAFAJD/+ICg//iAhH/4gJB/+IDTP/iAnj/4gJP//cCSf/iAnr/4gGh/+IBof/YAvn/4gMi/+ICW//iAtAAHgJi/+ICqv/iAif/4gAA/pcCRwBDARn/4gEZ/+IBGf8mAAD+SgAA/roAAP6gAAD+sAAA/pIAAP5VAAD+IwEY/6YBGP9tARn/PgAA/zIE1QBiAyn/4gNJ/+ICSf/iApL/4gIW/+ICNP/iA0z/4gMo/6YDTf/iAAD+pwAA/qcB3QDXAtcA1wIjACMBmgAoAgQAKAHtACgCQQAjAgMALQItAC0B6gAZAiEAIwIpACgB9gA/Ar4AHgAAAAAAAP/pAAD/gQIrAC0DRAAtAQsAGwELABwBC//5AcQAGwHEABwBxP/+Ai8AHgJNAC0BqQBQA6oAPAWEAC0BcwAaAXMAKQEI/08D0ABBAm4AKAIvADwCTAA2AiH/9AIHAB4C8QAKAxYALQNGAAYCKAAjAqkAIwKH//EB5AAeAk0ALQHo/+sBPABFAzkAGwM+AC0BRv/jAk0AFQJNAC0CSAAoAkgALQJcAB0ClAAsAj8AHgJRAB4DGgATAvb/4gIi/+ICdP/iAUT/4gFd/+ICj//iAa3/4gKR/+IBpP/iAhH/4gHe/+ICCP/iAj//4gIW/+ICNP/iAfX/4gGM/+IB1AAUAkP/4gGm/+IBPP/iAV7/4gKJ/+IBi//iAWf/9wFh/+IBff/iAaH/4gIC/+IBav/iAewAHgF8/+IBs//iAif/4gMi/+ICMwATAiH/4gJK/+ICdv/iAUL/4gG6/+ICdv/iAAD+/wDA/+IAAP5sAzj/4gM2/+ICWP/iAoT/4gKA/+IClP/iApH/4gKS/+IDcf/iAsb/4gIN/+ICP//iAhv/4gI4/+IC/P/iAn7/4gKiABQCSP/iAon/4gIu/+ICRv/iA0z/4gJ5/+ICXgAGAmL/4gKK/+ICZP/iAv4AGgM2/+ICuf/iAzj/4gM2/+ICWP/iApL/4gNM/+ICSf/iAlX/4gF2/+IBfP/iAaP/4gHo/+ICdP/iAgr/4gIN/+ICP//iAhv/4gI4/+IB5P/YAaP/4gHOABQCSP/iAcT/4gFX/+IBQ//iAmf/4gF5/+IBjgAGAav/4gGE/+IBd//iAi//4gJJ/+ICVf/iAXb/4gHo/+ICZ//iBVn/4gVZ/+IFnv/iBOz/4gS1/+IEQv/iBUr/4gOw/+IEnP/iBhz/4gSu/+IF3//iBQT/4gRn/+IDOP/iBHn/4gR4/+IFhf/iBYX/4gWF/+IEzP/iBJz/4gSc/+IE2f/iBUf/4gSU/+IF/v/iBSj/4gRqABMF5gATBHgAEwRtABMFCf/iBCQAEwRGABMEcgATBmf/4gg8/+IFiP/iBK7/4gSu/+IDOv/iBNP/4gTT/+IE0v/iBNL/4gSp/+IEqf/iBXj/4gV4/+IFKv/iA4n/4gPI/+ID0v/iBFT/4gON/+IDw//iBVT/4gU//+ICSf/iBQ7/4gPM/+IDmf/iBSL/4gOJ/+ID2P/iBAD/4gRD/+IDpf/iBAj/4gJ+/+IDp//iA+z/4gQQ/+IEIf/iBDX/4gKU/+ID9//iBCj/4gUE/+IEzf/iBCL/4gQj/+IExf/iBbD/4gWP/+IEz//iBIz/4gOs/+ID9v/iBA7/4gPn/+ICkv/iBCb/4gQL/+IEDP/iBAz/4gQJ/+IDiv/iBHn/4gSq/+IEiP/iBFX/4gSG/+IE4v/iAjr/4gJF/+IERv/iAj//4gJ8/+IEqv/iAj7/4gI+/+IEcf/iAk3/4gJ6/+IEkP/iA+P/4gSv/+IELf/iBCP/4gUT/+IEQv/iBH3/4gRR/+IEpf/iBlX/4gSD/+IF8//iBLT/4gTK/+IEvP/iAoD/4gQU/+ID6//iBDz/4gLE/+IEbv/iA7P/4gPM/+IFq//iBL7/4gPP/+IFSv/iA+L/4gPR/+IEdf/iA83/4gQ6/+IExv/iBbj/4gV7/+ICpwAZBEYAFAQxABQCSP/iAnv/4gL5/+ICQP/iAwD/4gJN/+ICdP/iAnT/4gMw/+IDUf/iArv/4gJM/+IChP/iA/b/4gPj/+IEHv/iA///4gRp/+IGIf/iA8r/4gOz/+IDIP/iA0z/4gN4/+IE+v/iA6r/4gVS/+ID2v/iBXz/4gVJ/+IDb//iA2r/4gNu/+IDr//iBSz/4gOr/+IFDf/iAiz/4gOw/+IDWf/iA0r/4gRk/+IEZP/iA3v/4gUE/+IEs//iA3//4gT6/+IDrf/iA5H/4gPT/+IE2P/iBpv/4gVb/+IDP//iAjv/4gJ8/+ICTP/iBSL/4gJG/+IDd//iBIL/4gOT/+IDzv/iBEP/4gOb/+ID9P/iBNX/4gTV/+IEdP/iBML/4gTC/+IDTP/iBLP/4gW+/+IFvv/iBQ//4gV5/+IFZ//iBUv/4gQi/+IEIv/iBbD/4gST/+ID8P/iA9P/4gQT/+IFe//iAnj/4gQS/+ID6f/iA9r/4gQK/+IEk//iBhL/4gPr/+IEav/iBET/4gJU//wD9v/3A/4ABgRh//cDw//3A77/4gOr/+ICTv/iA5X/4gOG/+IDw//iBUr/4gO5/+IDhf/iBTb/4gOU/+IE5f/iA3X/4gPE/+IEYf/iA5v/4gQk/+IECP/iA2f/4gJ//+IECv/iAyT/4gLn/+IFMf/iBuH/4gVb/+IEPf/iBJD/4gSQ/+IEEP/iBFH/4gQy/+IERv/iBF7/4gSW/+IGYP/iBF//4gRG/+IEP//iBVT/4gSA/+IEV//iBFv/4gSW/+IE9//iBpT/4gRj/+IFfP/iBOT/4gQl/+ICYP/iA+z/4gR1/+IDvP/iA3H/4gT1AB4E9QAeAv7//gRdAB4DygAeBBgAHgL2//YEHwAeBFoAHgMBAAEC/v/+BIgAHgS5/+IEtf/iAkr/4gSg/+ICVP/sAln/4gKG/+IE8P/iAov/4gSF/+IF9P/iA7P/4gO0/+IEvv/iA7//4gU6/+IEFP/iA+H/4gPU/+IE1//iBNP/4gZN/+IExf/iBED/4gOs/+ID+v/iBXz/4gOg/+IFe//iBFD/4gXy/+ID8f/iAzb/4gPb/+IECP/iBPD/4gQS/+ID7f/iBWj/4gQo/+IEp//iA/X/4gQc/+ICvv/iAqf/4gNd/+IDXf/iArb/4gK0/+IEzv/iARn+JAAA/uoAAP+uAAD/fQAA/30CEf/iARn/JgEa/yYBGv8mARn+JAEZ/iQBGf4kAAD+VQAA/lUAAP5VAAD+IwAA/iMAAP4jARn/bQEZ/3MBGf9qARn/QgEZ/0UBGf86AAD+iAEZ/6YCoP/iAr7/4gIk/+ICJ//iAeH/4gMCAAACRv/iARn/4gEZ/+IBGf/iARn/4gEZ/+IBGf/iARn/4gEZ/+IBGf/iARn/4gEZ/+IBGf/iARn/4gEZ/+IBGf/iARn/4gEZ/+IBGf/iARn/4gEZ/+IBGf/iARn/4gEZ/+IBGf/iARn/4gEZ/+IBGf/iAnwAHgPKAB4DcwAeAAEAAAQf/d4AAAg8/iP4LwjqAAEAAAAAAAAAAAAAAAAAAAPbAAQCMQK8AAUAAAKKAlgAAABLAooCWAAAAV4AMgEwAAACAAAAAAAAAAAAAACABwAAAAAAAAAAAAAAAElURk8AoAAA+wIEH/3eAAAEHwIiIAAAkwAAAAAB+wKmAAAAIAAHAAAAAgAAAAMAAAAUAAMAAQAAABQABAJIAAAAjgCAAAYADgAAAA0AfgEHARMBGwEfASMBKwExATcBPgFIAU0BWwFlAWsBcwF+AZICGwK8AscCyQLdA8AJAwkNCREJKAkzCTkJRQlJCU0JUAleCXAJciANIBQgGiAeICIgJiAwIDogRCCoIKwguiC9IRMhIiEmIS4iAiIGIg8iEiIVIhoiHiIrIkgiYCJlJcolzPsC//8AAAAAAA0AIACgAQwBFgEeASIBKgEuATYBOQFBAUwBUAFeAWoBbgF4AZICGAK8AsYCyQLYA8AJAQkFCQ8JEwkqCTUJPAlHCUsJUAlYCWAJciALIBMgGCAcICAgJiAwIDkgRCCoIKwguSC9IRMhIiEmIS4iAiIGIg8iESIVIhkiHiIrIkgiYCJkJcolzPsB//8AA//3/+X/xP/A/77/vP+6/7T/sv+u/63/q/+o/6b/pP+g/57/mv+H/wL+Yv5Z/lj+Sv1o+Cj4J/gm+CX4JPgj+CH4IPgf+B34FvgV+BThfOF34XThc+Fy4W/hZuFe4VXg8uDv4OPg4eCM4H7ge+B036Hfnt+W35Xfk9+Q343fgd9l307fS9vn2+YGsgABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAALCCwAFVYRVkgIEu4AA1RS7AGU1pYsDQbsChZYGYgilVYsAIlYbkIAAgAY2MjYhshIbAAWbAAQyNEsgABAENgQi2wASywIGBmLbACLCBkILDAULAEJlqyKAELQ0VjRbAGRVghsAMlWVJbWCEjIRuKWCCwUFBYIbBAWRsgsDhQWCGwOFlZILEBC0NFY0VhZLAoUFghsQELQ0VjRSCwMFBYIbAwWRsgsMBQWCBmIIqKYSCwClBYYBsgsCBQWCGwCmAbILA2UFghsDZgG2BZWVkbsAIlsApDY7AAUliwAEuwClBYIbAKQxtLsB5QWCGwHkthuBAAY7AKQ2O4BQBiWVlkYVmwAStZWSOwAFBYZVlZLbADLCBFILAEJWFkILAFQ1BYsAUjQrAGI0IbISFZsAFgLbAELCMhIyEgZLEFYkIgsAYjQrAGRVgbsQELQ0VjsQELQ7ACYEVjsAMqISCwBkMgiiCKsAErsTAFJbAEJlFYYFAbYVJZWCNZIVkgsEBTWLABKxshsEBZI7AAUFhlWS2wBSywB0MrsgACAENgQi2wBiywByNCIyCwACNCYbACYmawAWOwAWCwBSotsAcsICBFILAMQ2O4BABiILAAUFiwQGBZZrABY2BEsAFgLbAILLIHDABDRUIqIbIAAQBDYEItsAkssABDI0SyAAEAQ2BCLbAKLCAgRSCwASsjsABDsAQlYCBFiiNhIGQgsCBQWCGwABuwMFBYsCAbsEBZWSOwAFBYZVmwAyUjYUREsAFgLbALLCAgRSCwASsjsABDsAQlYCBFiiNhIGSwJFBYsAAbsEBZI7AAUFhlWbADJSNhRESwAWAtsAwsILAAI0KyCwoDRVghGyMhWSohLbANLLECAkWwZGFELbAOLLABYCAgsA1DSrAAUFggsA0jQlmwDkNKsABSWCCwDiNCWS2wDywgsBBiZrABYyC4BABjiiNhsA9DYCCKYCCwDyNCIy2wECxLVFixBGREWSSwDWUjeC2wESxLUVhLU1ixBGREWRshWSSwE2UjeC2wEiyxABBDVVixEBBDsAFhQrAPK1mwAEOwAiVCsQ0CJUKxDgIlQrABFiMgsAMlUFixAQBDYLAEJUKKiiCKI2GwDiohI7ABYSCKI2GwDiohG7EBAENgsAIlQrACJWGwDiohWbANQ0ewDkNHYLACYiCwAFBYsEBgWWawAWMgsAxDY7gEAGIgsABQWLBAYFlmsAFjYLEAABMjRLABQ7AAPrIBAQFDYEItsBMsALEAAkVUWLAQI0IgRbAMI0KwCyOwAmBCIGCwAWG1EhIBAA8AQkKKYLESBiuwiSsbIlktsBQssQATKy2wFSyxARMrLbAWLLECEystsBcssQMTKy2wGCyxBBMrLbAZLLEFEystsBossQYTKy2wGyyxBxMrLbAcLLEIEystsB0ssQkTKy2wKSwjILAQYmawAWOwBmBLVFgjIC6wAV0bISFZLbAqLCMgsBBiZrABY7AWYEtUWCMgLrABcRshIVktsCssIyCwEGJmsAFjsCZgS1RYIyAusAFyGyEhWS2wHiwAsA0rsQACRVRYsBAjQiBFsAwjQrALI7ACYEIgYLABYbUSEgEADwBCQopgsRIGK7CJKxsiWS2wHyyxAB4rLbAgLLEBHistsCEssQIeKy2wIiyxAx4rLbAjLLEEHistsCQssQUeKy2wJSyxBh4rLbAmLLEHHistsCcssQgeKy2wKCyxCR4rLbAsLCA8sAFgLbAtLCBgsBJgIEMjsAFgQ7ACJWGwAWCwLCohLbAuLLAtK7AtKi2wLywgIEcgILAMQ2O4BABiILAAUFiwQGBZZrABY2AjYTgjIIpVWCBHICCwDENjuAQAYiCwAFBYsEBgWWawAWNgI2E4GyFZLbAwLACxAAJFVFixDAdFQrABFrAvKrEFARVFWDBZGyJZLbAxLACwDSuxAAJFVFixDAdFQrABFrAvKrEFARVFWDBZGyJZLbAyLCA1sAFgLbAzLACxDAdFQrABRWO4BABiILAAUFiwQGBZZrABY7ABK7AMQ2O4BABiILAAUFiwQGBZZrABY7ABK7AAFrQAAAAAAEQ+IzixMgEVKiEtsDQsIDwgRyCwDENjuAQAYiCwAFBYsEBgWWawAWNgsABDYTgtsDUsLhc8LbA2LCA8IEcgsAxDY7gEAGIgsABQWLBAYFlmsAFjYLAAQ2GwAUNjOC2wNyyxAgAWJSAuIEewACNCsAIlSYqKRyNHI2EgWGIbIVmwASNCsjYBARUUKi2wOCywABawESNCsAQlsAQlRyNHI2GxCgBCsAlDK2WKLiMgIDyKOC2wOSywABawESNCsAQlsAQlIC5HI0cjYSCwBCNCsQoAQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjILAIQyCKI0cjRyNhI0ZgsARDsAJiILAAUFiwQGBZZrABY2AgsAErIIqKYSCwAkNgZCOwA0NhZFBYsAJDYRuwA0NgWbADJbACYiCwAFBYsEBgWWawAWNhIyAgsAQmI0ZhOBsjsAhDRrACJbAIQ0cjRyNhYCCwBEOwAmIgsABQWLBAYFlmsAFjYCMgsAErI7AEQ2CwASuwBSVhsAUlsAJiILAAUFiwQGBZZrABY7AEJmEgsAQlYGQjsAMlYGRQWCEbIyFZIyAgsAQmI0ZhOFktsDossAAWsBEjQiAgILAFJiAuRyNHI2EjPDgtsDsssAAWsBEjQiCwCCNCICAgRiNHsAErI2E4LbA8LLAAFrARI0KwAyWwAiVHI0cjYbAAVFguIDwjIRuwAiWwAiVHI0cjYSCwBSWwBCVHI0cjYbAGJbAFJUmwAiVhuQgACABjYyMgWGIbIVljuAQAYiCwAFBYsEBgWWawAWNgIy4jICA8ijgjIVktsD0ssAAWsBEjQiCwCEMgLkcjRyNhIGCwIGBmsAJiILAAUFiwQGBZZrABYyMgIDyKOC2wPiwjIC5GsAIlRrARQ1hQG1JZWCA8WS6xLgEUKy2wPywjIC5GsAIlRrARQ1hSG1BZWCA8WS6xLgEUKy2wQCwjIC5GsAIlRrARQ1hQG1JZWCA8WSMgLkawAiVGsBFDWFIbUFlYIDxZLrEuARQrLbBBLLA4KyMgLkawAiVGsBFDWFAbUllYIDxZLrEuARQrLbBCLLA5K4ogIDywBCNCijgjIC5GsAIlRrARQ1hQG1JZWCA8WS6xLgEUK7AEQy6wListsEMssAAWsAQlsAQmICAgRiNHYbAKI0IuRyNHI2GwCUMrIyA8IC4jOLEuARQrLbBELLEIBCVCsAAWsAQlsAQlIC5HI0cjYSCwBCNCsQoAQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbEuARQrLbBFLLEAOCsusS4BFCstsEYssQA5KyEjICA8sAQjQiM4sS4BFCuwBEMusC4rLbBHLLAAFSBHsAAjQrIAAQEVFBMusDQqLbBILLAAFSBHsAAjQrIAAQEVFBMusDQqLbBJLLEAARQTsDUqLbBKLLA3Ki2wSyywABZFIyAuIEaKI2E4sS4BFCstsEwssAgjQrBLKy2wTSyyAABEKy2wTiyyAAFEKy2wTyyyAQBEKy2wUCyyAQFEKy2wUSyyAABFKy2wUiyyAAFFKy2wUyyyAQBFKy2wVCyyAQFFKy2wVSyzAAAAQSstsFYsswABAEErLbBXLLMBAABBKy2wWCyzAQEAQSstsFksswAAAUErLbBaLLMAAQFBKy2wWyyzAQABQSstsFwsswEBAUErLbBdLLIAAEMrLbBeLLIAAUMrLbBfLLIBAEMrLbBgLLIBAUMrLbBhLLIAAEYrLbBiLLIAAUYrLbBjLLIBAEYrLbBkLLIBAUYrLbBlLLMAAABCKy2wZiyzAAEAQistsGcsswEAAEIrLbBoLLMBAQBCKy2waSyzAAABQistsGosswABAUIrLbBrLLMBAAFCKy2wbCyzAQEBQistsG0ssQA6Ky6xLgEUKy2wbiyxADorsD4rLbBvLLEAOiuwPystsHAssAAWsQA6K7BAKy2wcSyxATorsD4rLbByLLEBOiuwPystsHMssAAWsQE6K7BAKy2wdCyxADsrLrEuARQrLbB1LLEAOyuwPistsHYssQA7K7A/Ky2wdyyxADsrsEArLbB4LLEBOyuwPistsHkssQE7K7A/Ky2weiyxATsrsEArLbB7LLEAPCsusS4BFCstsHwssQA8K7A+Ky2wfSyxADwrsD8rLbB+LLEAPCuwQCstsH8ssQE8K7A+Ky2wgCyxATwrsD8rLbCBLLEBPCuwQCstsIIssQA9Ky6xLgEUKy2wgyyxAD0rsD4rLbCELLEAPSuwPystsIUssQA9K7BAKy2whiyxAT0rsD4rLbCHLLEBPSuwPystsIgssQE9K7BAKy2wiSyzCQQCA0VYIRsjIVlCK7AIZbADJFB4sQUBFUVYMFktAAAAAEu4AMhSWLEBAY5ZsAG5CAAIAGNwsQAHQrMvGwIAKrEAB0K1IggQBwIIKrEAB0K1LAYZBQIIKrEACUK7CMAEQAACAAkqsQALQrsAQABAAAIACSqxAwBEsSQBiFFYsECIWLEDZESxJgGIUVi6CIAAAQRAiGNUWLEDAERZWVlZtSQIEgcCDCq4Af+FsASNsQIARLMFZAYAREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNAI0CewBvAG8DowKfAp8ABf7NBEz+cAOjAqYCnwAF/s0ETP5wAJgAmAByAHICogAAAsMB+wAA/0UETP5wAq3/+ALjAgH/+/86BEz+cAAAAA4ArgADAAEECQAAAIYAAAADAAEECQABAAgAhgADAAEECQACAAgAjgADAAEECQADACgAlgADAAEECQAEABIAvgADAAEECQAFARoA0AADAAEECQAGABIB6gADAAEECQAHAFYB/AADAAEECQAIACYCUgADAAEECQAJAEACeAADAAEECQALAEACuAADAAEECQAMAEACuAADAAEECQANASAC+AADAAEECQAOADQEGABDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADEANAAgAEkAbgBkAGkAYQBuACAAVAB5AHAAZQAgAEYAbwB1AG4AZAByAHkAIAAoAGkAbgBmAG8AQABpAG4AZABpAGEAbgB0AHkAcABlAGYAbwB1AG4AZAByAHkALgBjAG8AbQApAEgAaQBuAGQAQgBvAGwAZAAyAC4AMAAwADEAOwBJAFQARgBPADsASABpAG4AZAAtAEIAbwBsAGQASABpAG4AZAAgAEIAbwBsAGQAVgBlAHIAcwBpAG8AbgAgADIALgAwADAAMQA7AFAAUwAgADEALgAwADsAaABvAHQAYwBvAG4AdgAgADEALgAwAC4ANwA5ADsAbQBhAGsAZQBvAHQAZgAuAGwAaQBiADIALgA1AC4ANgAxADkAMwAwADsAIAB0AHQAZgBhAHUAdABvAGgAaQBuAHQAIAAoAHYAMQAuADUALgAzADMALQAxADcAMQA0ACkAIAAtAGwAIAA4ACAALQByACAANQAwACAALQBHACAAMgAwADAAIAAtAHgAIAAxADMAIAAtAEQAIABsAGEAdABuACAALQBmACAAZABlAHYAYQAgAC0AdwAgAEcAIAAtAFcAIAAtAGMAIAAtAFgAIAAiACIASABpAG4AZAAtAEIAbwBsAGQASABpAG4AZAAgAGkAcwAgAGEAIAB0AHIAYQBkAGUAbQBhAHIAawAgAG8AZgAgAEkAbgBkAGkAYQBuACAAVAB5AHAAZQAgAEYAbwB1AG4AZAByAHkALgBJAG4AZABpAGEAbgAgAFQAeQBwAGUAIABGAG8AdQBuAGQAcgB5AE0AYQBuAHUAcwBoAGkAIABQAGEAcgBpAGsAaAAsACAAUwBhAHQAeQBhACAAUgBhAGoAcAB1AHIAbwBoAGkAdABoAHQAdABwADoALwAvAHcAdwB3AC4AaQBuAGQAaQBhAG4AdAB5AHAAZQBmAG8AdQBuAGQAcgB5AC4AYwBvAG0AVABoAGkAcwAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUAIABpAHMAIABsAGkAYwBlAG4AcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAFMASQBMACAATwBwAGUAbgAgAEYAbwBuAHQAIABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMQAuADEALgAgAFQAaABpAHMAIABsAGkAYwBlAG4AcwBlACAAaQBzACAAYQB2AGEAaQBsAGEAYgBsAGUAIAB3AGkAdABoACAAYQAgAEYAQQBRACAAYQB0ADoAIABoAHQAdABwADoALwAvAHMAYwByAGkAcAB0AHMALgBzAGkAbAAuAG8AcgBnAC8ATwBGAEwAaAB0AHQAcAA6AC8ALwBzAGMAcgBpAHAAdABzAC4AcwBpAGwALgBvAHIAZwAvAE8ARgBMAAAAAgAAAAAAAP+DADIAAAAAAAAAAAAAAAAAAAAAAAAAAAPbAAAAAQACAQIBAwADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEBBACjAIQAhQC9AJYA6ACGAI4AiwCdAKkApAEFAIoA2gCDAJMA8gDzAI0BBgCIAMMA3gDxAJ4AqgD1APQA9gCiAK0AyQDHAK4AYgBjAJAAZADLAGUAyADKAM8AzADNAM4A6QBmANMA0ADRAK8AZwDwAJEA1gDUANUAaADrAO0AiQBqAGkAawBtAGwAbgCgAG8AcQBwAHIAcwB1AHQAdgB3AOoAeAB6AHkAewB9AHwAuAChAH8AfgCAAIEA7ADuALoBBwEIAQkBCgELAQwA/QD+AP8BAAENAQ4BDwEBARABEQESARMBFAEVARYBFwD4APkBGAEZARoBGwEcAR0A+gDXAR4BHwEgASEBIgEjASQBJQDiAOMBJgEnASgBKQEqASsBLAEtAS4BLwCwALEBMAExATIBMwE0ATUBNgE3ATgBOQDkAOUBOgE7ATwBPQE+AT8BQAFBAUIBQwFEAUUAuwFGAUcBSAFJAOYA5wCmAUoBSwFMAU0BTgDYAOEBTwDbANwA3QDgANkA3wCbAVABUQFSAVMBVAFVAVYBVwFYAVkBWgFbAVwBXQFeAV8BYAFhAWIBYwFkAWUBZgFnAWgBaQFqAWsBbAFtAW4BbwFwAXEBcgFzAXQBdQF2AXcBeAF5AXoBewF8AX0BfgF/AYABgQGCAYMBhAGFAYYBhwGIAYkBigGLAYwBjQGOAY8BkAGRAZIBkwGUAZUBlgGXAZgBmQGaAZsBnAGdAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbAAsgCzALYAtwDEALQAtQDFAIIAwgCHAKsAxgC+AL8AvAGxAbIBswG0AbUBtgCMAbcBuACYAbkAmgCZAO8BugG7AKUAkgCcAKcAjwCUAJUAuQG8AMAAwQG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcoBywHMAc0BzgHPAdAB0QHSAdMB1AHVAdYB1wHYAdkB2gHbAdwB3QHeAd8B4AHhAeIB4wHkAeUB5gHnAegB6QHqAesB7AHtAe4B7wHwAfEB8gHzAfQB9QH2AfcB+AH5AfoB+wH8Af0B/gH/AgACAQICAgMCBAIFAgYCBwIIAgkCCgILAgwCDQIOAg8CEAIRAhICEwIUAhUCFgIXAhgCGQIaAhsCHAIdAh4CHwIgAiECIgIjAiQCJQImAicCKAIpAioCKwIsAi0CLgIvAjACMQIyAjMCNAI1AjYCNwI4AjkCOgI7AjwCPQI+Aj8CQAJBAkICQwJEAkUCRgJHAkgCSQJKAksCTAJNAk4CTwJQAlECUgJTAlQCVQJWAlcCWAJZAloCWwJcAl0CXgJfAmACYQJiAmMCZAJlAmYCZwJoAmkCagJrAmwCbQJuAm8CcAJxAnICcwJ0AnUCdgJ3AngCeQJ6AnsCfAJ9An4CfwKAAoECggKDAoQChQKGAocCiAKJAooCiwKMAo0CjgKPApACkQKSApMClAKVApYClwKYApkCmgKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKnAqgCqQKqAqsCrAKtAq4CrwKwArECsgKzArQCtQK2ArcCuAK5AroCuwK8Ar0CvgK/AsACwQLCAsMCxALFAsYCxwLIAskCygLLAswCzQLOAs8C0ALRAtIC0wLUAtUC1gLXAtgC2QLaAtsC3ALdAt4C3wLgAuEC4gLjAuQC5QLmAucC6ALpAuoC6wLsAu0C7gLvAvAC8QLyAvMC9AL1AvYC9wL4AvkC+gL7AvwC/QL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx0DHgMfAyADIQMiAyMDJAMlAyYDJwMoAykDKgMrAywDLQMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQNeA18DYANhA2IDYwNkA2UDZgNnA2gDaQNqA2sDbANtA24DbwNwA3EDcgNzA3QDdQN2A3cDeAN5A3oDewN8A30DfgN/A4ADgQOCA4MDhAOFA4YDhwOIA4kDigOLA4wDjQOOA48DkAORA5IDkwOUA5UDlgOXA5gDmQOaA5sDnAOdA54DnwOgA6EDogOjA6QDpQOmA6cDqAOpA6oDqwOsA60DrgOvA7ADsQOyA7MDtAO1A7YDtwO4A7kDugO7A7wDvQO+A78DwAPBA8IDwwPEA8UDxgPHA8gDyQPKA8sDzAPNA84DzwPQA9ED0gPTA9QD1QPWA9cD2APZA9oD2wPcA90D3gPfA+AD4QPiBE5VTEwCQ1IHdW5pMDBBMAd1bmkwMEFEB3VuaTAwQjUHQW1hY3JvbgdhbWFjcm9uBkFicmV2ZQZhYnJldmUHQW9nb25lawdhb2dvbmVrBkRjYXJvbgZkY2Fyb24GRGNyb2F0B0VtYWNyb24HZW1hY3JvbgpFZG90YWNjZW50CmVkb3RhY2NlbnQHRW9nb25lawdlb2dvbmVrBkVjYXJvbgZlY2Fyb24HdW5pMDEyMgd1bmkwMTIzB0ltYWNyb24HaW1hY3JvbgdJb2dvbmVrB2lvZ29uZWsHdW5pMDEzNgd1bmkwMTM3BkxhY3V0ZQZsYWN1dGUHdW5pMDEzQgd1bmkwMTNDBkxjYXJvbgZsY2Fyb24GTmFjdXRlBm5hY3V0ZQd1bmkwMTQ1B3VuaTAxNDYGTmNhcm9uBm5jYXJvbgdPbWFjcm9uB29tYWNyb24NT2h1bmdhcnVtbGF1dA1vaHVuZ2FydW1sYXV0BlJhY3V0ZQZyYWN1dGUHdW5pMDE1Ngd1bmkwMTU3BlJjYXJvbgZyY2Fyb24GU2FjdXRlBnNhY3V0ZQd1bmkwMTVFB3VuaTAxNUYHdW5pMDE2Mgd1bmkwMTYzBlRjYXJvbgZ0Y2Fyb24HVW1hY3Jvbgd1bWFjcm9uBVVyaW5nBXVyaW5nDVVodW5nYXJ1bWxhdXQNdWh1bmdhcnVtbGF1dAdVb2dvbmVrB3VvZ29uZWsGWmFjdXRlBnphY3V0ZQpaZG90YWNjZW50Cnpkb3RhY2NlbnQHdW5pMDIxOAd1bmkwMjE5B3VuaTAyMUEHdW5pMDIxQg1hcG9zdHJvcGhlbW9kB3VuaTAyQzkNZHZDYW5kcmFiaW5kdQpkdkFudXN2YXJhCWR2VmlzYXJnYQNkdkEEZHZBQQNkdkkEZHZJSQNkdlUEZHZVVQRkdnZSBGR2dkwJZHZFY2FuZHJhA2R2RQRkdkFJCWR2T2NhbmRyYQNkdk8EZHZBVQRkdktBBWR2S0hBBGR2R0EFZHZHSEEFZHZOR0EEZHZDQQVkdkNIQQRkdkpBBWR2SkhBBWR2TllBBWR2VFRBBmR2VFRIQQVkdkREQQZkdkRESEEFZHZOTkEEZHZUQQVkdlRIQQRkdkRBBWR2REhBBGR2TkEEZHZQQQVkdlBIQQRkdkJBBWR2QkhBBGR2TUEEZHZZQQRkdlJBBWR2UnhBBGR2TEEFZHZMTEEEZHZWQQVkdlNIQQVkdlNTQQRkdlNBBGR2SEEHZHZOdWt0YQpkdkF2YWdyYWhhBWR2bUFBBGR2bUkFZHZtSUkEZHZtVQVkdm1VVQVkdm12UgZkdm12UlIKZHZtRWNhbmRyYQRkdm1FBWR2bUFJCmR2bU9jYW5kcmEEZHZtTwVkdm1BVQhkdlZpcmFtYQRkdk9tBWR2S3hBBmR2S0h4QQVkdkd4QQVkdkp4QQZkdkREeEEHZHZEREh4QQZkdlBIeEEFZHZ2UlIFZHZ2TEwFZHZtdkwGZHZtdkxMBWRhbmRhC2RvdWJsZWRhbmRhBmR2WmVybwVkdk9uZQVkdlR3bwdkdlRocmVlBmR2Rm91cgZkdkZpdmUFZHZTaXgHZHZTZXZlbgdkdkVpZ2h0BmR2TmluZRJkdkFiYnJldmlhdGlvbnNpZ24JZHZBY2FuZHJhDnplcm93aWR0aHNwYWNlEnplcm93aWR0aG5vbmpvaW5lcg96ZXJvd2lkdGhqb2luZXIFcnVwZWUERXVybwtpbmRpYW5ydXBlZQd1bmkyMEJBB3VuaTIwQkQHdW5pMjExMwd1bmkyMTI2CWVzdGltYXRlZAd1bmkyMjA2B3VuaTIyMTUHdW5pMjIxOQxkb3R0ZWRjaXJjbGUHZHZLX1NTQQdkdkpfTllBA2R2SwRkdktIA2R2RwRkdkdIBGR2TkcDZHZDBGR2Q0gDZHZKBGR2SkgEZHZOWQRkdlRUBWR2VFRIBGR2REQFZHZEREgEZHZOTgNkdlQEZHZUSANkdkQEZHZESANkdk4DZHZQBGR2UEgDZHZCBGR2QkgDZHZNA2R2WQNkdlIDZHZMA2R2VgRkdlNIBGR2U1MDZHZTA2R2SARkdkxMBmR2S19TUwZkdkpfTlkEZHZLeAVkdktIeARkdkd4BGR2SngFZHZQSHgGZHZSZXBoCWR2RXllbGFzaA1kdlJhc2h0cmFzaWduBmR2S19SQQdkdktIX1JBBmR2R19SQQdkdkdIX1JBB2R2TkdfUkEGZHZDX1JBB2R2Q0hfUkEGZHZKX1JBB2R2SkhfUkEHZHZOWV9SQQdkdlRUX1JBCGR2VFRIX1JBB2R2RERfUkEIZHZEREhfUkEHZHZOTl9SQQZkdlRfUkEHZHZUSF9SQQZkdkRfUkEHZHZESF9SQQZkdk5fUkEGZHZQX1JBB2R2UEhfUkEGZHZCX1JBB2R2QkhfUkEGZHZNX1JBBmR2WV9SQQZkdlZfUkEHZHZTSF9SQQZkdlNfUkEGZHZIX1JBB2R2S3hfUkEIZHZLSHhfUkEHZHZHeF9SQQdkdkp4X1JBCGR2UEh4X1JBBWR2S19SBmR2S0hfUgVkdkdfUgZkdkdIX1IFZHZDX1IFZHZKX1IGZHZKSF9SBmR2TllfUgZkdlRUX1IHZHZUVEhfUgZkdkREX1IHZHZEREhfUgZkdk5OX1IFZHZUX1IGZHZUSF9SBWR2RF9SBmR2REhfUgVkdk5fUgVkdlBfUgZkdlBIX1IFZHZCX1IGZHZCSF9SBWR2TV9SBWR2WV9SBWR2Vl9SBWR2U19SBmR2S3hfUgdkdktIeF9SBmR2R3hfUgZkdkp4X1IHZHZQSHhfUgZkdktfS0EIZHZLeF9LeEEHZHZLX0tIQQZkdktfQ0EGZHZLX0pBB2R2S19UVEEHZHZLX05OQQZkdktfVEEHZHZLeF9UQQhkdktfVF9ZQQhkdktfVF9SQQhkdktfVF9WQQdkdktfVEhBBmR2S19EQQZkdktfTkEGZHZLX1BBCGR2S19QX1JBB2R2S19QSEEIZHZLeF9QSEEJZHZLeF9QSHhBB2R2S3hfQkEGZHZLX01BB2R2S3hfTUEGZHZLX1lBBmR2S19MQQZkdktfVkEIZHZLX1ZfWUEHZHZLX1NIQQlkdktfU1NfTUELZHZLX1NTX01fWUEJZHZLX1NTX1lBCWR2S19TU19WQQZkdktfU0EJZHZLX1NfVFRBCWR2S19TX0REQQhkdktfU19UQQpkdktfU19QX1JBCmR2S19TX1BfTEEIZHZLSF9LSEEHZHZLSF9UQQhkdktIeF9UQQdkdktIX05BB2R2S0hfTUEIZHZLSHhfTUEHZHZLSF9ZQQhkdktIeF9ZQQdkdktIX1ZBCGR2S0h4X1ZBCGR2S0hfU0hBCWR2S0h4X1NIQQhkdktIeF9TQQZkdkdfR0EHZHZHX0dIQQZkdkdfSkEHZHZHX05OQQZkdkdfREEHZHZHX0RIQQlkdkdfREhfWUEJZHZHX0RIX1ZBBmR2R19OQQhkdkdfTl9ZQQZkdkdfQkEHZHZHX0JIQQlkdkdfQkhfWUEGZHZHX01BBmR2R19ZQQhkdkdfUl9ZQQZkdkdfTEEGZHZHX1ZBBmR2R19TQQdkdkdIX05BB2R2R0hfTUEHZHZHSF9ZQQZkdkNfQ0EHZHZDX0NIQQlkdkNfQ0hfVkEGZHZDX05BBmR2Q19NQQZkdkNfWUEHZHZDSF9ZQQZkdkpfS0EGZHZKX0pBCGR2SnhfSnhBCWR2Sl9KX05ZQQhkdkpfSl9ZQQhkdkpfSl9WQQdkdkpfSkhBCWR2Sl9OWV9ZQQdkdkpfVFRBB2R2Sl9EREEGZHZKX1RBBmR2Sl9EQQZkdkpfTkEGZHZKX0JBBmR2Sl9NQQZkdkpfWUEHZHZKeF9ZQQZkdkpfVkEHZHZKSF9OQQdkdkpIX01BB2R2SkhfWUEHZHZOWV9DQQhkdk5ZX0NIQQdkdk5ZX0pBCGR2TllfU0hBCGR2VFRfVFRBCWR2VFRfVFRIQQdkdlRUX1lBB2R2VFRfVkEKZHZUVEhfVFRIQQhkdlRUSF9ZQQhkdkREX0REQQlkdkREX0RESEEHZHZERF9ZQQdkdkREX1ZBCmR2RERIX0RESEEIZHZEREhfWUEIZHZOTl9UVEEJZHZOTl9UVEhBCGR2Tk5fRERBCWR2Tk5fRERIQQhkdk5OX05OQQdkdk5OX01BB2R2Tk5fWUEHZHZOTl9WQQZkdlRfS0EIZHZUX0tfWUEIZHZUX0tfUkEIZHZUX0tfVkEJZHZUX0tfU1NBB2R2VF9LSEEJZHZUX0tIX1JBBmR2VF9UQQhkdlRfVF9ZQQhkdlRfVF9WQQdkdlRfVEhBBmR2VF9OQQhkdlRfTl9ZQQZkdlRfUEEIZHZUX1BfUkEIZHZUX1BfTEEHZHZUX1BIQQZkdlRfTUEIZHZUX01fWUEGZHZUX1lBCGR2VF9SX1lBBmR2VF9MQQZkdlRfVkEGZHZUX1NBCGR2VF9TX05BCGR2VF9TX1lBCGR2VF9TX1ZBB2R2VEhfTkEHZHZUSF9ZQQdkdlRIX1ZBBmR2RF9HQQhkdkRfR19SQQdkdkRfR0hBBmR2RF9EQQdkdkRfREhBBmR2RF9OQQZkdkRfQkEIZHZEX0JfUkEHZHZEX0JIQQZkdkRfTUEGZHZEX1lBBmR2RF9WQQdkdkRIX05BCWR2REhfTl9ZQQdkdkRIX01BB2R2REhfWUEHZHZESF9WQQZkdk5fS0EIZHZOX0tfU0EGZHZOX0NBB2R2Tl9DSEEHZHZOX1RUQQdkdk5fRERBBmR2Tl9UQQhkdk5fVF9ZQQhkdk5fVF9SQQhkdk5fVF9TQQdkdk5fVEhBCWR2Tl9USF9ZQQlkdk5fVEhfVkEGZHZOX0RBCGR2Tl9EX1JBCGR2Tl9EX1ZBB2R2Tl9ESEEJZHZOX0RIX1lBCWR2Tl9ESF9SQQlkdk5fREhfVkEGZHZOX05BCGR2Tl9OX1lBBmR2Tl9QQQhkdk5fUF9SQQdkdk5fUEhBCWR2Tl9QSF9SQQdkdk5fQkhBCWR2Tl9CSF9ZQQlkdk5fQkhfVkEGZHZOX01BCGR2Tl9NX1lBBmR2Tl9ZQQZkdk5fVkEGZHZOX1NBCWR2Tl9TX1RUQQpkdk5fU19NX1lBCGR2Tl9TX1lBBmR2Tl9IQQdkdlBfVFRBCGR2UF9UVEhBBmR2UF9UQQhkdlBfVF9ZQQZkdlBfTkEGZHZQX1BBB2R2UF9QSEEGZHZQX01BBmR2UF9ZQQZkdlBfTEEGZHZQX1ZBBmR2UF9TQQdkdlBIX0pBCWR2UEh4X0p4QQhkdlBIX1RUQQdkdlBIX1RBCGR2UEh4X1RBB2R2UEhfTkEHZHZQSF9QQQhkdlBIX1BIQQpkdlBIeF9QSHhBB2R2UEhfWUEHZHZQSF9MQQhkdlBIX1NIQQhkdlBIeF9TQQZkdkJfSkEHZHZCX0p4QQhkdkJfSl9ZQQdkdkJfSkhBBmR2Ql9UQQZkdkJfREEHZHZCX0RIQQlkdkJfREhfVkEGZHZCX05BBmR2Ql9CQQdkdkJfQkhBCWR2Ql9CSF9SQQZkdkJfWUEGZHZCX0xBCGR2Ql9MX1lBBmR2Ql9WQQdkdkJfU0hBBmR2Ql9TQQdkdkJIX05BB2R2QkhfWUEJZHZCSF9SX1lBB2R2QkhfTEEHZHZCSF9WQQZkdk1fVEEGZHZNX0RBBmR2TV9OQQZkdk1fUEEIZHZNX1BfUkEGZHZNX0JBCGR2TV9CX1lBCGR2TV9CX1JBB2R2TV9CSEEJZHZNX0JIX1lBCWR2TV9CSF9SQQlkdk1fQkhfVkEGZHZNX01BBmR2TV9ZQQZkdk1fTEEGZHZNX1ZBB2R2TV9TSEEGZHZNX1NBBmR2TV9IQQZkdllfTkEGZHZZX1lBDGR2RXllbGFzaF9ZQQxkdkV5ZWxhc2hfSEEGZHZMX0tBCGR2TF9LX1lBB2R2TF9LSEEGZHZMX0dBBmR2TF9KQQdkdkxfSnhBB2R2TF9UVEEIZHZMX1RUSEEHZHZMX0REQQhkdkxfRERIQQZkdkxfVEEHZHZMX1RIQQlkdkxfVEhfWUEGZHZMX0RBCGR2TF9EX1JBBmR2TF9QQQdkdkxfUEhBBmR2TF9CQQdkdkxfQkhBBmR2TF9NQQZkdkxfWUEGZHZMX0xBCGR2TF9MX1lBBmR2TF9WQQlkdkxfVl9EREEGZHZMX1NBBmR2TF9IQQZkdlZfTkEGZHZWX1lBBmR2Vl9MQQZkdlZfVkEGZHZWX0hBB2R2U0hfS0EIZHZTSF9LeEEHZHZTSF9DQQhkdlNIX0NIQQhkdlNIX1RUQQdkdlNIX1RBB2R2U0hfTkEHZHZTSF9NQQdkdlNIX1lBB2R2U0hfTEEHZHZTSF9WQQhkdlNIX1NIQQdkdlNTX0tBCWR2U1NfS19SQQhkdlNTX1RUQQpkdlNTX1RUX1lBCmR2U1NfVFRfUkEKZHZTU19UVF9WQQlkdlNTX1RUSEELZHZTU19UVEhfWUELZHZTU19UVEhfUkEIZHZTU19OTkEKZHZTU19OTl9ZQQdkdlNTX1BBCWR2U1NfUF9SQQhkdlNTX1BIQQdkdlNTX01BCWR2U1NfTV9ZQQdkdlNTX1lBB2R2U1NfVkEIZHZTU19TU0EGZHZTX0tBCGR2U19LX1JBCGR2U19LX1ZBB2R2U19LSEEGZHZTX0pBB2R2U19UVEEGZHZTX1RBCGR2U19UX1lBCGR2U19UX1JBCGR2U19UX1ZBB2R2U19USEEJZHZTX1RIX1lBBmR2U19EQQZkdlNfTkEGZHZTX1BBCGR2U19QX1JBB2R2U19QSEEGZHZTX0JBBmR2U19NQQhkdlNfTV9ZQQZkdlNfWUEGZHZTX0xBBmR2U19WQQZkdlNfU0EHZHZIX05OQQZkdkhfTkEGZHZIX01BBmR2SF9ZQQZkdkhfTEEGZHZIX1ZBB2R2TExfWUELZHZtSUkuYUxvbmcPZHZSZXBoX0FudXN2YXJhDmR2QW51c3ZhcmEuYW1JCmR2UmVwaC5hbUkTZHZSZXBoX0FudXN2YXJhLmFtSQ1kdklJX0FudXN2YXJhDmR2bUlJX0FudXN2YXJhCmR2bUlJX1JlcGgTZHZtSUlfUmVwaF9BbnVzdmFyYRRkdm1JSV9BbnVzdmFyYS5hTG9uZxBkdm1JSV9SZXBoLmFMb25nGWR2bUlJX1JlcGhfQW51c3ZhcmEuYUxvbmcNZHZtRV9BbnVzdmFyYQlkdm1FX1JlcGgSZHZtRV9SZXBoX0FudXN2YXJhDmR2bUFJX0FudXN2YXJhCmR2bUFJX1JlcGgTZHZtQUlfUmVwaF9BbnVzdmFyYQ1kdm1PX0FudXN2YXJhCWR2bU9fUmVwaBJkdm1PX1JlcGhfQW51c3ZhcmEOZHZtQVVfQW51c3ZhcmEKZHZtQVVfUmVwaBNkdm1BVV9SZXBoX0FudXN2YXJhE2R2bUVjYW5kcmFfQW51c3ZhcmETZHZtT2NhbmRyYV9BbnVzdmFyYQdkdlJBX21VCGR2UkFfbVVVB2R2SEFfbVUIZHZIQV9tVVUIZHZEQV9tdlIJZHZTSEFfbXZSCGR2SEFfbXZSCGR2bUkuYTAxCGR2bUkuYTAyCGR2bUkuYTAzCGR2bUkuYTA0CGR2bUkuYTA1CGR2bUkuYTA2CGR2bUkuYTA3CGR2bUkuYTA4CGR2bUkuYTA5CGR2bUkuYTEwCGR2bUkuYTExCGR2bUkuYTEyCGR2bUkuYTEzCGR2bUkuYTE0CGR2bUkuYTE1CGR2bUkuYTE2CGR2bUkuYTE3CGR2bUkuYTE4CGR2bUkuYTE5CGR2bUkuYTIwCGR2bUkuYTIxCGR2bUkuYTIyCGR2bUkuYTIzCGR2bUkuYTI0CGR2bUkuYTI1CGR2bUkuYTI2CGR2bUkuYTMyA2ZfZgVmX2ZfaQVmX2ZfbAAAAAEAAf//AA8AAQAAAAwAAAAAAAAAAgAeAAMBKAABASkBKgADASsBVAABAVUBVQACAVYBYQABAWIBZAADAWUBZQABAWYBaAADAWkBawABAWwBbAADAW0BbQABAW4BdAACAXUBdgABAXcBeAADAXkBsgABAbMB3wACAeAB4AADAeEB4QACAeIB4gADAeMDmwACA5wDnAABA50DoAADA6EDpAACA6UDpwABA6gDrQADA64DswACA7QDtAADA7UDvAACA70D1wABA9gD2gACAAEAAAAKACwAUAADREZMVAAUZGV2MgAUZGV2YQAUAAQAAAAA//8AAgAAAAEAAmFidm0ADmJsd20AHAAAAAUAAAABAAIAAwAEAAAAAgAFAAYABwAQApQFOgecDCYQlBRgAAQAAAABAAgAAQAMABIAAQE2ATwAAQABASoAAQCQASwBLQEuATABMQEyATQBNQE2ATcBOAE5AToBPgFAAUQBRQFGAUcBSwFPAVQBVQFXAVwBbgFyAXMBdAHjAecB6QHtAe4B7wHwAfQB+AIAAgECJQImAioCLAIyAjMCNgI3AkYCRwJcAm8CcAJ1An0CfgKAAosCjgKPApECkgKUApUClwKYApoCnAKdAqICpAKyAsACwQLCAsMCxALFAsYCxwLIAskCywLUAtUC1gLeAt8C4ALpAuoC8wL2AvcC+AL9AwUDCAMKAwsDFQMoAzkDPQM+A0QDRQNGA0cDSwNMA04DVgNYA10DXgNfA2ADYQNiA2gDagNrA2wDbgNvA3ADcgN3A30DfgOCA4kDjQOVA5YDlwOYA5kDmgO2A7cDugO8AAEAAAwGAJADqgOwA7YDvAPCA8gBIgPOASgBLgE0AToNJA0qDTANDA08DSoNSA0SDfAPLg8uDRgNHg0kDSoNSA3wDWYNKg0wDTYNPA1CDUgN2A5QDxANZg1ODU4NVA1aDWANZg1sDWwOpA6kDXINeA3ADX4PBA2EDYoNkA2cDZYNnA2iDagNqA2uDbQNug3ADcYNzA3SDvIN2A3wDd4N5A3qDfAN9g32DfwGQg4CDggODg4UDhoOJg8cDiAOJg4sDjIOOA4+DkQOSg5QDlYOVg5cDmIOaA5uDnQOgA56DoAOhg6MDpIOmA6eDqQOqg6wDrAOwg62DrwOwg7IDs4O1A7aDuAO5g7sDvIO+A7+DwQPCg8KDxAPFg8cDxwPIg8oDy4PLg80DzoAAQF+A20AAQKlAp8AAQMSA2YAAQQbAp8AAQQcAp8ABAAAAAEACAABAAwAFgABATYBRAABAAMBKQFmA7QAAQCOASwBLQEuATABMQEyATUBNgE4ATkBOgE+AUABRAFFAUYBRwFLAU8BVAFVAVcBXAFuAXIBcwF0AeMB5wHpAe0B7gHvAfAB9AH4AgACAQIlAiYCKgIsAjICMwI2AjcCRgJHAlwCbwJwAnUCfQJ+AoACiwKOAo8CkQKSApQClQKXApgCmgKcAp0CogKkArICwALBAsICwwLEAsUCxgLHAsgCyQLLAtQC1QLWAt4C3wLgAukC6gLzAvYC9wL4Av0DBQMIAwoDCwMVAygDOQM9Az4DRANFA0YDRwNLA0wDTgNWA1gDXQNeA18DYANhA2IDaANqA2sDbANuA28DcANyA3cDfQN+A4IDiQONA5UDlgOXA5gDmQOaA7YDtwO6A7wAAwAACYIAAAmCAAAJggCOAR4BJAEqATABNgE8AUIBSAFOAVQKmAqeCqQKgAqwCp4KvAqGC2QMogyiCowKkgqYCp4KvAtkCtoKngqkCqoKsAq2CrwLTAvEDIQK2grCCsIKyArOCtQK2grgCuAMGAwYCuYK7As0CvIMeAr4Cv4LBAsQCwoLEAsWCxwLHAsiCygLLgs0CzoLQAtGDGYLTAtkC1ILWAteC2QLagtqC3ADtgt2C3wLgguIC44LmgyQC5QLmgugC6YLrAuyC7gLvgvEC8oLygvQC9YL3AviC+gL9AvuC/QL+gwADAYMDAwSDBgMHgwkDCQMNgwqDDAMNgw8DEIMSAxODFQMWgxgDGYMbAxyDHgMfgx+DIQMigyQDJAMlgycDKIMogyoDK4AAQHhAp8AAQMCAp8AAQFTAp8AAQEsAp8AAQG+Ap8AAQIKAp8AAQFtAp8AAQMBAp8AAQSAAp8AAQR7Ap8ABAAAAAEACAABAAwAHAABASgBSgACAAIBZwFoAAADqAOtAAIAAQCEAToBPgFAAUQBRQFGAUcBSwFPAVQBVQFXAVwBbgFyAXMBdAHjAecB6QHtAe4B7wHwAfQB+AIAAgECJQImAioCLAIyAjMCNgI3AkYCRwJcAm8CcAJ1An0CfgKAAosCjgKPApECkgKUApUClwKYApoCnAKdAqICpAKyAsACwQLCAsMCxALFAsYCxwLIAskCywLUAtUC1gLeAt8C4ALpAuoC8wL2AvcC+AL9AwUDCAMKAwsDFQMoAzkDPQM+A0QDRQNGA0cDSwNMA04DVgNYA10DXgNfA2ADYQNiA2gDagNrA2wDbgNvA3ADcgN3A30DfgOCA4kDjQOVA5YDlwOYA5kDmgO2A7cDugO8AAgAAAbqAAAG6gAABuoAAAbqAAAG6gAABuoAAAbqAAAG6gCEB+wH8gf4B9QIBAfyCBAH2gi4CfYJ9gfgB+YH7AfyCBAIuAguB/IH+Af+CAQICggQCKAJGAnYCC4IFggWCBwIIggoCC4INAg0CWwJbAg6CEAIiAhGCcwITAhSCFgIZAheCGQIaghwCHAIdgh8CIIIiAiOCJQImgm6CKAIuAimCKwIsgi4CL4IvgjEAQoIygjQCNYI3AjiCO4J5AjoCO4I9Aj6CQAJBgkMCRIJGAkeCR4JJAkqCTAJNgk8CUgJQglICU4JVAlaCWAJZglsCXIJeAl4CYoJfgmECYoJkAmWCZwJogmoCa4JtAm6CcAJxgnMCdIJ0gnYCd4J5AnkCeoJ8An2CfYJ/AoCAAEDCwKfAAQAAAABAAgAAQAMABYAAQA4AFIAAQADA54DnwOgAAIABQE6AVwAAAFuAXQAIwG1AbYAKgHjAgUALAIlA5sATwADAAAADgAAAA4AAAAUAAH//wLfAAEAAALfAcYDoAQeA9AD3AOgBCQD3AQkA8oEJAOgA5oDoAOgA8QD3AQkA9AD3AOgA9AD0APcA9AD0APcA44DjgPEBCQD3APEA9wEJAPQA6AEHgPQBCQDoAOgA9ADygPEA9AEHgPQA9wDoAQkA9wEJAO+A8QDoAOaA6ADoAPKA9wEJAPQA9wD0APQA9AD3APcA9wD3APcA8oEHgQkA9AEHgPQBCQEHgQABAAD+gPWBCoEAAQMA9wD4gPuBCoDpgPWBAAD0APiA+ID4gPiA/oEKgPiA+IEKgQMA+IEBgPoBAAEBgPiBAAD1gQYBBgD4gOyA5QD+gQqBCoEHgQqBCoEKgQqBCoEKgQMBAwD6AO+A/QEEgQAA74D9AQMA+gD0APWA/QDvgPoA74EEgQSBAAD9AQYA9wD9AQSBBgEEgQYBCQEEgQYA9YD9AQYBBgEKgOmA/oEKgPiA/QEEgQYBBIEJAQYBBgEGAQYBBgDvgPiBCoD4gQYA+ID1gOgA6AEAAOgA5oEKgPQA9AD4gPQA9AD4gQSBCoEGAQYA+gEAAPiBAAD9AOyA74EBgQqBCoEKgPcBBgEEgQAA8QEAAP0A/QD+gP0BBIEDAQSBBID4gP0BAAEKgOmA/oEJAQABBgD0APQA8QDoAPEA9AD3APcA8oEHgQkA9AD3AQSBBIEGAQSBAAD7gP0A74DygPKA74D1gP0BAwEEgP6BAwEHgQeBB4D9APoA/QD1gPQA/QEHgQeBB4EHgO+A9YEKgO+A9YD9AO+BBID1gO4BAwEHgPQA9wD0APoA9ADvgO+A74D9AQAA/QEEgQqBCoD4gQqBCoD0AQqBCoEKgPWBAwEDAQMBBgEGAOmA+IEEgP0BBgD+gPcBBgEEgQSBBgD4gQGBBIEAAQAA9AEEgQSBAAD9AP0A/QD0AO+A74D9AQMA/QDvgPoA74D1gO+A/QEAAP0BBgEGAO+A9wEGAPKA8QEGAOsBAwEAAPiA+IEGAQSBBgEGAQAA+IDsgQABAAEAAQAA+IEAAQAA+ID1gO4BAAEDAPWBBgD3AQSA+ID9AO+BBIEEgPKBBgD9AQYA8QEGAQAA8oDygPiA/QD9APQA+ID0APcA9wD1gPcA+IEBgP0A/QD9AP0A+gEGAQSBBIEEgP0A+4EKgQAA/QEEgP6A/QD+gQABAYEEgQeBBIEGAQSBBgEEgQMBBgEKgQSBBgEJAQkBB4EHgQkBCQEKgABAVcC3wABB9EC3wABAYwC3wABAcIC3wABBYQC3wABBpAC3wABBiUC3wABBloC3wABAzgC3wABApgC3wABAs4C3wABAfgC3wABBK4C3wABAi0C3wABBEQC3wAB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APD/5gABANsAAAABAgAANAABAPX/sQABAKf/DQABAOD/DQABALz/SAABAQP/eQABAOb/UQABAOX/gQABAL7/SAABAOL/UQABAVf/HQABAzn/5gABAxL/3QABAxv/5gABAvH/3QABApMADgABAqH/3QABAscADgABARD+mwABAPj+pAABAQr+mgABAQb+iQABAQX+qgABASj+tAABAtr/5gABAtj/3QABAt//5gABAskAAAABAiUADgABAhf/5gABAff/3QABA8//5gABAg3/sQABAPv/xgABAQH/vAABA2v/5gABAjX/sQABAbX/sQABA1UAAAABAwf/5gABAvkAFgABAt3/3QABAwL/5gABBCf/3QABAvP/sQABAj//sQABAxkAAAABAs8ADgABAsH/5gABAPj/rgABAO3/GQABAQT/qAABAQX/GAABAvsAAAABAqP/5gABAVv/HQABAVH/HQABAWH+1gABAVT+6AABANL/1AABAST/HQAEAAAAAQAIAAEADAAaAAEBGAE0AAEABQFkAWwBdwF4AeIAAQB9AToBPgFAAUQBRQFGAUcBSwFPAVQBVQFXAVwBbgFyAXMBdAHjAecB6QHtAe4B7wHwAfQB+AIAAgECJQImAioCLAIyAjMCNgI3AkYCRwJcAm8CcAJ9An4CgAKLAo4CjwKRApIClAKVApcCmAKaApwCnQKkArICwALBAsICwwLEAsUCxgLHAsgCyQLLAtQC1QLWAt4C3wLgAukC6gLzAvYC9wL4Av0DBQMIAwoDCwMVAygDOQM9A0QDRQNGA0cDSwNMA04DVgNYA10DYANhA2IDaANrA2wDbgNvA3ADcgN3A34DggOJA40DlQOWA5cDmAOZA5oDtgO3A7oDvAAFAAAAFgAAABYAAAAWAAAAFgAAABYAAf8tAAAAfQE4APwBAgEIAQ4BFAEaASABSgEmASYBLAEyATgBPgFEAUoBkgFQAVYBXAFiAWgBbgIWAqABdAGSAXoBegGAAYYBjAGSAZgBmAGeAaQBqgGwAbYDSAG8AcIByAHOAdQB2gHgAeYB7AHyAfgB/gIEAgoCEAM8AhYCHAIiAigCLgI0AjoCOgJAAkYCTAJSAlgCXgJkAmoCcAJ2AnwCggKIAo4ClANIApoCoAKmAqYCrAKyArgCvgLEAsoC0ALWAtwC4gLoAu4C9AL6AwADBgMM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Ah0AAgFsAAEABAIeAAIBbAABAAQCHwACAWwAAQAEAiAAAgFsAAEABAIhAAIBbAABAAQCIgACAWwAAQAEAiMAAgFsAAEABAIkAAIBbAACAAUB4wHmAAAB6AHoAAQB6gH9AAUB/wH/ABkCAQIFABoABAAAAAEACAABAx4AQgCKAJQAngCoALIAvADGANAA2gDkAO4A+AECAQwBFgEgASoBNAE+AUgBUgFcAWYBcAF6AYQBjgGYAaIBrAG2AcABygHUAd4B6AHyAfwCBgIQAhoCJAIuAjgCQgJMAlYCYAJqAnQCfgKIApICnAKmArACugLEAs4C2ALiAuwC9gMAAwoDFAABAAQB4wACAeIAAQAEAeQAAgHiAAEABAHlAAIB4gABAAQB5gACAeIAAQAEAecAAgHiAAEABAHoAAIB4gABAAQB6QACAeIAAQAEAeoAAgHiAAEABAHrAAIB4gABAAQB7AACAeIAAQAEAe0AAgHiAAEABAHuAAIB4gABAAQB7wACAeIAAQAEAfAAAgHiAAEABAHxAAIB4gABAAQB8gACAeIAAQAEAfMAAgHiAAEABAH0AAIB4gABAAQB9QACAeIAAQAEAfYAAgHiAAEABAH3AAIB4gABAAQB+AACAeIAAQAEAfkAAgHiAAEABAH6AAIB4gABAAQB+wACAeIAAQAEAfwAAgHiAAEABAH9AAIB4gABAAQB/gACAeIAAQAEAf8AAgHiAAEABAIAAAIB4gABAAQCAQACAeIAAQAEAgIAAgHiAAEABAIDAAIB4gABAAQCBAACAeIAAQAEAgUAAgHiAAEABAIGAAIB4gABAAQCBwACAeIAAQAEAggAAgHiAAEABAIJAAIB4gABAAQCCgACAeIAAQAEAgsAAgHiAAEABAIMAAIB4gABAAQCDQACAeIAAQAEAg4AAgHiAAEABAIPAAIB4gABAAQCEAACAeIAAQAEAhEAAgHiAAEABAISAAIB4gABAAQCEwACAeIAAQAEAhQAAgHiAAEABAIVAAIB4gABAAQCFgACAeIAAQAEAhcAAgHiAAEABAIYAAIB4gABAAQCGQACAeIAAQAEAhoAAgHiAAEABAIbAAIB4gABAAQCHAACAeIAAQAEAh0AAgHiAAEABAIeAAIB4gABAAQCHwACAeIAAQAEAiAAAgHiAAEABAIhAAIB4gABAAQCIgACAeIAAQAE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A2EAAgFAA2AAAgE/A18AAgFuA14AAgE6ABMAKAAwADgAQABIAFAAVgBcAGIAaABuAHQAegCAAIYAjACSAJgAngN5AAMBzwFTA3QAAwHFAVMDcQADAcIBUwNvAAMBwQFYA20AAwHBAVMDdwACAU8DdgACAfcDdQACAU4DewACAVgDcwACAUgDcgACAe4DegACAVMDcAACAUUDfAACAVoDbgACAe0DeAACAVIDbAACAUQDawACAeMDagACAToAGAAyADoAQgBKAFIAWgBgAGYAbAByAHgAfgCEAIoAkACWAJwAogCoAK4AtAC6AMAAxgOQAAMBzwFTA4gAAwHHAVMDhgADAcYBWAOEAAMBxgFTA38AAwG3AVgDjwACAVIDjgACAVADjQACAU8DjAACAfcDiwACAU4DigACAU0DiQACAUsDkwACAVgDhwACAUoDkgACAVYDhQACAfIDkQACAVMDgwACAUkDggACAUQDgQACAUEDgAACATsDlAACAVsDfgACAeMDfQACAToABgAOABQAGgAgACYALAOaAAIBWAOZAAIBVgOYAAIBUwOXAAIBUgOWAAIBTQOVAAIBSAABAAQDmwACAVMABAAKABIAGAAeAkIAAwHPAVMCQwACAVMCRAACAVgCQQACAVIAAQAEAnwAAgFTAAYADgAUABoAIAAmACwCOwACAVICOQACAVACOAACAXQCNwACAU8CLQACAUkCJgACAW4ABgAOABQAGgAgACYALAJXAAIBWwJWAAIBWQJUAAIBWAJSAAIBUwJQAAIBUgJNAAIBSQACAAYADAKFAAIBUwJ3AAIBcQAEAAoAEAAWABwDDwACAVsDCwACAXQDBwACAUkDBAACAXEABAAKABIAGgAgAz0AAwGJAVwDPAADAYkBUwM9AAIBXAM8AAIBUwABAAQCZwACAVMAAQAEArYAAgFTAAEABAMkAAIBUwACAAgBtwG6AAABvAHQAAQB0gHcABkB3gHfACQB4QHhACYCCAIIACcCEwITACgCGwIbACkABgAAABsAPABWAHIAqgEIAVoBmAHCAe4CKgJsAtADMgOaA/IERASaBNAE+AUuBVgFdgWYBbQF0AXqBgIAAwAAAAEKtAABABIAAQAAABcAAQACAVQBVQADAAAAAQqaAAEAEgABAAAAGAABAAMBRQHuApIAAwAAAAEKfgABABIAAQAA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", + "Hind-Regular.ttf": + "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ATYATQGS/98BNgADAc0ALQIxABwBpQBzAewALwI6AEwB1wArAjcAKwIKACsBSQAeAiUALAIcAEkA6QBBAOT/0gHgAEkA6QBNAzIASQIcAEkCMgArAjcASQI3ACsBRgBIAZwAOAFxABYCHABDAfkAGQMYABkB3gAZAe0ACAHFACwBTgAwAOQATgFOAA0CVwAkAPQAAAD7AEEBxAAuAgoAPQIfACICSQAhAOQATgIAADMBpQA6AwgAKwFeAAIB4AAbAiUAGQFcADkBwQAKAaUARQFjAB4CKQA5AW0ALwFFACMBpQBzAiIASQIhABoA6AA5AaUAhwD6AAoBeP/6AeIAHQNAAEEDQQBBA2IASAHEAC0CiAAjAogAIwKIACMCiAAjAogAIwKIACMDbwAXAloAMAH1AE0B9QBNAfUATQH1AE0A9//YAPcAUwD3/9cA9//lAtoAPQKhAE0CvAAwArwAMAK8ADACvAAwArwAMAHrADsCowApAoUATAKFAEwChQBMAoUATAJRABoCGABNAh0ATAHsAC8B7AAvAewALwHsAC8B7AAvAewALwMzADQB1wArAgoAKwIKACsCCgArAgoAKwDp/9AA6QBNAOn/0ADp/9wCBQAmAhwASQIyACsCMgArAjIAKwIyACsCMgArAikAOQIzADgCHABDAhwAQwIcAEMCHABDAe0ACAI3AEkB7QAIAogAIwHsAC8CiAAjAewALwKGACIB6wAvAloAMAHXACsCWgAwAdcAKwKVAE0ClAArAtoAPQI3ACsB9QBNAgoAKwH1AE0CCgArAfUATQIKACsB9QBNAgoAKwKeADACJQAsAp4AMAIlACwA9//vAOn/6AD3//AA6f/nAPcASQDpAE0CPQBNAeAASQHdAE0A6QBNAd0ATQDp//MB3QBNAQMATQH0AB0BIwAhAqEATQIcAEkCoQBNAhwASQKhAE0CHABJArwAMAIyACsCvAAwAjIAKwPXADADfAArAiQATQFGAEgCJABNAUb/7AIkAE0BRgAlAgwAQgGcADgCDABCAZwAOAIMAEIBnAA4AeIAEgFxABYB4gASAXEAFgKFAEwCHABDAoUATAIcAEMChQBMAhwAQwKFAEwCHABDAlEAGgI5ADQBxQAsAjkANAHFACwCOQA0AcUALAGI/74CDABCAZwAOAHiABIBcQAWALUADAGlAC0BpQAtAaUARQGlAC4BpQCfAaUAaAGlAG4BpQAyAaUAIwJGABgAAP7EAAD/QwEqADwCkwAeA5wAHgHh/+oB4f/qAaz/6gK1/+oDMf/qAvn/6gIr/+oCK//qAiv/6gOcAB4DnQAeA50AHgMD/+oDC//qAj7/6gKC/+oCPv/qAnr/6gJ3/+oCiv/qAvf/6gKj/+oB7//qAjT/6gIJ/+oCLP/qAuf/6gJL/+oCfwAcAib/6gJ6/+oB6v/qAin/6gMX/+oCZ//qAisABgI8/+oCcf/qAXj/6gF4/+YC3v/qAx7/6gI+/+oCnAAeAkT/6gJ7/+oCEv/qAAD+ugHFABIBCv/qAQn/6gEJ/1EAAP5YAAD+4gAA/swAAP7QAAD+yQAA/moAAP5aAQr/0AEJ/3QBCf9iAAD/XgTTAG4DA//qAwv/6gI+/+oCiv/qAgn/6gIs/+oDF//qAxv/3QMK//EAAP7LAAD+ywFXAKACMACgAhsAKQFlACwB+QAsAesAPAI7ADcCEABFAg0AMQH0ACUCHAA1AgEAMAGyADkCkwAeAAAAAAAA/+kAAP+BAhwAOQM3ADkAtAALALUADAC1AAIBRAAMAUMADAFDAAMCCwAqAhIALQHBAFwC0AAkBLwALQErAB0BKQAgATf/pAN5AE0CTgA0Ah0AQAJEAD8CSAAcAfUAKgK2AAIDDQA1A0IAHAIEACcCagAfAlL/2QG5AB4CKQA5AWb/xADyAD4C8wAhA0MAMQE6//8CaQAyAikAOQIkADQCJAA5AjQANAKUACwCAgAeAf4AHgLvADMC0v/iAgf/6gJH/+oBMP/qAWv/6gI+/+oBgv/qAm//6gGm/+oCGv/qAcf/6gHv/+oCNP/qAgn/6gIs/+oB8P/qAX3/6gGvABwCJv/qAar/6gEJ/+oBUv/qAmj/6gF7/+oBRgAGAV//6gGC/+oBeP/qAd7/6gFT/+oBrgAeAV3/6gGG/+oCEv/qAx7/6gITADMCAf/iAg//6gJF/+oBQP/qAaf/6gJe/+oAAP8nAML/6gAA/rwDCv/qAw//6gJF/+oCh//qAj7/6gJ+/+oCfv/qApH/6gNL/+oCr//qAfD/6gI0/+oCCv/qAi3/6gLx/+oCNf/qAoMAIAIr/+oCgP/qAfj/6gIu/+oDJ//qAnD/6gI1ABACQv/qAnT/6gJI/+oCuAAfAuT/6gJK/+oDCv/qAw//6gJF/+oCkf/qAyf/6gIV/+oCOv/qAXv/6gGZ/+oBof/qAdj/6gJf/+oB+P/qAfD/6gI0/+oCCv/qAi3/6gH3/+ABZf/qAbQAIAIr/+oBuv/qARf/6gFP/+oCW//qAXb/6gFyABABgP/qAX//6gFo/+oCEP/qAhX/6gI6/+oBe//qAdj/6gJb/+oFBP/qBQT/6gVT/+oEa//qBJP/6gPx/+oFCP/qA4v/6gRP/+oF0//qBDX/6gWy/+oEyv/qBBj/6gMP/+oEQ//qBEf/6gUx/+oFMP/qBTD/6gRw/+oEPP/qBDz/6gSW/+oE7f/qBEv/6gWP/+oExP/qBDoAMwWpADMESAAzBDAAMwTN/+oD6wAzBBEAMwQ+ADMGA//qB/b/6gVG/+oEdP/qBHT/6gMY/+oEd//qBHf/6gSi/+oEov/qBHr/6gR6/+oFBf/qBQT/6gTU/+oDbv/qA6T/6gPC/+oEHv/qA1j/6gOT/+oFJP/qBRr/6gJG/+oEl//qA4T/6gNN/+oEyv/qA13/6gOo/+oD0P/qBAn/6gNw/+oDwv/qAob/6gOS/+oD1P/qA+b/6gQD/+oEDv/qAoL/6gOz/+oD8P/qBKT/6gS3/+oEGv/qBBr/6gSX/+oFnv/qBXL/6gSR/+oEVP/iA4v/6gOj/+oD8v/qA9L/8gKC/+oEDv/qA+f/6gQK/+oECv/qA+T/6gNY/+oERf/qBHr/6gRB/+oEKv/qBG7/6gSO/+oCMf/qAkX/+gP8/+oCIv/qAkH/6gRe/+oCJ//qAir/6gQi/+oCJv/qAjH/6gRG/+oDvv/qBID/6gPs/+oD///qBM3/6gQq/+oEUf/qBCr/6gR//+oE2v/qBHT/6gWu/+oEhP/qBJv/6gSH/+oCc//qA/z/6gPL/+oD8P/qApD/6gQH/+oDjP/qA53/6gWA/+oEgf/qA6P/6gUS/+oD0f/qA57/6gRK/+oDqP/qBA//6gSE/+oFdf/qBUj/6gKQAC0D/gAcA+wAHAIu/+oCVv/qAs7/6gII/+oC2//qAjD/6gJC/+oCP//qArz/6gLb/+oCj//qAi//6gKC/+oD9f/qA87/6gP9/+oD6v/qBBT/6gXN/+oDWf/qA1L/6gLY/+oDD//qAzz/6gSu/+oDEv/qBPD/6gON/+oE/f/qBPT/6gMq/+oDJf/qAyn/6gNf/+oExf/qA1r/6gS4/+oCCf/qA4H/6gMi/+oDI//qBA//6gQn/+oDH//qBH3/6gRm/+oDI//qBJr/6gNh/+oDRP/qA4v/6gSI/+oGN//qBQf/6gML/+oCG//qAkL/6gI3/+oFAf/qAi7/6gNg/+oETv/qA1//6gOu/+oEIv/qA4f/6gO2/+oEtf/qBLX/6gQz/+oEhv/qBIb/6gMr/+oEj//qBXz/6gV8/+oE3v/qBTf/6gUR/+oFAv/qBAr/6gQK/+oFlv/qBF3/6gPE/+oDpv/qA/v/6gVm/+oCb//qA+r/6gOl/+oDov/qA9L/6gRg/+oF4v/qA77/6gQ+/+oEBv/qAjMADgOuAAYDzwAQBB8ABgN+AAYDmv/qA4D/6gI9/+oDdf/qA27/6gPB/+oFIv/qA7//6gNh/+oE3v/qA2v/6gSw/+oDYP/qA7P/6gQ5/+oDlf/qA+D/6gPC/+oDWv/qAnL/6gPS/+oDI//qAtX/6gTr/+oGhv/qBSH/6gQD/+oEUf/qBFH/6gPD/+oED//qA/3/6gP3/+oEAf/qBEz/6gYS/+oEEv/qBA3/6gQY/+oFB//qBFD/6gP7/+oEB//qBGb/6gS9/+oGRP/qBCP/6gU0/+oEhv/qA/H/6gJH/+oDrP/qBDv/6gOL/+oDVf/qBKgAHgSoAB4CuAAOBBsAHgORAB4D3AAeAr8ACgPjAB4EGgAeArgADgK4AA4ELAAeBHX/6gR0/+oCIv/qBFD/6gIl/+wCLv/qAkH/6gRx/+oCSP/qBEP/6gWF/+oDhP/qA4H/6gRx/+oDiP/qBQL/6gPZ/+oDrf/qA5b/6gSC/+oEjf/qBcn/6gR4/+oEGf/qA2P/6gO2/+oFRP/qA1P/6gUn/+oEBv/qBYT/6gOk/+oC/P/qA6z/6gOx/+oEhP/qA+L/6gOh/+oFGP/qA+H/6gRd/+oDwP/qA77/6gJP/+oCVv/qAt7/6gLs/+oCSv/qAjj/6gTQ/+oBCf5XAAD/GAAA/8kAAP+4AAD/uAIA/+oBCf9RAQn/UQEJ/1EBCf5XAQn+VwEJ/lcAAP5tAAD+agAA/moAAP5aAAD+WgAA/loBCv92AQr/eAEK/3QBCv9iAQr/YwEK/2EAAP7EAQr/1AJ5/+oCgP/qAhL/6gIS/+oB5f/qApsAAgH4/+oBCf/qAQn/6gEJ/+oBCf/qAQn/6gEJ/+oBCf/q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ILAAUFiwQGBZZrABY2EjICCwBCYjRmE4GyOwCENGsAIlsAhDRyNHI2FgILAEQ7ACYiCwAFBYsEBgWWawAWNgIyCwASsjsARDYLABK7AFJWGwBSWwAmIgsABQWLBAYFlmsAFjsAQmYSCwBCVgZCOwAyVgZFBYIRsjIVkjICCwBCYjRmE4WS2wOiywABawESNCICAgsAUmIC5HI0cjYSM8OC2wOyywABawESNCILAII0IgICBGI0ewASsjYTgtsDwssAAWsBEjQrADJbACJUcjRyNhsABUWC4gPCMhG7ACJbACJUcjRyNhILAFJbAEJUcjRyNhsAYlsAUlSbACJWG5CAAIAGNjIyBYYhshWWO4BABiILAAUFiwQGBZZrABY2AjLiMgIDyKOCMhWS2wPSywABawESNCILAIQyAuRyNHI2EgYLAgYGawAmIgsABQWLBAYFlmsAFjIyAgPIo4LbA+LCMgLkawAiVGsBFDWFAbUllYIDxZLrEuARQrLbA/LCMgLkawAiVGsBFDWFIbUFlYIDxZLrEuARQrLbBALCMgLkawAiVGsBFDWFAbUllYIDxZIyAuRrACJUawEUNYUhtQWVggPFkusS4BFCstsEEssDgrIyAuRrACJUawEUNYUBtSWVggPFkusS4BFCstsEIssDkriiAgPLAEI0KKOCMgLkawAiVGsBFDWFAbUllYIDxZLrEuARQrsARDLrAuKy2wQyywABawBCWwBCYgICBGI0dhsAojQi5HI0cjYbAJQysjIDwgLiM4sS4BFCstsEQssQgEJUKwABawBCWwBCUgLkcjRyNhILAEI0KxCgBCsAlDKyCwYFBYILBAUVizAiADIBuzAiYDGllCQiMgR7AEQ7ACYiCwAFBYsEBgWWawAWNgILABKyCKimEgsAJDYGQjsANDYWRQWLACQ2EbsANDYFmwAyWwAmIgsABQWLBAYFlmsAFjYbACJUZhOCMgPCM4GyEgIEYjR7ABKyNhOCFZsS4BFCstsEUssQA4Ky6xLgEUKy2wRiyxADkrISMgIDywBCNCIzixLgEUK7AEQy6wListsEcssAAVIEewACNCsgABARUUEy6wNCotsEgssAAVIEewACNCsgABARUUEy6wNCotsEkssQABFBOwNSotsEossDcqLbBLLLAAFkUjIC4gRoojYTixLgEUKy2wTCywCCNCsEsrLbBNLLIAAEQrLbBOLLIAAUQrLbBPLLIBAEQrLbBQLLIBAUQrLbBRLLIAAEUrLbBSLLIAAUUrLbBTLLIBAEUrLbBULLIBAUUrLbBVLLMAAABBKy2wViyzAAEAQSstsFcsswEAAEErLbBYLLMBAQBBKy2wWSyzAAABQSstsFosswABAUErLbBbLLMBAAFBKy2wXCyzAQEBQSstsF0ssgAAQystsF4ssgABQystsF8ssgEAQystsGAssgEBQystsGEssgAARistsGIssgABRistsGMssgEARistsGQssgEBRistsGUsswAAAEIrLbBmLLMAAQBCKy2wZyyzAQAAQistsGgsswEBAEIrLbBpLLMAAAFCKy2waiyzAAEBQistsGssswEAAUIrLbBsLLMBAQFCKy2wbSyxADorLrEuARQrLbBuLLEAOiuwPistsG8ssQA6K7A/Ky2wcCywABaxADorsEArLbBxLLEBOiuwPistsHIssQE6K7A/Ky2wcyywABaxATorsEArLbB0LLEAOysusS4BFCstsHUssQA7K7A+Ky2wdiyxADsrsD8rLbB3LLEAOyuwQCstsHgssQE7K7A+Ky2weSyxATsrsD8rLbB6LLEBOyuwQCstsHsssQA8Ky6xLgEUKy2wfCyxADwrsD4rLbB9LLEAPCuwPystsH4ssQA8K7BAKy2wfyyxATwrsD4rLbCALLEBPCuwPystsIEssQE8K7BAKy2wgiyxAD0rLrEuARQrLbCDLLEAPSuwPistsIQssQA9K7A/Ky2whSyxAD0rsEArLbCGLLEBPSuwPistsIcssQE9K7A/Ky2wiCyxAT0rsEArLbCJLLMJBAIDRVghGyMhWUIrsAhlsAMkUHixBQEVRVgwWS0AAAAAS7gAyFJYsQEBjlmwAbkIAAgAY3CxAAdCsy8bAgAqsQAHQrUiCBAHAggqsQAHQrUsBhkFAggqsQAJQrsIwARAAAIACSqxAAtCuwBAAEAAAgAJKrEDAESxJAGIUViwQIhYsQNkRLEmAYhRWLoIgAABBECIY1RYsQMARFlZWVm1JAgSBwIMKrgB/4WwBI2xAgBEswVkBgBERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8ATwJgAEAAQAOAAoICggAL/vgETP5wA4AChgKCAAv++ARM/nAAUgBSAEYARgKiAAACwwH8AAD/PgRM/nACr//4As4CAf/6/z4ETP5wAAAADgCuAAMAAQQJAAAAhgAAAAMAAQQJAAEACACGAAMAAQQJAAIADgCOAAMAAQQJAAMALgCcAAMAAQQJAAQAGADKAAMAAQQJAAUBGgDiAAMAAQQJAAYAGAH8AAMAAQQJAAcAVgIUAAMAAQQJAAgAJgJqAAMAAQQJAAkAQAKQAAMAAQQJAAsAQALQAAMAAQQJAAwAQALQAAMAAQQJAA0BIAMQAAMAAQQJAA4ANAQwAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABjACkAIAAyADAAMQA0ACAASQBuAGQAaQBhAG4AIABUAHkAcABlACAARgBvAHUAbgBkAHIAeQAgACgAaQBuAGYAbwBAAGkAbgBkAGkAYQBuAHQAeQBwAGUAZgBvAHUAbgBkAHIAeQAuAGMAbwBtACkASABpAG4AZABSAGUAZwB1AGwAYQByADIALgAwADAAMQA7AEkAVABGAE8AOwBIAGkAbgBkAC0AUgBlAGcAdQBsAGEAcgBIAGkAbgBkACAAUgBlAGcAdQBsAGEAcgBWAGUAcgBzAGkAbwBuACAAMgAuADAAMAAxADsAUABTACAAMQAuADAAOwBoAG8AdABjAG8AbgB2ACAAMQAuADAALgA3ADkAOwBtAGEAawBlAG8AdABmAC4AbABpAGIAMgAuADUALgA2ADEAOQAzADAAOwAgAHQAdABmAGEAdQB0AG8AaABpAG4AdAAgACgAdgAxAC4ANQAuADMAMwAtADEANwAxADQAKQAgAC0AbAAgADgAIAAtAHIAIAA1ADAAIAAtAEcAIAAyADAAMAAgAC0AeAAgADEAMwAgAC0ARAAgAGwAYQB0AG4AIAAtAGYAIABkAGUAdgBhACAALQB3ACAARwAgAC0AVwAgAC0AYwAgAC0AWAAgACIAIgBIAGkAbgBkAC0AUgBlAGcAdQBsAGEAcgBIAGkAbgBkACAAaQBzACAAYQAgAHQAcgBhAGQAZQBtAGEAcgBrACAAbwBmACAASQBuAGQAaQBhAG4AIABUAHkAcABlACAARgBvAHUAbgBkAHIAeQAuAEkAbgBkAGkAYQBuACAAVAB5AHAAZQAgAEYAbwB1AG4AZAByAHkATQBhAG4AdQBzAGgAaQAgAFAAYQByAGkAawBoACwAIABTAGEAdAB5AGEAIABSAGEAagBwAHUAcgBvAGgAaQB0AGgAdAB0AHAAOgAvAC8AdwB3AHcALgBpAG4AZABpAGEAbgB0AHkAcABlAGYAbwB1AG4AZAByAHkALgBjAG8AbQBUAGgAaQBzACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAgAGkAcwAgAGwAaQBjAGUAbgBzAGUAZAAgAHUAbgBkAGUAcgAgAHQAaABlACAAUwBJAEwAIABPAHAAZQBuACAARgBvAG4AdAAgAEwAaQBjAGUAbgBzAGUALAAgAFYAZQByAHMAaQBvAG4AIAAxAC4AMQAuACAAVABoAGkAcwAgAGwAaQBjAGUAbgBzAGUAIABpAHMAIABhAHYAYQBpAGwAYQBiAGwAZQAgAHcAaQB0AGgAIABhACAARgBBAFEAIABhAHQAOgAgAGgAdAB0AHAAOgAvAC8AcwBjAHIAaQBwAHQAcwAuAHMAaQBsAC4AbwByAGcALwBPAEYATABoAHQAdABwADoALwAvAHMAYwByAGkAcAB0AHMALgBzAGkAbAAuAG8AcgBnAC8ATwBGAEwAAAACAAAAAAAA/4MAMgAAAAAAAAAAAAAAAAAAAAAAAAAAA9sAAAABAAIBAgEDAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQEEAKMAhACFAL0AlgDoAIYAjgCLAJ0AqQCkAQUAigDaAIMAkwDyAPMAjQEGAIgAwwDeAPEAngCqAPUA9AD2AKIArQDJAMcArgBiAGMAkABkAMsAZQDIAMoAzwDMAM0AzgDpAGYA0wDQANEArwBnAPAAkQDWANQA1QBoAOsA7QCJAGoAaQBrAG0AbABuAKAAbwBxAHAAcgBzAHUAdAB2AHcA6gB4AHoAeQB7AH0AfAC4AKEAfwB+AIAAgQDsAO4AugEHAQgBCQEKAQsBDAD9AP4A/wEAAQ0BDgEPAQEBEAERARIBEwEUARUBFgEXAPgA+QEYARkBGgEbARwBHQD6ANcBHgEfASABIQEiASMBJAElAOIA4wEmAScBKAEpASoBKwEsAS0BLgEvALAAsQEwATEBMgEzATQBNQE2ATcBOAE5AOQA5QE6ATsBPAE9AT4BPwFAAUEBQgFDAUQBRQC7AUYBRwFIAUkA5gDnAKYBSgFLAUwBTQFOANgA4QFPANsA3ADdAOAA2QDfAJsBUAFRAVIBUwFUAVUBVgFXAVgBWQFaAVsBXAFdAV4BXwFgAWEBYgFjAWQBZQFmAWcBaAFpAWoBawFsAW0BbgFvAXABcQFyAXMBdAF1AXYBdwF4AXkBegF7AXwBfQF+AX8BgAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsACyALMAtgC3AMQAtAC1AMUAggDCAIcAqwDGAL4AvwC8AbEBsgGzAbQBtQG2AIwBtwG4AJgBuQCaAJkA7wG6AbsApQCSAJwApwCPAJQAlQC5AbwAwADBAb0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHUAdUB1gHXAdgB2QHaAdsB3AHdAd4B3wHgAeEB4gHjAeQB5QHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+Af8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgITAhQCFQIWAhcCGAIZAhoCGwIcAh0CHgIfAiACIQIiAiMCJAIlAiYCJwIoAikCKgIrAiwCLQIuAi8CMAIxAjICMwI0AjUCNgI3AjgCOQI6AjsCPAI9Aj4CPwJAAkECQgJDAkQCRQJGAkcCSAJJAkoCSwJMAk0CTgJPAlACUQJSAlMCVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigKLAowCjQKOAo8CkAKRApICkwKUApUClgKXApgCmQKaApsCnAKdAp4CnwKgAqECogKjAqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAssCzALNAs4CzwLQAtEC0gLTAtQC1QLWAtcC2ALZAtoC2wLcAt0C3gLfAuAC4QLiAuMC5ALlAuYC5wLoAukC6gLrAuwC7QLuAu8C8ALxAvIC8wL0AvUC9gL3AvgC+QL6AvsC/AL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA68DsAOxA7IDswO0A7UDtgO3A7gDuQO6A7sDvAO9A74DvwPAA8EDwgPDA8QDxQPGA8cDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD1APVA9YD1wPYA9kD2gPbA9wD3QPeA98D4APhA+IETlVMTAJDUgd1bmkwMEEwB3VuaTAwQUQHdW5pMDBCNQdBbWFjcm9uB2FtYWNyb24GQWJyZXZlBmFicmV2ZQdBb2dvbmVrB2FvZ29uZWsGRGNhcm9uBmRjYXJvbgZEY3JvYXQHRW1hY3JvbgdlbWFjcm9uCkVkb3RhY2NlbnQKZWRvdGFjY2VudAdFb2dvbmVrB2VvZ29uZWsGRWNhcm9uBmVjYXJvbgd1bmkwMTIyB3VuaTAxMjMHSW1hY3JvbgdpbWFjcm9uB0lvZ29uZWsHaW9nb25lawd1bmkwMTM2B3VuaTAxMzcGTGFjdXRlBmxhY3V0ZQd1bmkwMTNCB3VuaTAxM0MGTGNhcm9uBmxjYXJvbgZOYWN1dGUGbmFjdXRlB3VuaTAxNDUHdW5pMDE0NgZOY2Fyb24GbmNhcm9uB09tYWNyb24Hb21hY3Jvbg1PaHVuZ2FydW1sYXV0DW9odW5nYXJ1bWxhdXQGUmFjdXRlBnJhY3V0ZQd1bmkwMTU2B3VuaTAxNTcGUmNhcm9uBnJjYXJvbgZTYWN1dGUGc2FjdXRlB3VuaTAxNUUHdW5pMDE1Rgd1bmkwMTYyB3VuaTAxNjMGVGNhcm9uBnRjYXJvbgdVbWFjcm9uB3VtYWNyb24FVXJpbmcFdXJpbmcNVWh1bmdhcnVtbGF1dA11aHVuZ2FydW1sYXV0B1VvZ29uZWsHdW9nb25lawZaYWN1dGUGemFjdXRlClpkb3RhY2NlbnQKemRvdGFjY2VudAd1bmkwMjE4B3VuaTAyMTkHdW5pMDIxQQd1bmkwMjFCDWFwb3N0cm9waGVtb2QHdW5pMDJDOQ1kdkNhbmRyYWJpbmR1CmR2QW51c3ZhcmEJZHZWaXNhcmdhA2R2QQRkdkFBA2R2SQRkdklJA2R2VQRkdlVVBGR2dlIEZHZ2TAlkdkVjYW5kcmEDZHZFBGR2QUkJZHZPY2FuZHJhA2R2TwRkdkFVBGR2S0EFZHZLSEEEZHZHQQVkdkdIQQVkdk5HQQRkdkNBBWR2Q0hBBGR2SkEFZHZKSEEFZHZOWUEFZHZUVEEGZHZUVEhBBWR2RERBBmR2RERIQQVkdk5OQQRkdlRBBWR2VEhBBGR2REEFZHZESEEEZHZOQQRkdlBBBWR2UEhBBGR2QkEFZHZCSEEEZHZNQQRkdllBBGR2UkEFZHZSeEEEZHZMQQVkdkxMQQRkdlZBBWR2U0hBBWR2U1NBBGR2U0EEZHZIQQdkdk51a3RhCmR2QXZhZ3JhaGEFZHZtQUEEZHZtSQVkdm1JSQRkdm1VBWR2bVVVBWR2bXZSBmR2bXZSUgpkdm1FY2FuZHJhBGR2bUUFZHZtQUkKZHZtT2NhbmRyYQRkdm1PBWR2bUFVCGR2VmlyYW1hBGR2T20FZHZLeEEGZHZLSHhBBWR2R3hBBWR2SnhBBmR2RER4QQdkdkRESHhBBmR2UEh4QQVkdnZSUgVkdnZMTAVkdm12TAZkdm12TEwFZGFuZGELZG91YmxlZGFuZGEGZHZaZXJvBWR2T25lBWR2VHdvB2R2VGhyZWUGZHZGb3VyBmR2Rml2ZQVkdlNpeAdkdlNldmVuB2R2RWlnaHQGZHZOaW5lEmR2QWJicmV2aWF0aW9uc2lnbglkdkFjYW5kcmEOemVyb3dpZHRoc3BhY2USemVyb3dpZHRobm9uam9pbmVyD3plcm93aWR0aGpvaW5lcgVydXBlZQRFdXJvC2luZGlhbnJ1cGVlB3VuaTIwQkEHdW5pMjBCRAd1bmkyMTEzB3VuaTIxMjYJZXN0aW1hdGVkB3VuaTIyMDYHdW5pMjIxNQd1bmkyMjE5DGRvdHRlZGNpcmNsZQdkdktfU1NBB2R2Sl9OWUEDZHZLBGR2S0gDZHZHBGR2R0gEZHZORwNkdkMEZHZDSANkdkoEZHZKSARkdk5ZBGR2VFQFZHZUVEgEZHZERAVkdkRESARkdk5OA2R2VARkdlRIA2R2RARkdkRIA2R2TgNkdlAEZHZQSANkdkIEZHZCSANkdk0DZHZZA2R2UgNkdkwDZHZWBGR2U0gEZHZTUwNkdlMDZHZIBGR2TEwGZHZLX1NTBmR2Sl9OWQRkdkt4BWR2S0h4BGR2R3gEZHZKeAVkdlBIeAZkdlJlcGgJZHZFeWVsYXNoDWR2UmFzaHRyYXNpZ24GZHZLX1JBB2R2S0hfUkEGZHZHX1JBB2R2R0hfUkEHZHZOR19SQQZkdkNfUkEHZHZDSF9SQQZkdkpfUkEHZHZKSF9SQQdkdk5ZX1JBB2R2VFRfUkEIZHZUVEhfUkEHZHZERF9SQQhkdkRESF9SQQdkdk5OX1JBBmR2VF9SQQdkdlRIX1JBBmR2RF9SQQdkdkRIX1JBBmR2Tl9SQQZkdlBfUkEHZHZQSF9SQQZkdkJfUkEHZHZCSF9SQQZkdk1fUkEGZHZZX1JBBmR2Vl9SQQdkdlNIX1JBBmR2U19SQQZkdkhfUkEHZHZLeF9SQQhkdktIeF9SQQdkdkd4X1JBB2R2SnhfUkEIZHZQSHhfUkEFZHZLX1IGZHZLSF9SBWR2R19SBmR2R0hfUgVkdkNfUgVkdkpfUgZkdkpIX1IGZHZOWV9SBmR2VFRfUgdkdlRUSF9SBmR2RERfUgdkdkRESF9SBmR2Tk5fUgVkdlRfUgZkdlRIX1IFZHZEX1IGZHZESF9SBWR2Tl9SBWR2UF9SBmR2UEhfUgVkdkJfUgZkdkJIX1IFZHZNX1IFZHZZX1IFZHZWX1IFZHZTX1IGZHZLeF9SB2R2S0h4X1IGZHZHeF9SBmR2SnhfUgdkdlBIeF9SBmR2S19LQQhkdkt4X0t4QQdkdktfS0hBBmR2S19DQQZkdktfSkEHZHZLX1RUQQdkdktfTk5BBmR2S19UQQdkdkt4X1RBCGR2S19UX1lBCGR2S19UX1JBCGR2S19UX1ZBB2R2S19USEEGZHZLX0RBBmR2S19OQQZkdktfUEEIZHZLX1BfUkEHZHZLX1BIQQhkdkt4X1BIQQlkdkt4X1BIeEEHZHZLeF9CQQZkdktfTUEHZHZLeF9NQQZkdktfWUEGZHZLX0xBBmR2S19WQQhkdktfVl9ZQQdkdktfU0hBCWR2S19TU19NQQtkdktfU1NfTV9ZQQlkdktfU1NfWUEJZHZLX1NTX1ZBBmR2S19TQQlkdktfU19UVEEJZHZLX1NfRERBCGR2S19TX1RBCmR2S19TX1BfUkEKZHZLX1NfUF9MQQhkdktIX0tIQQdkdktIX1RBCGR2S0h4X1RBB2R2S0hfTkEHZHZLSF9NQQhkdktIeF9NQQdkdktIX1lBCGR2S0h4X1lBB2R2S0hfVkEIZHZLSHhfVkEIZHZLSF9TSEEJZHZLSHhfU0hBCGR2S0h4X1NBBmR2R19HQQdkdkdfR0hBBmR2R19KQQdkdkdfTk5BBmR2R19EQQdkdkdfREhBCWR2R19ESF9ZQQlkdkdfREhfVkEGZHZHX05BCGR2R19OX1lBBmR2R19CQQdkdkdfQkhBCWR2R19CSF9ZQQZkdkdfTUEGZHZHX1lBCGR2R19SX1lBBmR2R19MQQZkdkdfVkEGZHZHX1NBB2R2R0hfTkEHZHZHSF9NQQdkdkdIX1lBBmR2Q19DQQdkdkNfQ0hBCWR2Q19DSF9WQQZkdkNfTkEGZHZDX01BBmR2Q19ZQQdkdkNIX1lBBmR2Sl9LQQZkdkpfSkEIZHZKeF9KeEEJZHZKX0pfTllBCGR2Sl9KX1lBCGR2Sl9KX1ZBB2R2Sl9KSEEJZHZKX05ZX1lBB2R2Sl9UVEEHZHZKX0REQQZkdkpfVEEGZHZKX0RBBmR2Sl9OQQZkdkpfQkEGZHZKX01BBmR2Sl9ZQQdkdkp4X1lBBmR2Sl9WQQdkdkpIX05BB2R2SkhfTUEHZHZKSF9ZQQdkdk5ZX0NBCGR2TllfQ0hBB2R2TllfSkEIZHZOWV9TSEEIZHZUVF9UVEEJZHZUVF9UVEhBB2R2VFRfWUEHZHZUVF9WQQpkdlRUSF9UVEhBCGR2VFRIX1lBCGR2RERfRERBCWR2RERfRERIQQdkdkREX1lBB2R2RERfVkEKZHZEREhfRERIQQhkdkRESF9ZQQhkdk5OX1RUQQlkdk5OX1RUSEEIZHZOTl9EREEJZHZOTl9EREhBCGR2Tk5fTk5BB2R2Tk5fTUEHZHZOTl9ZQQdkdk5OX1ZBBmR2VF9LQQhkdlRfS19ZQQhkdlRfS19SQQhkdlRfS19WQQlkdlRfS19TU0EHZHZUX0tIQQlkdlRfS0hfUkEGZHZUX1RBCGR2VF9UX1lBCGR2VF9UX1ZBB2R2VF9USEEGZHZUX05BCGR2VF9OX1lBBmR2VF9QQQhkdlRfUF9SQQhkdlRfUF9MQQdkdlRfUEhBBmR2VF9NQQhkdlRfTV9ZQQZkdlRfWUEIZHZUX1JfWUEGZHZUX0xBBmR2VF9WQQZkdlRfU0EIZHZUX1NfTkEIZHZUX1NfWUEIZHZUX1NfVkEHZHZUSF9OQQdkdlRIX1lBB2R2VEhfVkEGZHZEX0dBCGR2RF9HX1JBB2R2RF9HSEEGZHZEX0RBB2R2RF9ESEEGZHZEX05BBmR2RF9CQQhkdkRfQl9SQQdkdkRfQkhBBmR2RF9NQQZkdkRfWUEGZHZEX1ZBB2R2REhfTkEJZHZESF9OX1lBB2R2REhfTUEHZHZESF9ZQQdkdkRIX1ZBBmR2Tl9LQQhkdk5fS19TQQZkdk5fQ0EHZHZOX0NIQQdkdk5fVFRBB2R2Tl9EREEGZHZOX1RBCGR2Tl9UX1lBCGR2Tl9UX1JBCGR2Tl9UX1NBB2R2Tl9USEEJZHZOX1RIX1lBCWR2Tl9USF9WQQZkdk5fREEIZHZOX0RfUkEIZHZOX0RfVkEHZHZOX0RIQQlkdk5fREhfWUEJZHZOX0RIX1JBCWR2Tl9ESF9WQQZkdk5fTkEIZHZOX05fWUEGZHZOX1BBCGR2Tl9QX1JBB2R2Tl9QSEEJZHZOX1BIX1JBB2R2Tl9CSEEJZHZOX0JIX1lBCWR2Tl9CSF9WQQZkdk5fTUEIZHZOX01fWUEGZHZOX1lBBmR2Tl9WQQZkdk5fU0EJZHZOX1NfVFRBCmR2Tl9TX01fWUEIZHZOX1NfWUEGZHZOX0hBB2R2UF9UVEEIZHZQX1RUSEEGZHZQX1RBCGR2UF9UX1lBBmR2UF9OQQZkdlBfUEEHZHZQX1BIQQZkdlBfTUEGZHZQX1lBBmR2UF9MQQZkdlBfVkEGZHZQX1NBB2R2UEhfSkEJZHZQSHhfSnhBCGR2UEhfVFRBB2R2UEhfVEEIZHZQSHhfVEEHZHZQSF9OQQdkdlBIX1BBCGR2UEhfUEhBCmR2UEh4X1BIeEEHZHZQSF9ZQQdkdlBIX0xBCGR2UEhfU0hBCGR2UEh4X1NBBmR2Ql9KQQdkdkJfSnhBCGR2Ql9KX1lBB2R2Ql9KSEEGZHZCX1RBBmR2Ql9EQQdkdkJfREhBCWR2Ql9ESF9WQQZkdkJfTkEGZHZCX0JBB2R2Ql9CSEEJZHZCX0JIX1JBBmR2Ql9ZQQZkdkJfTEEIZHZCX0xfWUEGZHZCX1ZBB2R2Ql9TSEEGZHZCX1NBB2R2QkhfTkEHZHZCSF9ZQQlkdkJIX1JfWUEHZHZCSF9MQQdkdkJIX1ZBBmR2TV9UQQZkdk1fREEGZHZNX05BBmR2TV9QQQhkdk1fUF9SQQZkdk1fQkEIZHZNX0JfWUEIZHZNX0JfUkEHZHZNX0JIQQlkdk1fQkhfWUEJZHZNX0JIX1JBCWR2TV9CSF9WQQZkdk1fTUEGZHZNX1lBBmR2TV9MQQZkdk1fVkEHZHZNX1NIQQZkdk1fU0EGZHZNX0hBBmR2WV9OQQZkdllfWUEMZHZFeWVsYXNoX1lBDGR2RXllbGFzaF9IQQZkdkxfS0EIZHZMX0tfWUEHZHZMX0tIQQZkdkxfR0EGZHZMX0pBB2R2TF9KeEEHZHZMX1RUQQhkdkxfVFRIQQdkdkxfRERBCGR2TF9EREhBBmR2TF9UQQdkdkxfVEhBCWR2TF9USF9ZQQZkdkxfREEIZHZMX0RfUkEGZHZMX1BBB2R2TF9QSEEGZHZMX0JBB2R2TF9CSEEGZHZMX01BBmR2TF9ZQQZkdkxfTEEIZHZMX0xfWUEGZHZMX1ZBCWR2TF9WX0REQQZkdkxfU0EGZHZMX0hBBmR2Vl9OQQZkdlZfWUEGZHZWX0xBBmR2Vl9WQQZkdlZfSEEHZHZTSF9LQQhkdlNIX0t4QQdkdlNIX0NBCGR2U0hfQ0hBCGR2U0hfVFRBB2R2U0hfVEEHZHZTSF9OQQdkdlNIX01BB2R2U0hfWUEHZHZTSF9MQQdkdlNIX1ZBCGR2U0hfU0hBB2R2U1NfS0EJZHZTU19LX1JBCGR2U1NfVFRBCmR2U1NfVFRfWUEKZHZTU19UVF9SQQpkdlNTX1RUX1ZBCWR2U1NfVFRIQQtkdlNTX1RUSF9ZQQtkdlNTX1RUSF9SQQhkdlNTX05OQQpkdlNTX05OX1lBB2R2U1NfUEEJZHZTU19QX1JBCGR2U1NfUEhBB2R2U1NfTUEJZHZTU19NX1lBB2R2U1NfWUEHZHZTU19WQQhkdlNTX1NTQQZkdlNfS0EIZHZTX0tfUkEIZHZTX0tfVkEHZHZTX0tIQQZkdlNfSkEHZHZTX1RUQQZkdlNfVEEIZHZTX1RfWUEIZHZTX1RfUkEIZHZTX1RfVkEHZHZTX1RIQQlkdlNfVEhfWUEGZHZTX0RBBmR2U19OQQZkdlNfUEEIZHZTX1BfUkEHZHZTX1BIQQZkdlNfQkEGZHZTX01BCGR2U19NX1lBBmR2U19ZQQZkdlNfTEEGZHZTX1ZBBmR2U19TQQdkdkhfTk5BBmR2SF9OQQZkdkhfTUEGZHZIX1lBBmR2SF9MQQZkdkhfVkEHZHZMTF9ZQQtkdm1JSS5hTG9uZw9kdlJlcGhfQW51c3ZhcmEOZHZBbnVzdmFyYS5hbUkKZHZSZXBoLmFtSRNkdlJlcGhfQW51c3ZhcmEuYW1JDWR2SUlfQW51c3ZhcmEOZHZtSUlfQW51c3ZhcmEKZHZtSUlfUmVwaBNkdm1JSV9SZXBoX0FudXN2YXJhFGR2bUlJX0FudXN2YXJhLmFMb25nEGR2bUlJX1JlcGguYUxvbmcZZHZtSUlfUmVwaF9BbnVzdmFyYS5hTG9uZw1kdm1FX0FudXN2YXJhCWR2bUVfUmVwaBJkdm1FX1JlcGhfQW51c3ZhcmEOZHZtQUlfQW51c3ZhcmEKZHZtQUlfUmVwaBNkdm1BSV9SZXBoX0FudXN2YXJhDWR2bU9fQW51c3ZhcmEJZHZtT19SZXBoEmR2bU9fUmVwaF9BbnVzdmFyYQ5kdm1BVV9BbnVzdmFyYQpkdm1BVV9SZXBoE2R2bUFVX1JlcGhfQW51c3ZhcmETZHZtRWNhbmRyYV9BbnVzdmFyYRNkdm1PY2FuZHJhX0FudXN2YXJhB2R2UkFfbVUIZHZSQV9tVVUHZHZIQV9tVQhkdkhBX21VVQhkdkRBX212UglkdlNIQV9tdlIIZHZIQV9tdlIIZHZtSS5hMDEIZHZtSS5hMDIIZHZtSS5hMDMIZHZtSS5hMDQIZHZtSS5hMDUIZHZtSS5hMDYIZHZtSS5hMDcIZHZtSS5hMDgIZHZtSS5hMDkIZHZtSS5hMTAIZHZtSS5hMTEIZHZtSS5hMTIIZHZtSS5hMTMIZHZtSS5hMTQIZHZtSS5hMTUIZHZtSS5hMTYIZHZtSS5hMTcIZHZtSS5hMTgIZHZtSS5hMTkIZHZtSS5hMjAIZHZtSS5hMjEIZHZtSS5hMjIIZHZtSS5hMjMIZHZtSS5hMjQIZHZtSS5hMjUIZHZtSS5hMjYIZHZtSS5hMzIDZl9mBWZfZl9pBWZfZl9sAAAAAQAB//8ADwABAAAADAAAAAAAAAACAB4AAwEoAAEBKQEqAAMBKwFUAAEBVQFVAAIBVgFhAAEBYgFkAAMBZQFlAAEBZgFoAAMBaQFrAAEBbAFsAAMBbQFtAAEBbgF0AAIBdQF2AAEBdwF4AAMBeQGyAAEBswHfAAIB4AHgAAMB4QHhAAIB4gHiAAMB4wObAAIDnAOcAAEDnQOgAAMDoQOkAAIDpQOnAAEDqAOtAAMDrgOzAAIDtAO0AAMDtQO8AAIDvQPXAAED2APaAAIAAQAAAAoALABQAANERkxUABRkZXYyABRkZXZhABQABAAAAAD//wACAAAAAQACYWJ2bQAOYmx3bQAcAAAABQAAAAEAAgADAAQAAAACAAUABgAHABACiAUcB34MAhCyFIQABAAAAAEACAABAAwAEgABATYBPAABAAEBKgABAJABLAEtAS4BMAExATIBNAE1ATYBNwE4ATkBOgE+AUABRAFFAUYBRwFLAU8BVAFVAVcBXAFuAXIBcwF0AeMB5wHpAe0B7gHvAfAB9AH4AgACAQIlAiYCKgIsAjICMwI2AjcCRgJHAlwCbwJwAnUCfQJ+AoACiwKOAo8CkQKSApQClQKXApgCmgKcAp0CogKkArICwALBAsICwwLEAsUCxgLHAsgCyQLLAtQC1QLWAt4C3wLgAukC6gLzAvYC9wL4Av0DBQMIAwoDCwMVAygDOQM9Az4DRANFA0YDRwNLA0wDTgNWA1gDXQNeA18DYANhA2IDaANqA2sDbANuA28DcANyA3cDfQN+A4IDiQONA5UDlgOXA5gDmQOaA7YDtwO6A7wAAQAAC+IAkA0MA54DpAOqDRgDsAEiA7YBKAEuDqQOpA0MDRIM6AzuDSoNEg02DPQOFAz6DPoNAA0GDQwNEg02DhQNQg0YDR4NJA0qDTANNg08DlwPKA1CDUgNSA1ODVQNWg1gDWYNbA1yDsgNeA1+DYQNig2QDZYNnA2iDboNqA26Da4NtA26DcANxg3MDdIN2A3eDuAN5A4UDfwN6g3wDfYN/A4CDggODgYkDhQOGg80DiAOJg4sDjIOOA4+DkQOSg7sDvIOUA5WDlwOYg5iDmgObg50DnoOgA6GDowOkg6YDp4OpA6qDrAOtg68DsIOwg7UDsgOzg7UDtoO4A7mDuwO8g74Dv4PBA8KDxAPFg8cDyIPKA8uDzQPOg9AD0YPTA9MD1IPWAABAVMDQAABAlACggABAssDPwAEAAAAAQAIAAEADAAWAAEBNgFEAAEAAwEpAWYDtAABAI4BLAEtAS4BMAExATIBNQE2ATgBOQE6AT4BQAFEAUUBRgFHAUsBTwFUAVUBVwFcAW4BcgFzAXQB4wHnAekB7QHuAe8B8AH0AfgCAAIBAiUCJgIqAiwCMgIzAjYCNwJGAkcCXAJvAnACdQJ9An4CgAKLAo4CjwKRApIClAKVApcCmAKaApwCnQKiAqQCsgLAAsECwgLDAsQCxQLGAscCyALJAssC1ALVAtYC3gLfAuAC6QLqAvMC9gL3AvgC/QMFAwgDCgMLAxUDKAM5Az0DPgNEA0UDRgNHA0sDTANOA1YDWANdA14DXwNgA2EDYgNoA2oDawNsA24DbwNwA3IDdwN9A34DggOJA40DlQOWA5cDmAOZA5oDtgO3A7oDvAADAAAJagAACWoAAAlqAI4KjAEeASQBKgqYATABNgE8AUIK5gqMCpIKaApuCqoKkgq2CnQLlAp6CnoKgAqGCowKkgq2C5QKwgqYCp4KpAqqCrAKtgq8C9wMqArCCsgKyArOCtQK2grgCuYK7AryDEgK+Ar+CwQLCgsQCxYLHAsiCzoLKAs6Cy4LNAs6C0ALRgtMC1ILWAteDGALZAuUC3wLagtwC3YLfAuCC4gLjgOkC5QLmgy0C6ALpgusC7ILuAu+C8QLygxsDHIL0AvWC9wL4gviC+gL7gv0C/oMAAwGDAwMEgwYDB4MJAwqDDAMNgw8DEIMQgxUDEgMTgxUDFoMYAxmDGwMcgx4DH4MhAyKDJAMlgycDKIMqAyuDLQMugzADMYMzAzMDNIM2AABAsACggABASACggABAQECggABAboCggABAUkCggABApICggABA+oCggAEAAAAAQAIAAEADAAcAAEBKAFKAAIAAgFnAWgAAAOoA60AAgABAIQBOgE+AUABRAFFAUYBRwFLAU8BVAFVAVcBXAFuAXIBcwF0AeMB5wHpAe0B7gHvAfAB9AH4AgACAQIlAiYCKgIsAjICMwI2AjcCRgJHAlwCbwJwAnUCfQJ+AoACiwKOAo8CkQKSApQClQKXApgCmgKcAp0CogKkArICwALBAsICwwLEAsUCxgLHAsgCyQLLAtQC1QLWAt4C3wLgAukC6gLzAvYC9wL4Av0DBQMIAwoDCwMVAygDOQM9Az4DRANFA0YDRwNLA0wDTgNWA1gDXQNeA18DYANhA2IDaANqA2sDbANuA28DcANyA3cDfQN+A4IDiQONA5UDlgOXA5gDmQOaA7YDtwO6A7wACAAABuQAAAbkAAAG5AAABuQAAAbkAAAG5AAABuQAAAbkAIQH8gf4B84H1AgQB/gIHAfaCPoH4AfgB+YH7AfyB/gIHAj6CCgH/ggECAoIEAgWCBwIIglCCg4IKAguCC4INAg6CEAIRghMCFIIWAmuCF4IZAhqCHAIdgh8CIIIiAigCI4IoAiUCJoIoAimCKwIsgi4CL4IxAnGCMoI+gjiCNAI1gjcCOII6AjuCPQBCgj6CQAKGgkGCQwJEgkYCR4JJAkqCTAJ0gnYCTYJPAlCCUgJSAlOCVQJWglgCWYJbAlyCXgJfgmECYoJkAmWCZwJogmoCagJugmuCbQJugnACcYJzAnSCdgJ3gnkCeoJ8An2CfwKAgoICg4KFAoaCiAKJgosCjIKMgo4Cj4AAQJ9AoIABAAAAAEACAABAAwAFgABADgATAABAAMDngOfA6AAAgAFAToBXAAAAW4BdAAjAbUBtgAqAeMCBQAsAiUDmwBPAAMAAAAOAAAADgAAAA4AAQAAAsoBxgOgA7ID0AOsA6ADrAPQA6wEHgPKA6ADmgOgBCQEHgPQA6wEJAOsA6AEJAQkA9AEJAPQA6wDjgOOBB4DygPQA6wD0AOsBCQDoAOyA9ADrAOgBCQEJAQeA8oEJAOyA9ADrAOgA6wD0AOsA/QDygOgA5oDoAQkBB4EJAOsBCQDrAOgBCQEJAOsBCQD0AOsA9ADygQeBCQEJAOyA9ADrAOyA+gD6APuBBID4gQMBAYDrAQSA6YD6APcBCoEDAQkBBIEEgQSBBIEBgPiBBIEEgPiA9YEEgP6BCoEEgPcBBID6AQqBAwEDAQSA6YDlAPuA+ID4gOyA+ID4gQqBCoD4gPiA9YD1gPWBAAEGAQYA+gD9AQABAYEBgPQA+IEAAP0BCoD9AQYBBgD6AQABBgDrAQABAwEDAQMBAwDrAQYBAwEKgQYA+gD6APiA/oD+gPiBBIEAAQABAwEGAOsA+gEDAPoA+gEDAP0BBID4gQSBAwD4gPiBCQEJAQMBCQDmgQSA6AEJAPoBCQEJAQSBBgD4gQYBAwEKgPoBBID6AQAA9YEAAPcA+ID4gPiA6wEDAQYBAwDrAPoBAAEAAP6BAAEGAQGBBgEAAQSBBgD6APiA/oD7gOsBAwEDAQkBCQDygOgBB4EJAPQA9ADygQeA6wEJAOsBAwEGAQMBAwD6APcA/QDsgQeBB4D9AQqA7ID1gQAA9YD1gOyA7IDsgP0BCoD9AQqBCQEAAOyA7IDsgOyA7ID4gQSA7ID4gP0A/QEAAQSA74EBgOyBCQD0AQkA9YEJAP0A/QD9AQYA+gEAAQYBCoEKgPoA+ID4gQkA+ID4gPiA9YEBgQGA9YD6APoA/oEEgQYBBgEDAPuA6wEDAQYBBgEGAQSA6YEGAQSBAwEJAQYBBgD6AQABAAEAAPQBAAEAAQYBAYEGAP0A9YD9AQqA/QEGAPoBAAEDAQYA/QDrAQYA7IEHgQMA7gEBgQMBBIEEgQYBAAEDAQMBAwEEgO+A+gD6APoA+gEEgQMA+gEEgQqA8QD6AQGA+IEDAPQBBgEEgQAA/QEGAQYA8oEDAQABAwDygQMA+gDygPKA+gEAAQABCQEEgQkA9AD0APiA9AEEgP6BAAEAAQABAAD1gQMBBgEAAQABAAD3APiA+gD9AQYA+4D9AQGBAwD+gQYBB4EGAQYBAAEDAQYBAYEDAQSBBgEGAQkBCQEHgQeBCQEJAQqAAEBKgLKAAEHWgLKAAEBXQLKAAEBkALKAAEFjgLKAAECKQLKAAECwgLKAAEGJwLKAAEFwQLKAAEF9ALKAAECXALKAAEB9wLKAAEEjwLKAAEFWwLKAAEEKQLKAAEDwgLKAAEE9QLKAAEC9gLKAAEFKALKAAEDKQLK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AsQCygLQAtYC1gLcAuIC6ALuAvQC+gMAAwYDDAMSAxgDHgMkAyoDMAM2AzwDQgNIA04DVANaA2ADZgNsA3IDeAN+A4QDigOQA5YDnAOiA6gDrgO0A7oDwAABANz//wABARQAOQABARAAFAABAPMAPgABAOP//wABAQoAFQABAYT/9gABANwAAAABAhEAWwABAQf/4QABAVoAAAABAM//RAABAQP/TAABAX0AAAABANz/dAABARf/rgABAO//iwABAPb/swABANf/dAABAP7/igABAYn/9gABAYEAAAABASr/gwABAWIAAAABA1sAAAABAxMAFAABAcMAAAABAvL//wABAWYAAAABA5cAAAABA5UAAAABAw0AFAABAuv//wABArf/9gABAqAAOQABA03+0AABAqwAFAABAn3//wABAzD/9gABAsYAOQABAQv/AwABAQL+6wABAXP/QAABAQL+9QABAPj/KgABAQ//PAABAXL/GQABARb/QgABAuAAFAABAsf//wABAt0AFQABAssAAAABAucAAAABAY3/9gABAWn/KwABAiv/9gABAXL/7wABAjn/9gABAY7/9gABAZ//OwABAZz/OwABAhr/9gABAi//dgABAYz/OwABAe4AOQABAfoAFAABAer//wABAon/9gABAoT/9gABAof/OwABAnUAAAABAoEAAAABA3IAFAABAgD/4QABAQH/9wABAPz/9AABArQAAAABA1UAFAABAYIAAAABA+IAAAABAwX/9gABAt//9gABAk//4QABAcr/4QABAuUAFAABAs4APgABAtf//wABAtUAFQABA3H/9gABA2z/9gABA20AAAABBAr//wABAub/4QABAkn/4QABAgr/zgABArgAOQABArMAFAABAgr/9AABAswAAAABAQb/8gABAPP/ZwABAYr+qwABAQT/8AABAPz/ZQABAtcAAAABAuQAAAABAoUAFAABAwP/9gABAuoAAAABASH/gwABASP/ewABAjL/6QABAkH/6QABASr/dAABARb/eAABAPkAAAABAQAAAAABAOgADQABAQf/vgAAAAEAAAAKAGIBLgADREZMVAAUZGV2MgAUZGV2YQA2AAQAAAAA//8ADAAAAAEAAwAFAAcACAAJAAoACwAMAA0ADgAEAAAAAP//AAwAAAACAAQABQAGAAgACQAKAAsADAAO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AhIAAgFsAAEABAITAAIBbAABAAQCFAACAWwAAQAEAhYAAgFsAAEABAIXAAIBbAABAAQCGAACAWwAAQAEAhkAAgFsAAEABAIaAAIBbAABAAQCGwACAWwAAQAEAhwAAgFsAAEABAIdAAIBbAABAAQCHgACAWwAAQAEAh8AAgFsAAEABAIgAAIBbAABAAQCIQACAWwAAQAEAiIAAgFsAAEABAIjAAIBbAABAAQCJAACAWwAAgAFAeMB5gAAAegB6AAEAeoB/QAFAf8B/wAZAgECBQAaAAQAAAABAAgAAQMeAEIAigCUAJ4AqACyALwAxgDQANoA5ADuAPgBAgEMARYBIAEqATQBPgFIAVIBXAFmAXABegGEAY4BmAGiAawBtgHAAcoB1AHeAegB8gH8AgYCEAIaAiQCLgI4AkICTAJWAmACagJ0An4CiAKSApwCpgKwAroCxALOAtgC4gLsAvYDAAMKAxQAAQAEAeMAAgHiAAEABAHkAAIB4gABAAQB5QACAeIAAQAEAeYAAgHiAAEABAHnAAIB4gABAAQB6AACAeIAAQAEAekAAgHiAAEABAHqAAIB4gABAAQB6wACAeIAAQAEAewAAgHiAAEABAHtAAIB4gABAAQB7gACAeIAAQAEAe8AAgHiAAEABAHwAAIB4gABAAQB8QACAeIAAQAEAfIAAgHiAAEABAHzAAIB4gABAAQB9AACAeIAAQAEAfUAAgHiAAEABAH2AAIB4gABAAQB9wACAeIAAQAEAfgAAgHiAAEABAH5AAIB4gABAAQB+gACAeIAAQAEAfsAAgHiAAEABAH8AAIB4gABAAQB/QACAeIAAQAEAf4AAgHiAAEABAH/AAIB4gABAAQCAAACAeIAAQAEAgEAAgHiAAEABAICAAIB4gABAAQCAwACAeIAAQAEAgQAAgHiAAEABAIFAAIB4gABAAQCBgACAeIAAQAEAgcAAgHiAAEABAIIAAIB4gABAAQCCQACAeIAAQAEAgoAAgHiAAEABAILAAIB4gABAAQCDAACAeIAAQAEAg0AAgHiAAEABAIOAAIB4gABAAQCDwACAeIAAQAEAhAAAgHiAAEABAIRAAIB4gABAAQCEgACAeIAAQAEAhMAAgHiAAEABAIUAAIB4gABAAQCFQACAeIAAQAEAhYAAgHiAAEABAIXAAIB4gABAAQCGAACAeIAAQAE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", +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/utils/fsm/index.js b/frontend/micro-ui-internals/packages/libraries/src/utils/fsm/index.js new file mode 100644 index 00000000000..8f93bafae51 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/utils/fsm/index.js @@ -0,0 +1,94 @@ +export const getPropertyTypeLocale = (value) => { + return `PROPERTYTYPE_MASTERS_${value?.split(".")[0]}`; +}; + +export const getPropertySubtypeLocale = (value) => `PROPERTYTYPE_MASTERS_${value}`; + +export const getVehicleType = (vehicle, t) => { + return (vehicle?.i18nKey && vehicle?.capacity && `${t(vehicle.i18nKey)} - ${vehicle.capacity} ${t("CS_COMMON_CAPACITY_LTRS")}`) || null; +}; + +export const updateConfiguration = ({ config, defaultConfig, detailsConfig, customConfiguration, isDefaultConfig }) => { + const fieldSectionNamesInsideConfig = []; + const detailsConfigCopy = { ...detailsConfig }; + + customConfiguration.forEach((detail) => { + // Adding custom fields to FieldSection fields array (body) + if (detailsConfigCopy[detail.name] && detail.addFields) { + detailsConfigCopy[detail.name].body.push(...detail.addFields); + } + + let body = []; + + // adding fields to body array + if (detail?.fieldsOrder?.length > 0) { + // fields order + detail.fieldsOrder.forEach((fieldName) => { + if (detailsConfigCopy[detail.name]) { + body.push(detailsConfigCopy[detail.name].body.find((value) => value.name === fieldName)); + } + }); + + // adding remaining fields to the body array which are not in detail?.fieldsOrder + if (detail?.allFields) { + detailsConfigCopy[detail.name]?.body?.forEach((field) => { + if (!detail?.fieldsOrder?.includes(field.name)) { + body.push(detailsConfigCopy[detail.name].body.find((value) => value.name === field.name)); + } + }); + } + } else { + body = detailsConfigCopy[detail.name].body; + } + + // remove fields + if (detail?.removeFields) { + detail?.removeFields?.forEach((fieldName) => { + body = body.filter((field) => field.name !== fieldName); + }); + } + + // adding FieldSection to config + if (detailsConfigCopy[detail.name]) { + config.push({ + head: detailsConfigCopy[detail.name].head, + body, + }); + fieldSectionNamesInsideConfig.push(detail.name); + } + }); + + // adding remaining FieldSection to config + if (isDefaultConfig) { + defaultConfig?.forEach((fieldSectionName) => { + if (!fieldSectionNamesInsideConfig.includes(fieldSectionName) && detailsConfigCopy[fieldSectionName]) { + config.push(detailsConfigCopy[fieldSectionName]); + fieldSectionNamesInsideConfig.push(fieldSectionName); + } + }); + } +}; + +// How to use above updateConfiguration function +// let config = []; + +// const defaultConfig = ["applicationDetails", "propertyDetails", "locationDetails", "paymentDetails"]; + +// const { Customizations } = window.Digit; +// let employeeCustomizations = false; + +// if (Customizations?.FSM?.getEmployeeApplicationCustomization) { +// employeeCustomizations = Customizations?.FSM?.getEmployeeApplicationCustomization(defaultConfig, t); +// } + +// if (employeeCustomizations?.config?.length > 0) { +// updateConfiguration({ +// config, +// defaultConfig, +// detailsConfig, +// customConfiguration: employeeCustomizations?.config, +// isDefaultConfig: employeeCustomizations?.defaultConfig, +// }); +// } else { +// defaultConfig.forEach((fieldSectionName) => config.push(detailsConfig[fieldSectionName])); +// } diff --git a/frontend/micro-ui-internals/packages/libraries/src/utils/index.js b/frontend/micro-ui-internals/packages/libraries/src/utils/index.js new file mode 100644 index 00000000000..13d177d96ce --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/utils/index.js @@ -0,0 +1,201 @@ +import BrowserUtil from "./browser"; +import * as date from "./date"; +import * as dss from "./dss"; +import * as locale from "./locale"; +import PDFUtil, { downloadReceipt } from "./pdf"; + +const GetParamFromUrl = (key, fallback, search) => { + if (typeof window !== "undefined") { + search = search || window.location.search; + const params = new URLSearchParams(search); + return params.has(key) ? params.get(key) : fallback; + } + return fallback; +}; + +const getPattern = type => { + switch (type) { + case "Name": + return /^[^{0-9}^\$\"<>?\\\\~!@#$%^()+={}\[\]*,/_:;“”‘’]{1,50}$/i; + case "SearchOwnerName": + return /^[^{0-9}^\$\"<>?\\\\~!@#$%^()+={}\[\]*,/_:;“”‘’]{3,50}$/i; + case "MobileNo": + return /^[6789][0-9]{9}$/i; + case "Amount": + return /^[0-9]{0,8}$/i; + case "NonZeroAmount": + return /^[1-9][0-9]{0,7}$/i; + case "DecimalNumber": + return /^\d{0,8}(\.\d{1,2})?$/i; + case "Email": + return /^(?=^.{1,64}$)((([^<>()\[\]\\.,;:\s$*@'"]+(\.[^<>()\[\]\\.,;:\s@'"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,})))$/i; + case "Address": + return /^[^\$\"<>?\\\\~`!@$%^()+={}\[\]*:;“”‘’]{1,500}$/i; + case "PAN": + return /^[A-Za-z]{5}\d{4}[A-Za-z]{1}$/i; + case "TradeName": + return /^[-@.\/#&+\w\s]*$/ + case "Date": + return /^[12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/i; + case "UOMValue": + return /^(0)*[1-9][0-9]{0,5}$/i; + case "OperationalArea": + return /^(0)*[1-9][0-9]{0,6}$/i; + case "NoOfEmp": + return /^(0)*[1-9][0-9]{0,6}$/i; + case "GSTNo": + return /^\d{2}[A-Z]{5}\d{4}[A-Z]{1}\d[Z]{1}[A-Z\d]{1}$/i; + case "DoorHouseNo": + return /^[^\$\"'<>?~`!@$%^={}\[\]*:;“”‘’]{1,50}$/i; + case "BuildingStreet": + return /^[^\$\"'<>?\\\\~`!@$%^()+={}\[\]*.:;“”‘’]{1,64}$/i; + case "Pincode": + return /^[1-9][0-9]{5}$/i; + case "Landline": + return /^[0-9]{11}$/i; + case "PropertyID": + return /^[a-zA-z0-9\s\\/\-]$/i; + case "ElectricityConnNo": + return /^.{1,15}$/i; + case "DocumentNo": + return /^[0-9]{1,15}$/i; + case "eventName": + return /^[^\$\"<>?\\\\~`!@#$%^()+={}\[\]*,.:;“”]{1,65}$/i; + case "eventDescription": + return /^[^\$\"'<>?\\\\~`!@$%^()+={}\[\]*.:;“”‘’]{1,500}$/i; + case "cancelChallan": + return /^[^\$\"'<>?\\\\~`!@$%^()+={}\[\]*.:;“”‘’]{1,100}$/i; + case "FireNOCNo": + return /^[a-zA-Z0-9-]*$/i; + case "consumerNo": + return /^[a-zA-Z0-9/-]*$/i; + case "AadharNo": + return /^([0-9]){12}$/; + case "ChequeNo": + return /^(?!0{6})[0-9]{6}$/; + case "Comments": + return /^[^\$\"'<>?\\\\~`!@$%^()+={}\[\]*.:;“”‘’]{1,50}$/i; + case "OldLicenceNo": + return /^[a-zA-Z0-9-/]{0,64}$/; + } +}; + +const getStaticMapUrl = (latitude, longitude) => { + const key = globalConfigs?.getConfig("GMAPS_API_KEY"); + return `https://maps.googleapis.com/maps/api/staticmap?markers=${latitude},${longitude}&zoom=15&size=400x400&key=${key}&style=element:geometry%7Ccolor:0xf5f5f5&style=element:labels.icon%7Cvisibility:off&style=element:labels.text.fill%7Ccolor:0x616161&style=element:labels.text.stroke%7Ccolor:0xf5f5f5&style=feature:administrative.land_parcel%7Celement:labels.text.fill%7Ccolor:0xbdbdbd&style=feature:poi%7Celement:geometry%7Ccolor:0xeeeeee&style=feature:poi%7Celement:labels.text.fill%7Ccolor:0x757575&style=feature:poi.park%7Celement:geometry%7Ccolor:0xe5e5e5&style=feature:poi.park%7Celement:labels.text.fill%7Ccolor:0x9e9e9e&style=feature:road%7Celement:geometry%7Ccolor:0xffffff&style=feature:road.arterial%7Celement:labels.text.fill%7Ccolor:0x757575&style=feature:road.highway%7Celement:geometry%7Ccolor:0xdadada&style=feature:road.highway%7Celement:labels.text.fill%7Ccolor:0x616161&style=feature:road.local%7Celement:labels.text.fill%7Ccolor:0x9e9e9e&style=feature:transit.line%7Celement:geometry%7Ccolor:0xe5e5e5&style=feature:transit.station%7Celement:geometry%7Ccolor:0xeeeeee&style=feature:water%7Celement:geometry%7Ccolor:0xc9c9c9&style=feature:water%7Celement:labels.text.fill%7Ccolor:0x9e9e9e`; +}; + +const detectDsoRoute = (pathname) => { + const employeePages = ["search", "inbox", "dso-dashboard", "dso-application-details"]; + + return employeePages.some((url) => pathname.split("/").includes(url)); +}; + +const routeSubscription = (pathname) => { + let classname = "citizen"; + const isEmployeeUrl = detectDsoRoute(pathname); + if (isEmployeeUrl && classname === "citizen") { + return (classname = "employee"); + } else if (!isEmployeeUrl && classname === "employee") { + return (classname = "citizen"); + } +}; + +const pgrAccess = () => { + const userInfo = Digit.UserService.getUser(); + const userRoles = userInfo.info.roles.map((roleData) => roleData.code); + const pgrRoles = ["PGR_LME", "PGR-ADMIN", "CSR", "CEMP", "FEMP", "DGRO", "ULB Operator", "GRO", "GO", "RO", "GA"]; + + const PGR_ACCESS = userRoles.filter((role) => pgrRoles.includes(role)); + + return PGR_ACCESS.length > 0; +}; + +const fsmAccess = () => { + const userInfo = Digit.UserService.getUser(); + const userRoles = userInfo.info.roles.map((roleData) => roleData.code); + const fsmRoles = [ + "FSM_CREATOR_EMP", + "FSM_EDITOR_EMP", + "FSM_VIEW_EMP", + "FSM_REPORT_VIEWER", + "FSM_DASHBOARD_VIEWER", + "FSM_ADMIN", + "FSM_DSO", + "FSM_DRIVER", + "FSM_EMP_FSTPO", + "FSM_COLLECTOR", + ]; + + const FSM_ACCESS = userRoles.filter((role) => fsmRoles.includes(role)); + + return FSM_ACCESS.length > 0; +}; + +const ptAccess = () => { + const userInfo = Digit.UserService.getUser(); + const userRoles = userInfo.info.roles.map((roleData) => roleData.code); + const ptRoles = ["PT_APPROVER", "PT_CEMP", "PT_DOC_VERIFIER", "PT_FIELD_INSPECTOR"]; + + const PT_ACCESS = userRoles.filter((role) => ptRoles.includes(role)); + + return PT_ACCESS.length > 0; +}; + +const tlAccess = () => { + const userInfo = Digit.UserService.getUser(); + const userRoles = userInfo.info.roles.map((roleData) => roleData.code); + const tlRoles = ["TL_CEMP", "TL_APPROVER", "TL_FIELD_INSPECTOR", "TL_DOC_VERIFIER"]; + + const TL_ACCESS = userRoles.filter((role) => tlRoles.includes(role)); + + return TL_ACCESS.length > 0; +}; + +const mCollectAccess = () => { + const userInfo = Digit.UserService.getUser(); + const userRoles = userInfo.info.roles.map((roleData) => roleData.code); + const mCollectRoles = ["UC_EMP"]; + + const MCOLLECT_ACCESS = userRoles.filter((role) => mCollectRoles.includes(role)); + + return MCOLLECT_ACCESS.length > 0; +}; + + +const receiptsAccess = () => { + const userInfo = Digit.UserService.getUser(); + const userRoles = userInfo.info.roles.map((roleData) => roleData.code); + const receiptsRoles = ["CR_PT"]; + const RECEIPTS_ACCESS = userRoles.filter((role) => receiptsRoles.includes(role)); + return RECEIPTS_ACCESS.length > 0; +} +const hrmsRoles = ["HRMS_ADMIN"]; +const hrmsAccess = () => { + const userInfo = Digit.UserService.getUser(); + const userRoles = userInfo.info.roles.map((roleData) => roleData.code); + const HRMS_ACCESS = userRoles.filter((role) => hrmsRoles.includes(role)); + return HRMS_ACCESS.length > 0; +}; + +export default { + pdf: PDFUtil, + downloadReceipt, + browser: BrowserUtil, + locale, + date, + GetParamFromUrl, + getStaticMapUrl, + detectDsoRoute, + routeSubscription, + pgrAccess, + fsmAccess, + dss, + ptAccess, + mCollectAccess, + receiptsAccess, + hrmsAccess, + getPattern, + hrmsRoles, + tlAccess +}; diff --git a/frontend/micro-ui-internals/packages/libraries/src/utils/locale.js b/frontend/micro-ui-internals/packages/libraries/src/utils/locale.js new file mode 100644 index 00000000000..cde6ea40365 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/utils/locale.js @@ -0,0 +1,65 @@ +export const getLocalityCode = (locality, tenantId) => { + if (typeof locality === "string") return locality.includes("_") ? locality : `${tenantId.replace(".", "_").toUpperCase()}_ADMIN_${locality}`; + else if (locality.code) return locality.code.includes("_") ? locality : `${tenantId.replace(".", "_").toUpperCase()}_ADMIN_${locality.code}`; +}; + +export const getRevenueLocalityCode = (locality, tenantId) => { + if (typeof locality === "string") return locality.includes("_") ? locality : `${tenantId.replace(".", "_").toUpperCase()}_REVENUE_${locality}`; + else if (locality.code) return locality.code.includes("_") ? locality : `${tenantId.replace(".", "_").toUpperCase()}_REVENUE_${locality.code}`; +}; + +export const stringReplaceAll = (str = "", searcher = "", replaceWith = "") => { + if (searcher == "") return str; + while (str.includes(searcher)) { + str = str.replace(searcher, replaceWith); + } + return str; +}; + +/* method to check not null if not returns false*/ +export const checkForNotNull = (value = "") => { + return value && value != null && value != undefined && value != "" ? true : false; +}; + +export const convertDotValues = (value = "") => { + return ( + (checkForNotNull(value) && ((value.replaceAll && value.replaceAll(".", "_")) || (value.replace && stringReplaceAll(value, ".", "_")))) || "NA" + ); +}; + +export const convertToLocale = (value = "", key = "") => { + let convertedValue = convertDotValues(value)?.toUpperCase(); + if (convertedValue == "NA") { + return "COMMON_NA"; + } + return `${key}_${convertedValue}`; +}; + +export const getMohallaLocale = (value = "", tenantId = "") => { + let convertedValue = convertDotValues(tenantId); + if (convertedValue == "NA" || !checkForNotNull(value)) { + return "COMMON_NA"; + } + convertedValue = convertedValue.toUpperCase(); + return convertToLocale(value, `${convertedValue}_REVENUE`); +}; + +export const getCityLocale = (value = "") => { + let convertedValue = convertDotValues(value); + if (convertedValue == "NA" || !checkForNotNull(value)) { + return "COMMON_NA"; + } + convertedValue = convertedValue.toUpperCase(); + return convertToLocale(convertedValue, `TENANT_TENANTS`); +}; + +/* to convert the dropdown data to locale data */ +export const convertToLocaleData = (dropdownValues = [], key = '', t) => { + return dropdownValues.map((ele) => { + ele["i18text"] = convertToLocale(ele.code, key); + if (t) { + ele["i18text"] = t(ele["i18text"]); + } + return ele; + }); +} \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/libraries/src/utils/pdf.js b/frontend/micro-ui-internals/packages/libraries/src/utils/pdf.js new file mode 100644 index 00000000000..70b0ac6aabd --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/utils/pdf.js @@ -0,0 +1,411 @@ +import { Fonts } from "./fonts"; +const pdfMake = require("pdfmake/build/pdfmake.js"); +// const pdfFonts = require("pdfmake/build/vfs_fonts.js"); +// pdfMake.vfs = pdfFonts.pdfMake.vfs; + +pdfMake.vfs = Fonts; + +pdfMake.fonts = { + // Roboto: { + // normal: "https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.66/fonts/Roboto/Roboto-Regular.ttf", + // bold: "https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.66/fonts/Roboto/Roboto-Medium.ttf" + // }, + Hind: { + normal: "Hind-Regular.ttf", + bold: "Hind-Bold.ttf", + }, +}; + +const downloadPDFFileUsingBase64 = (receiptPDF, filename) => { + if ( + window && + window.mSewaApp && + window.mSewaApp.isMsewaApp && + window.mSewaApp.isMsewaApp() && + window.mSewaApp.downloadBase64File && + window.Digit.Utils.browser.isMobile() + ) { + // we are running under webview + receiptPDF.getBase64((data) => { + window.mSewaApp.downloadBase64File(data, filename); + }); + } else { + // we are running in browser + receiptPDF.download(filename); + } +}; + +function getBase64Image(tenantId) { + try { + const img = document.getElementById(`logo-${tenantId}`); + var canvas = document.createElement("canvas"); + canvas.width = img.width; + canvas.height = img.height; + var ctx = canvas.getContext("2d"); + ctx.drawImage(img, 0, 0); + return canvas.toDataURL("image/png"); + } catch (e) { + console.error("asd", e); + return ""; + } +} + +const defaultLogo = + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAABBtJREFUWAntV11oVEcUnjN3mzXm111toQ8lWOtLTbIG0YgpMdQ05CEv0iTU1hhR7EMRWYuKSkteVExJBRGkpaUk0ChRSYtpKam4sbE0ia7RSNaS0uIfWtT4E8Xs5u7O8Vy7c3f27t2fh4W+ZF7OmfN9c86Ze2bOvZex/3mAGv/RIU9xJCL2IWIdAS7C/Nyhtbm8l39XeVKfOrLcHZoOHmCA7zJkC6VdSmAQRoYBAHbCXZBzED726xKT0kwgGnyUgpdI0JBEEMD4B+4dV3pU+9Mvyl4NMTZKAV5X7cl0APC5P127BqBNqBwuJ5Gw2G8NbmDIGEcQR+9/u6pAcg0ZYtiRaXCDT75rHnT0bjF0dZgJkLP3VEDVEakcj58ti7MBJOWrPFUHJurUuaGbCVCd5llBdQ4Yw7GnUaM9Fal4JjptJCGGmQA964upnPBXHCYOTSciDMGcp1qnYpzBBXVu6LEEGHxOByViJURJX7m2+W+qmKax3cn4Kk/qdJgnnXOdHXIupZnA/B1jw5TP+wzgngSpLEhX6ahLy/dKm5Su7WODBK4l/I60JZPkJ0DcuvxPLvxr5ZjXUAL45crchxD00A12OR3apTyv/67E7CQerndOztwto9uymPI1N2RwOcMwgBYorigah5qBsN36WVtCCZI9kqqu8Td0DG2mhlJKdb8JGvQOrV86YMevPDZagjpuQoFLqPY3gDtOjawvH7TjZpRAZeelesHwON3jQtUJtej2kdalu1RbZZe/QSB0U6L5ph0AObB9wy0Vn5m2qJI2geWd19yI09eo8SywLjbmdMgaRjZ4+gx9RffV13BGD1BXNV5kCYMzrW641dOvAnGnVgVMHYLUPu2DGxxk4iPJFeFwfbLgL7lcfCi5UqZNgK7WIkm2k4AxHARLyaUSJuBpE6AtBuwCmzaAGM5Tc6neMW7UQdoEcnOdv9Cpv24GjFNAAPCvpalwTuFP1J5vy7kqqRtGOGjfqDZDT5vAQNPbzzTgzQmOAWZotXe4xXNeOj3T9OYTjUMzHU1Le4YQImwdaimndh8/0t4CSV/T83fR1PRUI9W8lALc4jla3x/ryv6UuCqrvh+bp+t6IwL81weQn6abMqFyZnX5BDIugVyQifT52hxD7HyVAFFKb8nreVg46K354bHd2qwn0H6u9i0dI9S2scIMSN8YHHDjnmrfz6YtqmQ1gZ7xxpyJ+5MX6ROYDqplADzPAc2zs/rXv1Qk7TVUyen0iclHDbbBjYWIc3UR3mb1kdUEQGC5NYA6p1dzAp7VBKjulgakhjf+sqwNKoNOGO8i9Uxz8H6KEkzKAvzRimX1Cex+58w/9O2/nT4S4v7/jKDUyo/vrfZ1WxPI6i2Qzvf/VrtKRMJbKewSeiI3aJcn96w++53EVfkCw79XQZYr/EsAAAAASUVORK5CYII="; +const jsPdfGenerator = async ({ tenantId, logo, name, email, phoneNumber, heading, details, t = (text) => text }) => { + const emailLeftMargin = + email.length <= 15 + ? 190 + : email.length <= 20 + ? 150 + : email.length <= 25 + ? 130 + : email.length <= 30 + ? 90 + : email.length <= 35 + ? 50 + : email.length <= 40 + ? 10 + : email.length <= 45 + ? 0 + : email.length <= 50 + ? -20 + : email.length <= 55 + ? -70 + : email.length <= 60 + ? -100 + : -60; + + const dd = { + pageMargins: [40, 80, 40, 30], + header: { + columns: [ + { + image: logo || getBase64Image(tenantId) || defaultLogo, + width: 50, + margin: [10, 10], + }, + { + text: name, + margin: [20, 25], + font: "Hind", + fontSize: 14, + bold: true, + }, + { + text: email, + margin: [emailLeftMargin, 25, 0, 25], + font: "Hind", + fontSize: 11, + color: "#464747", + }, + { + text: phoneNumber, + color: "#6f777c", + font: "Hind", + fontSize: 11, + margin: [-65, 45, 0, 25], + }, + ], + }, + + footer: function (currentPage, pageCount) { + return { + columns: [ + { text: `${name} / ${heading}`, margin: [15, 0, 0, 0], fontSize: 11, color: "#6f777c", width: 400, font: "Hind" }, + { text: `Page ${currentPage}`, alignment: "right", margin: [0, 0, 25, 0], fontSize: 11, color: "#6f777c", font: "Hind" }, + ], + }; + }, + content: [ + { + text: heading, + font: "Hind", + fontSize: 24, + bold: true, + margin: [-25, 5, 0, 0], + }, + ...createContent(details, phoneNumber), + { + text: t("PDF_SYSTEM_GENERATED_ACKNOWLEDGEMENT"), + font: "Hind", + fontSize: 11, + color: "#6f777c", + margin: [-25, 32], + }, + ], + defaultStyle: { + font: "Hind", + }, + }; + const generatedPDF = pdfMake.createPdf(dd); + downloadPDFFileUsingBase64(generatedPDF, "acknowledgement.pdf"); +}; + +export default { generate: jsPdfGenerator }; + +function createContent(details, phoneNumber) { + const data = []; + + details.forEach((detail, index) => { + if (detail?.values?.length > 0) { + let column1 = []; + let column2 = []; + + if ((index + 1) % 7 === 0) { + data.push({ + text: "", + margin: [-25, 0, 0, 200], + }); + } + + data.push({ + text: `${detail.title}`, + font: "Hind", + fontSize: 18, + bold: true, + margin: [-25, 20, 0, 20], + }); + + const newArray = []; + let count = 0; + let arrayNumber = 0; + + detail.values.forEach((value, index) => { + if (count <= 3) { + if (!newArray[arrayNumber]) { + newArray[arrayNumber] = []; + } + if (value) { + newArray[arrayNumber].push(value); + } + count++; + } + if (count === 4) { + count = 0; + arrayNumber++; + } + }); + + newArray.forEach((value) => { + if (value?.length === 2) { + createContentForDetailsWithLengthOfTwo(value, data, column1, column2, detail.values.length > 3 ? 10 : 0); + } else if (value?.length === 1 || value?.length === 3) { + createContentForDetailsWithLengthOfOneAndThree(value, data, column1, column2, detail.values.length > 3 ? 10 : 0); + } else { + value.forEach((value, index) => { + let margin = [-25, 0, 0, 5]; + if (index === 1) margin = [15, 0, 0, 5]; + if (index === 2) margin = [26, 0, 0, 5]; + if (index === 3) margin = [30, 0, 0, 5]; + column1.push({ + text: value.title, + font: "Hind", + fontSize: 11, + bold: true, + margin, + }); + if (index === 1) margin = [15, 0, 0, 10]; + if (index === 2) margin = [26, 0, 0, 10]; + if (index === 3) margin = [30, 0, 0, 10]; + column2.push({ + text: value.value, + font: "Hind", + fontSize: 9, + margin, + color: "#1a1a1a", + width: "25%", + }); + }); + data.push({ columns: column1 }); + data.push({ columns: column2 }); + column1 = []; + column2 = []; + } + }); + } + }); + + return data; +} + +function createContentForDetailsWithLengthOfTwo(values, data, column1, column2, num = 0) { + values.forEach((value, index) => { + if (index === 0) { + column1.push({ + text: value.title, + font: "Hind", + fontSize: 12, + bold: true, + margin: [-25, num - 10, -25, 0], + }); + column2.push({ + text: value.value, + font: "Hind", + fontSize: 9, + margin: [-25, 5, 0, 0], + color: "#1a1a1a", + width: "25%", + }); + } else { + column1.push({ + text: value.title, + font: "Hind", + fontSize: 12, + bold: true, + margin: [-115, num - 10, -115, 0], + }); + column2.push({ + text: value.value, + font: "Hind", + fontSize: 9, + margin: [15, 5, 0, 0], + color: "#1a1a1a", + width: "25%", + }); + } + }); + data.push({ columns: column1 }); + data.push({ columns: column2 }); +} + +function createContentForDetailsWithLengthOfOneAndThree(values, data, column1, column2, num = 0) { + values.forEach((value, index) => { + if (index === 0) { + column1.push({ + text: value.title, + font: "Hind", + fontSize: 12, + bold: true, + margin: values.length > 1 ? [-25, -5, 0, 0] : [-25, 0, 0, 0], + }); + column2.push({ + text: value.value, + font: "Hind", + fontSize: 9, + color: "#1a1a1a", + margin: values.length > 1 ? [-25, 5, 0, 0] : [-25, 5, 0, 0], + width: "25%", + }); + } else if (index === 2) { + column1.push({ + text: value.title, + font: "Hind", + fontSize: 12, + bold: true, + margin: [-60, -5, 0, 0], + }); + column2.push({ + text: value.value, + font: "Hind", + fontSize: 9, + margin: [26, 5, 0, 0], + color: "#1a1a1a", + width: "25%", + }); + } else { + column1.push({ + text: value.title, + font: "Hind", + fontSize: 12, + bold: true, + margin: [-28, -5, 0, 0], + }); + column2.push({ + text: value.value, + font: "Hind", + fontSize: 9, + margin: [15, 5, 0, 0], + color: "#1a1a1a", + width: "25%", + }); + } + }); + data.push({ columns: column1 }); + data.push({ columns: column2 }); +} + +// EXAMPLE +// , + +const downloadPdf = (blob, fileName) => { + const link = document.createElement("a"); + // create a blobURI pointing to our Blob + link.href = URL.createObjectURL(blob); + link.download = fileName; + // some browser needs the anchor to be in the doc + document.body.append(link); + link.click(); + link.remove(); + // in case the Blob uses a lot of memory + setTimeout(() => URL.revokeObjectURL(link.href), 7000); +}; + +/* Download Receipts */ + +export const downloadReceipt = async (consumerCode, businessService, pdfKey = "consolidatedreceipt") => { + const tenantId = Digit.ULBService.getCurrentTenantId(); + const response = await Digit.ReceiptsService.receipt_download(businessService, consumerCode, tenantId, pdfKey); + const responseStatus = parseInt(response.status, 10); + if (responseStatus === 201 || responseStatus === 200) { + downloadPdf(new Blob([response.data], { type: "application/pdf" }), `consumer-${consumerCode}.pdf`); + } +}; \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/libraries/src/utils/pt/index.js b/frontend/micro-ui-internals/packages/libraries/src/utils/pt/index.js new file mode 100644 index 00000000000..01a53a84a50 --- /dev/null +++ b/frontend/micro-ui-internals/packages/libraries/src/utils/pt/index.js @@ -0,0 +1,5 @@ +export const getPropertyTypeLocale = (value) => { + return `PROPERTYTAX_BILLING_SLAB_${value?.split(".")[0]}`; +}; + +export const getPropertySubtypeLocale = (value) => `PROPERTYTAX_BILLING_SLAB_${value}`; diff --git a/frontend/micro-ui-internals/packages/modules/common/package.json b/frontend/micro-ui-internals/packages/modules/common/package.json new file mode 100644 index 00000000000..130d07b93a7 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/package.json @@ -0,0 +1,31 @@ +{ + "name": "@egovernments/digit-ui-module-common", + "version": "1.3.0", + "license": "MIT", + "main": "dist/index.js", + "module": "dist/index.modern.js", + "source": "src/Module.js", + "files": [ + "dist" + ], + "scripts": { + "start": "microbundle-crl watch --no-compress --format modern,cjs", + "build": "microbundle-crl --no-compress --format modern,cjs", + "prepublish": "yarn build" + }, + "dependencies": { + "@egovernments/digit-ui-libraries": "^1.3.0", + "@egovernments/digit-ui-react-components": "^1.3.0", + "react": "^17.0.0", + "react-dom": "^17.0.0", + "react-hook-form": "^6.7.0", + "react-i18next": "^11.7.3", + "react-query": "^3.6.1", + "react-redux": "^7.2.1", + "react-router-dom": "^5.2.0", + "react-table": "^7.6.1", + "redux": "^4.0.5", + "redux-thunk": "^2.3.0", + "rooks": "^4.4.0" + } +} diff --git a/frontend/micro-ui-internals/packages/modules/common/src/Module.js b/frontend/micro-ui-internals/packages/modules/common/src/Module.js new file mode 100644 index 00000000000..8e922b1cfed --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/Module.js @@ -0,0 +1 @@ +export * from "./payments"; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/hoc/index.js b/frontend/micro-ui-internals/packages/modules/common/src/hoc/index.js new file mode 100644 index 00000000000..695e38ccf3b --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/hoc/index.js @@ -0,0 +1,3 @@ +import { SubformComposer } from "./subform-composer"; + +export { SubformComposer }; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/hoc/subform-composer.js b/frontend/micro-ui-internals/packages/modules/common/src/hoc/subform-composer.js new file mode 100644 index 00000000000..98dd3df4551 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/hoc/subform-composer.js @@ -0,0 +1,72 @@ +import { Card, CardHeader } from "@egovernments/digit-ui-react-components"; +import React, { useCallback, useEffect, useMemo, useState } from "react"; +import { useForm, Controller } from "react-hook-form"; +import { subFormRegistry } from "@egovernments/digit-ui-libraries"; + +export const SubformComposer = ({ _key, ...props }) => { + const config = subFormRegistry._registry[_key]; + const { setValue, setError, control, watch, getValues } = useForm({ shouldFocusError: true }); + const [state, setState] = useState(config?.state); + + const _setState = useCallback((obj) => { + setState((oldState) => ({ ...oldState, ...obj })); + }, []); + + const clearState = useCallback(() => { + setState(config.state); + }, []); + + const formData = watch(); + + useEffect(() => { + (async () => { + props.getSubFormValue(await callMiddlewares(formData)); + })(); + }, [formData]); + + const callMiddlewares = useCallback(async (data) => { + let applyBreak = false; + let itr = -1; + let _break = () => (applyBreak = true); + let _next = async (data) => { + if (!applyBreak && ++itr < config?.middlewares.length) { + let key = Object.keys(config?.middlewares[itr])[0]; + let nextMiddleware = config?.middlewares[itr][key]; + let isAsync = nextMiddleware.constructor.name === "AsyncFunction"; + if (isAsync) return await nextMiddleware(data, _break, _next); + else return nextMiddleware(data, _break, _next); + } else return data; + }; + let ret = await _next(data); + return ret; + }, []); + + const allFields = useMemo(() => (config && [...config?.fields, ...config?.addedFields]) || [], [config]); + + return ( + +
+ + {_key} + {allFields.map(({ label, component, customProps, defaultValue, name }, index) => { + let _customProps = typeof customProps === "function" ? customProps(state, _setState) : customProps; + let _defaultValue = typeof defaultValue === "function" ? defaultValue(state, _setState) : defaultValue; + return ( +
+ {label &&
{label}
} +
+ component({ ...props, setState: _setState, setValue, setError, state, getValues }, _customProps)} + /> +
+
+ ); + })} +
+
+
+ ); +}; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/hoc/testForm-config.js b/frontend/micro-ui-internals/packages/modules/common/src/hoc/testForm-config.js new file mode 100644 index 00000000000..f2dabd0aacf --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/hoc/testForm-config.js @@ -0,0 +1,152 @@ +import React from "react"; +import { Dropdown, SearchIconSvg } from "@egovernments/digit-ui-react-components"; + +const middleWare_1 = async (data, _break, _next) => { + data.a = "a"; + return await _next(data); +}; + +const middleWare_2 = async (data, _break, _next) => { + data.b = "b"; + // _break(); + return await _next(data); +}; + +const middleWare_3 = async (data, _break, _next) => { + data.c = "c"; + if (data.b === "b") { + try { + const res = await window.fetch(`https://ifsc.razorpay.com/hdfc0000090`); + console.log(res.ok); + if (res.ok) { + const { BANK, BRANCH } = await res.json(); + data.BANKFROMMiddleWare = BANK; + } else alert("Wrong IFSC Code"); + } catch (er) { + console.log(er); + alert("Something Went Wrong !"); + } + } + return await _next(data); +}; + +const asyncData = { + a: ["1", "2", "3"], + b: ["4", "5", "6"], + c: ["7", "8", "9"], + j: ["10", "11", "12"], + k: ["22", "45"], + l: ["456"], +}; + +export const testForm = { + addedFields: [], + middlewares: [{ middleWare_1 }, { middleWare_2 }, { middleWare_3 }], + + state: { firstDDoptions: ["a", "b", "c"], secondDDoptions: asyncData.a, thirdDDoptions: ["d", "e", "f"] }, + + fields: [ + { + label: "first", + name: "pehla", + defaultValue: "b", + customProps: (state) => ({ isMendatory: true, option: state.firstDDoptions }), + component: (props, customProps) => ( + { + props.setState({ secondDDoptions: asyncData[d] }); + props.setValue("doosra", ""); + props.onChange(d); + }} + selected={props.value} + {...customProps} + /> + ), + validations: {}, + }, + { + label: "second", + name: "doosra", + customProps: (state) => ({ isMendatory: true, option: state.secondDDoptions }), + defaultValue: (state) => state.secondDDoptions[1], + component: (props, customProps) => ( + { + props.onChange(d); + }} + selected={props.value} + {...customProps} + /> + ), + }, + { + label: "third", + name: "teesra", + customProps: (state) => ({ isMendatory: true, option: state.thirdDDoptions }), + defaultValue: "d", + component: (props, customProps) => ( + { + props.onChange(d); + }} + selected={props.value} + {...customProps} + /> + ), + }, + { + label: "IFSC", + name: "ifsc", + customProps: { + isMendatory: true, + setBankDetailsFromIFSC: async (props) => { + try { + const res = await window.fetch(`https://ifsc.razorpay.com/${props.getValues("ifsc")}`); + console.log(res.ok); + if (res.ok) { + const { BANK, BRANCH } = await res.json(); + props.setValue("bank", BANK); + props.setValue("branch", BRANCH); + } else alert("Wrong IFSC Code"); + } catch (er) { + console.log(er); + alert("Something Went Wrong !"); + } + }, + }, + defaultValue: "", + component: (props, customProps) => ( +
+ { + props.setState({ ifsc: e.target.value }); + props.onChange(e.target.value); + }} + /> + +
+ ), + }, + { + label: "Bank", + name: "bank", + defaultValue: "d", + component: (props, customProps) => , + }, + { + label: "Branch", + name: "branch", + defaultValue: "d", + component: (props, customProps) => , + }, + ], +}; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/index.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/index.js new file mode 100644 index 00000000000..20c4eceba3d --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/index.js @@ -0,0 +1,58 @@ +import { Loader } from "@egovernments/digit-ui-react-components"; +import React, { useEffect } from "react"; +import { useParams, useHistory, useRouteMatch, useLocation } from "react-router-dom"; +import Routes from "./routes"; +// import { myBillMap } from "./myBillsKeysMap"; + +export const MyBills = ({ stateCode }) => { + const { businessService } = useParams(); + const { tenantId: _tenantId } = Digit.Hooks.useQueryParams(); + + const { isLoading: storeLoading, data: store } = Digit.Services.useStore({ + stateCode, + moduleCode: businessService, + language: Digit.StoreData.getCurrentLanguage(), + }); + + const history = useHistory(); + const { url } = useRouteMatch(); + const location = useLocation(); + + const { tenantId } = Digit.UserService.getUser()?.info || location?.state || { tenantId: _tenantId } || {}; + + if (!tenantId && !location?.state?.fromSearchResults) { + history.replace(`/digit-ui/citizen/login`, { from: url }); + } + + const { isLoading, data } = Digit.Hooks.useFetchCitizenBillsForBuissnessService( + { businessService }, + { refetchOnMount: true, enabled: !location?.state?.fromSearchResults } + ); + const { isLoading: mdmsLoading, data: mdmsBillingData } = Digit.Hooks.useGetPaymentRulesForBusinessServices(tenantId); + + const billsList = data?.Bill || []; + + const getPaymentRestrictionDetails = () => { + const payRestrictiondetails = mdmsBillingData?.MdmsRes?.BillingService?.BusinessService; + if (payRestrictiondetails?.length) return payRestrictiondetails.filter((e) => e.code == businessService)[0]; + else + return { + // isAdvanceAllowed: false, + // isVoucherCreationEnabled: true, + // minAmountPayable: 100, + // partPaymentAllowed: true, + }; + }; + + const getProps = () => ({ billsList, paymentRules: getPaymentRestrictionDetails(), businessService }); + + if (mdmsLoading) { + return ; + } + + return ( + + + + ); +}; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/bill-details/arrear-summary.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/bill-details/arrear-summary.js new file mode 100644 index 00000000000..f145c884344 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/bill-details/arrear-summary.js @@ -0,0 +1,96 @@ +import React, { useState } from "react"; +import { useTranslation } from "react-i18next"; +import ArrearTable from "./arrear-table"; + + +const styles = { + buttonStyle: { display: "flex", justifyContent: 'flex-end', color: '#f47738' }, + headerStyle: { + marginTop: '10px', + fontSize: '16px', + fontWeight: '700', + lineHeight: '24px', + color: ' rgba(11, 12, 12, var(--text-opacity))' + } +} + +const ArrearSummary = ({ bill = {} }) => { + const { t } = useTranslation(); + const formatTaxHeaders = (billDetail = {}) => { + let formattedFees = {}; + const { billAccountDetails = [] } = billDetail; + billAccountDetails.map((taxHead) => { + formattedFees[taxHead.taxHeadCode] = { value: taxHead.amount, order: taxHead.order }; + }) + formattedFees['TL_COMMON_TOTAL_AMT'] = { value: billDetail.amount, order: 10 } + return formattedFees; + } + + const getFinancialYears = (from, to) => { + const fromDate = new Date(from); + const toDate = new Date(to); + if (toDate.getYear() - fromDate.getYear() != 0) { + return `FY${fromDate.getYear() + 1900}-${toDate.getYear() - 100}`; + } + return `${fromDate.toLocaleDateString()}-${toDate.toLocaleDateString()}`; + } + + let fees = {}; + let sortedBillDetails = bill?.billDetails + ?.sort((a, b) => b.fromPeriod - a.fromPeriod) || []; + sortedBillDetails = [...sortedBillDetails] + const arrears = + sortedBillDetails + ?.reduce((total, current, index) => (index === 0 ? total : total + current.amount), 0) || 0; + let arrearsAmount = `₹ ${arrears?.toFixed?.(0) || Number(0).toFixed(0)}`; + + sortedBillDetails.shift(); + sortedBillDetails.map(bill => { + let fee = formatTaxHeaders(bill); + fees[getFinancialYears(bill.fromPeriod, bill.toPeriod)] = fee; + }) + + + let head = {}; + fees ? Object.keys(fees).map((key, ind) => { + let value = []; + Object.keys(fees[key]).map(key1 => { + head[key1] = fees[key] && fees[key][key1] && fees[key][key1].order || 0; + }) + } + ) : "NA" + let keys = []; + + keys = Object.keys(head); + keys.sort((x, y) => head[x] - head[y]); + + const [showArrear, setShowArrear] = useState(false); + + + + if (arrears == 0 || arrears < 0) { + return () + } + return ( + +
+ {t('CS_ARREARS_DETAILS')} +
+ {showArrear && } + + + {!showArrear &&
+
} + + {showArrear &&
+
} + +
+ ); +}; + +export default ArrearSummary; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/bill-details/arrear-table.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/bill-details/arrear-table.js new file mode 100644 index 00000000000..68d4b7306ed --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/bill-details/arrear-table.js @@ -0,0 +1,102 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; + +const styles = { + root: { + width: "100%", + marginTop: "2px", + overflowX: "auto", + boxShadow: "none", + }, + table: { + minWidth: 700, + backgroundColor: "rgba(250, 250, 250, var(--bg-opacity))", + }, + cell: { + maxWidth: "4em", + minWidth: "1em", + border: "1px solid #e8e7e6", + padding: "4px 5px", + fontSize: "0.8em", + textAlign: "left", + lineHeight: "1.5em", + }, + cellHeader: { + overflow: "hidden", + textOverflow: "ellipsis", + }, + cellLeft: { + // position: 'sticky', + // backgroundColor:'rgba(250, 250, 250, var(--bg-opacity))', + // left: 0 + }, + cellRight: { + // position: 'sticky', + // backgroundColor:'rgba(250, 250, 250, var(--bg-opacity))', + // right: 0 + }, +}; + +const ArrearTable = ({ className = "table", headers = [], values = [], arrears = 0 }) => { + const { t } = useTranslation(); + return ( + +
+ + + + + {headers.map((header, ind) => { + let styleRight = headers.length == ind + 1 ? styles.cellRight : {}; + return ( + + ); + })} + + + + {Object.values(values).map((row, ind) => ( + + + {headers.map((header, i) => { + let styleRight = headers.length == i + 1 ? styles.cellRight : {}; + return ( + + ); + })} + + ))} + + + {headers.map((header, ind) => { + if (ind == headers.length - 1) { + return ( + + ); + } else if (ind == headers.length - 2) { + return ( + + ); + } else { + return ; + } + })} + + +
{t("CS_BILL_PERIOD")} + {t(header)} +
+ {Object.keys(values)[ind]} + + ₹{(row[header] && row[header]["value"]) || "0"} +
+ {arrears} + + {t("COMMON_ARREARS_TOTAL")} +
+
+
+ ); +}; + +export default ArrearTable; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/bill-details/bill-details.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/bill-details/bill-details.js new file mode 100644 index 00000000000..a35f0cc8c38 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/bill-details/bill-details.js @@ -0,0 +1,160 @@ +import { Card, CardSubHeader, Header, KeyNote, Loader, RadioButtons, SubmitBar, TextInput } from "@egovernments/digit-ui-react-components"; +import React, { useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { useHistory, useLocation, useParams } from "react-router-dom"; +import ArrearSummary from "./arrear-summary"; +import BillSumary from "./bill-summary"; + +const BillDetails = ({ paymentRules, businessService }) => { + const { t } = useTranslation(); + const history = useHistory(); + const { state, ...location } = useLocation(); + const { consumerCode } = useParams(); + const { workflow: wrkflow, tenantId: _tenantId } = Digit.Hooks.useQueryParams(); + const [bill, setBill] = useState(state?.bill); + const tenantId = state?.tenantId || _tenantId || Digit.UserService.getUser().info?.tenantId; + const { data, isLoading } = state?.bill ? { isLoading: false } : Digit.Hooks.useFetchPayment({ tenantId, businessService, consumerCode }); + const { minAmountPayable, isAdvanceAllowed } = paymentRules; + + const billDetails = bill?.billDetails?.sort((a, b) => b.fromPeriod - a.fromPeriod)?.[0] || []; + const Arrears = + bill?.billDetails + ?.sort((a, b) => b.fromPeriod - a.fromPeriod) + ?.reduce((total, current, index) => (index === 0 ? total : total + current.amount), 0) || 0; + + const { key, label } = Digit.Hooks.useApplicationsForBusinessServiceSearch({ businessService }, { enabled: false }); + + const getBillingPeriod = () => { + const { fromPeriod, toPeriod } = billDetails; + if (fromPeriod && toPeriod) { + let from, to; + if (wrkflow === "mcollect") { + from = + new Date(fromPeriod).getDate().toString() + + " " + + Digit.Utils.date.monthNames[new Date(fromPeriod).getMonth() + 1].toString() + + " " + + new Date(fromPeriod).getFullYear().toString(); + to = + new Date(toPeriod).getDate() + + " " + + Digit.Utils.date.monthNames[new Date(toPeriod).getMonth() + 1] + + " " + + new Date(toPeriod).getFullYear(); + return from + " - " + to; + } + from = new Date(billDetails.fromPeriod).getFullYear().toString(); + to = new Date(billDetails.toPeriod).getFullYear().toString(); + return "FY " + from + "-" + to; + } else return "N/A"; + }; + + const getBillBreakDown = () => billDetails?.billAccountDetails || []; + + const getTotal = () => bill?.totalAmount || 0; + + const [paymentType, setPaymentType] = useState(t("CS_PAYMENT_FULL_AMOUNT")); + const [amount, setAmount] = useState(getTotal()); + const [paymentAllowed, setPaymentAllowed] = useState(true); + const [formError, setError] = useState(""); + + useEffect(() => { + window.scroll({ top: 0, behavior: "smooth" }); + }, []); + + useEffect(() => { + if (paymentType == t("CS_PAYMENT_FULL_AMOUNT")) setAmount(getTotal()); + }, [paymentType, bill]); + + useEffect(() => { + const allowPayment = minAmountPayable && amount >= minAmountPayable && !isAdvanceAllowed && amount <= getTotal() && !formError; + if (paymentType != t("CS_PAYMENT_FULL_AMOUNT")) setPaymentAllowed(allowPayment); + else setPaymentAllowed(true); + }, [paymentType, amount]); + + useEffect(() => { + if (!bill && data) { + let requiredBill = data.Bill.filter((e) => e.consumerCode == consumerCode)[0]; + setBill(requiredBill); + } + }, [isLoading]); + + const onSubmit = () => { + let paymentAmount = paymentType === t("CS_PAYMENT_FULL_AMOUNT") ? getTotal() : amount; + if (window.location.href.includes("mcollect")) { + history.push(`/digit-ui/citizen/payment/collect/${businessService}/${consumerCode}?workflow=mcollect`, { + paymentAmount, + tenantId: billDetails.tenantId, + }); + } else if (businessService === "PT") { + history.push(`/digit-ui/citizen/payment/collect/${businessService}/${consumerCode}`, { + paymentAmount, + tenantId: billDetails.tenantId, + name: bill.payerName, + mobileNumber: bill.mobileNumber, + }); + } else { + history.push(`/digit-ui/citizen/payment/collect/${businessService}/${consumerCode}`, { paymentAmount, tenantId: billDetails.tenantId }); + } + }; + + const onChangeAmount = (value) => { + setError(""); + if (isNaN(value) || value.includes(".")) { + setError("AMOUNT_INVALID"); + } else if (!isAdvanceAllowed && value > getTotal()) { + setError("CS_ADVANCED_PAYMENT_NOT_ALLOWED"); + } else if (value < minAmountPayable) { + setError("CS_CANT_PAY_BELOW_MIN_AMOUNT"); + } + setAmount(value); + }; + + if (isLoading) return ; + + return ( + +
{t("CS_PAYMENT_BILL_DETAILS")}
+ +
+ + + + +
+
+
+ {t("CS_COMMON_PAYMENT_AMOUNT")} + +
+ + ₹ + + {paymentType !== t("CS_PAYMENT_FULL_AMOUNT") ? ( + onChangeAmount(e.target.value)} value={amount} disable={getTotal() === 0} /> + ) : ( + {}} disable={true} /> + )} + {formError === "CS_CANT_PAY_BELOW_MIN_AMOUNT" ? ( + + {t(formError)}: {"₹" + minAmountPayable} + + ) : ( + {t(formError)} + )} +
+ +
+
+
+ ); +}; + +export default BillDetails; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/bill-details/bill-summary.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/bill-details/bill-summary.js new file mode 100644 index 00000000000..64f270f2356 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/bill-details/bill-summary.js @@ -0,0 +1,47 @@ +import React, { useEffect } from "react"; +import { useTranslation } from "react-i18next"; + +const BillSumary = ({ billAccountDetails, total, businessService, arrears }) => { + const { t } = useTranslation(); + const { workflow: ModuleWorkflow } = Digit.Hooks.useQueryParams(); + + useEffect(() => { + ModuleWorkflow === "mcollect" && billAccountDetails && billAccountDetails.map((ob) => { + if(ob.taxHeadCode.includes("CGST")) + ob.order = 3; + else if(ob.taxHeadCode.includes("SGST")) + ob.order = 4; + }) + },[billAccountDetails]) + return ( + +
+ {billAccountDetails + .sort((a, b) => a.order - b.order) + .map((amountDetails, index) => { + return ( +
+
{t(amountDetails.taxHeadCode)}
+
₹ {amountDetails.amount?.toFixed(2)}
+
+ ); + })} + + { +
+
{t("COMMON_ARREARS")}
+
₹ {arrears?.toFixed?.(2) || Number(0).toFixed(2)}
+
+ } + +
+
+
{t("CS_PAYMENT_TOTAL_AMOUNT")}
+
₹ {Number(total)}
+
+
+
+ ); +}; + +export default BillSumary; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/bill-details/yearwise-bills.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/bill-details/yearwise-bills.js new file mode 100644 index 00000000000..ea8aa25a58b --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/bill-details/yearwise-bills.js @@ -0,0 +1,73 @@ +import React, { useState } from "react"; +import { useTranslation } from "react-i18next"; + +const YearWiseBilltable = ({ bill, ...props }) => { + const { t } = useTranslation(); + const [showDetails, setShowDetails] = useState(true); + const yearWiseBills = bill?.billDetails?.sort((a, b) => b.fromPeriod - a.fromPeriod); + + const getFinancialYear = (_bill) => { + const { fromPeriod, toPeriod } = _bill; + let from = new Date(fromPeriod).getFullYear().toString(); + let to = new Date(toPeriod).getFullYear().toString(); + return from + "-" + to.slice(-2); + }; + + const thStyle = { whiteSpace: "break-spaces", paddingBottom: "13px" }; + + return ( + + {showDetails ? ( +
+
+
+ + { + + + + {yearWiseBills?.[0]?.billAccountDetails + ?.sort((a, b) => a.order - b.order) + ?.map((head, index) => ( + + ))} + + + + } + + {yearWiseBills?.map((bill, ind) => { + const sorted_tax_heads = bill?.billAccountDetails?.sort((a, b) => a.order - b.order); + return ( + + + {sorted_tax_heads.map((e, i) => ( + + ))} + + + ); + })} + +
+ {t("ES_FINANCIAL_YEAR")} + + {t(head.taxHeadCode)} + + {t("ES_TOTAL_TAX").split(" ")[0] + "\n" + t("ES_TOTAL_TAX").split(" ")[1]} +
{getFinancialYear(bill)}{e.amount}{bill.amount}
+
+
+
setShowDetails(false)} className="filter-button"> + {t("ES_COMMON_HIDE_DETAILS")} +
+
+ ) : ( +
setShowDetails(true)} className="filter-button"> + {t("ES_COMMON_VIEW_DETAILS")} +
+ )} +
+ ); +}; +export default YearWiseBilltable; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/index.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/index.js new file mode 100644 index 00000000000..4b5db3e6e8f --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/index.js @@ -0,0 +1,22 @@ +import React from "react"; +import { Route, Switch, useRouteMatch } from "react-router-dom"; + +import { BillList } from "./my-bills/my-bills"; +import BillDetails from "./bill-details/bill-details"; +import { BackButton } from "@egovernments/digit-ui-react-components"; + +const BillRoutes = ({ billsList, paymentRules, businessService }) => { + const { url: currentPath, ...match } = useRouteMatch(); + + return ( + + + + } /> + } /> + + + ); +}; + +export default BillRoutes; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/my-bills/my-bill.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/my-bills/my-bill.js new file mode 100644 index 00000000000..27ad7836c73 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/my-bills/my-bill.js @@ -0,0 +1,35 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; +import { Card, KeyNote, SubmitBar } from "@egovernments/digit-ui-react-components"; +import { Link, useHistory } from "react-router-dom"; + +// import { getKeyNotesConfig } from "./keynotesConfig"; + +const MyBill = ({ bill, currentPath, businessService, getKeyNotesConfig }) => { + const { t } = useTranslation(); + const history = useHistory(); + + const onSubmit = () => { + history.push(`${currentPath}/${bill.consumerCode}`, { bill }); + }; + + return ( + + {typeof getKeyNotesConfig === "function" && ( + + {getKeyNotesConfig(businessService, t)["my-bill"].map((obj, index) => { + const value = obj.keyPath.reduce((acc, key) => { + if (typeof key === "function") acc = key(acc); + else acc = acc[key]; + return acc; + }, bill); + return ; + })} + + + )} + + ); +}; + +export default MyBill; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/my-bills/my-bills.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/my-bills/my-bills.js new file mode 100644 index 00000000000..8d2ba882430 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/bills/routes/my-bills/my-bills.js @@ -0,0 +1,97 @@ +import React, { useState, useEffect, useMemo } from "react"; +import { ArrowLeft, Header, Loader } from "@egovernments/digit-ui-react-components"; +import { useTranslation } from "react-i18next"; +import { Link, useHistory } from "react-router-dom"; + +import MyBill from "./my-bill"; + +export const BillList = ({ billsList, currentPath, businessService }) => { + const { t } = useTranslation(); + const history = useHistory(); + + const consumerCodes = billsList.map((bill) => bill.consumerCode); + // const { mobileNumber } = Digit.UserService.getUser()?.info; + + const searchResult = Digit.Hooks.useApplicationsForBusinessServiceSearch({ filters: { consumerCodes: consumerCodes.join() }, businessService }); + + /* + call the relevant business search and find what key is being used as consumerCode in bills it is as follows :- + + FSM -> applicationNo + PT -> propertyId + + */ + + const keyForConsumerCode = searchResult.key; + + const [applicationList, setApplicationList] = useState([]); + const [getKeyNotesConfig, setConfig] = useState(() => Digit.ComponentRegistryService?.getComponent("getBillDetailsConfigWithBusinessService")); + const billableApplicationsObj = useMemo(() => ({}), []); + const billsListObj = useMemo(() => ({}), []); + + useEffect(() => { + if (searchResult.data) searchResult.refetch(); + }, []); + + useEffect(() => { + if (searchResult.data) { + const billableApps = searchResult.data.filter((property) => consumerCodes.includes(property[keyForConsumerCode])); + const billableIDs = billableApps.map((e) => e[keyForConsumerCode]); + + billableApps.forEach((app) => { + billableApplicationsObj[app[keyForConsumerCode]] = app; + }); + + //console.log("from PT", billableProps); + + billsList.forEach((bill) => { + billsListObj[bill.consumerCode] = bill; + }); + //console.log("from PT", billsListObj); + + const newBillsList = billableIDs.map((e) => ({ ...billsListObj[e], ...billableApplicationsObj[e] })); + //console.log(newBillsList); + setApplicationList(newBillsList); + } + }, [searchResult.data, getKeyNotesConfig]); + + if (searchResult.isLoading) { + return ; + } + + return ( + +
+
+
{t("CS_TITLE_MY_BILLS") + ` (${applicationList.length})`}
+ {applicationList?.length > 0 && + getKeyNotesConfig && + applicationList.map((bill, index) => ( +
+ +
+ ))} + {!applicationList?.length > 0 &&

{t("CS_BILLS_TEXT_NO_BILLS_FOUND")}

} +
+ {businessService === "PT" && ( +

+ {t("PT_TEXT_NOT_ABLE_TO_FIND_THE_PROPERTY")} + + {t("PT_COMMON_CLICK_HERE")} + +

+ )} +
+
+ ); +}; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/index.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/index.js new file mode 100644 index 00000000000..37cc341a5fa --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/index.js @@ -0,0 +1,33 @@ +import React from "react"; +import { Switch, Route, useRouteMatch } from "react-router-dom"; +import { PrivateRoute } from "@egovernments/digit-ui-react-components"; + +import { MyBills } from "./bills"; +import { SelectPaymentType } from "./payment-type/index"; +import { SuccessfulPayment, FailedPayment } from "./response"; + +const CitizenPayment = ({ stateCode, cityCode, moduleCode }) => { + const { path: currentPath } = useRouteMatch(); + const commonProps = { stateCode, cityCode, moduleCode }; + + return ( + + + + + + + + + + + + + + + + + ); +}; + +export default CitizenPayment; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/keynotesConfig.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/keynotesConfig.js new file mode 100644 index 00000000000..4a66bfa3e31 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/keynotesConfig.js @@ -0,0 +1,105 @@ +import React from "react"; + +export const getKeyNotesConfig = (businessService, t) => { + const businessId = businessService?.toLowerCase().split(".")[0]; + + switch (businessId) { + case "pt": + return { + "my-bill": [ + { + keyValue: "CS_COMMON_AMOUNT_DUE", + keyPath: [ + (d) => { + const overdueBy = new Date().getTime() - new Date(d.billDetails[0]?.toPeriod).getTime(); + const days = Math.floor(overdueBy / (86400 * 1000)); + return ( + + {"₹" + d["totalAmount"]} + {days >= 0 ? ( + {` ( ${t( + "CS_PAYMENT_OVERDUE" + )} ${days} ${t(days === 1 ? "CS_COMMON_DAY" : "CS_COMMON_DAYS")})`} + ) : null} + + ); + }, + ], + fallback: "N/A", + noteStyle: { fontWeight: "bold", fontSize: "24px", paddingTop: "5px" }, + }, + { + keyValue: "PT_PROPERTY_ID", + keyPath: ["propertyId"], + fallback: "", + }, + { + keyValue: "CS_OWNER_NAME", + keyPath: ["owners", 0, "name"], + fallback: "ES_TITLE_FSM", + }, + { + keyValue: "PT_PROPERTY_ADDRESS", + keyPath: ["address", "locality", "name"], + fallback: "CS_APPLICATION_TYPE_DESLUDGING", + }, + { + keyValue: "CS_PAYMENT_BILLING_PERIOD", + keyPath: [ + "billDetails", + (d) => { + console.log(d, "in bill details"); + const { fromPeriod, toPeriod } = d[0]; + if (fromPeriod && toPeriod) { + let from = new Date(fromPeriod).getFullYear().toString(); + let to = new Date(toPeriod).getFullYear().toString(); + return "FY " + from + "-" + to; + } else return "N/A"; + }, + ], + fallback: "N/A", + }, + { + keyValue: "PT_DUE_DATE", + keyPath: [ + "billDetails", + (d) => { + if (!d[0]?.toPeriod) return "N/A"; + const date = new Date(d[0]?.toPeriod); + const month = Digit.Utils.date.monthNames[date.getMonth()]; + return `${date.getDate()} ${month} ${date.getFullYear()}`; + }, + ], + fallback: "N/A", + }, + ], + response: [], + }; + + /** + + */ + + case "fsm": + return { + "my-bill": [ + { + keyValue: "CS_COMMON_AMOUNT_DUE", + keyPath: ["totalAmount", (d) => d.toFixed(2), (d) => "₹" + d], + fallback: "N/A", + noteStyle: { fontWeight: "bold", fontSize: "24px", paddingTop: "5px" }, + }, + ], + response: [], + }; + } +}; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/payment-type/index.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/payment-type/index.js new file mode 100644 index 00000000000..d4e417e5cdb --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/payment-type/index.js @@ -0,0 +1,125 @@ +import React, { useState } from "react"; +import { + Header, + Card, + RadioButtons, + SubmitBar, + BackButton, + CardLabel, + CardLabelDesc, + CardSectionHeader, + InfoBanner, + Loader, +} from "@egovernments/digit-ui-react-components"; +import { useTranslation } from "react-i18next"; +import { useForm, Controller } from "react-hook-form"; +import { useParams, useHistory, useLocation, Redirect } from "react-router-dom"; + +export const SelectPaymentType = (props) => { + const { state = {} } = useLocation(); + const userInfo = Digit.UserService.getUser(); + + const { tenantId: __tenantId, authorization } = Digit.Hooks.useQueryParams(); + const paymentAmount = state?.paymentAmount; + const { t } = useTranslation(); + const history = useHistory(); + + const { pathname, search } = useLocation(); + // const menu = ["AXIS"]; + const { consumerCode, businessService } = useParams(); + const tenantId = state?.tenantId || __tenantId || Digit.ULBService.getCurrentTenantId(); + const stateTenant = tenantId.split(".")[0]; + const { control, handleSubmit } = useForm(); + const { data: menu, isLoading } = Digit.Hooks.useCommonMDMS(stateTenant, "DIGIT-UI", "PaymentGateway"); + const { data: paymentdetails, isLoading: paymentLoading } = Digit.Hooks.useFetchPayment({ tenantId: tenantId, consumerCode, businessService }, {}); + + const { name, mobileNumber } = state; + + const billDetails = paymentdetails?.Bill ? paymentdetails?.Bill[0] : {}; + + const onSubmit = async (d) => { + // console.log("find submitted data", d); + const filterData = { + Transaction: { + tenantId: tenantId, + txnAmount: paymentAmount || billDetails.totalAmount, + module: businessService, + billId: billDetails.id, + consumerCode: consumerCode, + productInfo: "Common Payment", + gateway: d.paymentType, + taxAndPayments: [ + { + billId: billDetails.id, + amountPaid: paymentAmount || billDetails.totalAmount, + }, + ], + user: { + name: userInfo?.info?.name || name, + mobileNumber: userInfo?.info?.mobileNumber || mobileNumber, + tenantId: tenantId, + }, + // success + callbackUrl: window.location.href.includes("mcollect") + ? `${window.location.protocol}//${window.location.host}/digit-ui/citizen/payment/success/${businessService}/${consumerCode}/${tenantId}?workflow=mcollect` + : `${window.location.protocol}//${window.location.host}/digit-ui/citizen/payment/success/${businessService}/${consumerCode}/${tenantId}`, + additionalDetails: { + isWhatsapp: false, + }, + }, + }; + + try { + const data = await Digit.PaymentService.createCitizenReciept(tenantId, filterData); + const redirectUrl = data?.Transaction?.redirectUrl; + window.location = redirectUrl; + } catch (error) { + let messageToShow = "CS_PAYMENT_UNKNOWN_ERROR_ON_SERVER"; + console.dir(error); + console.log(error.response); + if (error.response?.data?.Errors?.[0]) { + const { code, message } = error.response?.data?.Errors?.[0]; + messageToShow = t(message); + } + window.alert(messageToShow); + + // TODO: add error toast for error.response.data.Errors[0].message + } + }; + + if (authorization === "true" && !userInfo.access_token) { + // console.log("find query params", __tenantId, authorization, authorization === "true",!userInfo.access_token, authorization === "true" && !userInfo.access_token) + // console.log("find encoded url",encodeURI(pathname)) + return ; + } + + if (isLoading || paymentLoading) { + return ; + } + + return ( + + {t("CS_COMMON_BACK")} +
+
{t("PAYMENT_CS_HEADER")}
+ +
+ {t("PAYMENT_CS_TOTAL_AMOUNT_DUE")} + ₹ {paymentAmount || billDetails.totalAmount} +
+ {t("PAYMENT_CS_SELECT_METHOD")} + {menu?.length && ( + } + /> + )} + +
+
+ +
+ ); +}; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/response/index.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/response/index.js new file mode 100644 index 00000000000..12e1b039787 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/citizen/response/index.js @@ -0,0 +1,286 @@ +import { Banner, Card, CardText, Loader, Row, StatusTable, SubmitBar } from "@egovernments/digit-ui-react-components"; +import React, { useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { useQueryClient } from "react-query"; +import { Link, useParams } from "react-router-dom"; + +export const SuccessfulPayment = (props) => { + const { t } = useTranslation(); + const queryClient = useQueryClient(); + const { eg_pg_txnid: egId, workflow: workflw } = Digit.Hooks.useQueryParams(); + const [printing, setPrinting] = useState(false); + const [allowFetchBill, setallowFetchBill] = useState(false); + const { businessService: business_service, consumerCode, tenantId } = useParams(); + + const { isLoading, data, isError } = Digit.Hooks.usePaymentUpdate({ egId }, business_service, { + retry: false, + staleTime: Infinity, + refetchOnWindowFocus: false, + }); + + const { label } = Digit.Hooks.useApplicationsForBusinessServiceSearch({ businessService: business_service }, { enabled: false }); + + // const { data: demand } = Digit.Hooks.useDemandSearch( + // { consumerCode, businessService: business_service }, + // { enabled: !isLoading, retry: false, staleTime: Infinity, refetchOnWindowFocus: false } + // ); + + // const { data: billData, isLoading: isBillDataLoading } = Digit.Hooks.useFetchPayment( + // { tenantId, consumerCode, businessService: business_service }, + // { enabled: allowFetchBill, retry: false, staleTime: Infinity, refetchOnWindowFocus: false } + // ); + + const { data: reciept_data, isLoading: recieptDataLoading } = Digit.Hooks.useRecieptSearch( + { + tenantId, + businessService: business_service, + receiptNumbers: data?.payments?.Payments?.[0]?.paymentDetails[0].receiptNumber, + }, + { + retry: false, + staleTime: Infinity, + refetchOnWindowFocus: false, + select: (dat) => { + return dat.Payments[0]; + }, + enabled: allowFetchBill, + } + ); + + const { data: generatePdfKey } = Digit.Hooks.useCommonMDMS(tenantId, "common-masters", "ReceiptKey", { + select: (data) => + data["common-masters"]?.uiCommonPay?.filter(({ code }) => business_service?.includes(code))[0]?.receiptKey || "consolidatedreceipt", + retry: false, + staleTime: Infinity, + refetchOnWindowFocus: false, + }); + + const payments = data?.payments; + + useEffect(() => { + return () => { + queryClient.clear(); + }; + }, []); + + useEffect(() => { + if (data && data.txnStatus && data.txnStatus !== "FAILURE") { + setallowFetchBill(true); + } + }, [data]); + + if (isLoading || recieptDataLoading) { + return ; + } + + const applicationNo = data?.applicationNo; + + const isMobile = window.Digit.Utils.browser.isMobile(); + + if (isError || !payments || !payments.Payments || payments.Payments.length === 0 || data.txnStatus === "FAILURE") { + return ( + + + {t("CS_PAYMENT_FAILURE_MESSAGE")} + {business_service !== "PT" ? ( + + + + ) : ( + + + + +
+ {t("CORE_COMMON_GO_TO_HOME")} +
+
+ )} +
+ ); + } + + const paymentData = data?.payments?.Payments[0]; + const amount = reciept_data?.paymentDetails?.[0]?.totalAmountPaid; + const transactionDate = paymentData.transactionDate; + const printCertificate = async () => { + //const tenantId = Digit.ULBService.getCurrentTenantId(); + const state = tenantId; + const applicationDetails = await Digit.TLService.search({ applicationNumber: consumerCode, tenantId }); + const generatePdfKeyForTL = "tlcertificate" + + if (applicationDetails) { + let response = await Digit.PaymentService.generatePdf(state, { Licenses: applicationDetails?.Licenses }, generatePdfKeyForTL); + const fileStore = await Digit.PaymentService.printReciept(state, { fileStoreIds: response.filestoreIds[0] }); + window.open(fileStore[response.filestoreIds[0]], "_blank"); + } + } + + const printReciept = async () => { + if (printing) return; + setPrinting(true); + const tenantId = paymentData?.tenantId; + const state = tenantId?.split(".")[0]; + let response = { filestoreIds: [payments.Payments[0]?.fileStoreId] }; + if (!paymentData?.fileStoreId) { + response = await Digit.PaymentService.generatePdf(state, { Payments: [payments.Payments[0]] }, generatePdfKey); + } + const fileStore = await Digit.PaymentService.printReciept(state, { fileStoreIds: response.filestoreIds[0] }); + if (fileStore && fileStore[response.filestoreIds[0]]) { + window.open(fileStore[response.filestoreIds[0]], "_blank"); + } + setPrinting(false); + }; + + const getBillingPeriod = (billDetails) => { + const { taxPeriodFrom, taxPeriodTo, fromPeriod, toPeriod } = billDetails || {}; + if (taxPeriodFrom && taxPeriodTo) { + let from = new Date(taxPeriodFrom).getFullYear().toString(); + let to = new Date(taxPeriodTo).getFullYear().toString(); + return "FY " + from + "-" + to; + } else if (fromPeriod && toPeriod) { + if (workflw === "mcollect") { + from = + new Date(fromPeriod).getDate().toString() + + " " + + Digit.Utils.date.monthNames[new Date(fromPeriod).getMonth() + 1].toString() + + " " + + new Date(fromPeriod).getFullYear().toString(); + to = + new Date(toPeriod).getDate() + + " " + + Digit.Utils.date.monthNames[new Date(toPeriod).getMonth() + 1] + + " " + + new Date(toPeriod).getFullYear(); + return from + " - " + to; + } + let from = new Date(fromPeriod).getFullYear().toString(); + let to = new Date(toPeriod).getFullYear().toString(); + return "FY " + from + "-" + to; + + } else return "N/A"; + }; + + let bannerText; + if (workflw) { + bannerText = `CITIZEN_SUCCESS_UC_PAYMENT_MESSAGE`; + } else { + bannerText = `CITIZEN_SUCCESS_${paymentData?.paymentDetails[0].businessService.replace(/\./g, "_")}_PAYMENT_MESSAGE`; + } + + // https://dev.digit.org/collection-services/payments/FSM.TRIP_CHARGES/_search?tenantId=pb.amritsar&consumerCodes=107-FSM-2021-02-18-063433 + + // if (billDataLoading) return ; + + const rowContainerStyle = { + padding: "4px 0px", + justifyContent: "space-between", + }; + + const ommitRupeeSymbol = ["PT"].includes(business_service); + + return ( + + + + + } + message={t("CS_COMMON_PAYMENT_COMPLETE")} + info={t("CS_COMMON_RECIEPT_NO")} + applicationNumber={paymentData?.paymentDetails[0].receiptNumber} + successful={true} + /> + {t(`${bannerText}_DETAIL`)} + + + {/** TODO : move this key and value into the hook based on business Service */} + {(business_service === "PT" || workflw) && ( + + )} + + {(business_service === "PT" || workflw) && ( + + )} + + + + {(business_service !== "PT" || workflw) && ( + + )} + +
+ {business_service == "TL" ? ( +
+ + + + + {t("TL_RECEIPT")} +
+ ) : null} + {business_service == "TL" ? ( +
+ + + + + {t("TL_CERTIFICATE")} +
+ ) : null} +
+ {!(business_service == "TL") && } + {!(business_service == "TL") &&
+ {t("CORE_COMMON_GO_TO_HOME")} +
} + {business_service == "TL" && + + + + } +
+ ); +}; + +export const FailedPayment = (props) => { + const { addParams, clearParams } = props; + const { t } = useTranslation(); + const { consumerCode } = useParams(); + + const getMessage = () => "Failure !"; + return ( + + + {t("ES_COMMON_TRACK_COMPLAINT_TEXT")} + + ); +}; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/index.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/index.js new file mode 100644 index 00000000000..2ca66848b4f --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/index.js @@ -0,0 +1,44 @@ +import React, { useEffect, useState } from "react"; +// import { useTranslation } from "react-i18next"; +import { useRouteMatch, Switch, Route, Link } from "react-router-dom"; +import { CollectPayment } from "./payment-collect"; +import { SuccessfulPayment, FailedPayment } from "./response"; +// import { SubformComposer } from "../../hoc"; +// import { subFormRegistry } from "../../hoc/subFormClass"; +import { testForm } from "../../hoc/testForm-config"; +import { subFormRegistry } from "@egovernments/digit-ui-libraries"; +import { useTranslation } from "react-i18next"; + +subFormRegistry.addSubForm("testForm", testForm); + +const EmployeePayment = ({ stateCode, cityCode, moduleCode }) => { + const userType = "employee"; + const { path: currentPath } = useRouteMatch(); + + const { t } = useTranslation(); + + const [link, setLink] = useState(null); + + const commonProps = { stateCode, cityCode, moduleCode, setLink }; + + return ( + +

+ {t("ES_COMMON_HOME")}/{link} +

+ + + + + + + + + + + +
+ ); +}; + +export default EmployeePayment; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/payment-collect/Bill-details/billDetails.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/payment-collect/Bill-details/billDetails.js new file mode 100644 index 00000000000..f81d6d7511c --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/payment-collect/Bill-details/billDetails.js @@ -0,0 +1,362 @@ +import React, { useState, useEffect, useMemo } from "react"; +import { + CardHeader, + CardLabel, + Loader, + CardCaption, + CardSubHeader, + CardSectionHeader, + Row, + StatusTable, + RadioButtons, + TextInput, +} from "@egovernments/digit-ui-react-components"; +import { useTranslation } from "react-i18next"; +import { BillDetailsKeyNoteConfig } from "./billDetailsConfig"; + +export const BillDetailsFormConfig = (props, t) => ({ + PT: [ + { + head: t("ES_BILL_DETAILS_PT_DETAILS_HEADING"), + body: [ + { + withoutLabel: true, + type: "custom", + populators: { + name: "amount", + customProps: { businessService: "PT", consumerCode: props.consumerCode }, + component: (props, customProps) => , + }, + }, + ], + }, + ], + mcollect: [ + { + head: t("COMMON_PAY_SCREEN_HEADER"), + body: [ + { + withoutLabel: true, + type: "custom", + populators: { + name: "amount", + customProps: { businessService: props.businessService, consumerCode: props.consumerCode }, + component: (props, customProps) => , + }, + }, + ], + }, + ], + TL: [ + { + body: [ + { + withoutLabel: true, + type: "custom", + populators: { + name: "amount", + customProps: { businessService: "TL", consumerCode: props.consumerCode }, + component: (props, customProps) => , + }, + }, + ], + }, + ], +}); + +const BillDetails = ({ businessService, consumerCode, _amount, onChange }) => { + const { t } = useTranslation(); + const { workflow: ModuleWorkflow } = Digit.Hooks.useQueryParams(); + + const tenantId = Digit.ULBService.getCurrentTenantId(); + const { data, isLoading } = Digit.Hooks.useFetchPayment({ tenantId, businessService, consumerCode }); + + const [bill, setBill] = useState(); + const [showDetails, setShowDetails] = useState(true); + + const yearWiseBills = bill?.billDetails?.sort((a, b) => b.fromPeriod - a.fromPeriod); + const billDetails = yearWiseBills?.[0] || []; + // const currentYear = new Date().getFullYear(); + const getTotal = () => (bill?.totalAmount ? bill?.totalAmount : 0); + + const arrears = + bill?.billDetails + ?.sort((a, b) => b.fromPeriod - a.fromPeriod) + ?.reduce((total, current, index) => (index === 0 ? total : total + current.amount), 0) || 0; + + const { isLoading: mdmsLoading, data: mdmsBillingData } = Digit.Hooks.useGetPaymentRulesForBusinessServices(tenantId); + const [paymentRules, setPaymentRules] = useState(); + + useEffect(() => { + const payRestrictiondetails = mdmsBillingData?.MdmsRes?.BillingService?.BusinessService; + if (payRestrictiondetails?.length) setPaymentRules(payRestrictiondetails.filter((e) => e.code == businessService)[0]); + else + setPaymentRules({ + // isAdvanceAllowed: false, + // isVoucherCreationEnabled: true, + // minAmountPayable: 100, + // partPaymentAllowed: true, + }); + }, [mdmsBillingData]); + + const { minAmountPayable, isAdvanceAllowed } = paymentRules || {}; + + const [paymentType, setPaymentType] = useState(t("CS_PAYMENT_FULL_AMOUNT")); + const [amount, setAmount] = useState(getTotal()); + const [paymentAllowed, setPaymentAllowed] = useState(true); + const [formError, setError] = useState(""); + + const changeAmount = (value) => { + setAmount(value); + }; + + useEffect(() => { + ModuleWorkflow === "mcollect" && + billDetails?.billAccountDetails && + billDetails?.billAccountDetails.map((ob) => { + if (ob.taxHeadCode.includes("CGST")) ob.order = 3; + else if (ob.taxHeadCode.includes("SGST")) ob.order = 4; + }); + }, [billDetails?.billAccountDetails]); + + useEffect(() => { + const allowPayment = minAmountPayable && amount >= minAmountPayable && !isAdvanceAllowed && amount <= getTotal() && !formError; + if (paymentType != t("CS_PAYMENT_FULL_AMOUNT")) setPaymentAllowed(allowPayment); + else setPaymentAllowed(true); + }, [paymentType, amount]); + + useEffect(() => { + if (!bill && data) { + let requiredBill = data.Bill.filter((e) => e.consumerCode == consumerCode)[0]; + setBill(requiredBill); + } + }, [data]); + + useEffect(() => { + if (paymentType !== t("CS_PAYMENT_FULL_AMOUNT")) onChangeAmount(amount.toString()); + else { + setError(""); + changeAmount(getTotal()); + } + }, [paymentType, bill]); + + useEffect(() => { + if (paymentType !== t("CS_PAYMENT_FULL_AMOUNT")) onChange({ amount, paymentAllowed, error: formError, minAmountPayable }); + else onChange({ amount: getTotal(), paymentAllowed: true, error: formError, minAmountPayable }); + }, [paymentAllowed, formError, amount, paymentType]); + + // for setting error + const onChangeAmount = (value) => { + setError(""); + if (isNaN(value) || value.includes(".")) { + setError("AMOUNT_INVALID"); + } else if (!isAdvanceAllowed && value > getTotal()) { + setError("CS_ADVANCED_PAYMENT_NOT_ALLOWED"); + } else if (value < minAmountPayable) { + setError("CS_CANT_PAY_BELOW_MIN_AMOUNT"); + } + changeAmount(value); + }; + + if (isLoading || mdmsLoading) return ; + + const getFinancialYear = (_bill) => { + const { fromPeriod, toPeriod } = _bill; + let from = new Date(fromPeriod).getFullYear().toString(); + let to = new Date(toPeriod).getFullYear().toString(); + return from + "-" + to; + }; + + const thStyle = { textAlign: "left", borderBottom: "#D6D5D4 1px solid", padding: "16px 12px", whiteSpace: "break-spaces" }; + const tdStyle = { textAlign: "left", borderBottom: "#D6D5D4 1px solid", padding: "8px 10px", breakWord: "no-break" }; + + const config = BillDetailsKeyNoteConfig()[ModuleWorkflow ? ModuleWorkflow : businessService]; + + return ( + + {/* {t(config.heading)} */} + + {bill && + config.details.map((obj, index) => { + const value = obj.keyPath.reduce((acc, key) => { + if (typeof key === "function") acc = key(acc); + else acc = acc[key]; + return acc; + }, bill); + return ; + })} + + + +
+ {billDetails?.billAccountDetails + ?.sort((a, b) => a.order - b.order) + .map((amountDetails, index) => ( + + ))} + + {arrears?.toFixed?.(2) ? ( + + ) : null} + +
+ + {!showDetails && + !ModuleWorkflow && + businessService !== "TL" && + yearWiseBills?.length > 1 && ( +
+

+
setShowDetails(true)} className="filter-button value"> + {t("ES_COMMON_VIEW_DETAILS")} +
+
+ ) + } +
+ {showDetails && yearWiseBills?.length > 1 && !ModuleWorkflow && businessService !== "TL" && ( + +
+
+
+ + + + + + + + {yearWiseBills + ?.filter((e, ind) => ind > 0) + ?.map((year_bill, index) => ( + + + + ))} + +
{t("FINANCIAL_YEAR")}
{getFinancialYear(year_bill)}
+
+
+ + + + {yearWiseBills + ?.filter((e, ind) => ind > 0)?.[0] + ?.billAccountDetails?.sort((a, b) => a.order - b.order) + ?.map((head, index) => ( + + ))} + + + + {yearWiseBills + ?.filter((e, ind) => ind > 0) + ?.map((year_bill, index) => { + const sorted_tax_heads = year_bill?.billAccountDetails?.sort((a, b) => a.order - b.order); + return ( + + {sorted_tax_heads.map((e, i) => ( + + ))} + + ); + })} + +
+ {t(head.taxHeadCode)} +
+ {e.amount} +
+
+
+ + + + + + + + {yearWiseBills + ?.filter((e, ind) => ind > 0) + ?.map((year_bill, index) => { + return ( + + + + ); + })} + +
{t("TOTAL_TAX")}
{year_bill.amount}
+
+
+
setShowDetails(false)} className="filter-button"> + {t("ES_COMMON_HIDE_DETAILS")} +
+
{" "} +
+ // !ModuleWorkflow && + // businessService !== "TL" && + // yearWiseBills?.length > 1 && ( + //
setShowDetails(true)} className="filter-button"> + // {t("ES_COMMON_VIEW_DETAILS")} + //
+ // ) + )} + {paymentRules?.partPaymentAllowed && ( +
+ {t("CS_COMMON_PAYMENT_AMOUNT")} + +
+ + ₹ + + {paymentType !== t("CS_PAYMENT_FULL_AMOUNT") ? ( + onChangeAmount(e.target.value)} + value={amount} + disable={getTotal() === 0} + /> + ) : ( + + )} + {formError === "CS_CANT_PAY_BELOW_MIN_AMOUNT" ? ( + + {t(formError)}: {"₹" + minAmountPayable} + + ) : ( + {t(formError)} + )} +
+
+ )} +
+ ); +}; + +export default BillDetails; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/payment-collect/Bill-details/billDetailsConfig.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/payment-collect/Bill-details/billDetailsConfig.js new file mode 100644 index 00000000000..a7ccb40f1c8 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/payment-collect/Bill-details/billDetailsConfig.js @@ -0,0 +1,47 @@ +export const BillDetailsKeyNoteConfig = () => ({ + PT: { + heading: "ES_BILL_DETAILS_PT_DETAILS_HEADING", + details: [ + { + keyValue: "PT_PROPERTY_ID", + keyPath: ["consumerCode"], + fallback: "", + }, + { + keyValue: "CS_PAYMENT_BILLING_PERIOD", + keyPath: [ + "billDetails", + (d) => { + const { fromPeriod, toPeriod } = d[0]; + if (fromPeriod && toPeriod) { + let from = new Date(fromPeriod).getFullYear().toString(); + let to = new Date(toPeriod).getFullYear().toString(); + return "FY " + from + "-" + to; + } else return "N/A"; + }, + ], + fallback: "N/A", + }, + ], + }, + mcollect: { + heading: "COMMON_PAY_SCREEN_HEADER", + details: [ + { + keyValue: "UC_CHALLAN_NO", + keyPath: ["consumerCode"], + fallback: "", + }, + ], + }, + TL: { + heading: "COMMON_PAY_SCREEN_HEADER", + details: [ + { + keyValue: "TL_TRADE_LICENSE_LABEL", + keyPath: ["consumerCode"], + fallback: "", + }, + ], + }, +}); diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/payment-collect/ManualReciept/index.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/payment-collect/ManualReciept/index.js new file mode 100644 index 00000000000..89c7bb8b270 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/payment-collect/ManualReciept/index.js @@ -0,0 +1,74 @@ +import React, { useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { TextInput, SearchIconSvg, DatePicker } from "@egovernments/digit-ui-react-components"; + +export const useCashPaymentDetails = (props, t) => { + const config = [ + { + head: t("NOC_PAYMENT_RCPT_DETAILS"), + headId: "paymentInfo", + body: [ + { + withoutLabel: true, + type: "custom", + populators: { + name: "ManualRecieptDetails", + customProps: {}, + defaultValue: { manualReceiptNumber: "", manualReceiptDate: "" }, + component: (props, customProps) => , + }, + }, + ], + }, + ]; + + return { cashConfig: config }; +}; + +const CashDetailsComponent = ({ ...props }) => { + const { t } = useTranslation(); + const [manualReceiptDate, setManualReceiptDate] = useState(props?.value?.manualReceiptDate); + const [manualReceiptNumber, setManualReceiptNumber] = useState(props?.value?.manualReceiptNumber); + + useEffect(() => { + if (props.onChange) { + let errorObj = {}; + if (!manualReceiptDate) errorObj.manualReceiptDate = "ES_COMMON_MANUAL_RECEIPT_DATE"; + if (!manualReceiptNumber) errorObj.manualReceiptNumber = "ES_COMMON_MANUAL_RECEIPT_NO"; + + props.onChange({ manualReceiptNumber, manualReceiptDate, errorObj }); + } + }, [manualReceiptDate, manualReceiptNumber]); + + return ( + +
+

{t("NOC_PAYMENT_RCPT_NO_LABEL")}

+
+
+ setManualReceiptNumber(e.target.value)} + /> +
+
+
+
+

{t("NOC_PAYMENT_RECEIPT_ISSUE_DATE_LABEL")}

+
+
+ { + setManualReceiptDate(d); + }} + /> +
+
+
+
+ ); +}; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/payment-collect/card/index.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/payment-collect/card/index.js new file mode 100644 index 00000000000..09214b25f32 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/payment-collect/card/index.js @@ -0,0 +1,96 @@ +import React, { useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; + +export const useCardPaymentDetails = (props, t) => { + const config = [ + { + head: t("PAYMENT_CARD_HEAD"), + headId: "paymentInfo", + body: [ + { + withoutLabel: true, + type: "custom", + populators: { + name: "paymentModeDetails", + customProps: {}, + defaultValue: {}, + component: (props, customProps) => , + }, + }, + ], + }, + ]; + + return { cardConfig: config }; +}; + +const CardDetailsComponent = ({ ...props }) => { + const { t } = useTranslation(); + const [last4Digits, setLast4Digits] = useState(props?.value?.last4Digits); + const [transactionNumber, setTransactionNumber] = useState(props?.value?.transactionNumber); + const [reTransanctionNumber, setReTransanctionNumber] = useState(props?.value?.reTransanctionNumber); + + useEffect(() => { + if (props.onChange) { + let errorMsg = ""; + if (last4Digits.length !== 4) errorMsg = "ES_COMMON_ERROR_LAST_4_DIGITS"; + let errorObj = {}; + if (!last4Digits) errorObj.last4Digits = "ES_COMMON_LAST_4_DIGITS"; + if (!transactionNumber) errorObj.transactionNumber = "ES_COMMON_TRANSANCTION_NO"; + if (!reTransanctionNumber) errorObj.reTransanctionNumber = "ES_COMMON_RE_TRANSANCTION_NO"; + props.onChange({ transactionNumber, reTransanctionNumber, instrumentNumber: last4Digits, errorObj }); + } + }, [last4Digits, transactionNumber, reTransanctionNumber]); + + return ( + +
+

{`${t("NOC_PAYMENT_CARD_LAST_DIGITS_LABEL")} *`}

+
+
+ setLast4Digits(e.target.value)} + /> +
+
+
+
+

{`${t("NOC_PAYMENT_TRANS_NO_LABEL")} *`}

+
+
+ setTransactionNumber(e.target.value)} + /> +
+
+
+
+

{`${t("NOC_PAYMENT_RENTR_TRANS_LABEL")} *`}

+
+
+ setReTransanctionNumber(e.target.value)} + /> +
+
+
+
+ ); +}; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/payment-collect/cheque/index.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/payment-collect/cheque/index.js new file mode 100644 index 00000000000..e1f8ab47997 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/payment-collect/cheque/index.js @@ -0,0 +1,143 @@ +import React, { useState, useEffect } from "react"; +import { TextInput, SearchIconSvg, DatePicker, CardLabelError } from "@egovernments/digit-ui-react-components"; +import { useTranslation } from "react-i18next"; +export const useChequeDetails = (props, t) => { + const config = [ + { + head: t("PAYMENT_CHEQUE_HEAD"), + headId: "paymentInfo", + body: [ + { + withoutLabel: true, + type: "custom", + populators: { + name: "paymentModeDetails", + customProps: {}, + defaultValue: { instrumentNumber: "", instrumentDate: "", ifscCode: "", bankName: "", bankBranch: "" }, + component: (props, customProps) => , + }, + }, + ], + }, + ]; + + return { chequeConfig: config }; +}; + +// to be used in config + +export const ChequeDetailsComponent = (props) => { + const { t } = useTranslation(); + const [instrumentDate, setChequeDate] = useState(props.chequeDetails.instrumentDate); + const [instrumentNumber, setChequeNo] = useState(props.chequeDetails.instrumentNumber); + const [ifscCode, setIfsc] = useState(props.chequeDetails.ifscCode); + const [ifscCodeError, setIfscCodeError] = useState(""); + const [bankName, setBankName] = useState(props.chequeDetails.bankName); + const [bankBranch, setBankBranch] = useState(props.chequeDetails.bankBranch?.replace(" ", " ")); + useEffect(() => { + if (props.onChange) { + let errorObj = {}; + if (!instrumentDate) errorObj.instrumentDate = "ES_COMMON_INSTRUMENT_DATE"; + if (!instrumentNumber) errorObj.instrumentNumber = "ES_COMMON_INSTR_NUMBER"; + if (!ifscCode) errorObj.ifscCode = "ES_COMMON_IFSC"; + props.onChange({ instrumentDate, instrumentNumber, ifscCode, bankName, bankBranch, errorObj, transactionNumber: instrumentNumber }); + } + }, [bankName, bankBranch, instrumentDate, instrumentNumber]); + + const setBankDetailsFromIFSC = async () => { + try { + const res = await window.fetch(`https://ifsc.razorpay.com/${ifscCode}`); + if (res.ok) { + const { BANK, BRANCH } = await res.json(); + setBankName(BANK); + setBankBranch(BRANCH?.replace(" ", " ")); + } else setIfscCodeError(t("CS_PAYMENT_INCORRECT_IFSC_CODE_ERROR")); + } catch (er) { + setIfscCodeError(t("CS_PAYMENT_INCORRECT_IFSC_CODE_ERROR")); + } + }; + + const handleIFSCChange = (e) => { + setIfsc(e.target.value); + setIfscCodeError(""); + } + + return ( + +
+

{t("PAYMENT_CHQ_NO_LABEL")} *

+
+
+ setChequeNo(e.target.value)} + required + // minlength="6" + // maxLength="6" + /> +
+
+
+
+

{t("PAYMENT_CHEQUE_DATE_LABEL")} *

+
+
+ { + setChequeDate(d); + }} + /> +
+
+
+ { + // chequeDate && chequeNo && + +
+

{t("PAYMENT_IFSC_CODE_LABEL")} *

+
+
+
+ + +
+
+
+
+ {ifscCodeError && {ifscCodeError}} +
+

{t("PAYMENT_BANK_NAME_LABEL")}

+
+
+ +
+
+
+
+

{t("PAYMENT_BANK_BRANCH_LABEL")}

+
+
+ +
+
+
+
+ } +
+ ); +}; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/payment-collect/index.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/payment-collect/index.js new file mode 100644 index 00000000000..df4dfa3bf75 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/payment-collect/index.js @@ -0,0 +1,333 @@ +import React, { useEffect, useState } from "react"; +import { RadioButtons, FormComposer, Dropdown, CardSectionHeader, Loader, Toast, Card, Header } from "@egovernments/digit-ui-react-components"; +import { useTranslation } from "react-i18next"; +import { useHistory, useParams, useRouteMatch } from "react-router-dom"; +import { useQueryClient } from "react-query"; +import { useCashPaymentDetails } from "./ManualReciept"; +import { useCardPaymentDetails } from "./card"; +import { useChequeDetails } from "./cheque"; +import isEqual from "lodash/isEqual"; +import { BillDetailsFormConfig } from "./Bill-details/billDetails"; + +export const CollectPayment = (props) => { + // const { formData, addParams } = props; + const { workflow: ModuleWorkflow } = Digit.Hooks.useQueryParams(); + console.log(ModuleWorkflow); + const { t } = useTranslation(); + const history = useHistory(); + const queryClient = useQueryClient(); + + const { path: currentPath } = useRouteMatch(); + const { consumerCode, businessService } = useParams(); + const tenantId = Digit.ULBService.getCurrentTenantId(); + const { data: paymentdetails, isLoading } = Digit.Hooks.useFetchPayment({ tenantId: tenantId, consumerCode, businessService }); + const bill = paymentdetails?.Bill ? paymentdetails?.Bill[0] : {}; + + // const { isLoading: storeLoading, data: store } = Digit.Services.useStore({ + // stateCode: props.stateCode, + // moduleCode: businessService.split(".")[0], + // language: Digit.StoreData.getCurrentLanguage(), + // }); + + const { cardConfig } = useCardPaymentDetails(props, t); + const { chequeConfig } = useChequeDetails(props, t); + const { cashConfig } = useCashPaymentDetails(props, t); + + const [formState, setFormState] = useState({}); + const [toast, setToast] = useState(null); + + const defaultPaymentModes = [ + { code: "CASH", label: t("COMMON_MASTERS_PAYMENTMODE_CASH") }, + { code: "CHEQUE", label: t("COMMON_MASTERS_PAYMENTMODE_CHEQUE") }, + { code: "CARD", label: t("COMMON_MASTERS_PAYMENTMODE_CREDIT/DEBIT CARD") }, + // { code: "DD", label: "Demand Draft" }, + // { code: "OFFLINE_NEFT", label: "Offline NEFT" }, + // { code: "OFFLINE_RTGS", label: "Offline RTGS" }, + // { code: "POSTAL_ORDER", label: "Postal Order" }, + ]; + + const formConfigMap = { + CHEQUE: chequeConfig, + CARD: cardConfig, + }; + + useEffect(() => { + props.setLink(t("PAYMENT_COLLECT_LABEL")); + }, []); + + const getPaymentModes = () => defaultPaymentModes; + const paidByMenu = [ + { code: "OWNER", name: t("COMMON_OWNER") }, + { code: "OTHER", name: t("COMMON_OTHER") }, + ]; + const [selectedPaymentMode, setPaymentMode] = useState(formState?.selectedPaymentMode || getPaymentModes()[0]); + + const onSubmit = async (data) => { + bill.totalAmount = Math.round(bill.totalAmount); + data.paidBy = data.paidBy.code; + + if ( + BillDetailsFormConfig({ consumerCode, businessService }, t)[ModuleWorkflow ? ModuleWorkflow : businessService] && + !data?.amount?.paymentAllowed + ) { + let action = + data?.amount?.error === "CS_CANT_PAY_BELOW_MIN_AMOUNT" + ? t(data?.amount?.error) + "- " + data?.amount?.minAmountPayable + : t(data?.amount?.error); + + setToast({ + key: "error", + action, + }); + return; + } + + const { ManualRecieptDetails, paymentModeDetails, ...rest } = data; + const { errorObj, ...details } = paymentModeDetails || {}; + + const recieptRequest = { + Payment: { + mobileNumber: data.payerMobile, + paymentDetails: [ + { + businessService, + billId: bill.id, + totalDue: bill.totalAmount, + totalAmountPaid: data?.amount?.amount || bill.totalAmount, + }, + ], + tenantId: bill.tenantId, + totalDue: bill.totalAmount, + totalAmountPaid: data?.amount?.amount || bill.totalAmount, + paymentMode: data.paymentMode.code, + payerName: data.payerName, + paidBy: data.paidBy, + }, + }; + + if (data.ManualRecieptDetails.manualReceiptDate) { + recieptRequest.Payment.paymentDetails[0].manualReceiptDate = new Date(ManualRecieptDetails.manualReceiptDate).getTime(); + } + if (data.ManualRecieptDetails.manualReceiptNumber) { + recieptRequest.Payment.paymentDetails[0].manualReceiptNumber = ManualRecieptDetails.manualReceiptNumber; + } + recieptRequest.Payment.paymentMode = data?.paymentMode?.code; + + if (data.paymentModeDetails) { + recieptRequest.Payment = { ...recieptRequest.Payment, ...details }; + delete recieptRequest.Payment.paymentModeDetails; + if (data.paymentModeDetails.errorObj) { + const errors = data.paymentModeDetails.errorObj; + const messages = Object.keys(errors) + .map((e) => t(errors[e])) + .join(); + if (messages) { + setToast({ key: "error", action: `${messages} ${t("ES_ERROR_REQUIRED")}` }); + setTimeout(() => setToast(null), 5000); + return; + } + } + if (data.errorMsg) setToast({ key: "error", action: t(errorMsg) }); + + recieptRequest.Payment.instrumentDate = new Date(recieptRequest?.Payment?.instrumentDate).getTime(); + recieptRequest.Payment.transactionNumber = data.paymentModeDetails.transactionNumber; + } + + if (data?.paymentModeDetails?.transactionNumber) { + if (data.paymentModeDetails.transactionNumber !== data.paymentModeDetails.reTransanctionNumber && ["CARD"].includes(data.paymentMode.code)) { + setToast({ key: "error", action: t("ERR_TRASACTION_NUMBERS_DONT_MATCH") }); + setTimeout(() => setToast(null), 5000); + return; + } + delete recieptRequest.Payment.last4Digits; + delete recieptRequest.Payment.reTransanctionNumber; + } + + if ( + recieptRequest.Payment?.instrumentNumber?.length && + recieptRequest.Payment?.instrumentNumber?.length < 6 && + recieptRequest?.Payment?.paymentMode === "CHEQUE" + ) { + setToast({ key: "error", action: t("ERR_CHEQUE_NUMBER_LESS_THAN_6") }); + setTimeout(() => setToast(null), 5000); + return; + } + + try { + // console.log(recieptRequest); + const resposne = await Digit.PaymentService.createReciept(tenantId, recieptRequest); + queryClient.invalidateQueries(); + history.push( + `${props.basePath}/success/${businessService}/${resposne?.Payments[0]?.paymentDetails[0]?.receiptNumber.replace(/\//g, "%2F")}/${ + resposne?.Payments[0]?.paymentDetails[0]?.bill?.consumerCode + }` + ); + } catch (error) { + setToast({ key: "error", action: error?.response?.data?.Errors?.map((e) => t(e.code)) })?.join(" , "); + setTimeout(() => setToast(null), 5000); + return; + } + }; + + useEffect(() => { + document?.getElementById("paymentInfo")?.scrollIntoView({ behavior: "smooth" }); + document?.querySelector("#paymentInfo + .label-field-pair input")?.focus(); + }, [selectedPaymentMode]); + + const config = [ + { + head: !ModuleWorkflow && businessService !== "TL" ? t("COMMON_PAYMENT_HEAD") : "", + body: [ + { + label: t("PAY_TOTAL_AMOUNT"), + populators: {`₹ ${bill?.totalAmount}`} , + }, + ], + }, + { + head: t("PAYMENT_PAID_BY_HEAD"), + body: [ + { + label: t("PAYMENT_PAID_BY_LABEL"), + isMandatory: true, + type: "custom", + populators: { + name: "paidBy", + customProps: { t, isMendatory: true, option: paidByMenu, optionKey: "name" }, + component: (props, customProps) => ( + { + if (d.name == paidByMenu[0].name) { + props.setValue("payerName", bill?.payerName); + props.setValue("payerMobile", bill?.mobileNumber); + } else { + props.setValue("payerName", ""); + props.setValue("payerMobile", ""); + } + props.onChange(d); + }} + /> + ), + defaultValue: formState?.paidBy || paidByMenu[0], + }, + }, + { + label: t("PAYMENT_PAYER_NAME_LABEL"), + isMandatory: true, + type: "text", + populators: { + name: "payerName", + validation: { + required: true, + pattern: /^[A-Za-z]/, + }, + error: t("PAYMENT_INVALID_NAME"), + defaultValue: bill?.payerName || formState?.payerName || "", + className: "payment-form-text-input-correction", + }, + }, + { + label: t("PAYMENT_PAYER_MOB_LABEL"), + isMandatory: true, + type: "text", + populators: { + name: "payerMobile", + validation: { + required: true, + pattern: /^[6-9]\d{9}$/, + }, + error: t("PAYMENT_INVALID_MOBILE"), + className: "payment-form-text-input-correction", + defaultValue: bill?.mobileNumber || formState?.payerMobile || "", + }, + }, + ], + }, + { + head: t("PAYMENT_MODE_HEAD"), + body: [ + { + withoutLabel: true, + type: "custom", + populators: { + name: "paymentMode", + customProps: { + options: getPaymentModes(), + optionsKey: "label", + style: { display: "flex", flexWrap: "wrap" }, + innerStyles: { minWidth: "33%" }, + }, + defaultValue: formState?.paymentMode || getPaymentModes()[0], + component: (props, customProps) => ( + { + props.onChange(d); + }} + {...customProps} + /> + ), + }, + }, + ], + }, + ]; + + const getDefaultValues = () => ({ + payerName: bill?.payerName || formState?.payerName || "", + payerMobile: bill?.mobileNumber || formState?.payerMobile || "", + }); + + const getFormConfig = () => { + if ( + BillDetailsFormConfig({ consumerCode, businessService }, t)[ModuleWorkflow ? ModuleWorkflow : businessService] || + ModuleWorkflow || + businessService === "TL" + ) { + config.splice(0, 1); + } + let conf = config.concat(formConfigMap[formState?.paymentMode?.code] || []); + conf = conf?.concat(cashConfig); + return BillDetailsFormConfig({ consumerCode, businessService }, t)[ModuleWorkflow ? ModuleWorkflow : businessService] + ? BillDetailsFormConfig({ consumerCode, businessService }, t)[ModuleWorkflow ? ModuleWorkflow : businessService].concat(conf) + : conf; + }; + + if (isLoading) { + return ; + } + + return ( + +
{t("PAYMENT_COLLECT")}
+ 0 : true} + // isDisabled={BillDetailsFormConfig({ consumerCode }, t)[businessService] ? !} + onFormValueChange={(setValue, formValue) => { + if (!isEqual(formValue.paymentMode, selectedPaymentMode)) { + setFormState(formValue); + setPaymentMode(formState.paymentMode); + } + }} + > + + {toast && ( + setToast(null)} + style={{ maxWidth: "670px" }} + /> + )} +
+ ); +}; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/response/index.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/response/index.js new file mode 100644 index 00000000000..7c1b6c25d5c --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/employee/response/index.js @@ -0,0 +1,111 @@ +import React, { useEffect } from "react"; +import { Banner, Card, CardText, SubmitBar, ActionBar } from "@egovernments/digit-ui-react-components"; +import { useHistory, useParams, Link, LinkLabel } from "react-router-dom"; +import { useTranslation } from "react-i18next"; +import { useQueryClient } from "react-query"; + +export const SuccessfulPayment = (props) => { + const { addParams, clearParams } = props; + const { t } = useTranslation(); + const queryClient = useQueryClient(); + props.setLink(t("PAYMENT_LOCALIZATION_RESPONSE")); + let { consumerCode, receiptNumber, businessService } = useParams(); + const tenantId = Digit.ULBService.getCurrentTenantId(); + receiptNumber = receiptNumber.replace(/%2F/g, "/"); + + useEffect(() => { + return () => { + queryClient.clear(); + }; + }, []); + + const getMessage = () => t("ES_PAYMENT_COLLECTED"); + // console.log("--------->", consumerCode); + + const { data: generatePdfKey } = Digit.Hooks.useCommonMDMS(tenantId, "common-masters", "ReceiptKey", { + select: (data) => + data["common-masters"]?.uiCommonPay?.filter(({ code }) => businessService?.includes(code))[0]?.receiptKey || "consolidatedreceipt", + }); + + const printCertificate = async () => { + const tenantId = Digit.ULBService.getCurrentTenantId(); + const state = tenantId?.split(".")[0]; + const applicationDetails = await Digit.TLService.search({ applicationNumber: consumerCode, tenantId }); + const generatePdfKeyForTL = "tlcertificate"; + + if (applicationDetails) { + let response = await Digit.PaymentService.generatePdf(state, { Licenses: applicationDetails?.Licenses }, generatePdfKeyForTL); + const fileStore = await Digit.PaymentService.printReciept(state, { fileStoreIds: response.filestoreIds[0] }); + window.open(fileStore[response.filestoreIds[0]], "_blank"); + } + }; + const printReciept = async () => { + const tenantId = Digit.ULBService.getCurrentTenantId(); + const state = tenantId?.split(".")[0]; + const payments = await Digit.PaymentService.getReciept(tenantId, businessService, { receiptNumbers: receiptNumber }); + let response = { filestoreIds: [payments.Payments[0]?.fileStoreId] }; + + if (!payments.Payments[0]?.fileStoreId) { + response = await Digit.PaymentService.generatePdf(state, { Payments: payments.Payments }, generatePdfKey); + // console.log({ response }); + } + const fileStore = await Digit.PaymentService.printReciept(state, { fileStoreIds: response.filestoreIds[0] }); + window.open(fileStore[response.filestoreIds[0]], "_blank"); + }; + + return ( + + + + {t("ES_PAYMENT_SUCCESSFUL_DESCRIPTION")} + {generatePdfKey ? ( +
+
+ + + + + {t("CS_COMMON_PRINT_RECEIPT")} +
+ {businessService == "TL" ? ( +
+ + + + + {t("CS_COMMON_PRINT_CERTIFICATE")} +
+ ) : null} +
+ ) : null} +
+ + + + + +
+ ); +}; + +export const FailedPayment = (props) => { + props.setLink("Response"); + const { addParams, clearParams } = props; + const { t } = useTranslation(); + const { consumerCode } = useParams(); + + const getMessage = () => t("ES_PAYMENT_COLLECTED_ERROR"); + return ( + + + + {t("ES_PAYMENT_FAILED_DETAILS")} + + + + + + + + ); +}; diff --git a/frontend/micro-ui-internals/packages/modules/common/src/payments/index.js b/frontend/micro-ui-internals/packages/modules/common/src/payments/index.js new file mode 100644 index 00000000000..00ea4a15333 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/common/src/payments/index.js @@ -0,0 +1,41 @@ +import React, { Fragment } from "react"; +import { BrowserRouter as Router, Switch, useRouteMatch, Route } from "react-router-dom"; +import { Body, Header, Loader, CitizenHomeCard, RupeeIcon } from "@egovernments/digit-ui-react-components"; +import { useTranslation } from "react-i18next"; + +import EmployeePayment from "./employee"; +import CitizenPayment from "./citizen"; +import { getKeyNotesConfig } from "./citizen/keynotesConfig"; + +export const PaymentModule = ({ deltaConfig = {}, stateCode, cityCode, moduleCode = "Payment", userType }) => { + const { path, url } = useRouteMatch(); + const store = { data: {} }; //Digit.Services.useStore({}, { deltaConfig, stateCode, cityCode, moduleCode, language }); + + if (Object.keys(store).length === 0) { + return ; + } + + const getPaymentHome = () => { + if (userType === "citizen") return ; + else return ; + }; + return {getPaymentHome()}; +}; + +export const PaymentLinks = ({ matchPath }) => { + const { t } = useTranslation(); + + // const links = [ + // { + // link: `/digit-ui/citizen/payment/my-bills/PT`, + // i18nKey: t("CS_HOME_PT"), + // }, + // ]; + + // return ; + return null; +}; + +export const paymentConfigs = { + getBillDetailsConfigWithBusinessService: getKeyNotesConfig, +}; diff --git a/frontend/micro-ui-internals/packages/modules/core/package.json b/frontend/micro-ui-internals/packages/modules/core/package.json new file mode 100644 index 00000000000..90aeea7e66c --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/package.json @@ -0,0 +1,30 @@ +{ + "name": "@egovernments/digit-ui-module-core", + "version": "1.3.0", + "license": "MIT", + "main": "dist/index.js", + "module": "dist/index.modern.js", + "source": "src/Module.js", + "files": [ + "dist" + ], + "scripts": { + "start": "microbundle-crl watch --no-compress --format modern,cjs", + "build": "microbundle-crl --no-compress --format modern,cjs", + "prepublish": "yarn build" + }, + "dependencies": { + "@egovernments/digit-ui-libraries": "^1.3.0", + "@egovernments/digit-ui-react-components": "^1.3.0", + "react": "^17.0.0", + "react-dom": "^17.0.0", + "react-hook-form": "^6.7.0", + "react-i18next": "^11.7.3", + "react-query": "^3.6.1", + "react-redux": "^7.2.1", + "react-router-dom": "^5.2.0", + "react-table": "^7.6.1", + "redux": "^4.0.5", + "redux-thunk": "^2.3.0" + } +} diff --git a/frontend/micro-ui-internals/packages/modules/core/src/App.js b/frontend/micro-ui-internals/packages/modules/core/src/App.js new file mode 100644 index 00000000000..09f92a77e0d --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/App.js @@ -0,0 +1,70 @@ +import React, { useEffect } from "react"; +import { Redirect, Route, Switch, useHistory, useLocation } from "react-router-dom"; +import EmployeeApp from "./pages/employee" +import CitizenApp from "./pages/citizen" + +export const DigitApp = ({ stateCode, modules, appTenants, logoUrl }) => { + const history = useHistory(); + const { pathname } = useLocation(); + + const innerWidth = window.innerWidth; + const cityDetails = Digit.ULBService.getCurrentUlb(); + const userDetails = Digit.UserService.getUser(); + const { data: storeData } = Digit.Hooks.useStore.getInitData(); + const { stateInfo } = storeData || {}; + const CITIZEN = userDetails?.info?.type === "CITIZEN" || !window.location.pathname.split("/").includes("employee") ? true : false; + const DSO = Digit.UserService.hasAccess(["FSM_DSO"]); + + useEffect(() => { + if (!pathname?.includes("application-details")) { + if (!pathname?.includes("inbox")) { + Digit.SessionStorage.del("fsm/inbox/searchParams"); + } + if (pathname?.includes("search")) { + Digit.SessionStorage.del("fsm/search/searchParams"); + } + } + if (!pathname?.includes("dss")) { + Digit.SessionStorage.del("DSS_FILTERS"); + } + }, [pathname]); + + history.listen(() => { + window?.scrollTo({ top: 0, left: 0, behavior: "smooth" }); + }); + + const handleUserDropdownSelection = (option) => { + option.func(); + }; + + const mobileView = innerWidth <= 640; + let sourceUrl = `${window.location.origin}/citizen`; + const commonProps = { + stateInfo, + userDetails, + CITIZEN, + cityDetails, + mobileView, + handleUserDropdownSelection, + logoUrl, + DSO, + stateCode, + modules, + appTenants, + sourceUrl, + pathname + } + return ( + + + + + + + + + + + + ); +}; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/Images/digit.js b/frontend/micro-ui-internals/packages/modules/core/src/Images/digit.js new file mode 100644 index 00000000000..53e9e7e20b9 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/Images/digit.js @@ -0,0 +1,146 @@ +export const digitImg = + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAREAAABACAYAAAA9MUNoAAAACXBIWX" + + "MAACxLAAAsSwGlPZapAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAB+qSURBVHgB7Z0JfF" + + "TV1cDPfe/NZLLMZCMLhJAAsiWIskoAEeoSCCGTiGBF6lLlo59WK2rVWvqJSytVq63aX639Way2oK" + + "Q2JIRFpAq4ogYQZUkgLNlIgEC2yWzvvfudO5lBIAl5b+bNos7/95vMZObOm/vuu/fcc8859zyAMG" + + "HChAkTJkyYMGHChAkTJkyYMGHChAkTJkyYMGHChAnzHYEoLXj64fhYfXz0IEp4McYaXU2W73OAl7" + + "Q+PzCBSPwIIkoRfZWVOWoTO637Eh8/3QYBZP78+TFOp/MaSYI48AKO4zqwedslSW4TBHq8tra2vq" + + "KiwgkhBDtHu12cRilNxX+brNaOT7Zs2dIKYRQzZ07heJ4nowkhbRxHD5SUlOwHDZg9e7aJ4yKGEQ" + + "JGCAKESCcbGhqqlPTZPoWIZUXGHODhV0BpDhbnut6lVkJJqSTRJ42P1uwDhbQ/k3kVD/QxCvSqb4" + + "+lAEI7sKIbJScsV/N7XkLM5qLfYR0fxJcCaIcd262KEO4oBficUOkzm82289133z0NAQaFB293So" + + "/iNX0I/40556NO7D3P19ceeyLUBF6okV9YeB1H4RXsI4PPeVukQMp5Ii9du3btUfCCGTNmCKa4hD" + + "/jtbkT/1U+RvwATi6nOEIeKi0tWXmxcr0KkTXzgZ8zcdDLWORn0Dt2ytHFMQ/WvAl9YPn9oOXYQf" + + "8PVGg/3aHNssz93PjI0bfATxSYi9bg03wIAJSCDUXpDlmGt0SObtrkZcdTCcFzXIXPP+6tAM6sZS" + + "+/885NaYR0QoDJycmJ7NcvNYfjYKIMNJsAN5RpSjgjJ5xTjLK+gKfShML+MMiwE0DaZTAYKoqLiz" + + "vAz+SbzQs54P7V2+fYwY+OHDk8f8WKFftQQ6GgggJz4SY8Qi6EELFxpvvfeP31P+O59Lj66HVAW5" + + "/NXCFT+jD0jURByo95qG5TbwUsz2X+DGT6F9CGNlmSzMZf1W0FjTGbzTdQ4IohOLABu0Hm4Pnykp" + + "JPwU8UFBYuAkr6FPqjs0c9/etf//ql6Ojo4+BncPY1mEymeYQTbkSBcQ2+FQnegUte8ilQ+Z+yLG" + + "4qLy8/BRqDWlya3SFW4cuoi5UzGU0f//GPf7gzMTHxEA4+ERSA/a8I+99/IMTgCGddtvxXc8ZfNr" + + "6CLdu6fd7Tl9qfG5Qlg/wgKIMnhH+FLs/S9/Rh23P9+xGZPgPaYeJ44fdHlmcaQGPwAt4GwYN1yh" + + "s4GT4qKCx6Z05R0SjwC2SpklIHD1XfhB0mo729PRn8BAqPuIKCwsdMsfF1QPh/ogCZC94LEIYJr2" + + "IuarxvokDajxrXy7m5BZeAhtidzsXQhwBhtHe0T9q48d3x2H5D8LwUat+kAEIQmcqRG8o2XdHZ2T" + + "kCz0V34ec9ChGewhKcrXhQCoWM9sjOvJ4+0ssRN6M+p7FxiE5MjJImgtZQ8NPAVQWH9biel+lnBQ" + + "XXL8OZz5dBdR5sxsdjX66krN3uyDxy5Eh0REREuvJBoAxmk0Hh8XMUHodxwC/HtxJBY1AA9sOnuy" + + "MM/E78rWXLly/Xxr5AyRWKiuFgq6qqGi4IAluGmUAZXhnxA4Hdbo/GNuWtVmvKhZ/12LBoHJoOKu" + + "FAmtbT+zKhqo+lAMJRMgW0htCgGrLOh5iwPk+id2f93Xffrckgi4uLY9qb4nM8fPiwSRRFXWtrq2" + + "ade+7cuYPtDud2HOUv4b/x4H+MhOMeb2+33IkDu08Noi9QmirWgHHmdk2eaEBPUFIebWO1EKLExy" + + "ecYM/odYy+8LMeOxSagrzoNC7J3w0ZQFEDqoZCf/gBIEryzBMnmt9fvXp1JgQJnE31oAHo0bia43" + + "VfYl/RfgK4CCg8uJMnT/0YB3V2S0tLIATXeeDAUyR4ZJmiPY7YIMTQ6XTHb7nl5l3uf7sZinuelX" + + "SRMqiENxjtPb1POL1fXIV2PtLrOJXvGnaHfUxp2brybdu2jdJ6aXExJHw4na7L5/Nv5uebb0DtcQ" + + "PW3z+TSh9IshSJWhWPAnFgINuQtZ/D4VD0e+vXl36IQ/Q56GGgBgtcwthnXHXlE7isFdm5SJLUfm" + + "GZHoUIF5epXq0aML5nK35ydgP4gZO6oXXwA6Kz05r96t/+/reTJ09eErBBIEmgBeh1yON4l0tUE4" + + "3GGxITElwzKQ4KphVoGf/TK6pnYmTcuDGPoQj5Cbq0d2NdvTmEJuBvO2NNpo/MBeY7b7nllt3sPR" + + "TAjqioqBMXlu2xMfnseZ9KW5+6CpT+oC6qU3f1Y6imvtH9WBPv+kwqX7IIdTXlhto+cBBDx07TrK" + + "/QIwpBhwJN6Z9SfMXECRvmFhUdNAiCjDMe2bdvXyzaFPo1NJxMOn68dnhzc/PlnTZbliRKSo1s3W" + + "hvb5v61G+fvu9Pf3yeebuOwXeAuXPnZVOQWFyPLwJE1Ov1DTpBOM0GliTLEU5R7IdTI/Mc9SlQcR" + + "Y9dN9993pii+jjjz+ujXT0A2gAZoLjXzhRvP3lnj0jqSSlypJ09hwb6xtjvvpq98j9B/bfzCYW8B" + + "bst4lJiRtHj87eMG7ChOpIg+G8Nhk8ZIiF9WXP/7Is23EpWIku/25t16MQESbeuU08uGGuXL9TUS" + + "W5sT/ZyscPqezps4gR1+60V87+VKpcPw00ojpmyn8tUmQ1BBmUzCfzZuf+cv78orPnzhqb5/mWrK" + + "ysutGjR3PY6TlUA/UGg0GH3o6EdevWXfH13v0/7rRYxoIXy4Rjx44tXrVq1Yft7Y1WozH1BPgdFu" + + "Lgnfxn3iDCyW/jaar2zvE815GQgJ08e9QH8+aZv4mNje22LK6oqEj45JPPR1dWVuW1tXdMxoHXbR" + + "sFrucb77zj9qWJibEOdi4cpz/pHqgBQlGISDfcsSXf4ORTExkZGYtLIpcQHjlsGLbrlXvq6upKn/" + + "3D80vOnD5zD6jsR2hotk3NueKRJUvu2OF5TxAMdrQZWbC9zgoJbE/2kLCfW0wmU3N8fHyP7dabWv" + + "eZvui1cvvq+dG0+VAmXARhRN4nwpUPv4cvD/VSZDe57tnNpOOkidZ/PgZ85Lhx7IcHjFdvXrxoUV" + + "CXMwSImD8n/36zOf+QKLqEhwMb+zA2dEtv32HLkOTk5Ao0tL35wosvzj5YeWiZw2EfAipgrsP1Gz" + + "Ytzc3NrUah1DZ48GC/GeJYb2LnZrd7F7hqjI3/DT6pmi2ZGj2gf/9Vt976k38NGzbs7Ppbljk7ft" + + "aKg6kTNQsHtgMdN24STJyY8yWu04v/XVIy4sNtH/38zJnTs8At9XQ6odFcZF46YcKEU2LXWG43mQ" + + "w1ECjQ3SJ6J0POkpiYyIK7etw3hq7y+6HLLXwLqGDM6Et/e8cdd+xgdcMJz4n98RguU5pRy/DKFt" + + "OjEMGL1YLXqDzytk3gfG/ZBHF/+WTq7DjPtUNiUk8IVyzZqht3O4ve+3dv4b0sVBaPVey44Z8G+u" + + "kLx6Q9q6aDrTUWVOIUYlpqk2dvPhSdU2U9dfodCDJJKUnvMAHCXmMnttXU1OzFznpRI7K7jSzux8" + + "pfPProhtoDVU+LknQ7qKCjo2PSP/7xj0m33norC/HWZMOX1syZc/0QAvQBNd8R9LqGvNzrHinCZa" + + "HnPRTOZ7CTH0fh3NcGTJSpR7aydrHZHDkxMTHO22+/dYfBrabjMay7d++unDlzZsgYLX2luLhYmj" + + "278AlBB/Owb0Ur+Q5qNXvvu++eLew1tq2I2se+9PR0K/hArwYmrNRHOPgFXe4KSXftU19Kh7ak0N" + + "Yao0w4KqSMaebSJ52BrlDt1Vj2oloBfn7Abre/TXKWimTCXfto9Xv9ofGrJOrs1KHCBLLElmgyC4" + + "0DitJbonLXM3sAL502jmw4HTO6qbPTZjeA7fXFixc3QZDJuWLSOs/rpKSkKtQwVHuh/vS73zXhbP" + + "Izp8Q2GJJ71Hx3566vFt12G6lgLsu4uLgz4A98sBwIAizD0drnLm0PzG5x1/8uuWfMmDEuTQ4HvR" + + "07eTW2reLd226tbDv220+xXQbg6zi0Twko5M+kpKTUoADxUS8IPTZuXFtdYC5E+yAocpunpCRt87" + + "xGAVuD7euTAGFc1EqNg38rXpBK4ITp/PBZw+HbcF/Wab/Gx4dYRtGGJ+wke1pbW+uw4lfJw/MulY" + + "bmNsgudU8EzzNebNcze6Daiv8z95jIouXs1G5ny4D3c3OLLBBk2DZ/tHccZy4vVAeZsc/rjWo4mz" + + "hQkDzscEjpKEILlX6PaSPo8k2ZMmUKaw+/CBF2Pdg54vmq+t7111/fX5TozUrLM9vSbbf+ZOmoUa" + + "Na2O/hurwNBWOV0j0nF8KWRNBleA6q8ZkZENj5MNuCfyFHQKEQQY+Lq98yLSQhIeEkaECfri68IM" + + "x1+zZ77TZcSd5eXDSOsW3vJXictSwKEjuLAQeh6zNUq9iABPfAZGoXvof6iezozMnJCakcF8x3bj" + + "QaXW2AA60FfAQFiTU/P/8XHC9gRyCK9qqwAKrt2z+ciUKkCd2+RpxR2iFEcOLyjACnzBuDknPylM" + + "mPjR8/3rVZjgkQ7NwHgune/M5BqYidUlFRnte54qvQ29Whdodxb6jyl7PBAxrgrrx/VPCAIboeFo" + + "tdkzYpLy+vmWsueha7wrNKv9N04lQO1uGtzk57Ev7rByHiMq2CWu8sCpAblZaNT4zfdMvNN+5iv4" + + "OeTMf+/furcNnxPRIg3nu3/IeIcofXrI1DaK/Idwtm2XZ7ZTTTVQXOFWjTqLQ8euRG22wiQa3ELx" + + "u3PN4ZNaBGlYZPirxwKDDlH8340d89bWmz2aq/V3YLt3eGLc1DhW89bprMfS60i9ybv0YPmfGLgP" + + "DzUL8aAUz8ElKDxtKNIDpfhRdmKcvg9UBZPxBi7kHL6nXYzVKBJUKhtArV3jfAZi+Dl/K0O3sfYH" + + "Ybd0i4ZpSUlJwoKCzague6SEl5tqHso48+Sps6dWpdbW1tpK9W9m64bSLqzpNXHA+EHpTPpk+fWs" + + "eOr9dDy9ChQ793qRm9sSn5FxncdifQCm3O7oEtWZCZ+BUQ7jXs2iwlwFB8ZGIvn47TzdNY4yq4//" + + "2+cyU88N+bgI+qx+/9HwqQye5jMINuPh5nDUTqt8Ij76mKq/iugXrNe2rKV1dXZ7BnnMVjIAQgPK" + + "co1QBjwIAB73ted3aKftkeEUxC0pfsh1hd34XI0g8uAZ5sxUE+8iKlEkGg/4FfbsnvtcRDWwpRd1" + + "mF3fAiC3AULDL3Hiz9bxp8T5FB3qWmfEtLmyu/A887fd7mrgVo3xuutOy4cZfvZM84KdqGDRsW0E" + + "TcgSSUljMetFzO+C5EBPl1/JukoCRb3qyE+z7ovn6/6wOcRYnS9IlDQEeehwDuxOwJjytaazhJYt" + + "4wxXlCrVYri4XA5ohQHJOhFI/LXQ1oMh+opBxHOMuECROOdy0LwWcPV0hCwS99xDckzevkmxD55e" + + "apqIFMVfGNfqAT7+z2box8G/5NBcXQArj/3SwIIuptBcrAWYvZNRQLEYfTaXT7/bVb5LqRQFJ9jp" + + "RCPyXlBJ3Q5GlDPGe/J1cODrK7/ULCjOcCbb3uOmmnHflmWOV0s9AACurg2d6G5y54czaowwCCMA" + + "Of90KQaW5uBi3heV4krlsPKINCl0aGQkT77e3u9bPFojy+D2vDK1EReV44q33ExsZqahA2m6+/gR" + + "L6P1iZS6CrfVgk636g3JNlZe+oWi76gmdk2ENHhoCnVlqusHxczsiKVNfzIDSz+3uQAWohMBiCiD" + + "+8Mwz0sDCfsXKBgKVZPXBZo7kLgGm9as+RIwpz81J6Vps7deqUZg3JcreiYC1G6Xot/gjrI5n4YP" + + "a6IsLRLQsXLpwesHws7msTSjaRbzUR7fCp4xkEXnUUjY7vHiXHEfX7pXVECrrfzB/r3YaGBrYsUS" + + "xEeJ4T/bfuVm/3oSx6UgGoOUV57ErZ2dma+AxcSa0JeQJ6r1sCBe63e/bsyT548KDmNqSeCD2biK" + + "dOIWJYHZJoUJ3PIiMuolu8fropQvVd4DKipKBuwvNj54hCD4fixEWCILi8Gv7QiiSvMptRRfd6ES" + + "XnWWN8RUWFJhMCtgHzVF00h6rdYR+C1y6mvb15qP81ktALvGX71BhaLrF8ungPXZW+l6h0h197Sf" + + "zuC9+bdYlxD6gAlRnnvPjmbyCo+Gc5g0IhAzV9xXHmen3EaXdAkx8iALoMq2xfk2IoURRxK0lyYn" + + "39sSi3uq+VPafvyF0UHOw37XZqPHr0qF+1Ec/SIdRcvF3nHyKayK3jBuy5eljCbqXl00wRTU9dl/" + + "7fC99/fOaA9zNiI+pBIRNNth3Dox2HIIh0hWprr41IElV0XxMPcXHx9W77jOaVYYqI2nPkOKhSWv" + + "bzz3dms+NHRtoDsrTw4N4xTtAo7tclsQye9gslISKHmIsXvSNvLRy9PjMuos9bLcYa+PZVC0aUJM" + + "TEfH7hZ2hY+eK53AEbonR9b6nPiJIP3ZPZWm40GoMoROjZC3H6tLb34+Y4MktN+ZEjh7nagWVWA4" + + "3xZjWDbqWvlJatP358Enu2WHSBC5Q7R29G+xP4FVl7T4ivuKukqXbkkxAhhNgSo4T1X/x8wqprhs" + + "XvRANpj4vAUclRR7b8dMwbkzNM7+N3umWST0pKOj49PXrj3/PTVw2O0/WYaZ4tm6YlS5/8YXTrO7" + + "iWXbdgwYKgJttlIkTr5Uxe3vxUCuQ6peV1glDTv3//drd66oc0iV3LGTUuXonQj5WWbTnTdi3Wm8" + + "MOrfEdEnuHyRB/xfj0RMh5Z/wQu+LzWhSFwmdYqdh3f3qZ88va9h1/39V0ycFTHf0kGfiBRl3LvN" + + "HJ1XNGxDdhuYM6nW5tb8dJTk7eOF2SkrfclNH8zv7WgdtrOgYdt4hxBgKOlEh6+qYh9BsTOOxWq7" + + "Bh0aJF+yCYsJ7oh4hVnU68X002sMioqC88dUBbiuYBW56IVTy24u9sXLu2uqCw6CC20bC+jy+mlJ" + + "auu9psnvvumjVr+EBNDIHymHiWM4QExqOsCNmznNOuTpoYtFA4vIvaQc2EdGMuPtw7MWWX6oQGv3" + + "ZUtbdjR/z4YklQmFaDx/hHTU3NtBtGxkyaO1hX68lsZrPZcKa11lss0obCwsLDEGS6ZIi2htVZBQ" + + "Uj8Li/UPOdAf1TtruTOLEq+UWIsOOrESIMQkkxBfqokrJ19fWLW1patiUkJLBI14B43AKlhXwbsR" + + "o6SO466fXa3QJIsyhHFAIsYfB+FATMdZfsEh+cK/FQvbuTKzkGU8m34DG2HThwII3ndUZJslM8UM" + + "3MmVeH0gYtHo1y+tTUVIfaAdYTM2bMEPQc/zao8MpwHN80ZcqUL5kw4zixY+bMXL8ZVlV5Z8CVaG" + + "slEP4RULBcxuOnl5aW3n3jjTc+jdf9hFbZtvr4TQgE1D3ra9FHNMOtXWqZslHzs8NOwOJAfMrd6M" + + "6ReRRCFLwAptra2gGJiYlVGnQQzmSKL0MBcpmaLyUmxBajpiAzbYHnDdrG3rsRRelsuko1lJWVHS" + + "owF5XiyyIl5Vta2xeUlpUdQ42TxZh4fSsQ1HijQUHArEc70DKnRi81Ave+JggVPG5nntcu21roZj" + + "ZDC+PYNbOTLi2fFvAbMPcFy2965OjR2exioFT3Wi+cM2dOPNoP3kOrsaq9Q6iZnZ48eXKJezBIX3" + + "zxhaIAL/WIqg2rHmQOHgcV0VaNjSceLF1XvmzlypVeZ2lDM5yiZMUBM6zSEDSsynJoxYn4g7Gled" + + "PHl+WVjFuXZyMGckInm06PXZdXif8/c9m6H4VMHpGOjs78iordo1nCafACs9l8I6fTV2JH+xGopF" + + "9S0ivo4natMbCDsju6+UU/l3y4F295SQlz9b6m4iuk5UzLkvLyjZtxaaNKK2MUFRUlonfwPgghZL" + + "c/ObSCzTxu5xBx8WrNuPK859GQvQ2bnt064ewMj6vk4Xg9fsmB4bPLS/OuhRAAJXrMoepDT+7atW" + + "fKX//6V0VxDjk5OZFm8/VLzIVFX1Pg3sLzUpKH5Tz0el3FlVMnlouilXUEsa2tTXGQnlokV+4Jq1" + + "eaCIMj9KG+7kl0IU7ROdFqc1QUFBS+XVBQNGv8+PF9rjnM5vlZkkxZRrgB0CfUdU7s4XdcOVYD8D" + + "sqkF12Gm3rFDIWn7Hr8+7HPrv0YmVYwhvslKtRW5m1y7zhSwgyOFOnoiD5S01dzYz8wsJXOlpa9m" + + "zdutUVr5Gfn98Plz2phPCXcQI3gspkOgrIaei14L3Pm8e1ZY0a+aTDwTb6yuwGUXVLlizxm14uOS" + + "SwWr03DK5du7aloKDgZsLxaCwHNQYIlsBqAT4vGDhwUEda+qAK/P4BgoZXWSYtHEcjsB/EUAKp2C" + + "fGoVi4XPHtaCm4zolhsfQZI+kTotz1Wwr9CgGBLWdYnfT6UEzU7APjN+X2pw54Ullpmoid6NmsNV" + + "m5+xbsCwU9Mcphd9zOAbndFBsPaFDsXoICaBAqIKal91+GHqEm916ZNn/fCdDj4vVF9UUj63bUKO" + + "7GMf4qeAE2XQz+uQqb7yrWiJzLHki65DBVn8fUE2zG0NK42CNu+4Mvy0Kt8QSbaemdCY3ljJ1j2c" + + "4Uhz5TSq4UDBnj4IeDnNSv35OXZg3/ghk7sfM7GhsbWbi7X6e4rs7vu7mlrKzkbzgp/wpCBhG0OK" + + "++kN2/FVI2EZenSPz+2UQoITNBHbwOOMW3JviuExcbuyIra+Rmq9UJNptVPn78eBUaU/3eM1k8Af" + + "vNrvuP+0Z5ackKSuidqEwEdUSxdSA7p67z8jOupUNoeWfYxNB17t8/70yKyvKojcjf24zvHggQe2" + + "JCwsPZ2aPWuRP4yA4HrUQBEpCcpJ6wd4tGdz9et3bta2gbQm8UqYEgoRP4fd8m2favTQT7aMjt4p" + + "XdAXAhk09EK3jCq948FkH13587pfUAz3PfpKWlLRo6dPB2t1/f2dzcvP+RRx7x+gZPnZ2dqqZfvZ" + + "7rVJ1PpA/Kyv7zsdMReSnaN1h2/4BGYaExtjVtQP+/euJE7PYE1cYKNOYqb0OOWMNxIgFiUOQA1R" + + "GuAxyJ2k8jhAv6vhzs6B3RUVEr0AuzOD7eVGe1WvHC29n+o6+feeYZn+63u3nzZguqNweVlCUc1y" + + "gIhlb2+1qzceO/2srW/ueuCL0wnuf49VRLK19PELDqdfq3MgYNXBgTE1PPzgkHUfu9996rfiTJoD" + + "h/jkEfWcl+y+Hwe6ZmxT+AhlWpq07a3bo5JITINcnTPldTXi/rOqZ1jFV8MZVCQX4bggQKj3ZDRM" + + "Qrw4cNzUtPTyt1h0tTnU7X8JvfPLFPKxsIDldFXpIIvb70nMhOv0ylxcXFuwWBmONi43P0EbqVhC" + + "OaxbxgezYLOqHYZIx+IHvU0KuHDMn4k8FgOO32THSgcVqRML0QUaSrQMFmR9Qk98bFGQ+6o5r9Kk" + + "Uox32ksKgYHxu7t6tO2vmdQ8LFuyDtug+3N+/YX9l+eJSS8peLw7cm8CbNkxIZdLpVdodzPnbBay" + + "AwyDgTfxgRof8gNTV5M7pt6TnuQNbha59++mkrChDQioaUpD+lNZ1APzTpNUQcB/PelOS41V0btZ" + + "y45Ijy2+ZHFCTshHfMnz9/V0b6wNTWjo7J1o7OyaIkZWFbsDyo6XDR9AhUJIQ7yRHuKMdz1TzH1c" + + "THx34WHR19Vru122U8D7vsdNKTTLi89NJLXp/Phg1rd881F61AlzMLSejRcY+2LKvJGPNbNgmw5Y" + + "Mkdfj1HsOi3Voq6A0VWJnxFyunE4Q1giC0sOuKk5Nm+WdCItHBkSNH4tr4zmUP7n3qlmZn60WjOE" + + "fKmZ/md05bvXDhwpfBDy7OoqKiZFGmL2JHQGGitaZGRY7jD/Ac2a3T6b+JjTV+ioLj7CzPhAhe3J" + + "Nog2h89dVXtTNEXEBBwU+NhGv5Mw7QRXBuH2CRcDy/JSEh9vd6vd5lTmWa0IsvvhgwQyhLnnzXXX" + + "fFYWdPwAEYiw89ClMjdnyjwyFFszI8DxIhOqvBILRgfXtcb+H38auyBY/XhkuYFl+XgueCAo93OM" + + "R7u9IdkPNv1kXI4ejoyCfiTKZKdz2sKLRYDmG/LtkKCwuHSjJZg96vHkMfsJ3WJ/VLWMHua8T6WV" + + "tb2zdvvvmmJibzkMmWcuLEielHOupu+Nux1VP2tFdeivbz8za2RUNkyzTu8vevELMPSBJ9ed68eX" + + "41rRcWzp9EeLmIUKLojm494cqRQmibjucb8eLVREXpm7qX0UnY2c9ERcmtiYkZzah1BMzYOGdO0a" + + "iICJ4JkmTsfO2oEX2OdTzq+VyWuTOvvfZaVSC25/fGPffMjhDF+CieN0TabFwEjgGB4yI5WbbxlO" + + "pkFBIy1o9pM0527wzW5qjBdL7++ut+yPR2Prm5uf1RQJlxiTiWxVPrdPw3RmPk2UhqQeDtNpu0Px" + + "B1YbBbZtjt4mxcShWgAdjA3sNJq92gFz7G63rAU47j9A04SWk2MYSMEMHOoGtoaJiDHWDSUUttzK" + + "62fSkN9hOxVJLpYDKwMYtkNlosVifHOd+YNcsckPyqeFH02EnYDbri0MLuUxYXnqcyxzHbgt7Gbp" + + "UZFRVlMxqNbS+88EJQN1eg0BKqqqrSIiIiEtk5slmKEBG9CtC0evVqdkuQkLy5faiA7cdVVlYmYb" + + "sl4yMKJwSC2ocTn0/abLZ693ItoDz44IPRTU1Ng9n+rnPfx4nMjo+6lStX+pSq40JCKG9bFyhIRq" + + "E6fyVOKoNE0cHURrQk2xydnbadeFE+yMvLC0pyIqbCgpcEoyN5AxsQ7ufQu2HKd4BQaz82QezYsc" + + "PVb9mdFVH78EuEXcgJEQ9oJzFYLJaojo4OcfLkyaGU1SxMmDBhwoQJEyZMmDBhwoQJEyZMmDA/cP" + + "4ffyGJt9D+/HMAAAAASUVORK5CYII="; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/Images/powered.js b/frontend/micro-ui-internals/packages/modules/core/src/Images/powered.js new file mode 100644 index 00000000000..13291b43eec --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/Images/powered.js @@ -0,0 +1,81 @@ +export const powered = + "data:image/png;base64,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"; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/Module.js b/frontend/micro-ui-internals/packages/modules/core/src/Module.js new file mode 100644 index 00000000000..fce9b7fa32a --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/Module.js @@ -0,0 +1,61 @@ +import React from "react"; +import { QueryClient, QueryClientProvider } from "react-query"; +import { Provider } from "react-redux"; +import { BrowserRouter as Router } from "react-router-dom"; +import { getI18n } from "react-i18next"; +import { Body, Loader } from "@egovernments/digit-ui-react-components"; + +import { DigitApp } from "./App"; + +import getStore from "./redux/store"; + +const DigitUIWrapper = ({ stateCode, enabledModules, moduleReducers }) => { + const { isLoading, data: initData } = Digit.Hooks.useInitStore(stateCode, enabledModules); + + if (isLoading) { + return ; + } + + const i18n = getI18n(); + // console.log("core module rendered", initData); + return ( + + + + + + + + ); +}; + +export const DigitUI = ({ stateCode, registry, enabledModules, moduleReducers }) => { + const userType = Digit.UserService.getType(); + const queryClient = new QueryClient({ + defaultOptions: { + queries: { + staleTime: 15 * 60 * 1000, + cacheTime: 30 * 60 * 1000, + }, + }, + }); + + const ComponentProvider = Digit.Contexts.ComponentProvider; + const DSO = Digit.UserService.hasAccess(["FSM_DSO"]); + + return ( +
+ + + + + +
+ ); +}; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/components/AppModules.js b/frontend/micro-ui-internals/packages/modules/core/src/components/AppModules.js new file mode 100644 index 00000000000..235827838b6 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/components/AppModules.js @@ -0,0 +1,43 @@ +import React, { useContext, useEffect } from "react"; +import { Route, Switch, useRouteMatch } from "react-router-dom"; + +import { AppHome } from "./Home"; +import Login from "../pages/citizen/Login"; +import EmployeeLogin from "../pages/employee/Login/index"; +import ChangePassword from "../pages/employee/ChangePassword/index"; +import ForgotPassword from "../pages/employee/ForgotPassword/index"; + +const getTenants = (codes, tenants) => { + return tenants.filter((tenant) => codes.map((item) => item.code).includes(tenant.code)); +}; + +export const AppModules = ({ stateCode, userType, modules, appTenants }) => { + const ComponentProvider = Digit.Contexts.ComponentProvider; + const { path } = useRouteMatch(); + + const appRoutes = modules.map(({ code, tenants }, index) => { + const Module = Digit.ComponentRegistryService.getComponent(`${code}Module`); + return ( + + + + ); + }); + + return ( + + {appRoutes} + {userType === "citizen" ? : } + {userType === "citizen" ? null : } + {userType === "citizen" ? null : } + {userType === "citizen" && ( + + + + )} + + + + + ); +}; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/components/ChangeLanguage.js b/frontend/micro-ui-internals/packages/modules/core/src/components/ChangeLanguage.js new file mode 100644 index 00000000000..da89400c46e --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/components/ChangeLanguage.js @@ -0,0 +1,51 @@ +import { ActionBar, Button, Dropdown } from "@egovernments/digit-ui-react-components"; +import React, { useState } from "react"; +import { CustomButton, Menu } from "@egovernments/digit-ui-react-components"; + +const ChangeLanguage = (prop) => { + const isDropdown = prop.dropdown || false; + const { data: storeData, isLoading } = Digit.Hooks.useStore.getInitData(); + const { languages, stateInfo } = storeData || {}; + const selectedLanguage = Digit.StoreData.getCurrentLanguage(); + const [selected, setselected] = useState(selectedLanguage); + const handleChangeLanguage = (language) => { + setselected(language.value); + Digit.LocalizationService.changeLanguage(language.value, stateInfo.code); + }; + + if (isLoading) return null; + + if (isDropdown) { + return ( +
+ language.value === selectedLanguage)} + optionKey={"label"} + select={handleChangeLanguage} + freeze={true} + customSelector={} + /> +
+ ); + } else { + return ( + +
Language
+
+ {languages.map((language, index) => ( +
+ handleChangeLanguage(language)} + > +
+ ))} +
+
+ ); + } +}; + +export default ChangeLanguage; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/components/Home.js b/frontend/micro-ui-internals/packages/modules/core/src/components/Home.js new file mode 100644 index 00000000000..7ad44af24f1 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/components/Home.js @@ -0,0 +1,43 @@ +import React, { useContext } from "react"; + +const CitizenHome = ({ modules }) => { + const ComponentProvider = Digit.Contexts.ComponentProvider; + const registry = useContext(ComponentProvider); + + const paymentModule = modules.filter(({ code }) => code === "Payment")[0]; + const moduleArr = modules.filter(({ code }) => code !== "Payment"); + const moduleArray = [paymentModule, ...moduleArr]; + const showQuickPay = moduleArr.some((module) => module.code === "QuickPayLinks"); + return ( + + {moduleArray.map(({ code }, index) => { + //console.log("in module map", code); + let Links = Digit.ComponentRegistryService.getComponent(`${code}Links`) || (() => ); + if (code === "Payment" && !showQuickPay) { + Links = () => ; + } + return ; + })} + + ); +}; + +const EmployeeHome = ({ modules }) => { + return ( +
+
+ {modules.map(({ code }, index) => { + const Card = Digit.ComponentRegistryService.getComponent(`${code}Card`) || (() => ); + return ; + })} +
+
+ ); +}; + +export const AppHome = ({ userType, modules }) => { + if (userType === "citizen") { + return ; + } + return ; +}; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/CitizenSideBar.js b/frontend/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/CitizenSideBar.js new file mode 100644 index 00000000000..5d68eb22ff3 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/CitizenSideBar.js @@ -0,0 +1,88 @@ +import React from "react"; +import { NavBar, LogoutIcon } from "@egovernments/digit-ui-react-components"; +import SideBarMenu from "../../../config/sidebar-menu"; +import { useTranslation } from "react-i18next"; +import { digitImg } from "../../../Images/digit.js"; +import { powered } from "../../../Images/powered.js"; + +const defaultImage = + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAO4AAADUCAMAAACs0e/bAAAAM1BMVEXK0eL" + + "/" + + "/" + + "/" + + "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"; + +const Profile = ({ info, stateName }) => ( +
+
+ +
+
+
{info.name}
+
+
+
{info?.mobileNumber}
+
+ {info.emailId && ( +
+
{info.emailId}
+
+ )} +
+); + +const PoweredBy = () => ( +
+ Powered by + DIGIT +
+); + +export const CitizenSideBar = ({ isOpen, isMobile, toggleSidebar, onLogout ,isEmployee=false}) => { + const { data: storeData, isFetched } = Digit.Hooks.useStore.getInitData(); + const { stateInfo } = storeData || {}; + const user = Digit.UserService.getUser(); + const { t } = useTranslation(); + + const closeSidebar = () => { + Digit.clikOusideFired = true; + toggleSidebar(false); + }; + + let menuItems = [...SideBarMenu(t, closeSidebar,isEmployee)]; + let profileItem; + if (isFetched && user && user.access_token) { + profileItem = ; + menuItems = [ + ...menuItems, + { + text: t("CORE_COMMON_LOGOUT"), + icon: , + populators: { + onClick: onLogout, + }, + }, + ]; + } + return ( +
+ } /> +
+ ); +}; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/EmployeeSideBar.js b/frontend/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/EmployeeSideBar.js new file mode 100644 index 00000000000..54d166b3ee8 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/EmployeeSideBar.js @@ -0,0 +1,51 @@ +import React from "react" +import { Link } from "react-router-dom" + +const EmployeeSideBar = () =>{ + return ( + + ) +} + +export default EmployeeSideBar \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/index.js b/frontend/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/index.js new file mode 100644 index 00000000000..e7cc6d6d97b --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/index.js @@ -0,0 +1,13 @@ +import React from "react"; +import { CitizenSideBar } from "./CitizenSideBar"; +import EmployeeSideBar from "./EmployeeSideBar"; + +const SideBar = ({ t, CITIZEN, isSidebarOpen, toggleSidebar, handleLogout, mobileView, userDetails }) => { + if (CITIZEN) return + else { + if(!mobileView && userDetails?.access_token) return + else return + } + } + +export default SideBar \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/TopBar.js b/frontend/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/TopBar.js new file mode 100644 index 00000000000..70a837f5868 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/TopBar.js @@ -0,0 +1,79 @@ +import React from "react"; +import { Dropdown, TopBar as TopBarComponent, Hamburger } from "@egovernments/digit-ui-react-components"; +import ChangeLanguage from "../ChangeLanguage"; + +const TextToImg = (props) => ( + + {props.name[0].toUpperCase()} + +); + +const TopBar = ({ + t, + stateInfo, + toggleSidebar, + isSidebarOpen, + handleLogout, + userDetails, + CITIZEN, + cityDetails, + mobileView, + userOptions, + handleUserDropdownSelection, + logoUrl, + } ) => { + + const updateSidebar = () => { + if (!Digit.clikOusideFired) { + toggleSidebar(true); + } else { + Digit.clikOusideFired = false; + } + }; + + if (CITIZEN) { + return ( + + ); + } + + return ( +
+ {mobileView ? : null} + +

+ {t(cityDetails?.i18nKey).toUpperCase()}{" "} + {t(`ULBGRADE_${cityDetails?.city?.ulbGrade.toUpperCase().replace(" ", "_").replace(".", "_")}`).toUpperCase()} +

+ {!mobileView &&
+
+ +
+ {userDetails?.access_token && ( +
+ } + /> +
+ )} + +
} +
+ ); + } + + export default TopBar \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/index.js b/frontend/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/index.js new file mode 100644 index 00000000000..9da30e311c3 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/index.js @@ -0,0 +1,45 @@ +import React, { useState } from "react" +import { LogoutIcon } from "@egovernments/digit-ui-react-components"; +import TopBar from "./TopBar"; +import SideBar from "./SideBar"; + +const TopBarSideBar = ({ t, stateInfo, userDetails, CITIZEN, cityDetails, mobileView, handleUserDropdownSelection, logoUrl }) => { + const [isSidebarOpen, toggleSidebar] = useState(false); + + const handleLogout = () => { + toggleSidebar(false); + Digit.UserService.logout(); + }; + + const userOptions = [{ name: t("CORE_COMMON_LOGOUT"), icon: , func: handleLogout }]; + + return ( + + + + + ); + } + + export default TopBarSideBar \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/modules/core/src/config/sidebar-menu.js b/frontend/micro-ui-internals/packages/modules/core/src/config/sidebar-menu.js new file mode 100644 index 00000000000..7c0ef808cc3 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/config/sidebar-menu.js @@ -0,0 +1,22 @@ +import React from "react"; +import { HomeIcon, LanguageIcon } from "@egovernments/digit-ui-react-components"; +import ChangeLanguage from "../components/ChangeLanguage"; + +const SideBarMenu = (t, closeSidebar,isEmployee) => [ + { + type: "link", + text: t("COMMON_BOTTOM_NAVIGATION_HOME"), + link: isEmployee?"/digit-ui/employee/":"/digit-ui/citizen/", + icon: , + populators: { + onClick: closeSidebar, + }, + }, + { + type: "component", + action: , + icon: , + }, +]; + +export default SideBarMenu; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/context/index.js b/frontend/micro-ui-internals/packages/modules/core/src/context/index.js new file mode 100644 index 00000000000..71c86df0f59 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/context/index.js @@ -0,0 +1,3 @@ +import React from "react"; + +export const ComponentProvider = React.createContext(); diff --git a/frontend/micro-ui-internals/packages/modules/core/src/hooks/useInterval.js b/frontend/micro-ui-internals/packages/modules/core/src/hooks/useInterval.js new file mode 100644 index 00000000000..7161e6d42e2 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/hooks/useInterval.js @@ -0,0 +1,20 @@ +import React, { useEffect, useRef } from "react"; + +function useInterval(callback, delay) { + const savedCallback = useRef(); + useEffect(() => { + savedCallback.current = callback; + }, [callback]); + + useEffect(() => { + function tick() { + savedCallback.current(); + } + if (delay !== null) { + const timer = setInterval(tick, delay); + return () => clearInterval(timer); + } + }, [delay]); +} + +export default useInterval; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/pages/citizen/Login/SelectMobileNumber.js b/frontend/micro-ui-internals/packages/modules/core/src/pages/citizen/Login/SelectMobileNumber.js new file mode 100644 index 00000000000..41228b8cbf7 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/pages/citizen/Login/SelectMobileNumber.js @@ -0,0 +1,19 @@ +import React from "react"; +import { CardText, FormStep } from "@egovernments/digit-ui-react-components"; +import { Link } from "react-router-dom"; + +const SelectMobileNumber = ({ t, onSelect, showRegisterLink, mobileNumber, onMobileChange, config }) => { + return ( + + ); +}; + +export default SelectMobileNumber; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/pages/citizen/Login/SelectName.js b/frontend/micro-ui-internals/packages/modules/core/src/pages/citizen/Login/SelectName.js new file mode 100644 index 00000000000..c23687e6fc8 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/pages/citizen/Login/SelectName.js @@ -0,0 +1,8 @@ +import React from "react"; +import { FormStep } from "@egovernments/digit-ui-react-components"; + +const SelectName = ({ config, onSelect, t }) => { + return ; +}; + +export default SelectName; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/pages/citizen/Login/SelectOtp.js b/frontend/micro-ui-internals/packages/modules/core/src/pages/citizen/Login/SelectOtp.js new file mode 100644 index 00000000000..cf81aed6be9 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/pages/citizen/Login/SelectOtp.js @@ -0,0 +1,35 @@ +import React, { useState } from "react"; +import { ButtonSelector, CardText, FormStep, LinkButton, OTPInput, CardLabelError } from "@egovernments/digit-ui-react-components"; +import useInterval from "../../../hooks/useInterval"; + +const SelectOtp = ({ config, otp, onOtpChange, onResend, onSelect, t, error }) => { + const [timeLeft, setTimeLeft] = useState(30); + + useInterval( + () => { + setTimeLeft(timeLeft - 1); + }, + timeLeft > 0 ? 1000 : null + ); + + const handleResendOtp = () => { + onResend(); + setTimeLeft(2); + }; + + return ( + + + {timeLeft > 0 ? ( + {`${t("CS_RESEND_ANOTHER_OTP")} ${timeLeft} ${t("CS_RESEND_SECONDS")}`} + ) : ( +

+ {t("CS_RESEND_OTP")} +

+ )} + {!error && {t("CS_INVALID_OTP")}} +
+ ); +}; + +export default SelectOtp; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/pages/citizen/Login/config.js b/frontend/micro-ui-internals/packages/modules/core/src/pages/citizen/Login/config.js new file mode 100644 index 00000000000..9f4afc6b07b --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/pages/citizen/Login/config.js @@ -0,0 +1,49 @@ +export const loginSteps = [ + { + texts: { + header: "CS_LOGIN_PROVIDE_MOBILE_NUMBER", + cardText: "CS_LOGIN_TEXT", + nextText: "CS_COMMONS_NEXT", + submitBarLabel: "CS_COMMONS_NEXT", + }, + inputs: [ + { + label: "CORE_COMMON_MOBILE_NUMBER", + type: "text", + name: "mobileNumber", + error: "ERR_HRMS_INVALID_MOB_NO", + validation: { + required: true, + minLength: 10, + maxLength: 10, + }, + }, + ], + }, + { + texts: { + header: "CS_LOGIN_OTP", + cardText: "CS_LOGIN_OTP_TEXT", + nextText: "CS_COMMONS_NEXT", + submitBarLabel: "CS_COMMONS_NEXT", + }, + }, + { + texts: { + header: "CS_LOGIN_PROVIDE_NAME", + cardText: "CS_LOGIN_NAME_TEXT", + nextText: "CS_COMMONS_NEXT", + submitBarLabel: "CS_COMMONS_NEXT", + }, + inputs: [ + { + label: "CORE_COMMON_NAME", + type: "text", + name: "name", + validation: { + required: true, + }, + }, + ], + }, +]; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/pages/citizen/Login/index.js b/frontend/micro-ui-internals/packages/modules/core/src/pages/citizen/Login/index.js new file mode 100644 index 00000000000..695a6b4ff00 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/pages/citizen/Login/index.js @@ -0,0 +1,216 @@ +import React, { useEffect, useMemo, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { AppContainer, BackButton, Toast } from "@egovernments/digit-ui-react-components"; +import { Route, Switch, useHistory, useRouteMatch, useLocation } from "react-router-dom"; +import { loginSteps } from "./config"; +import SelectMobileNumber from "./SelectMobileNumber"; +import SelectOtp from "./SelectOtp"; +import SelectName from "./SelectName"; + +const TYPE_REGISTER = { type: "register" }; +const TYPE_LOGIN = { type: "login" }; +const DEFAULT_USER = "digit-user"; +const DEFAULT_REDIRECT_URL = "/digit-ui/citizen"; + +const getFromLocation = (state, searchParams) => { + return state?.from || searchParams?.from || DEFAULT_REDIRECT_URL; +}; + +const Login = ({ stateCode, isUserRegistered = true }) => { + const { t } = useTranslation(); + const location = useLocation(); + const { path, url } = useRouteMatch(); + const history = useHistory(); + const [user, setUser] = useState(null); + const [error, setError] = useState(null); + const [isOtpValid, setIsOtpValid] = useState(true); + const [tokens, setTokens] = useState(null); + const [params, setParmas] = useState({}); + const [errorTO, setErrorTO] = useState(null); + const searchParams = Digit.Hooks.useQueryParams(); + + useEffect(() => { + let errorTimeout; + if (error) { + if (errorTO) { + clearTimeout(errorTO); + setErrorTO(null); + } + errorTimeout = setTimeout(() => { + console.log("clearing err"); + setError(""); + }, 5000); + setErrorTO(errorTimeout); + } + return () => { + errorTimeout && clearTimeout(errorTimeout); + }; + }, [error]); + + useEffect(() => { + if (!user) { + return; + } + Digit.UserService.setUser(user); + const redirectPath = location.state?.from || DEFAULT_REDIRECT_URL; + history.replace(redirectPath); + }, [user]); + + const stepItems = useMemo(() => + loginSteps.map( + (step) => { + const texts = {}; + for (const key in step.texts) { + texts[key] = t(step.texts[key]); + } + return { ...step, texts }; + }, + [loginSteps] + ) + ); + + const getUserType = () => Digit.UserService.getType(); + + const handleOtpChange = (otp) => { + setParmas({ ...params, otp }); + }; + + const handleMobileChange = (event) => { + const { value } = event.target; + setParmas({ ...params, mobileNumber: value }); + }; + + const selectMobileNumber = async (mobileNumber) => { + setParmas({ ...params, ...mobileNumber }); + const data = { + ...mobileNumber, + tenantId: stateCode, + userType: getUserType(), + }; + if (isUserRegistered) { + const [res, err] = await sendOtp({ otp: { ...data, ...TYPE_LOGIN } }); + if (!err) { + history.replace(`${path}/otp`, { from: getFromLocation(location.state, searchParams), role: location.state?.role }); + return; + } else { + history.replace(`/digit-ui/citizen/register/name`, { from: getFromLocation(location.state, searchParams) }); + } + if (location.state?.role) { + setError("User not registered."); + } + } else { + const [res, err] = await sendOtp({ otp: { ...data, ...TYPE_REGISTER } }); + if (!err) { + history.replace(`${path}/otp`, { from: getFromLocation(location.state, searchParams) }); + return; + } + } + }; + + const selectName = async (name) => { + const data = { + ...params, + tenantId: stateCode, + userType: getUserType(), + }; + setParmas({ ...params, ...name }); + history.replace(`${path}/otp`, { from: getFromLocation(location.state, searchParams) }); + }; + + const selectOtp = async () => { + try { + setIsOtpValid(true); + const { mobileNumber, otp, name } = params; + if (isUserRegistered) { + const requestData = { + username: mobileNumber, + password: otp, + tenantId: stateCode, + userType: getUserType(), + }; + + const { ResponseInfo, UserRequest: info, ...tokens } = await Digit.UserService.authenticate(requestData); + if (location.state?.role) { + const roleInfo = info.roles.find((userRole) => userRole.code === location.state.role); + if (!roleInfo || !roleInfo.code) { + setError(t("ES_ERROR_USER_NOT_PERMITTED")); + setTimeout(() => history.replace(DEFAULT_REDIRECT_URL), 5000); + return; + } + } + setUser({ info, ...tokens }); + } else if (!isUserRegistered) { + const requestData = { + name, + username: mobileNumber, + otpReference: otp, + tenantId: stateCode, + }; + + const { ResponseInfo, UserRequest: info, ...tokens } = await Digit.UserService.registerUser(requestData, stateCode); + setUser({ info, ...tokens }); + } + } catch (err) { + setIsOtpValid(false); + console.log(err); + } + }; + + const resendOtp = async () => { + const { mobileNumber } = params; + const data = { + mobileNumber, + tenantId: stateCode, + userType: getUserType(), + }; + if (!isUserRegistered) { + const [res, err] = await sendOtp({ otp: { ...data, ...TYPE_REGISTER } }); + } else if (isUserRegistered) { + const [res, err] = await sendOtp({ otp: { ...data, ...TYPE_LOGIN } }); + } + }; + + const sendOtp = async (data) => { + try { + const res = await Digit.UserService.sendOtp(data, stateCode); + return [res, null]; + } catch (err) { + return [null, err]; + } + }; + + return ( + + + + + + + + + + + + + {error && setError(null)} />} + + + ); +}; + +export default Login; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/pages/citizen/index.js b/frontend/micro-ui-internals/packages/modules/core/src/pages/citizen/index.js new file mode 100644 index 00000000000..1e4f73fe706 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/pages/citizen/index.js @@ -0,0 +1,36 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; +import { AppModules } from "../../components/AppModules"; +import TopBarSideBar from "../../components/TopBarSideBar" + +const CitizenApp = ({stateInfo, userDetails, CITIZEN, cityDetails, mobileView, handleUserDropdownSelection, logoUrl, DSO, stateCode, modules, appTenants, sourceUrl, pathname}) => { + const { t } = useTranslation(); + const classname = Digit.Hooks.fsm.useRouteSubscription(pathname); + + return
+ +
+ +
+ { + window.open("https://www.digit.org/", "_blank").focus(); + }} + /> +
+
+
+} + +export default CitizenApp \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/ChangePassword/changePassword.js b/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/ChangePassword/changePassword.js new file mode 100644 index 00000000000..06cd449af07 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/ChangePassword/changePassword.js @@ -0,0 +1,134 @@ +import React, { useState, useEffect } from "react"; +import { FormComposer, Dropdown, CardSubHeader, CardLabel, TextInput, CardLabelDesc } from "@egovernments/digit-ui-react-components"; +import PropTypes from "prop-types"; +import { useHistory } from "react-router-dom"; + +const ChangePasswordComponent = ({ config: propsConfig, t }) => { + const [user, setUser] = useState(null); + const { mobile_number: mobileNumber, tenantId } = Digit.Hooks.useQueryParams(); + const history = useHistory(); + const getUserType = () => Digit.UserService.getType(); + let otpReference = ""; + useEffect(() => { + if (!user) { + return; + } + Digit.UserService.setUser(user); + const redirectPath = location.state?.from || "/digit-ui/employee"; + history.replace(redirectPath); + }, [user]); + + const onResendOTP = async () => { + const requestData = { + otp: { + mobileNumber, + userType: getUserType().toUpperCase(), + type: "passwordreset", + tenantId, + }, + }; + try { + await Digit.UserService.sendOtp(requestData, tenantId); + alert("OTP resend successfull"); + } catch (err) { + console.log({ err }); + alert(err?.response?.data?.error_description || "Invalid login credentials!"); + } + }; + + const onChangePassword = async (data) => { + try { + if (data.newPassword !== data.confirmPassword) { + return alert(t("ERR_PASSWORD_DO_NOT_MATCH")); + } + + const requestData = { + ...data, + otpReference, + tenantId, + type: getUserType().toUpperCase(), + }; + const response = await Digit.UserService.changePassword(requestData, tenantId); + console.log({ response }); + navigateToLogin(); + } catch (err) { + alert(err?.response?.data?.Errors[0]?.message || "Something went wrong!"); + } + }; + + const updateOtp = (data) => { + otpReference = data.target.value || ""; + }; + + const navigateToLogin = () => { + history.replace("/digit-ui/employee/login"); + }; + + const [username, password, confirmPassword] = propsConfig.inputs; + const config = [ + { + body: [ + { + label: t(username.label), + type: username.type, + populators: { + name: username.name, + }, + isMandatory: true, + }, + { + label: t(password.label), + type: password.type, + populators: { + name: password.name, + }, + isMandatory: true, + }, + { + label: t(confirmPassword.label), + type: confirmPassword.type, + populators: { + name: confirmPassword.name, + }, + isMandatory: true, + }, + ], + }, + ]; + + return ( + + {propsConfig.texts.header} +
+ {t("CORE_OTP_SENT_MESSAGE")} + {mobileNumber} + {t("CORE_EMPLOYEE_OTP_CHECK_MESSAGE")} +
+ {t("CORE_OTP_OTP")} * + +
+
+ {t("CORE_OTP_RESEND")} +
+
+
+ ); +}; + +ChangePasswordComponent.propTypes = { + loginParams: PropTypes.any, +}; + +ChangePasswordComponent.defaultProps = { + loginParams: null, +}; + +export default ChangePasswordComponent; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/ChangePassword/config.js b/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/ChangePassword/config.js new file mode 100644 index 00000000000..2fd1b659370 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/ChangePassword/config.js @@ -0,0 +1,28 @@ +export const config = [ + { + texts: { + header: "CORE_COMMON_FORGOT_PASSWORD_LABEL", + submitButtonLabel: "CORE_COMMON_CHANGE_PASSWORD", + }, + inputs: [ + { + label: "CORE_LOGIN_USERNAME", + type: "text", + name: "userName", + error: "ERR_HRMS_INVALID_USERNAME", + }, + { + label: "CORE_LOGIN_NEW_PASSWORD", + type: "password", + name: "newPassword", + error: "CORE_COMMON_REQUIRED_ERRMSG", + }, + { + label: "CORE_LOGIN_CONFIRM_NEW_PASSWORD", + type: "password", + name: "confirmPassword", + error: "CORE_COMMON_REQUIRED_ERRMSG", + }, + ], + }, +]; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/ChangePassword/index.js b/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/ChangePassword/index.js new file mode 100644 index 00000000000..f73ab5de749 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/ChangePassword/index.js @@ -0,0 +1,36 @@ +import React, { useMemo } from "react"; +import { useTranslation } from "react-i18next"; +import { AppContainer } from "@egovernments/digit-ui-react-components"; +import { Route, Switch, useRouteMatch } from "react-router-dom"; +import { config } from "./config"; +import ChangePasswordComponent from "./changePassword"; + +const EmployeeChangePassword = () => { + const { t } = useTranslation(); + const { path } = useRouteMatch(); + + const params = useMemo(() => + config.map( + (step) => { + const texts = {}; + for (const key in step.texts) { + texts[key] = t(step.texts[key]); + } + return { ...step, texts }; + }, + [config] + ) + ); + + return ( + + + + + + + + ); +}; + +export default EmployeeChangePassword; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/ForgotPassword/config.js b/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/ForgotPassword/config.js new file mode 100644 index 00000000000..0a1e6bbd662 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/ForgotPassword/config.js @@ -0,0 +1,23 @@ +export const loginConfig = [ + { + texts: { + header: "CS_FORGOT_PASSWORD", + submitButtonLabel: "CS_CONTINUE", + secondaryButtonLabel: "CS_BACK_TO_LOGIN", + }, + inputs: [ + { + label: "CORE_COMMON_MOBILE_NUMBER", + type: "text", + name: "mobileNumber", + error: "ERR_HRMS_INVALID_MOBILE_NUMBER", + }, + { + label: "CORE_COMMON_CITY", + type: "custom", + name: "city", + error: "ERR_HRMS_INVALID_CITY", + }, + ], + }, +]; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/ForgotPassword/forgotPassword.js b/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/ForgotPassword/forgotPassword.js new file mode 100644 index 00000000000..ec35a287a5e --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/ForgotPassword/forgotPassword.js @@ -0,0 +1,109 @@ +import React, { useState, useEffect } from "react"; +import { FormComposer, Dropdown } from "@egovernments/digit-ui-react-components"; +import PropTypes from "prop-types"; +import { useHistory } from "react-router-dom"; + +const ForgotPassword = ({ config: propsConfig, t }) => { + const cities = Digit.Hooks.fsm.useTenants(); + const [user, setUser] = useState(null); + const history = useHistory(); + const getUserType = () => Digit.UserService.getType(); + + useEffect(() => { + if (!user) { + return; + } + Digit.UserService.setUser(user); + const redirectPath = location.state?.from || "/digit-ui/employee"; + history.replace(redirectPath); + }, [user]); + + const onForgotPassword = async (data) => { + if (!data.city) { + alert("Please Select City!"); + return; + } + const requestData = { + otp: { + ...data, + userType: getUserType().toUpperCase(), + type: "passwordreset", + tenantId: data.city.code, + }, + }; + try { + await Digit.UserService.sendOtp(requestData, data.city.code); + history.push(`/digit-ui/employee/change-password?mobile_number=${data.mobileNumber}&tenantId=${data.city.code}`); + } catch (err) { + console.log({ err }); + alert(err?.response?.data?.error_description || "Invalid login credentials!"); + } + }; + + const navigateToLogin = () => { + history.replace("/digit-ui/employee/login"); + }; + + console.log({ propsConfig }); + const [userId, city] = propsConfig.inputs; + const config = [ + { + body: [ + { + label: t(userId.label), + type: userId.type, + populators: { + name: userId.name, + }, + isMandatory: true, + }, + { + label: t(city.label), + type: city.type, + populators: { + name: city.name, + customProps: {}, + component: (props, customProps) => ( + { + props.onChange(d); + }} + {...customProps} + /> + ), + }, + isMandatory: true, + }, + ], + }, + ]; + + return ( + + ); +}; + +ForgotPassword.propTypes = { + loginParams: PropTypes.any, +}; + +ForgotPassword.defaultProps = { + loginParams: null, +}; + +export default ForgotPassword; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/ForgotPassword/index.js b/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/ForgotPassword/index.js new file mode 100644 index 00000000000..17d37634e65 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/ForgotPassword/index.js @@ -0,0 +1,37 @@ +import React, { useMemo } from "react"; +import { useTranslation } from "react-i18next"; +import { AppContainer } from "@egovernments/digit-ui-react-components"; +import { Route, Switch, useRouteMatch } from "react-router-dom"; +import { loginConfig } from "./config"; +import ForgotPasswordComponent from "./forgotPassword"; + +const EmployeeForgotPassword = () => { + const { t } = useTranslation(); + const { path } = useRouteMatch(); + + const params = useMemo(() => + loginConfig.map( + (step) => { + const texts = {}; + for (const key in step.texts) { + texts[key] = t(step.texts[key]); + } + return { ...step, texts }; + }, + [loginConfig] + ) + ); + + console.log({ params }); + return ( + + + + + + + + ); +}; + +export default EmployeeForgotPassword; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/Login/config.js b/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/Login/config.js new file mode 100644 index 00000000000..8813c617927 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/Login/config.js @@ -0,0 +1,29 @@ +export const loginConfig = [ + { + texts: { + header: "CS_LOGIN", + submitButtonLabel: "CS_LOGIN", + secondaryButtonLabel: "CS_FORGOT_PASSWORD", + }, + inputs: [ + { + label: "CORE_COMMON_USER_ID", + type: "text", + name: "username", + error: "ERR_HRMS_INVALID_USER_ID", + }, + { + label: "CORE_COMMON_PASSWORD", + type: "password", + name: "password", + error: "ERR_HRMS_WRONG_PASSWORD", + }, + { + label: "CORE_COMMON_CITY", + type: "custom", + name: "city", + error: "ERR_HRMS_INVALID_CITY", + }, + ], + }, +]; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/Login/index.js b/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/Login/index.js new file mode 100644 index 00000000000..0817b97b987 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/Login/index.js @@ -0,0 +1,36 @@ +import React, { useMemo } from "react"; +import { useTranslation } from "react-i18next"; +import { AppContainer } from "@egovernments/digit-ui-react-components"; +import { Route, Switch, useRouteMatch } from "react-router-dom"; +import { loginConfig } from "./config"; +import LoginComponent from "./login"; + +const EmployeeLogin = () => { + const { t } = useTranslation(); + const { path } = useRouteMatch(); + + const loginParams = useMemo(() => + loginConfig.map( + (step) => { + const texts = {}; + for (const key in step.texts) { + texts[key] = t(step.texts[key]); + } + return { ...step, texts }; + }, + [loginConfig] + ) + ); + + return ( + + + + + + + + ); +}; + +export default EmployeeLogin; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/Login/login.js b/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/Login/login.js new file mode 100644 index 00000000000..dffc4dd2c1e --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/Login/login.js @@ -0,0 +1,114 @@ +import React, { useState, useEffect } from "react"; +import { FormComposer, Dropdown, Loader } from "@egovernments/digit-ui-react-components"; +import PropTypes from "prop-types"; +import { useHistory } from "react-router-dom"; + +const Login = ({ config: propsConfig, t }) => { + const {data: cities, isLoading} = Digit.Hooks.useTenants(); + const [user, setUser] = useState(null); + const history = useHistory(); + const getUserType = () => Digit.UserService.getType(); + + useEffect(() => { + if (!user) { + return; + } + Digit.UserService.setUser(user); + const redirectPath = location.state?.from || "/digit-ui/employee"; + history.replace(redirectPath); + }, [user]); + + const onLogin = async (data) => { + if (!data.city) { + alert("Please Select City!"); + return; + } + const requestData = { + ...data, + userType: getUserType(), + }; + requestData.tenantId = data.city.code; + delete requestData.city; + try { + const { UserRequest: info, ...tokens } = await Digit.UserService.authenticate(requestData); + setUser({ info, ...tokens }); + } catch (err) { + console.log({ err }); + alert(err?.response?.data?.error_description || "Invalid login credentials!"); + } + }; + + const onForgotPassword = () => { + history.push("/digit-ui/employee/forgot-password"); + }; + + console.log({ propsConfig }); + const [userId, password, city] = propsConfig.inputs; + const config = [ + { + body: [ + { + label: t(userId.label), + type: userId.type, + populators: { + name: userId.name, + }, + isMandatory: true, + }, + { + label: t(password.label), + type: password.type, + populators: { + name: password.name, + }, + isMandatory: true, + }, + { + label: t(city.label), + type: city.type, + populators: { + name: city.name, + customProps: {}, + component: (props, customProps) => ( + { + props.onChange(d); + }} + {...customProps} + /> + ), + }, + isMandatory: true, + }, + ], + }, + ]; + + return isLoading ? : ( + + ); +}; + +Login.propTypes = { + loginParams: PropTypes.any, +}; + +Login.defaultProps = { + loginParams: null, +}; + +export default Login; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/index.js b/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/index.js new file mode 100644 index 00000000000..cb6501ccde1 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/pages/employee/index.js @@ -0,0 +1,38 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; +import { AppModules } from "../../components/AppModules"; +import TopBarSideBar from "../../components/TopBarSideBar" + +const EmployeeApp = ({stateInfo, userDetails, CITIZEN, cityDetails, mobileView, handleUserDropdownSelection, logoUrl, DSO, stateCode, modules, appTenants, sourceUrl, pathname}) => { + const { t } = useTranslation(); + + return
+ +
+ {/*
*/} +
+ +
+
+ { + window.open("https://www.digit.org/", "_blank").focus(); + }} + /> +
+
+
+} + +export default EmployeeApp \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/modules/core/src/redux/reducers/index.js b/frontend/micro-ui-internals/packages/modules/core/src/redux/reducers/index.js new file mode 100644 index 00000000000..11591c2b250 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/redux/reducers/index.js @@ -0,0 +1,8 @@ +export const commonReducer = (defaultData) => (state = defaultData, action) => { + switch (action.type) { + case "LANGUAGE_SELECT": + return { ...state, selectedLanguage: action.payload }; + default: + return state; + } +}; diff --git a/frontend/micro-ui-internals/packages/modules/core/src/redux/store.js b/frontend/micro-ui-internals/packages/modules/core/src/redux/store.js new file mode 100644 index 00000000000..3d2f22ee016 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/core/src/redux/store.js @@ -0,0 +1,24 @@ +import { createStore, combineReducers, compose, applyMiddleware } from "redux"; +import thunk from "redux-thunk"; +import { commonReducer } from "./reducers"; + +const getRootReducer = (defaultStore, moduleReducers) => + combineReducers({ + common: commonReducer(defaultStore), + ...moduleReducers, + }); + +const middleware = [thunk]; + +const composeEnhancers = + typeof window === "object" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({}) : compose; + +const enhancer = composeEnhancers( + applyMiddleware(...middleware) + // other store enhancers if any +); + +const getStore = (defaultStore, moduleReducers = {}) => { + return createStore(getRootReducer(defaultStore, moduleReducers), enhancer); +}; +export default getStore; diff --git a/frontend/micro-ui-internals/packages/modules/dss/package.json b/frontend/micro-ui-internals/packages/modules/dss/package.json new file mode 100644 index 00000000000..0aff4659ddd --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/dss/package.json @@ -0,0 +1,37 @@ +{ + "name": "@egovernments/digit-ui-module-dss", + "version": "1.3.0", + "license": "MIT", + "main": "dist/index.js", + "module": "dist/index.modern.js", + "source": "src/Module.js", + "files": [ + "dist" + ], + "scripts": { + "start": "microbundle-crl watch --no-compress --format modern,cjs", + "build": "microbundle-crl --no-compress --format modern,cjs", + "prepublish": "yarn build" + }, + "peerDependencies": { + "react": "^17.0.0", + "react-router-dom": "^5.2.0" + }, + "dependencies": { + "@egovernments/digit-ui-libraries": "^1.3.0", + "@egovernments/digit-ui-react-components": "^1.3.0", + "react": "^17.0.0", + "react-date-range": "1.3.0", + "react-dom": "^17.0.0", + "react-hook-form": "^6.7.0", + "react-i18next": "^11.7.3", + "react-query": "^3.6.1", + "react-redux": "^7.2.1", + "react-router-dom": "^5.2.0", + "react-table": "^7.6.1", + "react-time-picker": "4.2.0", + "recharts": "^2.0.9", + "redux": "^4.0.5", + "redux-thunk": "^2.3.0" + } +} diff --git a/frontend/micro-ui-internals/packages/modules/dss/src/Module.js b/frontend/micro-ui-internals/packages/modules/dss/src/Module.js new file mode 100644 index 00000000000..401eeafe0e7 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/dss/src/Module.js @@ -0,0 +1,74 @@ +import React, { Fragment } from "react"; +import { useTranslation } from "react-i18next"; +// import { useRouteMatch } from "react-router"; +import { BackButton, Loader, PrivateRoute, BreadCrumb } from "@egovernments/digit-ui-react-components"; +import DashBoard from "./pages"; +import { Route, Switch, useRouteMatch, useLocation } from "react-router-dom"; +import Overview from "./pages/Overview"; +import DSSCard from "./components/DSSCard"; +import DrillDown from "./pages/DrillDown"; + +const DssBreadCrumb = ({ location }) => { + const { t } = useTranslation(); + const crumbs = [ + { + path: "/digit-ui/employee", + content: t("ES_COMMON_HOME"), + show: true, + }, + { + path: "/digit-ui/employee/dss/dashboard/fsm", + content: t("ES_COMMON_DSS"), + show: true, + }, + { + path: "/digit-ui/employee/dss/drilldown", + content: t("ES_COMMON_DSS_DRILL"), + show: location.pathname.includes("drilldown") ? true : false, + }, + ]; + + return ; +}; + +const Routes = ({ path, stateCode }) => { + const location = useLocation(); + return ( +
+ + + } /> + } /> + +
+ ); +}; + +const DSSModule = ({ stateCode, userType, tenants }) => { + const moduleCode = "DSS"; + // const { path, url } = useRouteMatch(); + const { path, url } = useRouteMatch(); + const language = Digit.StoreData.getCurrentLanguage(); + const { isLoading, data: store } = Digit.Services.useStore({ stateCode, moduleCode, language }); + + if (isLoading) { + return ; + } + + Digit.SessionStorage.set("DSS_TENANTS", tenants); + + if (userType !== "citizen") { + return ; + } +}; + +const componentsToRegister = { + DSSModule, + DSSCard, +}; + +export const initDSSComponents = () => { + Object.entries(componentsToRegister).forEach(([key, value]) => { + Digit.ComponentRegistryService.setComponent(key, value); + }); +}; diff --git a/frontend/micro-ui-internals/packages/modules/dss/src/components/CustomAreaChart.js b/frontend/micro-ui-internals/packages/modules/dss/src/components/CustomAreaChart.js new file mode 100644 index 00000000000..2d4135b60ea --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/dss/src/components/CustomAreaChart.js @@ -0,0 +1,161 @@ +import React, { useContext, useEffect, useMemo, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { ResponsiveContainer, AreaChart, Area, CartesianGrid, Line, LineChart, XAxis, YAxis, Tooltip, Legend, Label } from "recharts"; +import { Card, CardHeader, Loader } from "@egovernments/digit-ui-react-components"; +import { startOfMonth, endOfMonth, sub, getTime, format, getDaysInMonth } from "date-fns"; +import FilterContext from "./FilterContext"; + +const getValue = (plot) => plot.value; + +const renderUnits = (t, denomination) => { + switch (denomination) { + case "Unit": + return `(${t("DSS_UNIT")})`; + case "Lac": + return `(${t("DSS_LAC")})`; + case "Cr": + return `(${t("DSS_CR")})`; + } +}; + +const CustomAreaChart = ({ xDataKey = "name", yDataKey = getValue, data }) => { + const { t } = useTranslation(); + const { id } = data; + const tenantId = Digit.ULBService.getCurrentTenantId(); + const { value } = useContext(FilterContext); + const [totalCapacity, setTotalCapacity] = useState(0); + const [totalWaste, setTotalWaste] = useState(0); + const stateTenant = tenantId.split(".")[0]; + const { isMdmsLoading, data: mdmsData } = Digit.Hooks.useCommonMDMS(stateTenant, "FSM", "FSTPPlantInfo", { + enabled: id === "fsmCapacityUtilization", + }); + const { isLoading, data: response } = Digit.Hooks.dss.useGetChart({ + key: id, + type: "metric", + tenantId, + requestDate: { ...value?.requestDate, startDate: value?.range?.startDate?.getTime(), endDate: value?.range?.endDate?.getTime() }, + filters: value?.filters, + }); + + useEffect(() => { + if (mdmsData) { + let fstpPlants = mdmsData; + if (value?.filters?.tenantId.length > 0) { + fstpPlants = mdmsData.filter((plant) => value?.filters?.tenantId?.some((tenant) => plant?.ULBS.includes(tenant))); + } + const totalCapacity = fstpPlants.reduce((acc, plant) => acc + Number(plant?.PlantOperationalCapacityKLD), 0); + setTotalCapacity(totalCapacity); + } + }, [mdmsData, value]); + + useEffect(() => { + if (response) { + const totalWaste = Math.round(response?.responseData?.data?.[0]?.plots[response?.responseData?.data?.[0]?.plots.length - 1]?.value); + setTotalWaste(totalWaste); + } + }, [response]); + + const chartData = useMemo(() => { + if (id !== "fsmCapacityUtilization") { + return response?.responseData?.data?.[0]?.plots; + } + return response?.responseData?.data?.[0]?.plots.map((plot) => { + const [month, year] = plot?.name.split("-"); + const totalDays = getDaysInMonth(Date.parse(`${month} 1, ${year}`)); + const value = Math.round((plot?.value / (totalCapacity * totalDays)) * 100); + return { ...plot, value }; + }); + }, [response, totalCapacity]); + + const renderPlot = (plot) => { + if (id === "fsmCapacityUtilization") { + return Number(plot?.value.toFixed(1)); + } + const { denomination } = value; + switch (denomination) { + case "Unit": + return plot?.value; + case "Lac": + return Number((plot.value / 100000).toFixed(2)); + case "Cr": + return Number((plot.value / 10000000).toFixed(2)); + } + }; + + const renderLegend = (value) => {value}; + + const tickFormatter = (value) => { + if (typeof value === "string") { + return value.replace("-", ", "); + } + return value; + }; + + const renderTooltip = ({ payload, label, unit }) => { + return ( +
+

{`${tickFormatter(label)} :${id === "fsmTotalCumulativeCollection" ? " ₹" : ""}${payload?.[0]?.value}${ + id === "fsmTotalCumulativeCollection" ? (value?.denomination !== "Unit" ? value?.denomination : "") : `%` + }`}

+
+ ); + }; + + if (isLoading) { + return ; + } + + return ( +
+ {id === "fsmCapacityUtilization" && ( +

+ {t("DSS_FSM_TOTAL_SLUDGE_TREATED")} - {totalWaste} {t("DSS_KL")} +

+ )} + + {!chartData || chartData?.length === 0 ? ( +
+

{t("DSS_NO_DATA")}

+
+ ) : ( + + + + + + + + + + + + + + )} +
+
+ ); +}; + +export default CustomAreaChart; diff --git a/frontend/micro-ui-internals/packages/modules/dss/src/components/CustomBarChart.js b/frontend/micro-ui-internals/packages/modules/dss/src/components/CustomBarChart.js new file mode 100644 index 00000000000..a9ac94e7991 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/dss/src/components/CustomBarChart.js @@ -0,0 +1,97 @@ +import React, { Fragment, useContext, useMemo } from "react"; +import { useTranslation } from "react-i18next"; +import { useHistory } from "react-router-dom"; +import { startOfMonth, endOfMonth, getTime } from "date-fns"; +import { Loader } from "@egovernments/digit-ui-react-components"; +import { ResponsiveContainer, Bar, BarChart, CartesianGrid, Legend, Tooltip, XAxis, YAxis } from "recharts"; +import FilterContext from "./FilterContext"; + +const CustomLabel = ({ x, y, name, stroke, value }) => { + const { t } = useTranslation(); + return ( + <> + + {`${value}%`} + + + {t(name)} + + + ); +}; + +const CustomBarChart = ({ + xDataKey = "value", + xAxisType = "number", + yAxisType = "category", + yDataKey = "name", + hideAxis = true, + layout = "vertical", + fillColor = "#00703C", + showGrid = false, + showDrillDown = false, + data, + title, +}) => { + const { id } = data; + const { t } = useTranslation(); + const history = useHistory(); + const { value } = useContext(FilterContext); + const tenantId = Digit.ULBService.getCurrentTenantId(); + const { isLoading, data: response } = Digit.Hooks.dss.useGetChart({ + key: id, + type: "metric", + tenantId, + requestDate: { ...value?.requestDate, startDate: value?.range?.startDate?.getTime(), endDate: value?.range?.endDate?.getTime() }, + filters: value?.filters, + }); + + const chartData = useMemo(() => { + if (!response) return null; + return response?.responseData?.data?.map((bar) => { + return { + name: t(bar?.plots?.[0].name), + value: bar?.plots?.[0].value, + }; + }); + }, [response]); + + const goToDrillDownCharts = () => { + history.push(`/digit-ui/employee/dss/drilldown?chart=${response?.responseData?.drillDownChartId}&ulb=${value?.filters?.tenantId}&title=${title}`); + }; + if (isLoading) { + return ; + } + if (chartData?.length === 0) { + return ( +
+

{t("DSS_NO_DATA")}

+
+ ); + } + return ( + + + + {showGrid && } + + + } + radius={[10, 10, 10, 10]} + /> + + + {showDrillDown && ( +

+ {t("DSS_SHOW_MORE")} +

+ )} +
+ ); +}; + +export default CustomBarChart; diff --git a/frontend/micro-ui-internals/packages/modules/dss/src/components/CustomHorizontalBarChart.js b/frontend/micro-ui-internals/packages/modules/dss/src/components/CustomHorizontalBarChart.js new file mode 100644 index 00000000000..0d45fa343fa --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/dss/src/components/CustomHorizontalBarChart.js @@ -0,0 +1,128 @@ +import React, { useContext, useMemo, Fragment } from "react"; +import { useTranslation } from "react-i18next"; +import { startOfMonth, endOfMonth, getTime } from "date-fns"; +import { Loader, ResponseComposer } from "@egovernments/digit-ui-react-components"; +import { Bar, BarChart, CartesianGrid, Legend, ResponsiveContainer, Tooltip, XAxis, YAxis, Text } from "recharts"; +import FilterContext from "./FilterContext"; +import { useHistory } from "react-router-dom"; + +const barColors = ["#048BD0", "#FBC02D", "#8E29BF"]; + +const CustomHorizontalBarChart = ({ + data, + xAxisType = "category", + yAxisType = "number", + xDataKey = "name", + yDataKey = "", + xAxisLabel = "", + yAxisLabel = "", + layout = "horizontal", + title, + showDrillDown = false, +}) => { + const { id } = data; + const { t } = useTranslation(); + const history = useHistory(); + const { value } = useContext(FilterContext); + const tenantId = Digit.ULBService.getCurrentTenantId(); + const { isLoading, data: response } = Digit.Hooks.dss.useGetChart({ + key: id, + type: "metric", + tenantId, + requestDate: { ...value?.requestDate, startDate: value?.range?.startDate?.getTime(), endDate: value?.range?.endDate?.getTime() }, + filters: value?.filters, + }); + + const constructChartData = (data) => { + let result = {}; + for (let i = 0; i < data?.length; i++) { + const row = data[i]; + for (let j = 0; j < row.plots.length; j++) { + const plot = row.plots[j]; + result[plot.name] = { ...result[plot.name], [row.headerName]: plot.value }; + } + } + return Object.keys(result).map((key) => { + return { + name: key, + ...result[key], + }; + }); + }; + + const goToDrillDownCharts = () => { + history.push(`/digit-ui/employee/dss/drilldown?chart=${response?.responseData?.drillDownChartId}&ulb=${value?.filters?.tenantId}&title=${title}`); + }; + + const tooltipFormatter = (value, name) => { + if (id === "fsmMonthlyWasteCal") { + return [`${Math.round((value + Number.EPSILON) * 100) / 100} ${t("DSS_KL")}`, name]; + } + return [Math.round((value + Number.EPSILON) * 100) / 100, name]; + }; + + const chartData = useMemo(() => constructChartData(response?.responseData?.data), [response]); + + const renderLegend = (value) => {value}; + + const tickFormatter = (value) => { + if (typeof value === "string") { + return value.replace("-", ", "); + } + return value; + }; + + if (isLoading) { + return ; + } + + // if (chartData?.length === 0) { + // return null; + // } + + const bars = response?.responseData?.data?.map((bar) => bar?.headerName); + + return ( + + + {chartData?.length === 0 ? ( +
+

{t("DSS_NO_DATA")}

+
+ ) : ( + + + + + {bars?.map((bar, id) => ( + 1 ? 1 : id} /> + ))} + + + + )} +
+ {showDrillDown && ( +

+ {t("DSS_SHOW_MORE")} +

+ )} +
+ ); +}; + +export default CustomHorizontalBarChart; diff --git a/frontend/micro-ui-internals/packages/modules/dss/src/components/CustomPieChart.js b/frontend/micro-ui-internals/packages/modules/dss/src/components/CustomPieChart.js new file mode 100644 index 00000000000..a955fd8b404 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/dss/src/components/CustomPieChart.js @@ -0,0 +1,111 @@ +import React, { useContext, useMemo } from "react"; +import { useTranslation } from "react-i18next"; +import { startOfMonth, endOfMonth, getTime } from "date-fns"; +import { ResponsiveContainer, Cell, Legend, Pie, PieChart, Tooltip } from "recharts"; +import { Card, Loader } from "@egovernments/digit-ui-react-components"; +import FilterContext from "./FilterContext"; + +const COLORS = ["#048BD0", "#FBC02D", "#8E29BF", "#EA8A3B", "#0BABDE", "#FFBB28", "#FF8042"]; + +const CustomPieChart = ({ dataKey = "value", data }) => { + const { id } = data; + const tenantId = Digit.ULBService.getCurrentTenantId(); + const { t } = useTranslation(); + const { value } = useContext(FilterContext); + const { isLoading, data: response } = Digit.Hooks.dss.useGetChart({ + key: id, + type: "metric", + tenantId, + requestDate: { ...value?.requestDate, startDate: value?.range?.startDate?.getTime(), endDate: value?.range?.endDate?.getTime() }, + filters: value?.filters, + }); + + const chartData = useMemo(() => { + if (!response) return null; + const compareFn = (a, b) => b.value - a.value; + return response?.responseData?.data?.[0]?.plots.sort(compareFn).reduce((acc, plot, index) => { + if (index < 4) acc = acc.concat(plot); + else if (index === 4) acc = acc.concat({ label: null, name: "DSS.OTHERS", value: plot?.value, symbol: "amount" }); + else acc[4].value += plot?.value; + return acc; + }, []); + }, [response]); + + const renderLegend = (value) => {t(`PROPERTYTYPE_MASTERS_${value}`)}; + + const renderCustomLabel = (args) => { + const { value, endAngle, startAngle, x, cx, y, cy, percent, name } = args; + const diffAngle = endAngle - startAngle; + if (diffAngle < 7) { + return null; + } + return ( + cx ? "start" : "end"} + > + {`${(percent * 100).toFixed(0)}%`} + + ); + }; + + const renderTooltip = ({ payload, label }) => { + return ( +
+

{`${t(`PROPERTYTYPE_MASTERS_${payload?.[0]?.name}`)}: ${Digit.Utils.dss.formatter(payload?.[0]?.value, payload?.[0]?.payload?.payload?.symbol, value?.denomination, false)}`}

+
+ ); + } + + if (isLoading) { + return ; + } + if (chartData?.length === 0) { + return ( +
+

{t("DSS_NO_DATA")}

+
+ ); + } + return ( + + + + {response?.responseData?.data?.[0]?.plots.map((entry, index) => ( + + ))} + + + + + + ); +}; + +export default CustomPieChart; diff --git a/frontend/micro-ui-internals/packages/modules/dss/src/components/CustomTable.js b/frontend/micro-ui-internals/packages/modules/dss/src/components/CustomTable.js new file mode 100644 index 00000000000..ecaf4a19679 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/dss/src/components/CustomTable.js @@ -0,0 +1,272 @@ +import React, { Fragment, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { startOfMonth, endOfMonth, getTime, subYears, differenceInCalendarDays } from "date-fns"; +import { UpwardArrow, TextInput, Loader, Table, RemoveableTag, Rating, DownwardArrow } from "@egovernments/digit-ui-react-components"; +import FilterContext from "./FilterContext"; + +const InsightView = ({ rowValue, insight }) => { + return ( + + {rowValue} + {` `} + {insight >= 0 ? : } + {` `} + {`${Math.abs(insight)}%`} + + ); +} + +const calculateFSTPCapacityUtilization = (value, totalCapacity, numberOfDays = 1) => { + if (value === undefined) return value; + return Math.round((((value / (totalCapacity * numberOfDays)) * 100))); +} + +const CustomTable = ({ data, onSearch, setChartData }) => { + const { id } = data; + const [chartKey, setChartKey] = useState(id); + const [filterStack, setFilterStack] = useState([{ id: chartKey }]); + const { t } = useTranslation(); + const { value, setValue, ulbTenants, fstpMdmsData } = useContext(FilterContext); + const tenantId = Digit.ULBService.getCurrentTenantId(); + const dssTenants = Digit.SessionStorage.get("DSS_TENANTS"); + const lastYearDate = { + startDate: subYears(value?.range?.startDate, 1).getTime(), + endDate: subYears(value?.range?.endDate, 1).getTime(), + interval: "month", + title: "", + }; + const { isLoading: isRequestLoading, data: lastYearResponse } = Digit.Hooks.dss.useGetChart({ + key: chartKey, + type: "metric", + tenantId, + requestDate: { ...lastYearDate }, + filters: + id === chartKey ? value?.filters : { [filterStack[filterStack.length - 1]?.filterKey]: filterStack[filterStack.length - 1]?.filterValue }, + }); + const { isLoading, data: response } = Digit.Hooks.dss.useGetChart({ + key: chartKey, + type: "metric", + tenantId, + requestDate: { ...value?.requestDate, startDate: value?.range?.startDate?.getTime(), endDate: value?.range?.endDate?.getTime() }, + filters: + id === chartKey ? value?.filters : { [filterStack[filterStack.length - 1]?.filterKey]: filterStack[filterStack.length - 1]?.filterValue }, + }); + + const tableData = useMemo(() => { + if (!response || !lastYearResponse) return; + return response?.responseData?.data?.map((rows, id) => { + const lyData = lastYearResponse?.responseData?.data?.find((lyRow) => lyRow?.headerName === rows?.headerName); + return rows?.plots?.reduce((acc, row, currentIndex) => { + let cellValue = row?.value !== null ? row?.value : row?.label || ""; + let prevData = lyData?.plots?.[currentIndex]?.value; + let insight = null; + if (row?.name === "CapacityUtilization" && chartKey !== "fsmVehicleLogReportByVehicleNo") { + const { range } = value; + const { startDate, endDate } = range; + const numberOfDays = differenceInCalendarDays(endDate, startDate) + 1; + const ulbs = dssTenants.filter((tenant) => tenant?.city?.ddrName === rows.headerName || tenant?.code === rows.headerName).map(tenant => tenant.code); + const totalCapacity = fstpMdmsData?.filter(plant => ulbs.find(ulb => plant.ULBS.includes(ulb))).reduce((acc, plant) => acc + Number(plant.PlantOperationalCapacityKLD), 0) + cellValue = calculateFSTPCapacityUtilization(cellValue, totalCapacity, numberOfDays); + prevData = calculateFSTPCapacityUtilization(prevData, totalCapacity, numberOfDays); + } + if (row?.name === "CapacityUtilization" && chartKey === "fsmVehicleLogReportByVehicleNo") { + const tankCapcity = rows?.plots.find(plot => plot?.name === "TankCapacity"); + cellValue = calculateFSTPCapacityUtilization(cellValue, tankCapcity?.value); + prevData = calculateFSTPCapacityUtilization(prevData, tankCapcity?.value); + } + if ((row.symbol === "number" || row.symbol === "percentage" || row.symbol === "amount") && (row.name !== "CitizenAverageRating" && row.name !== "TankCapacity") && lyData !== undefined) { + if (prevData === cellValue) insight = 0; + else insight = prevData === 0 ? 100 : Math.round(((cellValue - prevData) / prevData) * 100); + } + // if (row?.name === "CapacityUtilization") cellValue = cellValue + "%" + if (typeof cellValue === "number" && !Number.isInteger(cellValue)) { + cellValue = Math.round((cellValue + Number.EPSILON) * 100) / 100; + } + acc[t(`DSS_HEADER_${row?.name.toUpperCase()}`)] = insight !== null ? { value: cellValue, insight } : row?.name === "S.N." ? id + 1 : cellValue; + acc['key'] = rows.headerName; + return acc; + }, {}); + }); + }, [response, lastYearResponse]); + + useEffect(() => { + if (tableData) { + const result = tableData.map(row => { + return Object.keys(row).reduce((acc, key) => { + if (key === "key") return acc; + acc[key] = typeof row[key] === 'object' ? row[key]?.value : row[key]; + return acc; + }, {}); + }) + setChartData(result); + } + }, [tableData]); + + const filterValue = useCallback((rows, id, filterValue = "") => { + return rows.filter(row => { + const res = Object.keys(row.values).find(key => { + if (typeof row.values[key] === 'object') { + return Object.keys(row.values[key]).find(id => { + if (id === 'insight') { + return String(Math.abs(row.values[key][id]) + '%').toLowerCase().startsWith(filterValue?.toLowerCase()); + } + return String(row.values[key][id]).toLowerCase().startsWith(filterValue?.toLowerCase()); + }) + } + return String(row.values[key]).toLowerCase().split(' ').some(str => str.startsWith(filterValue?.toLowerCase())); + }) + return res; + }) + }, []); + + const renderUnits = (denomination) => { + switch (denomination) { + case "Unit": + return "(₹)"; + case "Lac": + return "(Lac)" + case "Cr": + return "(Cr)"; + } + } + + const renderHeader = (plot) => { + const code = `DSS_HEADER_${plot?.name.toUpperCase()}`; + // const units = ["TotalSeptageDumped", "TotalSeptageCollected"]; + // if (id === "fsmVehicleLogReportByDDR" && units.includes(plot?.name)) { + // return `${t(code)} (${t("DSS_KL")})`; + // } + if (plot?.symbol === "amount") { + return `${t(code)} ${renderUnits(value?.denomination)}`; + } + return t(code); + }; + + const getDrilldownCharts = (value, filterKey, label) => { + if (response?.responseData?.drillDownChartId && response?.responseData?.drillDownChartId !== "none") { + let currentValue = value; + if (filterKey === "tenantId") { + currentValue = dssTenants.filter((tenant) => tenant?.city?.ddrName === value || tenant?.code === value).map(tenant => tenant?.code); + if (currentValue === undefined) return; + } + setFilterStack([...filterStack, { id: response?.responseData?.drillDownChartId, name: value, filterKey, filterValue: currentValue, label }]); + setChartKey(response?.responseData?.drillDownChartId); + } + }; + + const sortRows = useCallback((rowA, rowB, columnId) => { + const firstCell = rowA.values[columnId]; + const secondCell = rowB.values[columnId]; + let value1, value2; + value1 = typeof firstCell === "object" ? firstCell?.value : firstCell; + value2 = typeof secondCell === "object" ? secondCell?.value : secondCell; + return String(value1).localeCompare(String(value2), undefined, { numeric: true }); + }, []); + + const accessData = (plot) => { + const name = t(`DSS_HEADER_${plot?.name.toUpperCase()}`) + return (originalRow, rowIndex, columns) => { + const cellValue = originalRow[name]; + if (plot?.symbol === "amount") { + return typeof cellValue === "object" ? + { value: convertDenomination(cellValue?.value), insight: cellValue?.insight } : + String(convertDenomination(cellValue)) + } + return originalRow[name]; + } + } + + const tableColumns = useMemo( + () => { + const columns = response?.responseData?.data?.find(row => !!row); + return columns?.plots?.filter(plot => plot?.name !== 'TankCapacity').map((plot) => ({ + Header: renderHeader(plot), + accessor: accessData(plot), + id: plot?.name.replaceAll(".", " "), + symbol: plot?.symbol, + sortType: sortRows, + Cell: (args) => { + const { value: cellValue, column, row } = args; + if (typeof cellValue === "object") { + return ( + + ); + } + const filter = response?.responseData?.filter.find((elem) => elem.column === column.id); + if (response?.responseData?.drillDownChartId !== "none" && filter !== undefined) { + return ( + getDrilldownCharts(cellValue, filter?.key, t(`DSS_HEADER_${plot?.name.toUpperCase()}`))}> + {t(cellValue)} + + ); + } + if (column.id === "CitizenAverageRating") { + return ; + } + return String(t(cellValue)); + }, + }) + )}, + [response, value?.denomination, value?.range] + ); + + const convertDenomination = (val) => { + const { denomination } = value; + switch (denomination) { + case "Unit": + return val; + case "Lac": + return Number((val / 100000).toFixed(2)); + case "Cr": + return Number((val / 10000000).toFixed(2)); + } + }; + + const removeULB = (id) => { + const nextState = filterStack.filter((filter, index) => index < id); + setFilterStack(nextState); + setChartKey(nextState[nextState.length - 1]?.id); + }; + + if (isLoading || isRequestLoading) { + return ; + } + if (!tableColumns || !tableData) { + return ( +
+

{t("DSS_NO_DATA")}

+
+ ); + } + + return ( +
+ {filterStack.length > 1 && ( +
+ {t("DSS_FILTERS_APPLIED")}: + {filterStack.map((filter, id) => (id > 0 ? removeULB(id)} /> : null))} +
+ )} + { + return { + style: {}, + }; + }} + /> + + ); +}; + +export default CustomTable; diff --git a/frontend/micro-ui-internals/packages/modules/dss/src/components/DSSCard.js b/frontend/micro-ui-internals/packages/modules/dss/src/components/DSSCard.js new file mode 100644 index 00000000000..cb3e733ae72 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/dss/src/components/DSSCard.js @@ -0,0 +1,39 @@ +import React, { Fragment } from "react"; +import { useTranslation } from "react-i18next"; +import { Link } from "react-router-dom"; +import { ArrowRightInbox, ShippingTruck } from "@egovernments/digit-ui-react-components"; + +const ArrowRight = ({ to }) => ( + + + +); + +const DSSCard = () => { + const { t } = useTranslation(); + const ADMIN = Digit.UserService.hasAccess("FSM_ADMIN") || Digit.UserService.hasAccess("EMPLOYEE ADMIN") || false; + return ( + <> + {null ? ( +
+
+
+ + + + {t("ES_TITLE_DSS")} +
+
+ + {t("ES_TITLE_DSS_OVERVIEW")} + {} + +
+
+
+ ) : null} + + ); +}; + +export default DSSCard; diff --git a/frontend/micro-ui-internals/packages/modules/dss/src/components/DateRange.js b/frontend/micro-ui-internals/packages/modules/dss/src/components/DateRange.js new file mode 100644 index 00000000000..fdd9ac24d2a --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/dss/src/components/DateRange.js @@ -0,0 +1,159 @@ +import React, { Fragment, useEffect, useMemo, useRef, useState } from "react"; +import { ArrowDown, Modal, ButtonSelector, Calender } from "@egovernments/digit-ui-react-components"; +import { DateRangePicker, defaultStaticRanges, createStaticRanges } from "react-date-range"; +import { format, addMonths, addHours, startOfToday, endOfToday, endOfYesterday, addMinutes, addSeconds, isEqual, subYears, startOfYesterday, startOfWeek, endOfWeek, startOfYear, endOfYear, startOfMonth, endOfMonth, startOfQuarter, endOfQuarter } from "date-fns"; + +function isEndDateFocused(focusNumber) { + return focusNumber === 1; +} + +function isStartDateFocused(focusNumber) { + return focusNumber === 0; +} + +const DateRange = ({ values, onFilterChange, t }) => { + const [isModalOpen, setIsModalOpen] = useState(false); + const [focusedRange, setFocusedRange] = useState([0, 0]); + const [selectionRange, setSelectionRange] = useState(values); + const wrapperRef = useRef(null); + + useEffect(() => { + const handleClickOutside = (event) => { + if (wrapperRef.current && !wrapperRef.current.contains(event.target)) { + setIsModalOpen(false); + } + }; + document.addEventListener("mousedown", handleClickOutside); + return () => { + document.removeEventListener("mousedown", handleClickOutside); + }; + }, [wrapperRef]); + + useEffect(() => { + if (!isModalOpen) { + const startDate = selectionRange?.startDate; + const endDate = selectionRange?.endDate; + const duration = getDuration(selectionRange?.startDate, selectionRange?.endDate); + const title = `${format(selectionRange?.startDate, "MMM d, yyyy")} - ${format(selectionRange?.endDate, "MMM d, yyyy")}`; + onFilterChange({ range: { startDate, endDate, duration, title }, requestDate: { startDate, endDate, duration, title } }); + } + }, [selectionRange, isModalOpen]); + + const staticRanges = useMemo(() => { + return createStaticRanges([ + { + label: t("DSS_TODAY"), + range: () => ({ + startDate: startOfToday(new Date()), + endDate: endOfToday(new Date()), + }) + }, + { + label: t("DSS_YESTERDAY"), + range: () => ({ + startDate: startOfYesterday(new Date()), + endDate: endOfYesterday(new Date()), + }) + }, + { + label: t("DSS_THIS_WEEK"), + range: () => ({ + startDate: startOfWeek(new Date()), + endDate: endOfWeek(new Date()), + }) + }, + { + label: t('DSS_THIS_MONTH'), + range: () => ({ + startDate: startOfMonth(new Date()), + endDate: endOfMonth(new Date()), + }) + }, + { + label: t('DSS_THIS_QUARTER'), + range: () => ({ + startDate: startOfQuarter(new Date()), + endDate: endOfQuarter(new Date()), + }) + }, + { + label: t('DSS_PREVIOUS_YEAR'), + range: () => ({ + startDate: subYears(addMonths(startOfYear(new Date()), 3), 1), + endDate: subYears(addMonths(endOfYear(new Date()), 3), 1) + }) + }, + { + label: t('DSS_THIS_YEAR'), + range: () => ({ + startDate: addMonths(startOfYear(new Date()), 3), + endDate: addMonths(endOfYear(new Date()), 3) + }) + } + ]) + }, []) + + const getDuration = (startDate, endDate) => { + let noOfDays = (new Date(endDate).getTime() - new Date(startDate).getTime()) / (1000 * 3600 * 24); + if (noOfDays > 91) { + return "month"; + } + if (noOfDays < 90 && noOfDays >= 14) { + return "week"; + } + if (noOfDays <= 14) { + return "day"; + } + }; + + const handleSelect = (ranges) => { + const { range1: selection } = ranges; + const { startDate, endDate, title, duration } = selection; + if (isStartDateFocused(focusedRange[1])) { + setSelectionRange(selection); + } + if (isEndDateFocused(focusedRange[1])) { + setSelectionRange({ title, duration, startDate, endDate: addSeconds(addMinutes(addHours(endDate, 23), 59), 59) }); + setIsModalOpen(false); + } + }; + + const handleFocusChange = (focusedRange) => { + const [rangeIndex, rangeStep] = focusedRange; + setFocusedRange(focusedRange); + }; + + const handleClose = () => { + setIsModalOpen(false); + }; + + return ( + <> +
{t(`ES_DSS_DATE_RANGE`)}
+
+
+ + setIsModalOpen((prevState) => !prevState)} /> +
+ {isModalOpen && ( +
+ +
+ )} +
+ + ); +}; + +export default DateRange; diff --git a/frontend/micro-ui-internals/packages/modules/dss/src/components/FilterContext.js b/frontend/micro-ui-internals/packages/modules/dss/src/components/FilterContext.js new file mode 100644 index 00000000000..b74b5c9634f --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/dss/src/components/FilterContext.js @@ -0,0 +1,4 @@ +import React from "react"; + +const FilterContext = React.createContext({}); +export default FilterContext; diff --git a/frontend/micro-ui-internals/packages/modules/dss/src/components/Filters.js b/frontend/micro-ui-internals/packages/modules/dss/src/components/Filters.js new file mode 100644 index 00000000000..656cad3e72a --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/dss/src/components/Filters.js @@ -0,0 +1,114 @@ +import React, { useContext, useEffect, useMemo, useState } from "react"; +import { MultiSelectDropdown, FilterIcon, RefreshIcon, CloseSvg } from "@egovernments/digit-ui-react-components"; +import Switch from "./Switch"; +import DateRange from "./DateRange"; +import FilterContext from "./FilterContext"; + +const Filters = ({ t, ulbTenants, isOpen, closeFilters, showDateRange = true, showDDR = true, showUlb = true, showDenomination = true }) => { + const { value, setValue } = useContext(FilterContext); + + const [selected, setSelected] = useState(() => + ulbTenants?.ulb.filter((tenant) => value.filters.tenantId.find((selectedTenant) => selectedTenant === tenant.code)) + ); + + useEffect(() => { + setSelected(ulbTenants?.ulb.filter((tenant) => value.filters.tenantId.find((selectedTenant) => selectedTenant === tenant.code))); + }, [value.filters.tenantId]); + + const selectULB = (data) => { + const _data = Array.isArray(data) ? data : [data]; + setValue({ ...value, filters: { tenantId: [...value?.filters?.tenantId, ..._data] } }); + }; + const removeULB = (data) => { + const _data = Array.isArray(data) ? data : [data]; + setValue({ + ...value, + filters: { ...value?.filters, tenantId: [...value?.filters?.tenantId].filter((tenant) => !_data.find((e) => e === tenant)) }, + }); + }; + const handleFilterChange = (data) => { + setValue({ ...value, ...data }); + }; + + const selectFilters = (e, data) => { + const { checked } = e?.target; + if (checked) selectULB(data.code); + else removeULB(data.code); + }; + + const selectDDR = (e, data) => { + const { checked } = e?.target; + if (checked) selectULB(ulbTenants.ulb.filter((ulb) => ulb.ddrKey === data.ddrKey).map((ulb) => ulb.code)); + else removeULB(ulbTenants.ulb.filter((ulb) => ulb.ddrKey === data.ddrKey).map((ulb) => ulb.code)); + }; + + const selectedDDRs = useMemo( + () => + selected + .map((ulb) => ulbTenants.ulb.filter((e) => e.code === ulb.code)[0]) + .filter((item, i, arr) => i === arr.findIndex((t) => t.ddrKey === item.ddrKey)), + [selected, ulbTenants] + ); + + const handleClear = () => { + setValue({ + denomination: "Unit", + range: Digit.Utils.dss.getInitialRange(), + }); + }; + + return ( +
+ closeFilters()}> + + + {isOpen && ( +
+ +

{t(`DSS_FILTERS`)}

+ + + +
+ )} + {showDateRange && ( +
+ +
+ )} + {showDDR && ( +
+
{t("ES_DSS_DDR")}
+ +
+ )} + {showUlb && ( +
+
{t("ES_DSS_ULB")}
+ +
+ )} + {showDenomination && ( +
+ +
+ )} +
+ ); +}; + +export default Filters; diff --git a/frontend/micro-ui-internals/packages/modules/dss/src/components/GenericChart.js b/frontend/micro-ui-internals/packages/modules/dss/src/components/GenericChart.js new file mode 100644 index 00000000000..9fe5b70b2c2 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/dss/src/components/GenericChart.js @@ -0,0 +1,74 @@ +import React, { useRef, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { Card, DownloadIcon, TextInput, CardCaption, CardLabel, EllipsisMenu, SearchIconSvg, EmailIcon, WhatsappIcon } from "@egovernments/digit-ui-react-components"; + +const SearchImg = () => { + return ; +}; + +const GenericChart = ({ header, subHeader, className, caption, children, showHeader = true, showSearch = false, showDownload = false, onChange }) => { + const { t } = useTranslation(); + const tenantId = Digit.ULBService.getCurrentTenantId(); + const [chartData, setChartData] = useState(null); + + const chart = useRef(); + + const menuItems = [ + { + code: "image", + i18nKey: t("ES_COMMON_DOWNLOAD_IMAGE"), + icon: + }, + { + code: "shareImage", + i18nKey: t("ES_DSS_SHARE_IMAGE"), + target: "mail", + icon: , + }, + { + code: "shareImage", + i18nKey: t("ES_DSS_SHARE_IMAGE"), + target: "whatsapp", + icon: , + }, + ]; + + function download(data) { + setTimeout(() => { + switch (data.code) { + case "pdf": + return Digit.Download.PDF(chart, t(header)); + case "image": + return Digit.Download.Image(chart, t(header)); + case "sharePdf": + return Digit.ShareFiles.PDF(tenantId, chart, t(header), data.target); + case "shareImage": + return Digit.ShareFiles.Image(tenantId, chart, t(header), data.target); + } + }, 500); + } + + const handleExcelDownload = () => { + return Digit.Download.Excel(chartData, t(header)); + } + + return ( + +
+
+ {showHeader && {`${t(header)}`}} + {subHeader &&

{subHeader}

} +
+
+ {showSearch && } onChange={onChange} />} + {showDownload && } + download(data)} /> +
+
+ {caption && {caption}} + {React.cloneElement(children, { setChartData })} +
+ ); +}; + +export default GenericChart; diff --git a/frontend/micro-ui-internals/packages/modules/dss/src/components/Layout.js b/frontend/micro-ui-internals/packages/modules/dss/src/components/Layout.js new file mode 100644 index 00000000000..481f6f64f8c --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/dss/src/components/Layout.js @@ -0,0 +1,97 @@ +import React, { Fragment, useContext, useState } from "react"; +import { useTranslation } from "react-i18next"; +import CustomAreaChart from "./CustomAreaChart"; +import CustomBarChart from "./CustomBarChart"; +import CustomHorizontalBarChart from "./CustomHorizontalBarChart"; +import CustomPieChart from "./CustomPieChart"; +import CustomTable from "./CustomTable"; +import FilterContext from "./FilterContext"; +import GenericChart from "./GenericChart"; +import MetricChart from "./MetricChart"; +import Summary from "./Summary"; + +let index = 1; + +const Layout = ({ rowData }) => { + const { t } = useTranslation(); + const { value } = useContext(FilterContext); + const [searchQuery, onSearch] = useState(""); + + const renderChart = (chart, title) => { + switch (chart.chartType) { + case "table": + return ; + case "donut": + return ; + case "line": + return ; + case "horizontalBar": + return ( + + ); + case "bar": + return ; + } + }; + + const renderVisualizer = (visualizer, key) => { + switch (visualizer.vizType) { + case "metric-collection": + return ( + + + + ); + case "chart": + if ( + value?.filters?.tenantId?.length === 0 && + (visualizer?.charts?.[0].id === "fsmTopDsoByPerformance" || visualizer?.charts?.[0].id === "fsmBottomDsoByPerformance") + ) + return null; + return ( + onSearch(e.target.value)} + > + {/* {visualizer.charts.map((chart, key) => renderChart(chart, key))} */} + {renderChart(visualizer?.charts?.[0], visualizer.name)} + + ); + case "performing-metric": + if ( + value?.filters?.tenantId?.length > 0 && + (visualizer?.charts?.[0].id === "fsmTopUlbByPerformance" || visualizer?.charts?.[0].id === "fsmBottomUlbByPerformance") + ) + return null; + return ( + + + + ); + case "collection": + case "module": + return ; + } + }; + return
{rowData.vizArray.map((chart, key) => renderVisualizer(chart, key))}
; +}; + +export default Layout; diff --git a/frontend/micro-ui-internals/packages/modules/dss/src/components/MetricChart.js b/frontend/micro-ui-internals/packages/modules/dss/src/components/MetricChart.js new file mode 100644 index 00000000000..a34fd783570 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/dss/src/components/MetricChart.js @@ -0,0 +1,67 @@ +import React, { Fragment, useContext } from "react"; +import { useTranslation } from "react-i18next"; +import { Card, CardSubHeader, Rating, UpwardArrow, DownwardArrow } from "@egovernments/digit-ui-react-components"; +import { startOfMonth, endOfMonth, getTime } from "date-fns"; +import FilterContext from "./FilterContext"; + +const MetricData = ({ t, data, code }) => { + const { value } = useContext(FilterContext); + return ( +
+

+ {code === "citizenAvgRating" ? ( + + ) : ( + `${Digit.Utils.dss.formatter(data?.headerValue, data?.headerSymbol, value?.denomination, true)} ${ + code === "totalSludgeTreated" ? t(`DSS_KL`) : "" + }` + )} +

+ {data?.insight && ( +
+ {data?.insight?.indicator === "upper_green" ? : } +

{data?.insight.value.replace(/[+-]/g, "")}

+
+ )} +
+ ); +}; + +const MetricChartRow = ({ data }) => { + const { id, chartType } = data; + const tenantId = Digit.ULBService.getCurrentTenantId(); + const { t } = useTranslation(); + const { value } = useContext(FilterContext); + const { isLoading, data: response } = Digit.Hooks.dss.useGetChart({ + key: id, + type: chartType, + tenantId, + requestDate: { ...value?.requestDate, startDate: value?.range?.startDate?.getTime(), endDate: value?.range?.endDate?.getTime() }, + filters: value?.filters, + }); + + if (isLoading) { + return false; + } + + return ( +
+
{t(data.name)}
+ + {/*
{`${displaySymbol(response.headerSymbol)} ${response.headerValue}`}
*/} +
+ ); +}; + +const MetricChart = ({ data }) => { + const { charts } = data; + return ( + <> + {charts.map((chart, index) => ( + + ))} + + ); +}; + +export default MetricChart; diff --git a/frontend/micro-ui-internals/packages/modules/dss/src/components/Summary.js b/frontend/micro-ui-internals/packages/modules/dss/src/components/Summary.js new file mode 100644 index 00000000000..9d61cb20235 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/dss/src/components/Summary.js @@ -0,0 +1,88 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; +import { startOfMonth, endOfMonth, getTime } from "date-fns"; +import { Card, Poll, Details, Loader, PrintIcon } from "@egovernments/digit-ui-react-components"; +import { Link } from "react-router-dom"; + +const Chart = ({ data, todayValue = 15012, monthValue = 15.2, target = "72%", task = 133, monthlyTask = 4500, sla = "91%" }) => { + const { t } = useTranslation(); + const tenantId = Digit.ULBService.getCurrentTenantId(); + const { id, name, chartType } = data; + const requestDate = { + startDate: getTime(startOfMonth(new Date())), + endDate: getTime(endOfMonth(new Date())), + interval: "month", + title: "", + }; + const { isLoading, data: response } = Digit.Hooks.dss.useGetChart({ + key: id, + type: chartType, + tenantId, + requestDate, + }); + + if (isLoading) { + return ; + } + + return ( +
+
+

{t(data?.name)}

+

{response?.responseData?.data?.[0]?.headerValue}

+
+ {/*
+

This Month

+

{ monthValue }

+
+
+

Target

+

{ target }

+
*/} +
+ ); +}; + +const Summary = ({ + title = "Total Collections", + todayValue = 15012, + monthValue = 15.2, + target = "72%", + task = 133, + monthlyTask = 4500, + sla = "91%", + data, +}) => { + const { t } = useTranslation(); + return ( + +
+ +
+
+

{t(data?.name)}

+
+
+ {data.charts.map((chart, key) => ( + + ))} +
+
+
+
+

+

+ View Details +

+

+ + Print +

+
+
+
+
+ ); +}; + +export default Summary; diff --git a/frontend/micro-ui-internals/packages/modules/dss/src/components/Switch.js b/frontend/micro-ui-internals/packages/modules/dss/src/components/Switch.js new file mode 100644 index 00000000000..f26c1d95c4e --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/dss/src/components/Switch.js @@ -0,0 +1,30 @@ +import React, { Fragment, useContext } from "react"; +import FilterContext from "./FilterContext"; + +const denominations = ["Cr", "Lac", "Unit"]; + +const Switch = ({ onSelect, t }) => { + const { value } = useContext(FilterContext); + return ( + <> +
{t(`ES_DSS_DENOMINATION`)}
+
+ {denominations.map((label, idx) => ( +
+ onSelect({ denomination: label })} + /> + +
+ ))} +
+ + ); +}; + +export default Switch; diff --git a/frontend/micro-ui-internals/packages/modules/dss/src/pages/DrillDown.js b/frontend/micro-ui-internals/packages/modules/dss/src/pages/DrillDown.js new file mode 100644 index 00000000000..d80cf0f80c8 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/dss/src/pages/DrillDown.js @@ -0,0 +1,90 @@ +import React, { useState, useMemo } from "react"; +import { useTranslation } from "react-i18next"; +import { startOfYear, endOfYear, format, addMonths } from "date-fns"; +import { Header, Loader, RemoveableTag } from "@egovernments/digit-ui-react-components"; +import CustomTable from "../components/CustomTable"; +import FilterContext from "../components/FilterContext"; +import GenericChart from "../components/GenericChart"; +import Filters from "../components/Filters"; + +const key = 'DSS_FILTERS'; + +const getInitialRange = () => { + const data = Digit.SessionStorage.get(key); + const startDate = data?.range?.startDate ? new Date(data?.range?.startDate) : addMonths(startOfYear(new Date()), 3); + const endDate = data?.range?.endDate ? new Date(data?.range?.endDate) : addMonths(endOfYear(new Date()), 3); + const title = `${format(startDate, "MMM d, yyyy")} - ${format(endDate, "MMM d, yyyy")}`; + const duration = Digit.Utils.dss.getDuration(startDate, endDate); + const denomination = data?.denomination || "Unit"; + const tenantId = data?.filters?.tenantId || [] + return { startDate, endDate, title, duration, denomination, tenantId }; +}; + +const DrillDown = () => { + const [searchQuery, onSearch] = useState(""); + const { ulb, chart, title } = Digit.Hooks.useQueryParams(); + const { t } = useTranslation(); + const [filters, setFilters] = useState(() => { + const { startDate, endDate, title, duration, denomination, tenantId } = getInitialRange(); + return { + range: { startDate, endDate, title, duration}, + requestDate: { + startDate: startDate.getTime(), + endDate: endDate.getTime(), + interval: duration, + title: title, + }, + filters: { + tenantId: tenantId, + } + } + }); + + const handleFilters = (data) => { + Digit.SessionStorage.set(key, data); + setFilters(data); + } + + const { data: ulbTenants, isLoading: isUlbLoading } = Digit.Hooks.useModuleTenants("FSM"); + const provided = useMemo( + () => ({ + value: filters, + setValue: handleFilters, + }), + [filters] + ); + + const removeULB = (id) => { + handleFilters({ ...filters, filters: { ...filters?.filters, tenantId: [...filters?.filters?.tenantId].filter((tenant, index) => index !== id) } }); + }; + + const handleClear = () => { + handleFilters({ ...filters, filters: { ...filters?.filters, tenantId: [] } }); + }; + + if (isUlbLoading) { + return ; + } + + return ( + +
{t(title)}
+ + {filters?.filters?.tenantId.length > 0 && ( +
+ {filters?.filters?.tenantId?.map((filter, id) => ( + removeULB(id)} /> + ))} +

+ {t(`DSS_FILTER_CLEAR`)} +

+
+ )} + onSearch(e.target.value)} showHeader={false}> + + +
+ ); +}; + +export default DrillDown; diff --git a/frontend/micro-ui-internals/packages/modules/dss/src/pages/Overview.js b/frontend/micro-ui-internals/packages/modules/dss/src/pages/Overview.js new file mode 100644 index 00000000000..45d8bcbc888 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/dss/src/pages/Overview.js @@ -0,0 +1,25 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; +import { Header, Loader } from "@egovernments/digit-ui-react-components"; +import Layout from "../components/Layout"; + +const Overview = () => { + const { t } = useTranslation(); + const moduleCode = "home"; + const { data: response, isLoading } = Digit.Hooks.dss.useDashboardConfig(moduleCode); + + if (isLoading) { + return ; + } + + return ( +
+
{t(response?.[0]?.name)}
+ {response?.responseData?.[0]?.visualizations.map((item, key) => ( + + ))} +
+ ); +}; + +export default Overview; diff --git a/frontend/micro-ui-internals/packages/modules/dss/src/pages/index.js b/frontend/micro-ui-internals/packages/modules/dss/src/pages/index.js new file mode 100644 index 00000000000..af028f91a6e --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/dss/src/pages/index.js @@ -0,0 +1,220 @@ +import React, { useMemo, useState, useRef } from "react"; +import { useTranslation } from "react-i18next"; +import { + Header, + Loader, + ShareIcon, + DownloadIcon, + FilterIcon, + RemoveableTag, + MultiLink, + EmailIcon, + WhatsappIcon, +} from "@egovernments/digit-ui-react-components"; +import { startOfYear, endOfYear, format, addMonths, endOfToday } from "date-fns"; +import Filters from "../components/Filters"; +import Layout from "../components/Layout"; +import FilterContext from "../components/FilterContext"; +import { useParams } from "react-router-dom"; + +const key = 'DSS_FILTERS'; + +const getInitialRange = () => { + const data = Digit.SessionStorage.get(key); + const startDate = data?.range?.startDate ? new Date(data?.range?.startDate) : addMonths(startOfYear(new Date()), 3); + const endDate = data?.range?.endDate ? new Date(data?.range?.endDate) : endOfToday(); + const title = `${format(startDate, "MMM d, yyyy")} - ${format(endDate, "MMM d, yyyy")}`; + const duration = Digit.Utils.dss.getDuration(startDate, endDate); + const denomination = data?.denomination || "Unit"; + const tenantId = data?.filters?.tenantId || [] + return { startDate, endDate, title, duration, denomination, tenantId }; +}; + +const DashBoard = ({ stateCode }) => { + const tenantId = Digit.ULBService.getCurrentTenantId(); + const { t } = useTranslation(); + const [filters, setFilters] = useState(() => { + const { startDate, endDate, title, duration, denomination, tenantId } = getInitialRange(); + return { + denomination, + range: { startDate, endDate, title, duration}, + requestDate: { + startDate: startDate.getTime(), + endDate: endDate.getTime(), + interval: duration, + title: title, + }, + filters: { + tenantId, + } + } + }); + const [isFilterModalOpen, setIsFilterModalOpen] = useState(false); + const { moduleCode } = useParams(); + + const language = Digit.StoreData.getCurrentLanguage(); + + const { isLoading: localizationLoading, data: store } = Digit.Services.useStore({ stateCode, moduleCode, language }); + const { data: screenConfig } = Digit.Hooks.dss.useMDMS(stateCode, "dss-dashboard", "DssDashboard"); + const { data: response, isLoading } = Digit.Hooks.dss.useDashboardConfig(moduleCode); + const { data: ulbTenants, isLoading: isUlbLoading } = Digit.Hooks.useModuleTenants("FSM"); + const { isLoading: isMdmsLoading, data: mdmsData } = Digit.Hooks.useCommonMDMS(stateCode, "FSM", "FSTPPlantInfo"); + const [showOptions, setShowOptions] = useState(false); + + const handleFilters = (data) => { + Digit.SessionStorage.set(key, data); + setFilters(data); + } + const fullPageRef = useRef(); + const provided = useMemo( + () => ({ + value: filters, + setValue: handleFilters, + ulbTenants, + fstpMdmsData: mdmsData + }), + [filters, isUlbLoading, isMdmsLoading] + ); + const handlePrint = () => Digit.Download.PDF(fullPageRef, t(dashboardConfig?.[0]?.name)); + + const removeULB = (id) => { + handleFilters({ ...filters, filters: { ...filters?.filters, tenantId: [...filters?.filters?.tenantId].filter((tenant, index) => index !== id) } }); + }; + + const handleClear = () => { + handleFilters({ ...filters, filters: { ...filters?.filters, tenantId: [] } }); + }; + + const dashboardConfig = response?.responseData; + + const shareOptions = navigator.share + ? [ + { + label: t("ES_DSS_SHARE_PDF"), + onClick: () => { + setShowOptions(!showOptions); + setTimeout(() => { + Digit.ShareFiles.PDF(tenantId, fullPageRef, t(dashboardConfig?.[0]?.name)); + }, 500) + }, + }, + { + label: t("ES_DSS_SHARE_IMAGE"), + onClick: () => { + setShowOptions(!showOptions); + setTimeout(() => { + Digit.ShareFiles.Image(tenantId, fullPageRef, t(dashboardConfig?.[0]?.name)); + }, 500) + }, + }, + ] + : [ + { + icon: , + label: t("ES_DSS_SHARE_PDF"), + onClick: () => { + setShowOptions(!showOptions); + setTimeout(() => { + Digit.ShareFiles.PDF(tenantId, fullPageRef, t(dashboardConfig?.[0]?.name), "mail"); + }, 500) + }, + }, + { + icon: , + label: t("ES_DSS_SHARE_PDF"), + onClick: () => { + setShowOptions(!showOptions); + setTimeout(() => { + Digit.ShareFiles.PDF(tenantId, fullPageRef, t(dashboardConfig?.[0]?.name), "whatsapp"); + }, 500) + }, + }, + { + icon: , + label: t("ES_DSS_SHARE_IMAGE"), + onClick: () => { + setShowOptions(!showOptions); + setTimeout(() => { + Digit.ShareFiles.Image(tenantId, fullPageRef, t(dashboardConfig?.[0]?.name), "mail"); + }, 500) + }, + }, + { + icon: , + label: t("ES_DSS_SHARE_IMAGE"), + onClick: () => { + setShowOptions(!showOptions); + setTimeout(() => { + Digit.ShareFiles.Image(tenantId, fullPageRef, t(dashboardConfig?.[0]?.name), "whatsapp"); + }, 500) + }, + }, + ]; + + if (isLoading || isUlbLoading || localizationLoading || isMdmsLoading) { + return ; + } + + return ( + +
+
+
{t(dashboardConfig?.[0]?.name)}
+
+
+ } + showOptions={(e) => setShowOptions(e)} + onHeadClick={(e) => setShowOptions(e !== undefined ? e : !showOptions)} + displayOptions={showOptions} + options={shareOptions} + /> +
+
+ + {t(`ES_DSS_DOWNLOAD`)} +
+
+
+ setIsFilterModalOpen(false)} /> + {filters?.filters?.tenantId.length > 0 && ( +
+ {filters?.filters?.tenantId?.map((filter, id) => ( + removeULB(id)} /> + ))} +

+ {t(`DSS_FILTER_CLEAR`)} +

+
+ )} +
+
+ setIsFilterModalOpen(!isFilterModalOpen)} style /> +
+
+ } + showOptions={(e) => setShowOptions(e)} + onHeadClick={(e) => setShowOptions(e !== undefined ? e : !showOptions)} + displayOptions={showOptions} + options={shareOptions} + /> +
+
+ + {t(`ES_DSS_DOWNLOAD`)} +
+
+ {dashboardConfig?.[0]?.visualizations.map((row, key) => { + return ; + })} +
+
+ ); +}; + +export default DashBoard; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/package.json b/frontend/micro-ui-internals/packages/modules/fsm/package.json new file mode 100644 index 00000000000..ca8b9bf9617 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/package.json @@ -0,0 +1,35 @@ +{ + "name": "@egovernments/digit-ui-module-fsm", + "version": "1.3.0", + "license": "MIT", + "main": "dist/index.js", + "module": "dist/index.modern.js", + "source": "src/Module.js", + "files": [ + "dist" + ], + "scripts": { + "start": "microbundle-crl watch --no-compress --format modern,cjs", + "build": "microbundle-crl --no-compress --format modern,cjs", + "prepublish": "yarn build" + }, + "peerDependencies": { + "react": "^17.0.0", + "react-router-dom": "^5.2.0" + }, + "dependencies": { + "@egovernments/digit-ui-libraries": "^1.3.0", + "@egovernments/digit-ui-react-components": "^1.3.0", + "react": "^17.0.0", + "react-dom": "^17.0.0", + "react-hook-form": "^6.7.0", + "react-i18next": "^11.7.3", + "react-query": "^3.6.1", + "react-redux": "^7.2.1", + "react-router-dom": "^5.2.0", + "react-table": "^7.6.1", + "react-time-picker": "4.2.0", + "redux": "^4.0.5", + "redux-thunk": "^2.3.0" + } +} diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/Module.js b/frontend/micro-ui-internals/packages/modules/fsm/src/Module.js new file mode 100644 index 00000000000..0aa40197b59 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/Module.js @@ -0,0 +1,270 @@ +import { BackButton, BreadCrumb, CitizenHomeCard, CitizenTruck, Loader, PrivateRoute } from "@egovernments/digit-ui-react-components"; +import React, { useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { Link, Redirect, Switch, useLocation, useRouteMatch } from "react-router-dom"; +import FSMCard from "./components/FsmCard"; +import CheckSlum from "./pageComponents/CheckSlum"; +import SelectAddress from "./pageComponents/SelectAddress"; +import SelectChannel from "./pageComponents/SelectChannel"; +import SelectGeolocation from "./pageComponents/SelectGeolocation"; +import SelectLandmark from "./pageComponents/SelectLandmark"; +import SelectName from "./pageComponents/SelectName"; +import SelectPincode from "./pageComponents/SelectPincode"; +import SelectPitType from "./pageComponents/SelectPitType"; +import SelectPropertySubtype from "./pageComponents/SelectPropertySubtype"; +import SelectPropertyType from "./pageComponents/SelectPropertyType"; +import SelectSlumName from "./pageComponents/SelectSlumName"; +import SelectStreet from "./pageComponents/SelectStreet"; +import SelectTankSize from "./pageComponents/SelectTankSize"; +import SelectTripData from "./pageComponents/SelectTripData"; +import ApplicationDetails from "./pages/citizen/ApplicationDetails"; +import { MyApplications } from "./pages/citizen/MyApplications"; +import NewApplicationCitizen from "./pages/citizen/NewApplication/index"; +import RateView from "./pages/citizen/Rating/RateView"; +import SelectRating from "./pages/citizen/Rating/SelectRating"; +import ApplicationAudit from "./pages/employee/ApplicationAudit"; +import EmployeeApplicationDetails from "./pages/employee/ApplicationDetails"; +import DsoDashboard from "./pages/employee/DsoDashboard"; +import EditApplication from "./pages/employee/EditApplication"; +import FstpInbox from "./pages/employee/FstpInbox"; +import FstpOperatorDetails from "./pages/employee/FstpOperatorDetails"; +import Inbox from "./pages/employee/Inbox"; +import { NewApplication } from "./pages/employee/NewApplication"; +import Response from "./pages/Response"; + + + + + +const FsmBreadCrumb = ({ location }) => { + const { t } = useTranslation(); + const DSO = Digit.UserService.hasAccess(["FSM_DSO"]); + const isApplicationDetails = location?.pathname?.includes("application-details"); + const isInbox = location?.pathname?.includes("inbox"); + const isFsm = location?.pathname?.includes("fsm"); + const isSearch = location?.pathname?.includes("search"); + const [search, setSearch] = useState(false); + + useEffect(() => { + if (!search) { + setSearch(isSearch); + } else if (isInbox && search) { + setSearch(false); + } + }, [location]); + + const crumbs = [ + { + path: DSO ? "/digit-ui/citizen/fsm/dso-dashboard" : "/digit-ui/employee", + content: t("ES_COMMON_HOME"), + show: isFsm, + }, + { + path: "/digit-ui/employee/fsm/inbox", + content: isInbox || isApplicationDetails || search ? t("ES_TITLE_INBOX") : "FSM", + show: isFsm, + }, + { + path: "/digit-ui/employee/fsm/search", + content: t("ES_TITILE_SEARCH_APPLICATION"), + show: search, + }, + { content: t("ES_TITLE_APPLICATION_DETAILS"), show: isApplicationDetails }, + ]; + + return ; +}; + +const EmployeeApp = ({ path, url, userType }) => { + const location = useLocation(); + + useEffect(() => { + if (!location?.pathname?.includes("application-details")) { + if (!location?.pathname?.includes("inbox")) { + Digit.SessionStorage.del("fsm/inbox/searchParams"); + } else if (!location?.pathname?.includes("search")) { + Digit.SessionStorage.del("fsm/search/searchParams"); + } + } + }, [location]); + + return ( + + +
+ + } /> + } /> + } /> + } /> + } /> + } /> + + } /> + } /> + } /> + } /> + } /> +
+
+
+ ); +}; + +const CitizenApp = ({ path }) => { + const location = useLocation(); + const { t } = useTranslation(); + + return ( + + {!location.pathname.includes("/new-application/response") && {t("CS_COMMON_BACK")}} + + + Digit.UserService.hasAccess(["FSM_DSO"]) ? : + } + /> + + Digit.UserService.hasAccess(["FSM_DSO"]) ? : + } + /> + } /> + + } /> + } /> + } /> + } /> + } /> + } /> + + + ); +}; + +const FSMModule = ({ stateCode, userType, tenants }) => { + const moduleCode = "FSM"; + const { path, url } = useRouteMatch(); + const language = Digit.StoreData.getCurrentLanguage(); + const { isLoading, data: store } = Digit.Services.useStore({ stateCode, moduleCode, language }); + + if (isLoading) { + return ; + } + Digit.SessionStorage.set("FSM_TENANTS", tenants); + + if (userType === "citizen") { + return ; + } else { + return ; + } +}; + +const FSMLinks = ({ matchPath, userType }) => { + const { t } = useTranslation(); + const [params, setParams, clearParams] = Digit.Hooks.useSessionStorage("FSM_CITIZEN_FILE_PROPERTY", {}); + + useEffect(() => { + clearParams(); + }, []); + + const roleBasedLoginRoutes = [ + { + role: "FSM_DSO", + from: "/digit-ui/citizen/fsm/dso-dashboard", + dashoardLink: "CS_LINK_DSO_DASHBOARD", + loginLink: "CS_LINK_LOGIN_DSO", + }, + ]; + + if (userType === "citizen") { + const links = [ + { + link: `${matchPath}/new-application`, + i18nKey: t("CS_HOME_APPLY_FOR_DESLUDGING"), + }, + { + link: `${matchPath}/my-applications`, + i18nKey: t("CS_HOME_MY_APPLICATIONS"), + }, + ]; + + roleBasedLoginRoutes.map(({ role, from, loginLink, dashoardLink }) => { + if (Digit.UserService.hasAccess(role)) + links.push({ + link: from, + i18nKey: t(dashoardLink), + }); + else + links.push({ + link: `/digit-ui/citizen/login`, + state: { role: "FSM_DSO", from }, + i18nKey: t(loginLink), + }); + }); + + return ; + } else { + return ( +
+
+
+
+
+ + + + + + + {t("ES_TITLE_FSM")} +
+
+ + {t("ES_TITLE_INBOX")} + + + {t("ES_TITLE_NEW_DESULDGING_APPLICATION")} + + {/* + {t("ES_TITLE_APPLICATION_AUDIT")} + */} +
+
+
+
+
+ ); + } +}; + +const componentsToRegister = { + SelectPropertySubtype, + SelectPropertyType, + SelectAddress, + SelectStreet, + SelectLandmark, + SelectPincode, + SelectTankSize, + SelectPitType, + SelectGeolocation, + SelectSlumName, + CheckSlum, + FSMCard, + FSMModule, + FSMLinks, + SelectChannel, + SelectName, + SelectTripData, +}; + +export const initFSMComponents = () => { + Object.entries(componentsToRegister).forEach(([key, value]) => { + Digit.ComponentRegistryService.setComponent(key, value); + }); +}; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/components/ApplicationTimeline.js b/frontend/micro-ui-internals/packages/modules/fsm/src/components/ApplicationTimeline.js new file mode 100644 index 00000000000..9a150fd70aa --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/components/ApplicationTimeline.js @@ -0,0 +1,146 @@ +import React, { Fragment } from "react"; +import { useTranslation } from "react-i18next"; +import { Link, useHistory, useParams } from "react-router-dom"; +import { + Header, + ActionLinks, + Card, + CardSectionHeader, + ConnectingCheckPoints, + CheckPoint, + KeyNote, + SubmitBar, + LinkButton, + Loader, + Rating, +} from "@egovernments/digit-ui-react-components"; +import TLCaption from "./TLCaption"; + +export const ApplicationTimeline = (props) => { + const { t } = useTranslation(); + const { isLoading, data } = Digit.Hooks.useWorkflowDetails({ + tenantId: props.application?.tenantId, + id: props.id, + moduleCode: "FSM", + }); + + const getTimelineCaptions = (checkpoint) => { + const __comment = checkpoint?.comment?.split("~"); + const reason = __comment ? __comment[0] : null; + const reason_comment = __comment ? __comment[1] : null; + if (checkpoint.status === "CREATED") { + const caption = { + date: checkpoint?.auditDetails?.created, + source: props.application?.source || "", + }; + return ; + } else if ( + checkpoint.status === "PENDING_APPL_FEE_PAYMENT" || + checkpoint.status === "ASSING_DSO" || + checkpoint.status === "PENDING_DSO_APPROVAL" || + checkpoint.status === "DSO_REJECTED" || + checkpoint.status === "CANCELED" || + checkpoint.status === "REJECTED" + ) { + const caption = { + date: checkpoint?.auditDetails?.created, + name: checkpoint?.assigner, + comment: reason ? t(`ES_ACTION_REASON_${reason}`) : null, + otherComment: reason_comment ? reason_comment : null, + }; + return ; + } else if (checkpoint.status === "CITIZEN_FEEDBACK_PENDING") { + return ( + <> + {data?.nextActions.length > 0 && ( +
+ + {t("CS_FSM_RATE")} + +
+ )} + + ); + } else if (checkpoint.status === "DSO_INPROGRESS") { + const caption = { + name: checkpoint?.assigner, + mobileNumber: props.application?.dsoDetails?.mobileNumber, + date: `${t("CS_FSM_EXPECTED_DATE")} ${Digit.DateUtils.ConvertTimestampToDate(props.application?.possibleServiceDate)}`, + }; + return ; + } else if (checkpoint.status === "COMPLETED") { + return ( +
+ + + {t("CS_FSM_RATE_VIEW")} + +
+ ); + } + }; + + const showNextActions = (nextAction) => { + switch (nextAction?.action) { + case "PAY": + return ( +
+ + + +
+ ); + case "SUBMIT_FEEDBACK": + return ( +
+ + + +
+ ); + } + }; + + if (isLoading) { + return ; + } + + return ( + + {!isLoading && ( + + {data?.timeline?.length > 0 && ( + + {t("CS_APPLICATION_DETAILS_APPLICATION_TIMELINE")} + + )} + {data?.timeline && data?.timeline?.length === 1 ? ( + + ) : ( + + {data?.timeline && + data?.timeline.map((checkpoint, index, arr) => { + return ( + + + + ); + })} + + )} + + )} + {data && showNextActions(data?.nextActions[0])} + + ); +}; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/components/CustomTimePicker.js b/frontend/micro-ui-internals/packages/modules/fsm/src/components/CustomTimePicker.js new file mode 100644 index 00000000000..13c8d402eb2 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/components/CustomTimePicker.js @@ -0,0 +1,14 @@ +import React, { Fragment } from "react"; +import TimePicker from "react-time-picker"; +import { TextInput } from "@egovernments/digit-ui-react-components"; + +const CustomTimePicker = ({ name, value, onChange }) => { + const timeFormat = new Date().toLocaleTimeString(); + if (timeFormat.includes("AM") || timeFormat.includes("PM")) { + return onChange(event.target.value)} className="custom-time-picker" />; + } + + return ; +}; + +export default CustomTimePicker; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/components/DesktopInbox.js b/frontend/micro-ui-internals/packages/modules/fsm/src/components/DesktopInbox.js new file mode 100644 index 00000000000..a530990c5cb --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/components/DesktopInbox.js @@ -0,0 +1,244 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; +import { Link } from "react-router-dom"; +import { Card, Loader } from "@egovernments/digit-ui-react-components"; +import FSMLink from "./inbox/FSMLink"; +import ApplicationTable from "./inbox/ApplicationTable"; +import Filter from "./inbox/Filter"; +import SearchApplication from "./inbox/search"; + +const DesktopInbox = (props) => { + const { t } = useTranslation(); + const DSO = Digit.UserService.hasAccess(["FSM_DSO"]) || false; + const GetCell = (value) => {value}; + const FSTP = Digit.UserService.hasAccess("FSM_EMP_FSTPO") || false; + + const GetSlaCell = (value) => { + if (isNaN(value)) return 0; + return value < 0 ? {value} : {value}; + }; + + function goTo(id) { + // console.log("id", id); + // history.push("/digit-ui/employee/fsm/complaint/details/" + id); + } + + const columns = React.useMemo(() => { + if (props.isSearch) { + return [ + { + Header: t("ES_INBOX_APPLICATION_NO"), + accessor: "applicationNo", + disableSortBy: true, + Cell: ({ row }) => { + return ( + + ); + }, + }, + { + Header: t("ES_APPLICATION_DETAILS_APPLICANT_NAME"), + disableSortBy: true, + accessor: (row) => GetCell(row.citizen?.name || ""), + }, + { + Header: t("ES_APPLICATION_DETAILS_APPLICANT_MOBILE_NO"), + disableSortBy: true, + accessor: (row) => GetCell(row.citizen?.mobileNumber || ""), + }, + { + Header: t("ES_APPLICATION_DETAILS_PROPERTY_TYPE"), + accessor: (row) => { + const key = t(`PROPERTYTYPE_MASTERS_${row.propertyUsage.split(".")[0]}`); + // console.log(PropertyType.data && PropertyType.data[key]); + return key; + }, + disableSortBy: true, + }, + { + Header: t("ES_APPLICATION_DETAILS_PROPERTY_SUB-TYPE"), + accessor: (row) => { + const key = t(`PROPERTYTYPE_MASTERS_${row.propertyUsage}`); + return key; + }, + disableSortBy: true, + }, + { + Header: t("ES_INBOX_LOCALITY"), + accessor: (row) => GetCell(t(Digit.Utils.locale.getRevenueLocalityCode(row.address.locality.code, row.tenantId))), + disableSortBy: true, + }, + { + Header: t("ES_INBOX_STATUS"), + accessor: (row) => { + return GetCell(t(`CS_COMMON_FSM_${row.applicationStatus}`)); + }, + disableSortBy: true, + }, + ]; + } + switch (props.userRole) { + case "FSM_EMP_FSTPO": + return [ + { + Header: t("ES_INBOX_VEHICLE_LOG"), + accessor: "applicationNo", + Cell: ({ row }) => { + return ( +
+ + {row.original["applicationNo"]} + +
+ ); + }, + }, + { + Header: t("ES_INBOX_VEHICLE_NO"), + accessor: (row) => row.vehicle?.registrationNumber, + }, + { + Header: t("ES_INBOX_DSO_NAME"), + accessor: (row) => `${row.dsoName} - ${row.tripOwner.name}`, + }, + { + Header: t("ES_INBOX_WASTE_COLLECTED"), + accessor: (row) => row.tripDetails[0]?.volume, + }, + ]; + default: + return [ + { + Header: t("CS_FILE_DESLUDGING_APPLICATION_NO"), + Cell: ({ row }) => { + return ( + + ); + }, + }, + { + Header: t("ES_INBOX_APPLICATION_DATE"), + accessor: "createdTime", + Cell: ({ row }) => { + return GetCell( + `${row.original.createdTime.getDate()}/${row.original.createdTime.getMonth() + 1}/${row.original.createdTime.getFullYear()}` + ); + }, + }, + { + Header: t("ES_INBOX_LOCALITY"), + Cell: ({ row }) => { + return GetCell(t(Digit.Utils.locale.getRevenueLocalityCode(row.original["locality"], row.original["tenantId"]))); + }, + // Cell: (row) => { + // return GetCell(t(`CS_COMMON_${row.row.original["status"]}`)); + // }, + }, + { + Header: t("ES_INBOX_STATUS"), + Cell: (row) => { + return GetCell(t(`CS_COMMON_FSM_${row.row.original["status"]}`)); + }, + }, + { + Header: t("ES_INBOX_SLA_DAYS_REMAINING"), + Cell: ({ row }) => { + return GetSlaCell(row.original["sla"]); + }, + }, + ]; + } + }, []); + + let result; + if (props.isLoading) { + result = ; + } else if ((props.isSearch && !props.shouldSearch) || props?.data?.table?.length === 0) { + result = ( + + {/* TODO Change localization key */} + { + // t("CS_MYCOMPLAINTS_NO_COMPLAINTS") + t("CS_MYAPPLICATIONS_NO_APPLICATION") + .split("\\n") + .map((text, index) => ( +

+ {text} +

+ )) + } +
+ ); + } else if (props?.data?.table?.length > 0) { + result = ( + { + return { + style: { + minWidth: cellInfo.column.Header === t("ES_INBOX_APPLICATION_NO") ? "240px" : "", + padding: "20px 18px", + fontSize: "16px", + // borderTop: "1px solid grey", + // textAlign: "left", + // verticalAlign: "middle", + }, + }; + }} + onPageSizeChange={props.onPageSizeChange} + currentPage={props.currentPage} + onNextPage={props.onNextPage} + onPrevPage={props.onPrevPage} + pageSizeLimit={props.pageSizeLimit} + onSort={props.onSort} + disableSort={props.disableSort} + onPageSizeChange={props.onPageSizeChange} + sortParams={props.sortParams} + totalRecords={props.totalRecords} + /> + ); + } + + return ( +
+ {props.userRole !== "FSM_EMP_FSTPO" && !props.isSearch && ( +
+ +
+ +
+
+ )} +
+ +
+ {result} +
+
+
+ ); +}; + +export default DesktopInbox; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/components/FsmCard.js b/frontend/micro-ui-internals/packages/modules/fsm/src/components/FsmCard.js new file mode 100644 index 00000000000..b1bc897c3d6 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/components/FsmCard.js @@ -0,0 +1,131 @@ +import React, { useEffect, useState } from "react"; +import { Link } from "react-router-dom"; +import { useTranslation } from "react-i18next"; +import { ArrowRightInbox, ShippingTruck, EmployeeModuleCard} from "@egovernments/digit-ui-react-components"; + +const ArrowRight = ({ to }) => ( + + + +); + +const FSMCard = () => { + const { t } = useTranslation(); + const DSO = Digit.UserService.hasAccess(["FSM_DSO"]) || false; + const COLLECTOR = Digit.UserService.hasAccess("FSM_COLLECTOR") || false; + const FSM_ADMIN = Digit.UserService.hasAccess("FSM_ADMIN") || false; + const FSM_EDITOR = Digit.UserService.hasAccess("FSM_EDITOR_EMP") || false; + const FSM_CREATOR = Digit.UserService.hasAccess("FSM_CREATOR_EMP") || false; + const isFSTPOperator = Digit.UserService.hasAccess("FSM_EMP_FSTPO") || false; + + const [total, setTotal] = useState("-"); + + // Septage ready for Disposal ( 10 KL) + // Septage disposed today ( 50 KL) + const tenantId = Digit.ULBService.getCurrentTenantId(); + + // TO DO get day time + + if (!Digit.Utils.fsmAccess()) { + return null; + } + + const config = { + enabled: isFSTPOperator ? true : false, + select: (data) => { + const info = data.vehicleTrip.reduce( + (info, trip) => { + const totalVol = trip.tripDetails.reduce((vol, details) => details.volume + vol, 0); + info[t("ES_READY_FOR_DISPOSAL")] += totalVol / 1000; + return info; + }, + { [t("ES_READY_FOR_DISPOSAL")]: 0 } + ); + info[t("ES_READY_FOR_DISPOSAL")] = `(${info[t("ES_READY_FOR_DISPOSAL")]} KL)`; + return info; + }, + }; + + const { isLoading, data: info, isSuccess } = Digit.Hooks.fsm.useVehicleSearch({ + tenantId, + filters: { applicationStatus: "WAITING_FOR_DISPOSAL" }, + config, + }); + + const filters = { + sortBy: "createdTime", + sortOrder: "DESC", + total: true, + }; + + const getUUIDFilter = () => { + if (FSM_EDITOR || FSM_CREATOR || COLLECTOR || FSM_ADMIN) return { uuid: { code: "ASSIGNED_TO_ALL", name: t("ES_INBOX_ASSIGNED_TO_ALL") } }; + else return { uuid: { code: "ASSIGNED_TO_ME", name: t("ES_INBOX_ASSIGNED_TO_ME") } }; + }; + + const { data: inbox, isFetching: pendingApprovalRefetching } = Digit.Hooks.fsm.useInbox(tenantId, { ...filters,limit:10, offset:0, ...getUUIDFilter() }, { + enabled: !isFSTPOperator ? true : false, + }); + + useEffect(() => { + if (inbox) { + const total = inbox?.totalCount || 0; + setTotal(total); + } + }, [inbox]); + + const propsForFSTPO = { + Icon: , + moduleName: t("ES_TITLE_VEHICLE_LOG"), + kpis: isSuccess ? Object.keys(info).map((key, index) => ({ + label: t(key), + count: t(info[key]), + link: "/digit-ui/employee/fsm/fstp-inbox" + })): [], + links: [ + { + label: t("ES_COMMON_INBOX"), + link: "/digit-ui/employee/fsm/fstp-inbox" + } + ] + + } + + if (isFSTPOperator && isSuccess) { + return + } + + const linksForSomeFSMEmployees = !DSO && !COLLECTOR && !FSM_EDITOR ? [ + { + label: t("ES_TITLE_NEW_DESULDGING_APPLICATION"), + link: `/digit-ui/employee/fsm/new-application` + } + ] : [] + + const propsForModuleCard = { + Icon: , + moduleName: "FSM", + kpis:[ + { + count: total, + label: t("TOTAL_FSM"), + link: `/digit-ui/employee/fsm/inbox` + }, + { + label: t("TOTAL_NEARING_SLA"), + link: `/digit-ui/employee/fsm/inbox` + } + ], + links: [ + { + count: total, + label: t("ES_COMMON_INBOX"), + link: `/digit-ui/employee/fsm/inbox` + }, + ...linksForSomeFSMEmployees + ] + } + + return +}; +export default FSMCard; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/components/MobileInbox.js b/frontend/micro-ui-internals/packages/modules/fsm/src/components/MobileInbox.js new file mode 100644 index 00000000000..0ce08ef5b81 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/components/MobileInbox.js @@ -0,0 +1,89 @@ +import React, { useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { ApplicationCard } from "./inbox/ApplicationCard"; +import ApplicationLinks from "./inbox/ApplicationLinks"; + +const GetSlaCell = (value) => { + if (isNaN(value)) return 0; + return value < 0 ? {value} : {value}; +}; + +const GetCell = (value) => {value}; + +const MobileInbox = ({ + data, + vehicleLog, + isLoading, + isSearch, + onSearch, + onFilterChange, + onSort, + searchParams, + searchFields, + linkPrefix, + parentRoute, + removeParam, + sortParams, +}) => { + const { t } = useTranslation(); + const getData = () => { + if (isSearch) { + return data?.map(({ applicationNo, applicationStatus, propertyUsage, tenantId, address, citizen }) => ({ + [t("ES_INBOX_APPLICATION_NO")]: applicationNo, + [t("ES_APPLICATION_DETAILS_APPLICANT_NAME")]: GetCell(citizen?.name || ""), + [t("ES_APPLICATION_DETAILS_APPLICANT_MOBILE_NO")]: GetCell(citizen?.mobileNumber || ""), + [t("ES_APPLICATION_DETAILS_PROPERTY_TYPE")]: GetCell(t(`PROPERTYTYPE_MASTERS_${propertyUsage.split(".")[0]}`)), + [t("ES_APPLICATION_DETAILS_PROPERTY_SUB-TYPE")]: GetCell(t(`PROPERTYTYPE_MASTERS_${propertyUsage}`)), + [t("ES_INBOX_LOCALITY")]: GetCell(t(Digit.Utils.locale.getRevenueLocalityCode(address.locality.code, tenantId))), + [t("ES_INBOX_STATUS")]: GetCell(t(`CS_COMMON_FSM_${applicationStatus}`)), + })); + } else { + return data?.map(({ locality, applicationNo, createdTime, tenantId, status, sla }) => ({ + [t("ES_INBOX_APPLICATION_NO")]: applicationNo, + [t("ES_INBOX_APPLICATION_DATE")]: `${createdTime.getDate()}/${createdTime.getMonth() + 1}/${createdTime.getFullYear()}`, + [t("ES_INBOX_LOCALITY")]: GetCell(t(Digit.Utils.locale.getRevenueLocalityCode(locality, tenantId))), + [t("ES_INBOX_STATUS")]: GetCell(t(`CS_COMMON_${status}`)), + [t("ES_INBOX_SLA_DAYS_REMAINING")]: GetSlaCell(sla), + })); + } + }; + + const DSO = Digit.UserService.hasAccess(["FSM_DSO"]) || false; + + const isFstpOperator = Digit.UserService.hasAccess("FSM_EMP_FSTPO") || false; + + const fstpOperatorData = vehicleLog?.map((vehicle) => ({ + [t("ES_INBOX_VEHICLE_LOG")]: vehicle?.applicationNo, + [t("ES_INBOX_VEHICLE_NO")]: vehicle?.vehicle?.registrationNumber, + [t("ES_INBOX_DSO_NAME")]: vehicle?.tripOwner.displayName, + [t("ES_INBOX_WASTE_COLLECTED")]: vehicle?.tripDetails[0]?.volume, + })); + + return ( +
+
+
+ {!isFstpOperator && !isSearch && } + +
+
+
+ ); +}; + +export default MobileInbox; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/components/Reason.js b/frontend/micro-ui-internals/packages/modules/fsm/src/components/Reason.js new file mode 100644 index 00000000000..0f226935c5b --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/components/Reason.js @@ -0,0 +1,10 @@ +import React from "react"; + +const Reason = ({ headComment, otherComment }) => ( +
+

{headComment}

+

{otherComment}

+
+); + +export default Reason; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/components/TLCaption.js b/frontend/micro-ui-internals/packages/modules/fsm/src/components/TLCaption.js new file mode 100644 index 00000000000..1844e631a0b --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/components/TLCaption.js @@ -0,0 +1,20 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; +import { TelePhone } from "@egovernments/digit-ui-react-components"; +import Reason from "./Reason"; +import Username from "./Username"; + +const TLCaption = ({ data }) => { + const { t } = useTranslation(); + return ( +
+ {data.date &&

{data.date}

} + + {data.mobileNumber && } + {data.source &&

{t("ES_APPLICATION_DETAILS_APPLICATION_CHANNEL_" + data.source.toUpperCase())}

} + {data.comment && } +
+ ); +}; + +export default TLCaption; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/components/Username.js b/frontend/micro-ui-internals/packages/modules/fsm/src/components/Username.js new file mode 100644 index 00000000000..9460bf64fcd --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/components/Username.js @@ -0,0 +1,26 @@ +import React, { useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; + +const Username = ({ assigner }) => { + const { t } = useTranslation(); + const [designation, setDesignation] = useState(null); + const tenantId = Digit.ULBService.getCurrentTenantId(); + const { data, isSuccess } = Digit.Hooks.useEmployeeSearch( + tenantId, + { uuids: assigner?.uuid }, + { enabled: Digit.UserService.getType() === "employee" && assigner?.type === "EMPLOYEE" } + ); + + return ( +

+ {assigner?.name} + {` `} + {data?.Employees?.[0]?.assignments?.[0]?.designation + ? `(${t(`COMMON_MASTERS_DESIGNATION_${data?.Employees?.[0]?.assignments?.[0]?.designation}`)})` + : ""} + {assigner?.type === "CITIZEN" && assigner?.roles?.some((role) => role.code === "FSM_DSO") ? "(DSO)" : ""} +

+ ); +}; + +export default Username; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/ApplicationCard.js b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/ApplicationCard.js new file mode 100644 index 00000000000..343b946107e --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/ApplicationCard.js @@ -0,0 +1,158 @@ +import React, { useCallback, useEffect, useState } from "react"; + +import { Card, DetailsCard, Loader, PopUp, SearchAction } from "@egovernments/digit-ui-react-components"; +import { FilterAction } from "@egovernments/digit-ui-react-components"; +import Filter from "./Filter"; +import SearchApplication from "./search"; +import SortBy from "./SortBy"; + +export const ApplicationCard = ({ + t, + data, + onFilterChange, + onSearch, + onSort, + serviceRequestIdKey, + isFstpOperator, + isLoading, + isSearch, + searchParams, + searchFields, + sortParams, + linkPrefix, + removeParam, +}) => { + const [type, setType] = useState(isSearch ? "SEARCH" : ""); + const [popup, setPopup] = useState(isSearch ? true : false); + const [params, setParams] = useState(searchParams); + const [_sortparams, setSortParams] = useState(sortParams); + + const selectParams = (param) => { + setParams((o) => ({ ...o, ...param })); + }; + + const clearParam = () => { + setParams({}); + }; + + const onSearchPara = (param) => { + onFilterChange({ ...params, ...param }); + setType(""); + setPopup(false); + }; + + useEffect(() => { + if (type) setPopup(true); + }, [type]); + + const DSO = Digit.UserService.hasAccess(["FSM_DSO"]) || false; + + const handlePopupClose = () => { + setPopup(false); + setType(""); + setParams(searchParams); + setSortParams(sortParams); + }; + + const onSearchSortParams = (d) => { + setSortParams(d); + setPopup(false); + setType(""); + onSort(d); + }; + + if (isLoading) { + return ; + } + + let result; + if (!data || data?.length === 0) { + result = ( + + {t("CS_MYAPPLICATIONS_NO_APPLICATION") + .split("\\n") + .map((text, index) => ( +

+ {text} +

+ ))} +
+ ); + } else if (data && data?.length > 0) { + result = ( + + ); + } + + return ( + +
+ {onSearch && ( + { + setType("SEARCH"); + setPopup(true); + }} + /> + )} + {!isSearch && onFilterChange && ( + { + setType("FILTER"); + setPopup(true); + }} + /> + )} + { + setType("SORT"); + setPopup(true); + }} + /> +
+ {result} + {popup && ( + + {type === "FILTER" && ( +
+ { + + } +
+ )} + {type === "SORT" && ( +
+ {} +
+ )} + {type === "SEARCH" && ( +
+ +
+ )} +
+ )} +
+ ); +}; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/ApplicationLinks.js b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/ApplicationLinks.js new file mode 100644 index 00000000000..edbf8ce6694 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/ApplicationLinks.js @@ -0,0 +1,79 @@ +import { Card, ShippingTruck } from "@egovernments/digit-ui-react-components"; +import React, { useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { Link } from "react-router-dom"; + +const ApplicationLinks = ({ linkPrefix }) => { + const { t } = useTranslation(); + + const allLinks = [ + { + text: t("ES_TITLE_NEW_DESULDGING_APPLICATION"), + link: "/digit-ui/employee/fsm/new-application", + accessTo: ["FSM_CREATOR_EMP"], + }, + // { text: t("ES_TITLE_REPORTS"), link: "/employee" }, + // { text: t("ES_TITLE_DASHBOARD"), link: "/employee" }, + { + text: t("ES_TITILE_SEARCH_APPLICATION"), + link: `${linkPrefix}/search`, + }, + ]; + + const [links, setLinks] = useState([]); + + const { roles } = Digit.UserService.getUser().info; + + const hasAccess = (accessTo) => { + return roles.filter((role) => accessTo.includes(role.code)).length; + }; + + useEffect(() => { + let linksToShow = []; + allLinks.forEach((link) => { + if (link.accessTo) { + if (hasAccess(link.accessTo)) { + linksToShow.push(link); + } + } else { + linksToShow.push(link); + } + }); + setLinks(linksToShow); + }, []); + + // useEffect(() => { + // if (isMobile) { + // const mobileLinks = links.filter((link) => { + // return link.text !== t("ES_TITLE_DASHBOARD"); + // }); + // setLinks(mobileLinks); + // } + // }, []); + + const GetLogo = () => ( +
+ + + {" "} + {t("ES_TITLE_FAECAL_SLUDGE_MGMT")} +
+ ); + + return ( + +
+ {GetLogo()} +
+ {links.map(({ link, text }, index) => ( + + {text} + + ))} +
+
+
+ ); +}; + +export default ApplicationLinks; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/ApplicationTable.js b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/ApplicationTable.js new file mode 100644 index 00000000000..3259185d568 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/ApplicationTable.js @@ -0,0 +1,38 @@ +import React from "react"; +import { Table } from "@egovernments/digit-ui-react-components"; + +const ApplicationTable = ({ + t, + currentPage, + columns, + data, + getCellProps, + disableSort, + onSort, + onNextPage, + onPrevPage, + onPageSizeChange, + pageSizeLimit, + sortParams, + totalRecords, +}) => { + return ( +
+ ); +}; + +export default ApplicationTable; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/AssignedTo.js b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/AssignedTo.js new file mode 100644 index 00000000000..45a02a674f1 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/AssignedTo.js @@ -0,0 +1,34 @@ +import React from "react"; +import { RadioButtons } from "@egovernments/digit-ui-react-components"; + +const AssignedTo = ({ onFilterChange, searchParams, paginationParms, tenantId, t }) => { + const { data: AssignedToAll } = Digit.Hooks.fsm.useInbox( + tenantId, + { + ...searchParams, + ...paginationParms, + fromDate: searchParams?.fromDate ? new Date(searchParams?.fromDate).getTime() : undefined, + toDate: searchParams?.toDate ? new Date(searchParams?.toDate).getTime() : undefined, + total: true, + uuid: { code: "ASSIGNED_TO_ALL", name: t("ES_INBOX_ASSIGNED_TO_ALL") }, + } + ); + + const availableOptions = [ + { code: "ASSIGNED_TO_ME", name: `${t("ES_INBOX_ASSIGNED_TO_ME")} (0)` }, + { code: "ASSIGNED_TO_ALL", name: `${t("ES_INBOX_ASSIGNED_TO_ALL")} (${AssignedToAll?.totalCount || 0})` }, + ]; + + return ( + + onFilterChange({ uuid: { code: d.code } })} + selectedOption={availableOptions.filter((option) => option.code === searchParams?.uuid?.code)[0]} + optionsKey="name" + options={availableOptions} + /> + + ); +}; + +export default AssignedTo; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/DropdownStatus.js b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/DropdownStatus.js new file mode 100644 index 00000000000..f6bfb296cf8 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/DropdownStatus.js @@ -0,0 +1,12 @@ +import React from "react"; +import { Dropdown, Loader } from "@egovernments/digit-ui-react-components"; + +const DropdownStatus = ({ onAssignmentChange, value, applicationStatuses, areApplicationStatus }) => { + return areApplicationStatus ? ( + + ) : ( + + ); +}; + +export default DropdownStatus; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/FSMLink.js b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/FSMLink.js new file mode 100644 index 00000000000..4665a04c571 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/FSMLink.js @@ -0,0 +1,81 @@ +import { Card, ShippingTruck } from "@egovernments/digit-ui-react-components"; +import { forEach } from "lodash"; +import React, { useEffect, useState } from "react"; +import { Link } from "react-router-dom"; +import { useTranslation } from "react-i18next"; + +const FSMLink = ({ parentRoute, isMobile, data }) => { + const { t } = useTranslation(); + + const allLinks = [ + { + text: t("ES_TITLE_NEW_DESULDGING_APPLICATION"), + link: "/digit-ui/employee/fsm/new-application", + accessTo: ["FSM_CREATOR_EMP"], + }, + // { text: t("ES_TITLE_REPORTS"), link: "/employee" }, + { + text: t("ES_TITILE_SEARCH_APPLICATION"), + link: `${parentRoute}/search`, + }, + ]; + + const [links, setLinks] = useState([]); + + const { roles } = Digit.UserService.getUser().info; + + const hasAccess = (accessTo) => { + return roles.filter((role) => accessTo.includes(role.code)).length; + }; + + useEffect(() => { + let linksToShow = []; + allLinks.forEach((link) => { + if (link.accessTo) { + if (hasAccess(link.accessTo)) { + linksToShow.push(link); + } + } else { + linksToShow.push(link); + } + }); + setLinks(linksToShow); + }, []); + + // useEffect(() => { + // if (isMobile) { + // const mobileLinks = links.filter((link) => { + // return link.text !== t("ES_DASHBOARD"); + // }); + // setLinks(mobileLinks); + // } + // }, []); + + const GetLogo = () => ( +
+ + + {" "} + {t("ES_TITLE_FAECAL_SLUDGE_MGMT")} +
+ ); + + return ( + +
+ {GetLogo()} +
+ {links.map(({ link, text, hyperlink = false, accessTo = [] }, index) => { + return ( + + {hyperlink ? {text} : {text}} + + ); + })} +
+
+
+ ); +}; + +export default FSMLink; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/Filter.js b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/Filter.js new file mode 100644 index 00000000000..333a94e30f0 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/Filter.js @@ -0,0 +1,128 @@ +import React from "react"; +import { ActionBar, RemoveableTag, CloseSvg, Loader, Localities } from "@egovernments/digit-ui-react-components"; +import { ApplyFilterBar } from "@egovernments/digit-ui-react-components"; +import { useTranslation } from "react-i18next"; +import Status from "./Status"; +import AssignedTo from "./AssignedTo"; + +const Filter = ({ searchParams, paginationParms, onFilterChange, onSearch, removeParam, ...props }) => { + const { t } = useTranslation(); + + const DSO = Digit.UserService.hasAccess(["FSM_DSO"]) || false; + const isFstpOperator = Digit.UserService.hasAccess("FSTP") || false; + + // const hideLocalityFilter = Digit.UserService.hasAccess(["FSM_CREATOR_EMP", "FSM_VIEW_EMP"]); + + const tenantId = Digit.ULBService.getCurrentTenantId(); + const state = tenantId.split(".")[0]; + + const { data: roleStatuses, isFetched: isRoleStatusFetched } = Digit.Hooks.fsm.useMDMS(state, "DIGIT-UI", "RoleStatusMapping"); + + const userInfo = Digit.UserService.getUser(); + const userRoles = userInfo.info.roles.map((roleData) => roleData.code); + + const userRoleDetails = roleStatuses?.filter((roleDetails) => userRoles.filter((role) => role === roleDetails.userRole)[0]); + + const mergedRoleDetails = userRoleDetails?.reduce( + (merged, details) => ({ + fixed: details?.fixed && merged?.fixed, + statuses: [...merged?.statuses, ...details?.statuses].filter((item, pos, self) => self.indexOf(item) == pos), + zeroCheck: details?.zeroCheck || merged?.zeroCheck, + }), + { statuses: [] } + ); + + // console.log("find use query localities here", localities) + const selectLocality = (d) => { + onFilterChange({ locality: [...searchParams?.locality, d] }); + }; + + const onStatusChange = (e, type) => { + if (e.target.checked) onFilterChange({ applicationStatus: [...searchParams?.applicationStatus, type] }); + else onFilterChange({ applicationStatus: searchParams?.applicationStatus.filter((option) => type.name !== option.name) }); + }; + + const clearAll = () => { + onFilterChange({ applicationStatus: [], locality: [], uuid: { code: "ASSIGNED_TO_ME", name: "Assigned to Me" } }); + props?.onClose?.(); + }; + + return ( + +
+
+
+
{t("ES_COMMON_FILTER_BY")}:
+
+ {t("ES_COMMON_CLEAR_ALL")} +
+ {props.type === "desktop" && ( + + {t("ES_COMMON_CLEAR_ALL")} + + )} + {props.type === "mobile" && ( + + + + )} +
+
+ {!DSO && !isFstpOperator && searchParams && ( + + )} +
+ {/* {GetSelectOptions(t("ES_INBOX_LOCALITY"), localities, selectedLocality, onSelectLocality, "code", onRemove, "locality", "name")} */} +
+ {/* */} +
+ + {mergedRoleDetails?.statuses?.length > 0 ? ( +
+
{t("ES_INBOX_LOCALITY")}
+ {/* */} + +
+ {searchParams?.locality.map((locality, index) => { + return ( + { + onFilterChange({ locality: searchParams?.locality.filter((loc) => loc.code !== locality.code) }); + }} + /> + ); + })} +
+
+ ) : null} +
+ {isRoleStatusFetched && mergedRoleDetails ? ( + + ) : ( + + )} +
+
+
+ {props.type === "mobile" && ( + + { + if (props.type === "mobile") onSearch({ delete: ["applicationNos"] }); + else onSearch(); + }} + style={{ flex: 1 }} + /> + + )} +
+ ); +}; + +export default Filter; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/SortBy.js b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/SortBy.js new file mode 100644 index 00000000000..66166c40ccc --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/SortBy.js @@ -0,0 +1,68 @@ +import React, { useState } from "react"; +import { ActionBar, RadioButtons } from "@egovernments/digit-ui-react-components"; +import { useTranslation } from "react-i18next"; +import { ApplyFilterBar, CloseSvg } from "@egovernments/digit-ui-react-components"; + +const SortBy = (props) => { + const { t } = useTranslation(); + const [selectedOption, setSelectedOption] = useState(() => { + return props.sortParams?.[0]?.desc + ? { code: "DESC", name: t("ES_INBOX_DATE_LATEST_FIRST") } + : { code: "ASC", name: t("ES_INBOX_DATE_LATEST_LAST") }; + }); + + function clearAll() {} + + function onSort(option) { + props.onSort([{ id: "createdTime", desc: option.code === "DESC" ? true : false }]); + props.onClose(); + } + + return ( + +
+
+
+
{t("SORT_BY")}:
+
+ {t("ES_COMMON_CLEAR_ALL")} +
+ {props.type === "desktop" && ( + + {t("ES_COMMON_CLEAR_ALL")} + + )} + {props.type === "mobile" && ( + + + + )} +
+
+ +
+
+
+ {/* + {props.type === "mobile" && ( + + )} + */} +
+ ); +}; + +export default SortBy; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/Status.js b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/Status.js new file mode 100644 index 00000000000..917475d35f1 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/Status.js @@ -0,0 +1,48 @@ +import React, { useState } from "react"; +import { Loader } from "@egovernments/digit-ui-react-components"; +import { useTranslation } from "react-i18next"; +import StatusCount from "./StatusCount"; + +const Status = ({ onAssignmentChange, fsmfilters, mergedRoleDetails, statusMap }) => { + const { t } = useTranslation(); + + const { data: applicationsWithCount, isLoading } = Digit.Hooks.fsm.useApplicationStatus(true, true, statusMap); + // console.log("find application stats", applicationsWithCount) + + const [moreStatus, showMoreStatus] = useState(false); + + const finalApplicationWithCount = mergedRoleDetails.statuses + .map((roleDetails) => applicationsWithCount?.filter((application) => application.code === roleDetails)[0]) + .filter((status) => status?.code); + + const moreApplicationWithCount = applicationsWithCount?.filter( + (application) => !finalApplicationWithCount.find((listedApplication) => listedApplication.code === application.code) + ); + + // console.log("find role status from here", applicationsWithCount , mergedRoleDetails, finalApplicationWithCount, moreApplicationWithCount); + if (isLoading) { + return ; + } + + return finalApplicationWithCount?.length > 0 ? ( +
+
{t("ES_INBOX_STATUS")}
+ {finalApplicationWithCount?.map((option, index) => ( + + ))} + {moreStatus + ? moreApplicationWithCount?.map((option, index) => ( + + )) + : null} + {mergedRoleDetails.fixed === false ? ( +
showMoreStatus(!moreStatus)}> + {" "} + {moreStatus ? t("ES_COMMON_LESS") : t("ES_COMMON_MORE")}{" "} +
+ ) : null} +
+ ) : null; +}; + +export default Status; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/StatusCount.js b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/StatusCount.js new file mode 100644 index 00000000000..76291c411dd --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/StatusCount.js @@ -0,0 +1,18 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; +import { CheckBox } from "@egovernments/digit-ui-react-components"; + +const StatusCount = ({ status, fsmfilters, onAssignmentChange, statusMap }) => { + const { t } = useTranslation(); + const count = statusMap?.filter(e => e?.applicationstatus === status.code)?.[0]?.count + + return ( + onAssignmentChange(e, status)} + checked={fsmfilters?.applicationStatus.filter((e) => e.name === status.name).length !== 0 ? true : false} + label={`${t(status.name)} (${count || 0})`} + /> + ); +}; + +export default StatusCount; \ No newline at end of file diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/search.js b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/search.js new file mode 100644 index 00000000000..a191a96a172 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/components/inbox/search.js @@ -0,0 +1,140 @@ +import React, { useState } from "react"; +import { useForm, Controller } from "react-hook-form"; +import { TextInput, Label, SubmitBar, LinkLabel, ActionBar, CloseSvg, DatePicker, CardLabelError } from "@egovernments/digit-ui-react-components"; +import DropdownStatus from "./DropdownStatus"; +import { useTranslation } from "react-i18next"; + +const SearchApplication = ({ onSearch, type, onClose, isFstpOperator, searchFields, searchParams, isInboxPage }) => { + const storedSearchParams = isInboxPage ? Digit.SessionStorage.get("fsm/inbox/searchParams") : Digit.SessionStorage.get("fsm/search/searchParams"); + + const { data: applicationStatuses, isFetched: areApplicationStatus } = Digit.Hooks.fsm.useApplicationStatus(); + + const { t } = useTranslation(); + const { register, handleSubmit, reset, watch, control } = useForm({ + defaultValues: storedSearchParams || searchParams, + }); + const [error, setError] = useState(false); + const mobileView = innerWidth <= 640; + const FSTP = Digit.UserService.hasAccess("FSM_EMP_FSTPO") || false; + const watchSearch = watch(["applicationNos", "mobileNumber"]); + + const onSubmitInput = (data) => { + if (!data.mobileNumber) { + delete data.mobileNumber; + } + onSearch(data); + if (type === "mobile") { + onClose(); + } + }; + + function clearSearch() { + const resetValues = searchFields.reduce((acc, field) => ({ ...acc, [field?.name]: "" }), {}); + reset(resetValues); + if (isInboxPage) { + Digit.SessionStorage.del("fsm/inbox/searchParams"); + } else { + Digit.SessionStorage.del("fsm/search/searchParams"); + } + onSearch({}); + } + + const clearAll = (mobileView) => { + const mobileViewStyles = mobileView ? { margin: 0 } : {}; + return ( + + {t("ES_COMMON_CLEAR_SEARCH")} + + ); + }; + + const searchValidation = (data) => { + // console.log("find input", watchSearch, data); + if (FSTP) return null; + + watchSearch.applicationNos || watchSearch.mobileNumber ? setError(false) : setError(true); + return watchSearch.applicationNos || watchSearch.mobileNumber ? true : false; + }; + + const getFields = (input) => { + switch (input.type) { + case "date": + return ( + } + name={input.name} + control={control} + defaultValue={null} + /> + ); + case "status": + return ( + ( + + )} + name={input.name} + control={control} + defaultValue={null} + /> + ); + default: + return ( + + ); + } + }; + + return ( +
+ +
+
+ {(type === "mobile" || mobileView) && ( +
+

{t("ES_COMMON_SEARCH_BY")}

+ + + +
+ )} +
+ {searchFields?.map((input, index) => ( + + + {getFields(input)}{" "} + + ))} + {type === "desktop" && !mobileView && } +
+ {error ? {t("ES_SEARCH_APPLICATION_ERROR")} : null} + {type === "desktop" && !mobileView && {clearAll()}} +
+
+ {(type === "mobile" || mobileView) && ( + + + + + )} +
+ + ); +}; + +export default SearchApplication; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/config/Employee/ApplicantConfig.js b/frontend/micro-ui-internals/packages/modules/fsm/src/config/Employee/ApplicantConfig.js new file mode 100644 index 00000000000..7f6c23071ef --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/config/Employee/ApplicantConfig.js @@ -0,0 +1,23 @@ +const ApplicantDetails = [ + { + head: "ES_TITLE_APPLICANT_DETAILS", + body: [ + { + label: "ES_NEW_APPLICATION_APPLICATION_CHANNEL", + isMandatory: true, + type: "component", + key: "channel", + component: "SelectChannel", + nextStep: "applicantName", + }, + { + type: "component", + key: "applicationData", + withoutLabel: true, + component: "SelectName", + }, + ], + }, +]; + +export default ApplicantDetails; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/config/Employee/TripDetailsConfig.js b/frontend/micro-ui-internals/packages/modules/fsm/src/config/Employee/TripDetailsConfig.js new file mode 100644 index 00000000000..4826faa7fa6 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/config/Employee/TripDetailsConfig.js @@ -0,0 +1,15 @@ +const TripDetails = [ + { + head: "", + body: [ + { + type: "component", + key: "tripData", + withoutLabel: true, + component: "SelectTripData", + }, + ], + }, +]; + +export default TripDetails; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/config/NewApplication/config.js b/frontend/micro-ui-internals/packages/modules/fsm/src/config/NewApplication/config.js new file mode 100644 index 00000000000..1331255f099 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/config/NewApplication/config.js @@ -0,0 +1,173 @@ +export const newConfig = [ + { + head: "ES_NEW_APPLICATION_PROPERTY_DETAILS", + body: [ + { + label: "ES_NEW_APPLICATION_PROPERTY_TYPE", + isMandatory: true, + type: "component", + route: "property-type", + key: "propertyType", + component: "SelectPropertyType", + texts: { + headerCaption: "", + header: "CS_FILE_APPLICATION_PROPERTY_LABEL", + cardText: "CS_FILE_APPLICATION_PROPERTY_TEXT", + submitBarLabel: "CS_COMMON_NEXT", + }, + nextStep: "property-subtype", + }, + { + label: "ES_NEW_APPLICATION_PROPERTY_SUB-TYPE", + isMandatory: true, + type: "component", + route: "property-subtype", + key: "subtype", + component: "SelectPropertySubtype", + texts: { + headerCaption: "", + header: "CS_FILE_APPLICATION_PROPERTY_SUBTYPE_LABEL", + cardText: "CS_FILE_APPLICATION_PROPERTY_SUBTYPE_TEXT", + submitBarLabel: "CS_COMMON_NEXT", + }, + nextStep: "map", + }, + ], + }, + { + head: "ES_NEW_APPLICATION_LOCATION_DETAILS", + body: [ + { + route: "map", + component: "SelectGeolocation", + nextStep: "pincode", + hideInEmployee: true, + key: "address", + }, + { + route: "pincode", + component: "SelectPincode", + texts: { + headerCaption: "", + header: "CS_FILE_APPLICATION_PINCODE_LABEL", + cardText: "CS_FILE_APPLICATION_PINCODE_TEXT", + submitBarLabel: "CS_COMMON_NEXT", + skipText: "CORE_COMMON_SKIP_CONTINUE", + }, + withoutLabel: true, + key: "address", + nextStep: "address", + type: "component", + }, + { + route: "address", + component: "SelectAddress", + withoutLabel: true, + texts: { + headerCaption: "CS_FILE_APPLICATION_PROPERTY_LOCATION_LABEL", + header: "CS_FILE_APPLICATION_PROPERTY_LOCATION_ADDRESS_TEXT", + cardText: "CS_FILE_APPLICATION_PROPERTY_LOCATION_CITY_MOHALLA_TEXT", + submitBarLabel: "CS_COMMON_NEXT", + }, + key: "address", + nextStep: "check-slum", + isMandatory: true, + type: "component", + }, + { + type: "component", + route: "check-slum", + isMandatory: true, + component: "CheckSlum", + texts: { + header: "ES_NEW_APPLICATION_SLUM_CHECK", + submitBarLabel: "CS_COMMON_NEXT", + }, + component: "CheckSlum", + key: "address", + withoutLabel: true, + nextStep: "slum-details", + hideInEmployee: true, + }, + { + type: "component", + route: "slum-details", + isMandatory: true, + component: "SelectSlumName", + texts: { + header: "CS_NEW_APPLICATION_SLUM_NAME", + cardText: "CS_NEW_APPLICATION_SLUM_TEXT", + submitBarLabel: "CS_COMMON_NEXT", + }, + withoutLabel: true, + key: "address", + nextStep: "street", + }, + { + type: "component", + route: "street", + component: "SelectStreet", + key: "address", + withoutLabel: true, + texts: { + headerCaption: "CS_FILE_APPLICATION_PROPERTY_LOCATION_LABEL", + header: "CS_FILE_APPLICATION_PROPERTY_LOCATION_ADDRESS_TEXT", + cardText: "CS_FILE_APPLICATION_PROPERTY_LOCATION_STREET_DOOR_NO_LABEL", + submitBarLabel: "CS_COMMON_NEXT", + skipText: "CORE_COMMON_SKIP_CONTINUE", + }, + nextStep: "landmark", + }, + { + type: "component", + route: "landmark", + component: "SelectLandmark", + withoutLabel: true, + texts: { + headerCaption: "CS_FILE_APPLICATION_PROPERTY_LOCATION_LABEL", + header: "CS_FILE_APPLICATION_PROPERTY_LOCATION_PROVIDE_LANDMARK_TITLE", + cardText: "CS_FILE_APPLICATION_PROPERTY_LOCATION_PROVIDE_LANDMARK_TEXT", + submitBarLabel: "CS_COMMON_NEXT", + skipText: "CORE_COMMON_SKIP_CONTINUE", + }, + key: "address", + nextStep: "pit-type", + }, + ], + }, + { + head: "CS_CHECK_PIT_SEPTIC_TANK_DETAILS", + body: [ + { + label: "ES_NEW_APPLICATION_PIT_TYPE", + isMandatory: false, + type: "component", + route: "pit-type", + key: "pitType", + component: "SelectPitType", + texts: { + header: "CS_FILE_PROPERTY_PIT_TYPE", + cardText: "CS_FILE_PROPERTY_PIT_TYPE_TEXT", + submitBarLabel: "CS_COMMON_NEXT", + skipText: "CORE_COMMON_SKIP_CONTINUE", + }, + nextStep: "tank-size", + }, + { + route: "tank-size", + component: "SelectTankSize", + isMandatory: false, + texts: { + headerCaption: "", + header: "CS_FILE_APPLICATION_PIT_SEPTIC_TANK_SIZE_TITLE", + cardText: "CS_FILE_APPLICATION_PIT_SEPTIC_TANK_SIZE_TEXT", + submitBarLabel: "CS_COMMON_NEXT", + }, + type: "component", + key: "pitDetail", + nextStep: null, + label: "ES_NEW_APPLICATION_PIT_DIMENSION", + }, + ], + }, +]; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/getPDFData.js b/frontend/micro-ui-internals/packages/modules/fsm/src/getPDFData.js new file mode 100644 index 00000000000..13d3ff182f3 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/getPDFData.js @@ -0,0 +1,130 @@ +import { getPropertyTypeLocale, getPropertySubtypeLocale, getVehicleType } from "./utils"; + +const capitalize = (text) => text.substr(0, 1).toUpperCase() + text.substr(1); +const ulbCamel = (ulb) => ulb.toLowerCase().split(" ").map(capitalize).join(" "); + +const getSlumName = (application, t) => { + if (application?.slumName) { + return t(application.slumName); + } + return application?.slum?.i18nKey ? t(`${application?.slum?.i18nKey}`) : "N/A"; +}; + +const getApplicationVehicleType = (application, t) => { + if (application?.vehicleMake && application?.vehicleCapacity) { + return getVehicleType({ i18nKey: application?.vehicleMake, capacity: application?.vehicleCapacity }, t); + } + return application?.pdfVehicleType ? application?.pdfVehicleType : "N/A"; +}; + +const getAmountPerTrip = (amountPerTrip) => { + if (!amountPerTrip) return "N/A"; + return amountPerTrip !== 0 ? `₹ ${amountPerTrip}` : "N/A"; +}; + +const getTotalAmount = (totalAmount) => { + if (!totalAmount) return "N/A"; + return totalAmount !== 0 ? `₹ ${totalAmount}` : "N/A"; +}; + +const getPDFData = (application, tenantInfo, t) => { + const { address, additionalDetails } = application; + + const amountPerTrip = application?.amountPerTrip || additionalDetails?.tripAmount || JSON.parse(address?.additionalDetails)?.tripAmount; + const totalAmount = application?.totalAmount || amountPerTrip * application?.noOfTrips; + + return { + t: t, + tenantId: tenantInfo?.code, + name: `${t(tenantInfo?.i18nKey)} ${t(`ULBGRADE_${tenantInfo?.city?.ulbGrade.toUpperCase().replace(" ", "_").replace(".", "_")}`)}`, + email: tenantInfo?.emailId, + phoneNumber: tenantInfo?.contactNumber, + heading: t("PDF_HEADER_DESLUDGING_REQUEST_ACKNOWLEDGEMENT"), + details: [ + { + title: t("CS_TITLE_APPLICATION_DETAILS"), + values: [ + { title: t("CS_MY_APPLICATION_APPLICATION_NO"), value: application?.applicationNo }, + { + title: t("CS_APPLICATION_DETAILS_APPLICATION_DATE"), + value: Digit.DateUtils.ConvertTimestampToDate(application?.auditDetails?.createdTime, "dd/MM/yyyy"), + }, + { + title: t("CS_APPLICATION_DETAILS_APPLICATION_CHANNEL"), + value: t(`ES_APPLICATION_DETAILS_APPLICATION_CHANNEL_${application?.source}`) || "N/A", + }, + ], + }, + { + title: t("CS_APPLICATION_DETAILS_APPLICANT_DETAILS"), + values: [ + { title: t("CS_APPLICATION_DETAILS_APPLICANT_NAME"), value: application?.citizen?.name || "N/A" }, + { title: t("CS_APPLICATION_DETAILS_APPLICANT_MOBILE"), value: application?.citizen?.mobileNumber || "N/A" }, + ], + }, + { + title: t("CS_APPLICATION_DETAILS_PROPERTY_DETAILS"), + values: [ + { title: t("CS_APPLICATION_DETAILS_PROPERTY_TYPE"), value: t(getPropertyTypeLocale(application?.propertyUsage)) || "N/A" }, + { title: t("CS_APPLICATION_DETAILS_PROPERTY_SUB_TYPE"), value: t(getPropertySubtypeLocale(application?.propertyUsage)) || "N/A" }, + ], + }, + { + title: t("CS_APPLICATION_DETAILS_PROPERTY_LOCATION_DETAILS"), + values: [ + { title: t("CS_APPLICATION_DETAILS_PINCODE"), value: application?.address?.pincode || "N/A" }, + { title: t("CS_APPLICATION_DETAILS_CITY"), value: application?.address?.city || "N/A" }, + { + title: t("CS_APPLICATION_DETAILS_MOHALLA"), + value: t(`${application?.tenantId?.toUpperCase().split(".").join("_")}_REVENUE_${application?.address?.locality?.code}`) || "N/A", + }, + { + title: t("CS_APPLICATION_DETAILS_SLUM_NAME"), + value: getSlumName(application, t), + }, + { title: t("CS_APPLICATION_DETAILS_STREET"), value: application?.address?.street || "N/A" }, + { title: t("CS_APPLICATION_DETAILS_DOOR_NO"), value: application?.address?.doorNo || "N/A" }, + { title: t("CS_APPLICATION_DETAILS_LANDMARK"), value: application?.address?.landmark || "N/A" }, + ], + }, + { + title: t("CS_APPLICATION_DETAILS_PIT_DETAILS"), + values: [ + { + title: t("CS_APPLICATION_DETAILS_PIT_TYPE"), + value: application?.sanitationtype ? t("PITTYPE_MASTERS_" + application?.sanitationtype) : "N/A", + }, + { + title: t("CS_APPLICATION_DETAILS_DIMENSION"), + // NOTE: value have too much whitespace bcz we want the text after whitespace should go to next line, so pls don't remove whitespace + value: + application?.pitDetail?.height && application?.pitDetail?.height !== null + ? application?.pitDetail?.length + ? `${application?.pitDetail?.length}m * ${application?.pitDetail?.width}m * ${ + application?.pitDetail?.height + }m (${t("CS_COMMON_LENGTH")} x ${t("CS_COMMON_BREADTH")} x ${t("CS_COMMON_DEPTH")})` + : `${application?.pitDetail?.diameter}m * ${application?.pitDetail?.height}m (${t( + "CS_COMMON_DIAMETER" + )} x ${t("CS_COMMON_DEPTH")})` + : "N/A", + }, + { + title: t("ES_FSM_ACTION_VEHICLE_TYPE"), + value: getApplicationVehicleType(application, t), + }, + { title: t("CS_APPLICATION_DETAILS_TRIPS"), value: application?.noOfTrips || "N/A" }, + { + title: t("CS_APPLICATION_DETAILS_AMOUNT_PER_TRIP"), + value: getAmountPerTrip(amountPerTrip), + }, + { + title: t("CS_APPLICATION_DETAILS_AMOUNT_DUE"), + value: getTotalAmount(totalAmount), + }, + ], + }, + ], + }; +}; + +export default getPDFData; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/pageComponents/CheckSlum.js b/frontend/micro-ui-internals/packages/modules/fsm/src/pageComponents/CheckSlum.js new file mode 100644 index 00000000000..3e32e9569f3 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/pageComponents/CheckSlum.js @@ -0,0 +1,41 @@ +import React, { useEffect, useState } from "react"; +import { FormStep, RadioOrSelect } from "@egovernments/digit-ui-react-components"; + +const CheckSlum = ({ t, config, onSelect, userType, formData }) => { + const tenantId = Digit.ULBService.getCurrentTenantId(); + const stateId = tenantId?.split(".")[0]; + + const [slumArea, setSlumArea] = useState(formData?.address?.slumArea); + + const locality = formData?.address?.locality?.code.split("_")[3]; + // const { data: slumData, isLoading: slumDataLoading } = Digit.Hooks.fsm.useMDMS(formData?.address?.city.code, "FSM", "Slum"); + + const onSkip = () => onSelect(); + function goNext() { + onSelect(config.key, { slumArea }); + } + + // useEffect(() => { + // // console.log("find slum data here", slumData && slumData[locality]) + // if (slumData && (!slumData[locality] || slumData[locality].length === 0)) { + // onSelect(config.key, { slumArea: { code: false, i18nKey: "CS_COMMON_NO" } }, true); + // } + // }, [locality, slumDataLoading]); + + return ( + + + + ); +}; + +export default CheckSlum; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/pageComponents/SelectAddress.js b/frontend/micro-ui-internals/packages/modules/fsm/src/pageComponents/SelectAddress.js new file mode 100644 index 00000000000..264b5f0f15f --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/pageComponents/SelectAddress.js @@ -0,0 +1,144 @@ +import React, { useEffect, useState } from "react"; +import { FormStep, CardLabel, Dropdown, RadioButtons, LabelFieldPair, RadioOrSelect } from "@egovernments/digit-ui-react-components"; + +const SelectAddress = ({ t, config, onSelect, userType, formData }) => { + const allCities = Digit.Hooks.fsm.useTenants(); + let tenantId = Digit.ULBService.getCurrentTenantId(); + + const { pincode, city } = formData?.address || ""; + const cities = + userType === "employee" + ? allCities.filter((city) => city.code === tenantId) + : pincode + ? allCities.filter((city) => city?.pincode?.some((pin) => pin == pincode)) + : allCities; + + const [selectedCity, setSelectedCity] = useState(() => formData?.address?.city || Digit.SessionStorage.get("fsm.file.address.city") || null); + const { data: fetchedLocalities } = Digit.Hooks.useBoundaryLocalities( + selectedCity?.code, + "revenue", + { + enabled: !!selectedCity, + }, + t + ); + const [localities, setLocalities] = useState(); + const [selectedLocality, setSelectedLocality] = useState(); + + useEffect(() => { + if (cities) { + if (cities.length === 1) { + setSelectedCity(cities[0]); + } + } + }, [cities]); + + useEffect(() => { + if (selectedCity && fetchedLocalities) { + let __localityList = fetchedLocalities; + let filteredLocalityList = []; + + if (formData?.address?.locality) { + setSelectedLocality(formData.address.locality); + } + + if (formData?.address?.pincode) { + filteredLocalityList = __localityList.filter((obj) => obj.pincode?.find((item) => item == formData.address.pincode)); + if (!formData?.address?.locality) setSelectedLocality(); + } + + if (userType === "employee") { + onSelect(config.key, { ...formData[config.key], city: selectedCity }); + } + setLocalities(() => (filteredLocalityList.length > 0 ? filteredLocalityList : __localityList)); + // console.log("find set localities here", fetchedLocalities, filteredLocalityList.length > 0 ? filteredLocalityList : __localityList ) + if (filteredLocalityList.length === 1) { + setSelectedLocality(filteredLocalityList[0]); + if (userType === "employee") { + onSelect(config.key, { ...formData[config.key], locality: filteredLocalityList[0] }); + } + } + } + }, [selectedCity, formData?.address?.pincode, fetchedLocalities]); + + function selectCity(city) { + setSelectedLocality(null); + setLocalities(null); + Digit.SessionStorage.set("fsm.file.address.city", city); + setSelectedCity(city); + } + + function selectLocality(locality) { + setSelectedLocality(locality); + if (userType === "employee") { + onSelect(config.key, { ...formData[config.key], locality: locality }); + } + } + + function onSubmit() { + onSelect(config.key, { city: selectedCity, locality: selectedLocality }); + } + + if (userType === "employee") { + return ( +
+ + + {t("MYCITY_CODE_LABEL")} + {config.isMandatory ? " * " : null} + + + + + + {t("CS_CREATECOMPLAINT_MOHALLA")} + {config.isMandatory ? " * " : null} + + + +
+ ); + } + return ( + + {`${t("MYCITY_CODE_LABEL")} *`} + + {selectedCity && localities && {`${t("CS_CREATECOMPLAINT_MOHALLA")} *`}} + {selectedCity && localities && ( + + )} + + ); +}; + +export default SelectAddress; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/pageComponents/SelectChannel.js b/frontend/micro-ui-internals/packages/modules/fsm/src/pageComponents/SelectChannel.js new file mode 100644 index 00000000000..8a91252814c --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/pageComponents/SelectChannel.js @@ -0,0 +1,37 @@ +import React, { useState } from "react"; +import { Loader } from "@egovernments/digit-ui-react-components"; +import { Dropdown } from "@egovernments/digit-ui-react-components"; +import { useLocation } from "react-router-dom"; + +const SelectChannel = ({ t, config, onSelect, formData = {}, userType }) => { + const tenantId = Digit.ULBService.getCurrentTenantId(); + + const { pathname: url } = useLocation(); + const editScreen = url.includes("/modify-application/"); + + const { data: channelMenu } = Digit.Hooks.fsm.useMDMS(tenantId, "FSM", "EmployeeApplicationChannel"); + const [channel, setChannel] = useState(formData?.channel); + + function selectChannel(value) { + // console.log(value) + setChannel(value); + onSelect(config.key, value); + } + + return channelMenu ? ( + + ) : ( + + ); +}; + +export default SelectChannel; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/pageComponents/SelectGeolocation.js b/frontend/micro-ui-internals/packages/modules/fsm/src/pageComponents/SelectGeolocation.js new file mode 100644 index 00000000000..d5dd79452b6 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/pageComponents/SelectGeolocation.js @@ -0,0 +1,41 @@ +import React, { useState } from "react"; +import { LocationSearchCard } from "@egovernments/digit-ui-react-components"; + +const SelectGeolocation = ({ t, config, onSelect, formData = {} }) => { + const [pincode, setPincode] = useState(formData?.address?.pincode || ""); + const [geoLocation, setGeoLocation] = useState(formData?.address?.geoLocation || {}); + const tenants = Digit.Hooks.fsm.useTenants(); + const [pincodeServicability, setPincodeServicability] = useState(null); + + const onSkip = () => onSelect(); + const onChange = (code, location) => { + setPincodeServicability(null); + const foundValue = tenants?.find((obj) => obj.pincode?.find((item) => item == code)); + if (!foundValue) { + setPincodeServicability("CS_COMMON_PINCODE_NOT_SERVICABLE"); + setPincode(""); + setGeoLocation({}); + } else { + setPincode(code); + setGeoLocation(location); + } + }; + + return ( + onSelect(config.key, { geoLocation, pincode })} + onChange={(code, location) => onChange(code, location)} + disabled={pincode === ""} + forcedError={t(pincodeServicability)} + /> + ); +}; + +export default SelectGeolocation; diff --git a/frontend/micro-ui-internals/packages/modules/fsm/src/pageComponents/SelectLandmark.js b/frontend/micro-ui-internals/packages/modules/fsm/src/pageComponents/SelectLandmark.js new file mode 100644 index 00000000000..6f19ca28c95 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/fsm/src/pageComponents/SelectLandmark.js @@ -0,0 +1,66 @@ +import React, { useState, useEffect } from "react"; +import { FormStep, TextArea, LabelFieldPair, CardLabel } from "@egovernments/digit-ui-react-components"; + +const SelectLandmark = ({ t, config, onSelect, formData, userType }) => { + const [landmark, setLandmark] = useState(); + + const [error, setError] = useState(""); + + const inputs = [ + { + label: "ES_NEW_APPLICATION_LOCATION_LANDMARK", + type: "textarea", + name: "landmark", + validation: { + maxLength: 1024, + }, + }, + ]; + + useEffect(() => { + setLandmark(formData?.address?.landmark); + }, [formData?.address?.landmark]); + + function onChange(e) { + if (e.target.value.length > 1024) { + setError("CS_COMMON_LANDMARK_MAX_LENGTH"); + } else { + setError(null); + setLandmark(e.target.value); + if (userType === "employee") { + const value = e?.target?.value; + const key = e?.target?.id; + onSelect(config.key, { ...formData[config.key], landmark: e.target.value }); + } + } + } + + if (userType === "employee") { + return inputs?.map((input, index) => { + return ( + + + {t(input.label)} + {config.isMandatory ? " * " : null} + + + + + + + ); +}; + +export default RatingAndFeedBack; diff --git a/frontend/micro-ui-internals/packages/modules/pgr/src/pages/citizen/Rating/SelectRating.js b/frontend/micro-ui-internals/packages/modules/pgr/src/pages/citizen/Rating/SelectRating.js new file mode 100644 index 00000000000..ecef198854b --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/pgr/src/pages/citizen/Rating/SelectRating.js @@ -0,0 +1,64 @@ +import React, { useCallback, useState } from "react"; +import { useDispatch } from "react-redux"; +import { RatingCard, CardLabelError } from "@egovernments/digit-ui-react-components"; +import { useParams, Redirect, useHistory } from "react-router-dom"; +import { useTranslation } from "react-i18next"; +import { updateComplaints } from "../../../redux/actions/index"; + +const SelectRating = ({ parentRoute }) => { + const { t } = useTranslation(); + const { id } = useParams(); + const dispatch = useDispatch(); + // console.log("parent route", parentRoute); + const history = useHistory(); + + let tenantId = Digit.ULBService.getCurrentTenantId(); + const complaintDetails = Digit.Hooks.pgr.useComplaintDetails({ tenantId: tenantId, id: id }).complaintDetails; + const updateComplaint = useCallback((complaintDetails) => dispatch(updateComplaints(complaintDetails)), [dispatch]); + const [submitError, setError] = useState(false) + + function log(data) { + if (complaintDetails && data.rating > 0 ) { + complaintDetails.service.rating = data.rating; + complaintDetails.service.additionalDetail = data.CS_FEEDBACK_WHAT_WAS_GOOD.join(","); + complaintDetails.workflow = { + action: "RATE", + comments: data.comments, + verificationDocuments: [], + }; + // console.log("updtaed complaint details", complaintDetails); + updateComplaint({ service: complaintDetails.service, workflow: complaintDetails.workflow }); + history.push(`${parentRoute}/response`); + } + else{ + setError(true) + } + } + + const config = { + texts: { + header: "CS_COMPLAINT_RATE_HELP_TEXT", + submitBarLabel: "CS_COMMONS_NEXT", + }, + inputs: [ + { + type: "rate", + maxRating: 5, + label: t("CS_COMPLAINT_RATE_TEXT"), + error: submitError ? {t("CS_FEEDBACK_ENTER_RATING_ERROR")} : null + }, + { + type: "checkbox", + label: "CS_FEEDBACK_WHAT_WAS_GOOD", + checkLabels: [t("CS_FEEDBACK_SERVICES"), t("CS_FEEDBACK_RESOLUTION_TIME"), t("CS_FEEDBACK_QUALITY_OF_WORK"), t("CS_FEEDBACK_OTHERS")], + }, + { + type: "textarea", + label: t("CS_COMMON_COMMENTS"), + name: "comments", + }, + ], + }; + return ; +}; +export default SelectRating; diff --git a/frontend/micro-ui-internals/packages/modules/pgr/src/pages/citizen/ReopenComplaint/AddtionalDetails.js b/frontend/micro-ui-internals/packages/modules/pgr/src/pages/citizen/ReopenComplaint/AddtionalDetails.js new file mode 100644 index 00000000000..856dc371109 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/pgr/src/pages/citizen/ReopenComplaint/AddtionalDetails.js @@ -0,0 +1,103 @@ +import React, { useCallback, useEffect } from "react"; +import { useTranslation } from "react-i18next"; +import { useDispatch, useSelector } from "react-redux"; +import { useParams, useHistory, Redirect } from "react-router-dom"; + +import { BackButton, Card, CardHeader, CardText, TextArea, SubmitBar } from "@egovernments/digit-ui-react-components"; + +import { updateComplaints } from "../../../redux/actions/index"; +import { LOCALIZATION_KEY } from "../../../constants/Localization"; + +const AddtionalDetails = (props) => { + // const [details, setDetails] = useState(null); + const history = useHistory(); + let { id } = useParams(); + const dispatch = useDispatch(); + const appState = useSelector((state) => state)["common"]; + let { t } = useTranslation(); + let tenantId = Digit.ULBService.getCurrentTenantId(); + + const complaintDetails = Digit.Hooks.pgr.useComplaintDetails({ tenantId: tenantId, id: id }).complaintDetails; + useEffect(() => { + if (appState.complaints) { + const { response } = appState.complaints; + if (response && response.responseInfo.status === "successful") { + history.push(`${props.match.path}/response/:${id}`); + } + } + }, [appState.complaints, props.history]); + + const updateComplaint = useCallback( + async (complaintDetails) => { + await dispatch(updateComplaints(complaintDetails)); + history.push(`${props.match.path}/response/${id}`); + }, + [dispatch] + ); + + const getUpdatedWorkflow = (reopenDetails, type) => { + switch (type) { + case "REOPEN": + return { + action: "REOPEN", + comments: reopenDetails.addtionalDetail, + assignes: [], + verificationDocuments: reopenDetails.verificationDocuments, + }; + default: + return ""; + } + }; + + function reopenComplaint() { + let reopenDetails = Digit.SessionStorage.get(`reopen.${id}`); + // let complaintDetails = Digit.SessionStorage.get(`complaint.${id}`); + // console.log("reopen complaint1", reopenDetails, complaintDetails); + + // console.log("reopen complaint2", reopenDetails, complaintDetails) + + if (complaintDetails) { + complaintDetails.workflow = getUpdatedWorkflow( + reopenDetails, + // complaintDetails, + "REOPEN" + ); + complaintDetails.service.additionalDetail = { + REOPEN_REASON: reopenDetails.reason, + }; + updateComplaint({ service: complaintDetails.service, workflow: complaintDetails.workflow }); + } + return ( + + ); + } + + function textInput(e) { + // setDetails(e.target.value); + let reopenDetails = Digit.SessionStorage.get(`reopen.${id}`); + Digit.SessionStorage.set(`reopen.${id}`, { + ...reopenDetails, + addtionalDetail: e.target.value, + }); + } + + return ( + + + {t(`${LOCALIZATION_KEY.CS_ADDCOMPLAINT}_PROVIDE_ADDITIONAL_DETAILS`)} + {t(`${LOCALIZATION_KEY.CS_ADDCOMPLAINT}_ADDITIONAL_DETAILS_TEXT`)} + +
+ +
+
+
+ ); +}; + +export default AddtionalDetails; diff --git a/frontend/micro-ui-internals/packages/modules/pgr/src/pages/citizen/ReopenComplaint/Reason.js b/frontend/micro-ui-internals/packages/modules/pgr/src/pages/citizen/ReopenComplaint/Reason.js new file mode 100644 index 00000000000..a67b9b52c1c --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/pgr/src/pages/citizen/ReopenComplaint/Reason.js @@ -0,0 +1,57 @@ +import React, { useState } from "react"; +import { useTranslation } from "react-i18next"; +import { Link, useHistory, useParams } from "react-router-dom"; +import { BackButton, Card, CardHeader, CardLabelError, CardText, RadioButtons, SubmitBar } from "@egovernments/digit-ui-react-components"; + +import { LOCALIZATION_KEY } from "../../../constants/Localization"; +import { getRoute, PgrRoutes, PGR_BASE } from "../../../constants/Routes"; + +const ReasonPage = (props) => { + const history = useHistory(); + const { t } = useTranslation(); + const { id } = useParams(); + const [selected, setSelected] = useState(null); + const [valid, setValid] = useState(true); + + const onRadioChange = (value) => { + let reopenDetails = Digit.SessionStorage.get(`reopen.${id}`); + Digit.SessionStorage.set(`reopen.${id}`, { ...reopenDetails, reason: value }); + setSelected(value); + }; + + function onSave() { + if (selected === null) { + setValid(false); + } else { + history.push(`${props.match.path}/upload-photo/${id}`); + } + } + + return ( + + {t(`${LOCALIZATION_KEY.CS_REOPEN}_COMPLAINT`)} + + {/* Select the option related to your complaint from the list given below. + If the complaint type you are looking for is not listed select others.{" "} */} + {/* {t(`${TRANSLATION_KEY}_OPTION_ONE`)} */} + + {valid ? null : {t(`${LOCALIZATION_KEY.CS_ADDCOMPLAINT}_ERROR_REOPEN_REASON`)}} + setSelected(value)} + options={[ + t(`${LOCALIZATION_KEY.CS_REOPEN}_OPTION_ONE`), + t(`${LOCALIZATION_KEY.CS_REOPEN}_OPTION_TWO`), + t(`${LOCALIZATION_KEY.CS_REOPEN}_OPTION_THREE`), + t(`${LOCALIZATION_KEY.CS_REOPEN}_OPTION_FOUR`), + ]} + /> + + + + ); +}; + +export default ReasonPage; diff --git a/frontend/micro-ui-internals/packages/modules/pgr/src/pages/citizen/ReopenComplaint/UploadPhoto.js b/frontend/micro-ui-internals/packages/modules/pgr/src/pages/citizen/ReopenComplaint/UploadPhoto.js new file mode 100644 index 00000000000..aad353274d4 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/pgr/src/pages/citizen/ReopenComplaint/UploadPhoto.js @@ -0,0 +1,71 @@ +import React, { useEffect, useState } from "react"; +import { Link, useHistory, useParams } from "react-router-dom"; +import { useTranslation } from "react-i18next"; + +import { Card, SubmitBar, BackButton, ImageUploadHandler, CardLabelError, LinkButton } from "@egovernments/digit-ui-react-components"; + +import { LOCALIZATION_KEY } from "../../../constants/Localization"; + +const UploadPhoto = (props) => { + const { t } = useTranslation(); + const history = useHistory(); + let { id } = useParams(); + const [verificationDocuments, setVerificationDocuments] = useState(null); + const [valid, setValid] = useState(true); + + const handleUpload = (ids) => { + setDocState(ids); + }; + + const setDocState = (ids) => { + if (ids?.length) { + const documents = ids.map((id) => ({ + documentType: "PHOTO", + fileStoreId: id, + documentUid: "", + additionalDetails: {}, + })); + setVerificationDocuments(documents); + } + }; + + function save() { + if (verificationDocuments === null) { + setValid(false); + } else { + history.push(`${props.match.path}/addional-details/${id}`); + } + } + + function skip() { + history.push(`${props.match.path}/addional-details/${id}`); + } + + useEffect(() => { + let reopenDetails = Digit.SessionStorage.get(`reopen.${id}`); + Digit.SessionStorage.set(`reopen.${id}`, { ...reopenDetails, verificationDocuments }); + }, [verificationDocuments, id]); + + return ( + + + + {/* + + */} + + {valid ? null : {t(`${LOCALIZATION_KEY.CS_ADDCOMPLAINT}_UPLOAD_ERROR_MESSAGE`)}} + + {props.skip ? : null} + + + ); +}; + +export default UploadPhoto; diff --git a/frontend/micro-ui-internals/packages/modules/pgr/src/pages/citizen/ReopenComplaint/index.js b/frontend/micro-ui-internals/packages/modules/pgr/src/pages/citizen/ReopenComplaint/index.js new file mode 100644 index 00000000000..0c5c3cf843e --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/pgr/src/pages/citizen/ReopenComplaint/index.js @@ -0,0 +1,25 @@ +import React from "react"; + +import { Route, Switch, useRouteMatch } from "react-router-dom"; +// import UserOnboarding from "../UserOnboarding/index"; +import { PgrRoutes, getRoute } from "../../../constants/Routes"; +import ReasonPage from "./Reason"; +import UploadPhoto from "./UploadPhoto"; +import AddtionalDetails from "./AddtionalDetails"; +import Response from "../Response"; + +const ReopenComplaint = ({ match, history, parentRoute }) => { + // console.log("match:", match); + // console.log("sddddddadasds", getRoute(match, PgrRoutes.ReasonPage), match, parentRoute); + // const _match = useRouteMatch() + return ( + + } /> + } /> + } /> + } /> + + ); +}; + +export { ReopenComplaint }; diff --git a/frontend/micro-ui-internals/packages/modules/pgr/src/pages/citizen/Response.js b/frontend/micro-ui-internals/packages/modules/pgr/src/pages/citizen/Response.js new file mode 100644 index 00000000000..4fb8221e170 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/pgr/src/pages/citizen/Response.js @@ -0,0 +1,60 @@ +import React from "react"; +import { Card, Banner, CardText, SubmitBar } from "@egovernments/digit-ui-react-components"; +import { Link } from "react-router-dom"; +import { useSelector } from "react-redux"; +import { PgrRoutes, getRoute } from "../../constants/Routes"; +import { useTranslation } from "react-i18next"; + +const GetActionMessage = ({ action }) => { + const { t } = useTranslation(); + switch (action) { + case "REOPEN": + return t(`CS_COMMON_COMPLAINT_REOPENED`); + case "RATE": + return t("CS_COMMON_THANK_YOU"); + default: + return t(`CS_COMMON_COMPLAINT_SUBMITTED`); + } +}; + +const BannerPicker = ({ response }) => { + const { complaints } = response; + const { t } = useTranslation(); + if (complaints && complaints.response && complaints.response.responseInfo) { + return ( + + ); + } else { + return ; + } +}; + +const TextPicker = ({ response }) => { + const { complaints } = response; + const { t } = useTranslation(); + if (complaints && complaints.response && complaints.response.responseInfo) { + const { action } = complaints.response.ServiceWrappers[0].workflow; + return action === "RATE" ? {t("CS_COMMON_RATING_SUBMIT_TEXT")} : {t("CS_COMMON_TRACK_COMPLAINT_TEXT")}; + } +}; + +const Response = (props) => { + const { t } = useTranslation(); + const appState = useSelector((state) => state)["pgr"]; + // console.log("inside response", appState); + return ( + + {appState.complaints.response && } + {appState.complaints.response && } + + + + + ); +}; + +export default Response; diff --git a/frontend/micro-ui-internals/packages/modules/pgr/src/pages/citizen/index.js b/frontend/micro-ui-internals/packages/modules/pgr/src/pages/citizen/index.js new file mode 100644 index 00000000000..f34f9c69f65 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/pgr/src/pages/citizen/index.js @@ -0,0 +1,38 @@ +import React from "react"; +import { ReopenComplaint } from "./ReopenComplaint/index"; +import SelectRating from "./Rating/SelectRating"; +import { PgrRoutes, getRoute } from "../../constants/Routes"; +import { useRouteMatch, Switch, useLocation } from "react-router-dom"; +import { AppContainer, BackButton, PrivateRoute } from "@egovernments/digit-ui-react-components"; + +import { CreateComplaint } from "./Create"; +import { ComplaintsList } from "./ComplaintsList"; +import ComplaintDetailsPage from "./ComplaintDetails"; +import Response from "./Response"; +import { useTranslation } from "react-i18next"; + +const App = () => { + const { t } = useTranslation(); + const { path, url, ...match } = useRouteMatch(); + const location = useLocation(); + return ( + + {!location.pathname.includes("/response") && {t("CS_COMMON_BACK")}} + + {/* */} + + + + } + /> + } /> + } /> + {/* */} + + + ); +}; + +export default App; diff --git a/frontend/micro-ui-internals/packages/modules/pgr/src/pages/employee/ComplaintDetails.js b/frontend/micro-ui-internals/packages/modules/pgr/src/pages/employee/ComplaintDetails.js new file mode 100644 index 00000000000..2d771733889 --- /dev/null +++ b/frontend/micro-ui-internals/packages/modules/pgr/src/pages/employee/ComplaintDetails.js @@ -0,0 +1,440 @@ +import React, { useState, useEffect } from "react"; +import { useParams } from "react-router-dom"; +import { + BreakLine, + Card, + CardLabel, + CardLabelDesc, + CardSubHeader, + ConnectingCheckPoints, + CheckPoint, + DisplayPhotos, + MediaRow, + LastRow, + Row, + StatusTable, + PopUp, + HeaderBar, + ImageViewer, + TextInput, + TextArea, + UploadFile, + ButtonSelector, + Toast, + ActionBar, + Menu, + SubmitBar, + Dropdown, + Loader, + Modal, + SectionalDropdown, +} from "@egovernments/digit-ui-react-components"; + +import { Close } from "../../Icons"; +import { useTranslation } from "react-i18next"; +import { isError, useQueryClient } from "react-query"; + +const MapView = (props) => { + return ( +
+ {/* */} + +
+ ); +}; + +const Heading = (props) => { + return

{props.label}

; +}; + +const CloseBtn = (props) => { + return ( +
+ +
+ ); +}; + +const TLCaption = ({ data }) => { + const { t } = useTranslation(); + return ( +
+ {data.date &&

{data.date}

} +

{data.name}

+

{data.mobileNumber}

+ {data.source &&

{t("ES_COMMON_FILED_VIA_" + data.source.toUpperCase())}

} +
+ ); +}; + +const ComplaintDetailsModal = ({ workflowDetails, complaintDetails, close, popup, selectedAction, onAssign, tenantId, t }) => { + const employeeRoles = workflowDetails?.data?.nextActions ? workflowDetails?.data?.nextActions : null; + const roles = employeeRoles.filter((role) => role.action === selectedAction); + const useEmployeeData = Digit.Hooks.pgr.useEmployeeFilter(tenantId, roles[0]?.roles, complaintDetails); + const employeeData = useEmployeeData + ? useEmployeeData.map((departmentData) => { + return { heading: departmentData.department, options: departmentData.employees }; + }) + : null; + + const [selectedEmployee, setSelectedEmployee] = useState(null); + const [comments, setComments] = useState(""); + const [file, setFile] = useState(null); + const [uploadedFile, setUploadedFile] = useState(null); + const [error, setError] = useState(null); + const cityDetails = Digit.ULBService.getCurrentUlb(); + const [selectedReopenReason, setSelectedReopenReason] = useState(null); + + useEffect(() => { + (async () => { + setError(null); + if (file) { + if (file.size >= 5242880) { + setError(t("CS_MAXIMUM_UPLOAD_SIZE_EXCEEDED")); + } else { + try { + // TODO: change module in file storage + const response = await Digit.UploadServices.Filestorage("property-upload", file, cityDetails.code); + if (response?.data?.files?.length > 0) { + setUploadedFile(response?.data?.files[0]?.fileStoreId); + } else { + setError(t("CS_FILE_UPLOAD_ERROR")); + } + } catch (err) { + console.error("Modal -> err ", err); + setError(t("CS_FILE_UPLOAD_ERROR")); + } + } + } + })(); + }, [file]); + + const reopenReasonMenu = [t(`CS_REOPEN_OPTION_ONE`), t(`CS_REOPEN_OPTION_TWO`), t(`CS_REOPEN_OPTION_THREE`), t(`CS_REOPEN_OPTION_FOUR`)]; + // const uploadFile = useCallback( () => { + + // }, [file]); + + function onSelectEmployee(employee) { + setSelectedEmployee(employee); + } + + function addComment(e) { + setComments(e.target.value); + } + + function selectfile(e) { + setFile(e.target.files[0]); + } + + function onSelectReopenReason(reason) { + setSelectedReopenReason(reason); + } + + return ( + + } + headerBarEnd={ close(popup)} />} + actionCancelLabel={t("CS_COMMON_CANCEL")} + actionCancelOnSubmit={() => close(popup)} + actionSaveLabel={ + selectedAction === "ASSIGN" || selectedAction === "REASSIGN" + ? t("CS_COMMON_ASSIGN") + : selectedAction === "REJECT" + ? t("CS_COMMON_REJECT") + : selectedAction === "REOPEN" + ? t("CS_COMMON_REOPEN") + : t("CS_COMMON_RESOLVE") + } + actionSaveOnSubmit={() => { + onAssign(selectedEmployee, comments, uploadedFile); + }} + error={error} + setError={setError} + > + + {selectedAction === "REJECT" || selectedAction === "RESOLVE" || selectedAction === "REOPEN" ? null : ( + + {t("CS_COMMON_EMPLOYEE_NAME")} + {employeeData && } + + )} + {selectedAction === "REOPEN" ? ( + + {t("CS_REOPEN_COMPLAINT")} + + + ) : null} + {t("CS_COMMON_EMPLOYEE_COMMENTS")} + + ); +}; + +TextArea.propTypes = { + userType: PropTypes.string, + name: PropTypes.string.isRequired, + ref: PropTypes.func, + value: PropTypes.string, + onChange: PropTypes.func, + id: PropTypes.string, +}; + +TextArea.defaultProps = { + ref: undefined, + onChange: undefined, +}; + +export default TextArea; diff --git a/frontend/micro-ui-internals/packages/react-components/src/atoms/TextArea.stories.js b/frontend/micro-ui-internals/packages/react-components/src/atoms/TextArea.stories.js new file mode 100644 index 00000000000..afe730836cd --- /dev/null +++ b/frontend/micro-ui-internals/packages/react-components/src/atoms/TextArea.stories.js @@ -0,0 +1,18 @@ +import React from "react"; + +import TextArea from "./TextArea"; + +export default { + title: "Atom/TextArea", + component: TextArea, +}; + +const Template = (args) => + + ); + }); + + return ( +
+ + {inputs} + {forcedError && !showErrorBelowChildren && {t(forcedError)}} + {children} + {forcedError && showErrorBelowChildren && {t(forcedError)}} + + + ); +}; + +FormStep.propTypes = { + config: PropTypes.shape({}), + onSelect: PropTypes.func, + onSkip: PropTypes.func, + onAdd: PropTypes.func, + t: PropTypes.func, +}; + +FormStep.defaultProps = { + config: {}, + onSelect: undefined, + onSkip: undefined, + onAdd: undefined, + t: (value) => value, +}; + +export default FormStep; diff --git a/frontend/micro-ui-internals/packages/react-components/src/molecules/FormStep.stories.js b/frontend/micro-ui-internals/packages/react-components/src/molecules/FormStep.stories.js new file mode 100644 index 00000000000..33618f20523 --- /dev/null +++ b/frontend/micro-ui-internals/packages/react-components/src/molecules/FormStep.stories.js @@ -0,0 +1,18 @@ +import React from "react"; + +import FormStep from "./FormStep"; + +export default { + title: "Molecule/FormStep", + component: FormStep, +}; + +const Template = (args) => ; + +export const Default = Template.bind({}); + +Default.args = { + config: { + inputs: [{ type: "text", name: "firstName", label: "First Name", error: "This field is required", validation: null }], + }, +}; diff --git a/frontend/micro-ui-internals/packages/react-components/src/molecules/InputCard.js b/frontend/micro-ui-internals/packages/react-components/src/molecules/InputCard.js new file mode 100644 index 00000000000..28a230f778a --- /dev/null +++ b/frontend/micro-ui-internals/packages/react-components/src/molecules/InputCard.js @@ -0,0 +1,58 @@ +import React from "react"; +import PropTypes from "prop-types"; + +import Card from "../atoms/Card"; +import CardHeader from "../atoms/CardHeader"; +import CardText from "../atoms/CardText"; +import SubmitBar from "../atoms/SubmitBar"; +import LinkButton from "../atoms/LinkButton"; +import CardCaption from "../atoms/CardCaption"; +import TextInput from "../atoms/TextInput"; + +const InputCard = ({ + t, + children, + texts = {}, + submit = false, + inputs = [], + inputRef, + onNext, + onSkip, + isDisable, + onAdd, + isMultipleAllow = false, + cardStyle = {}, +}) => { + // TODO: inputs handle + return ( + + {texts.headerCaption && {t(texts.headerCaption)}} + {t(texts.header)} + {t(texts.cardText)} + {children} + + {texts.skipText ? : null} + {isMultipleAllow && texts.addMultipleText ? : null} + + ); +}; + +InputCard.propTypes = { + text: PropTypes.object, + submit: PropTypes.bool, + onNext: PropTypes.func, + onSkip: PropTypes.func, + onAdd: PropTypes.func, + t: PropTypes.func, +}; + +InputCard.defaultProps = { + texts: {}, + submit: false, + onNext: undefined, + onSkip: undefined, + onAdd: undefined, + t: (value) => value, +}; + +export default InputCard; diff --git a/frontend/micro-ui-internals/packages/react-components/src/molecules/InputCard.stories.js b/frontend/micro-ui-internals/packages/react-components/src/molecules/InputCard.stories.js new file mode 100644 index 00000000000..0b94f76fda2 --- /dev/null +++ b/frontend/micro-ui-internals/packages/react-components/src/molecules/InputCard.stories.js @@ -0,0 +1,22 @@ +import React from "react"; + +import InputCard from "./InputCard"; + +export default { + title: "Molecule/InputCard", + component: InputCard, +}; + +const Template = (args) => ; + +export const Default = Template.bind({}); + +Default.args = { + texts: { + headerCaption: "Header Caption", + header: "Header", + cardText: "Card Text", + nextText: "Next", + skipText: "Skip", + }, +}; diff --git a/frontend/micro-ui-internals/packages/react-components/src/molecules/Localities.js b/frontend/micro-ui-internals/packages/react-components/src/molecules/Localities.js new file mode 100644 index 00000000000..1e4a1567c33 --- /dev/null +++ b/frontend/micro-ui-internals/packages/react-components/src/molecules/Localities.js @@ -0,0 +1,30 @@ +import React from "react"; +import { Loader } from "../atoms/Loader"; +import Dropdown from "../atoms/Dropdown"; +import { useTranslation } from "react-i18next"; + +const Localities = ({ selectLocality, tenantId, boundaryType, keepNull, selected, optionCardStyles, style, disable, disableLoader, sortFn }) => { + // console.log("find localities here", tenantId) + const { t } = useTranslation(); + + const { data: tenantlocalties, isLoading } = Digit.Hooks.useBoundaryLocalities(tenantId, boundaryType, { enabled: !disable }, t); + if (isLoading && !disableLoader) { + return ; + } + + return ( + + ); + //

ABCD

+}; + +export default Localities; diff --git a/frontend/micro-ui-internals/packages/react-components/src/molecules/LocationSearchCard.js b/frontend/micro-ui-internals/packages/react-components/src/molecules/LocationSearchCard.js new file mode 100644 index 00000000000..44162ec9901 --- /dev/null +++ b/frontend/micro-ui-internals/packages/react-components/src/molecules/LocationSearchCard.js @@ -0,0 +1,80 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { useTranslation } from "react-i18next"; + +import Card from "../atoms/Card"; +import CardHeader from "../atoms/CardHeader"; +import CardText from "../atoms/CardText"; +import CardLabelError from "../atoms/CardLabelError"; +import LocationSearch from "../atoms/LocationSearch"; +import SubmitBar from "../atoms/SubmitBar"; +import LinkButton from "../atoms/LinkButton"; + +const LocationSearchCard = ({ + header, + cardText, + nextText, + t, + skipAndContinueText, + forcedError, + skip, + onSave, + onChange, + position, + disabled, + cardBodyStyle = {}, + isPTDefault, + PTdefaultcoord, +}) => { + let isDisabled = false || disabled; + const onLocationChange = (val, location) => { + isDisabled = val ? false : true; + onChange(val, location); + }; + + return ( + + {header} +
+ + {/* Click and hold to drop the pin to complaint location. If you are not + able to pin the location you can skip the continue for next step. */} + {cardText} + + + + {forcedError && {t(forcedError)}} +
+ + {skip ? : null} +
+ ); +}; + +LocationSearchCard.propTypes = { + header: PropTypes.string, + cardText: PropTypes.string, + nextText: PropTypes.string, + skipAndContinueText: PropTypes.string, + skip: PropTypes.func, + onSave: PropTypes.func, + onChange: PropTypes.func, + position: PropTypes.any, + isPTDefault: PropTypes.any, + PTdefaultcoord: PropTypes.any, +}; + +LocationSearchCard.defaultProps = { + header: "", + cardText: "", + nextText: "", + skipAndContinueText: "", + skip: () => {}, + onSave: null, + onChange: () => {}, + position: undefined, + isPTDefault: false, + PTdefaultcoord: {}, +}; + +export default LocationSearchCard; diff --git a/frontend/micro-ui-internals/packages/react-components/src/molecules/LocationSearchCard.stories.js b/frontend/micro-ui-internals/packages/react-components/src/molecules/LocationSearchCard.stories.js new file mode 100644 index 00000000000..96517792e00 --- /dev/null +++ b/frontend/micro-ui-internals/packages/react-components/src/molecules/LocationSearchCard.stories.js @@ -0,0 +1,20 @@ +import React from "react"; + +import LocationSearchCard from "./LocationSearchCard"; + +export default { + title: "Molecule/LocationSearchCard", + component: LocationSearchCard, +}; + +const Template = (args) => ; + +export const Default = Template.bind({}); + +Default.args = { + header: "Header", + cardText: "Card Text", + nextText: "Next Text", + skipAndContinueText: "Skip", + skip: true, +}; diff --git a/frontend/micro-ui-internals/packages/react-components/src/molecules/PitDimension.js b/frontend/micro-ui-internals/packages/react-components/src/molecules/PitDimension.js new file mode 100644 index 00000000000..f0c28b5aa9f --- /dev/null +++ b/frontend/micro-ui-internals/packages/react-components/src/molecules/PitDimension.js @@ -0,0 +1,53 @@ +import React from "react"; +import TextInput from "../atoms/TextInput"; +import CardText from "../atoms/CardText"; + +const DimentionInput = ({ name, value, onChange, disable }) => ( + +); + +const PitDimension = ({ sanitationType, t, size = {}, handleChange, disable = false }) => { + // console.log("find sanitationType in pitDimensions here",sanitationType.dimension, size) + return sanitationType?.dimension === "dd" ? ( +
+
+ + + {t("CS_FILE_PROPERTY_DIAMETER")} + +
+ x +
+ + + {t("CS_FILE_PROPERTY_HEIGHT")} + +
+
+ ) : ( +
+
+ + + {t("CS_FILE_PROPERTY_LENGTH")} + +
+ x +
+ + + {t("CS_FILE_PROPERTY_WIDTH")} + +
+ x +
+ + + {t("CS_FILE_PROPERTY_HEIGHT")} + +
+
+ ); +}; + +export default PitDimension; diff --git a/frontend/micro-ui-internals/packages/react-components/src/molecules/RadioOrSelect.js b/frontend/micro-ui-internals/packages/react-components/src/molecules/RadioOrSelect.js new file mode 100644 index 00000000000..e8dd1729b41 --- /dev/null +++ b/frontend/micro-ui-internals/packages/react-components/src/molecules/RadioOrSelect.js @@ -0,0 +1,46 @@ +import React from "react"; +import RadioButtons from "../atoms/RadioButtons"; +import Dropdown from "../atoms/Dropdown"; + +const RadioOrSelect = ({ + options, + onSelect, + optionKey, + selectedOption, + isMandatory, + t, + dropdownStyle = {}, + isDependent = false, + disabled = false, + optionCardStyles, +}) => { + return ( + + {options?.length < 5 ? ( + + ) : ( + + )} + + ); +}; + +export default RadioOrSelect; diff --git a/frontend/micro-ui-internals/packages/react-components/src/molecules/RatingCard.js b/frontend/micro-ui-internals/packages/react-components/src/molecules/RatingCard.js new file mode 100644 index 00000000000..d3c36cc066b --- /dev/null +++ b/frontend/micro-ui-internals/packages/react-components/src/molecules/RatingCard.js @@ -0,0 +1,90 @@ +import React, { useState } from "react"; +import { useForm } from "react-hook-form"; +import PropTypes from "prop-types"; + +import TextArea from "../atoms/TextArea"; +import CardLabel from "../atoms/CardLabel"; +import Rating from "../atoms/Rating"; +import CheckBox from "../atoms/CheckBox"; +import Card from "../atoms/Card"; +import CardHeader from "../atoms/CardHeader"; +import SubmitBar from "../atoms/SubmitBar"; +import RadioButtons from "../atoms/RadioButtons"; + +const RatingCard = ({ config, onSelect, t }) => { + const { register, watch, handleSubmit } = useForm(); + const [comments, setComments] = useState(""); + const [rating, setRating] = useState(0); + + const onSubmit = (data) => { + data.rating = rating; + onSelect(data); + }; + + const feedback = (e, ref, index) => { + setRating(index); + }; + + const segments = config.inputs?.map((input, index) => { + if (input.type === "rate") { + return ( + + {t(input.label)} + {input?.error} + feedback(e, ref, i)} /> + + ); + } + + if (input.type === "checkbox") { + return ( + + {t(input.label)} + {input.checkLabels && + input.checkLabels.map((label, index) => )} + + ); + } + + if (input.type === "radio") { + return ( + + {t(input.label)} + + + ); + } + + if (input.type === "textarea") { + return ( + + {t(input.label)} + + + ); + } + }); + return ( +
+ + {t(config.texts.header)} + {segments} + + + + ); +}; + +RatingCard.propTypes = { + config: PropTypes.object, + onSubmit: PropTypes.func, + t: PropTypes.func, +}; + +RatingCard.defaultProps = { + config: {}, + onSubmit: undefined, + t: (value) => value, +}; + +export default RatingCard; diff --git a/frontend/micro-ui-internals/packages/react-components/src/molecules/RatingCard.stories.js b/frontend/micro-ui-internals/packages/react-components/src/molecules/RatingCard.stories.js new file mode 100644 index 00000000000..ee8a52c619e --- /dev/null +++ b/frontend/micro-ui-internals/packages/react-components/src/molecules/RatingCard.stories.js @@ -0,0 +1,37 @@ +import React from "react"; + +import RatingCard from "./RatingCard"; + +export default { + title: "Molecule/RatingCard", + component: RatingCard, +}; + +const Template = (args) => ; + +export const InputTypeRate = Template.bind({}); + +InputTypeRate.args = { + config: { + inputs: [{ type: "rate", label: "Label" }], + texts: { header: "Header", submitBarLabel: "Submit" }, + }, +}; + +export const InputTypeCheckbox = Template.bind({}); + +InputTypeCheckbox.args = { + config: { + inputs: [{ type: "checkbox", label: "Label", checkLabels: ["Check Label"] }], + texts: { header: "Header", submitBarLabel: "Submit" }, + }, +}; + +export const InputTypeTextArea = Template.bind({}); + +InputTypeTextArea.args = { + config: { + inputs: [{ type: "textarea", label: "Label", name: "name" }], + texts: { header: "Header", submitBarLabel: "Submit" }, + }, +}; diff --git a/frontend/micro-ui-internals/packages/react-components/src/molecules/RemoveableTag.js b/frontend/micro-ui-internals/packages/react-components/src/molecules/RemoveableTag.js new file mode 100644 index 00000000000..9804c0a4045 --- /dev/null +++ b/frontend/micro-ui-internals/packages/react-components/src/molecules/RemoveableTag.js @@ -0,0 +1,13 @@ +import React from "react"; +import { Close } from "../atoms/svgindex"; + +const RemoveableTag = ({ text, onClick }) => ( +
+ {text} + + + +
+); + +export default RemoveableTag; diff --git a/frontend/micro-ui-internals/packages/react-components/src/molecules/SearchAction.js b/frontend/micro-ui-internals/packages/react-components/src/molecules/SearchAction.js new file mode 100644 index 00000000000..76cf79eb347 --- /dev/null +++ b/frontend/micro-ui-internals/packages/react-components/src/molecules/SearchAction.js @@ -0,0 +1,10 @@ +import React from "react"; +import { SearchIconSvg } from "../atoms/svgindex"; + +const SearchAction = ({ text, handleActionClick }) => ( +
+ {text} +
+); + +export default SearchAction; diff --git a/frontend/micro-ui-internals/packages/react-components/src/molecules/SearchForm.js b/frontend/micro-ui-internals/packages/react-components/src/molecules/SearchForm.js new file mode 100644 index 00000000000..75b65d74e90 --- /dev/null +++ b/frontend/micro-ui-internals/packages/react-components/src/molecules/SearchForm.js @@ -0,0 +1,13 @@ +import React from "react" + +export const SearchField = ({children, className}) => { + return
+ {children} +
+} + +export const SearchForm = ({ children, onSubmit, handleSubmit }) => { + return
+ {children} + +} diff --git a/frontend/micro-ui-internals/packages/react-components/src/molecules/TextInputCard.js b/frontend/micro-ui-internals/packages/react-components/src/molecules/TextInputCard.js new file mode 100644 index 00000000000..0e31686b2b8 --- /dev/null +++ b/frontend/micro-ui-internals/packages/react-components/src/molecules/TextInputCard.js @@ -0,0 +1,58 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; +import PropTypes from "prop-types"; + +import Card from "../atoms/Card"; +import CardHeader from "../atoms/CardHeader"; +import CardText from "../atoms/CardText"; +import SubmitBar from "../atoms/SubmitBar"; +import LinkButton from "../atoms/LinkButton"; +import CardSubHeader from "../atoms/CardSubHeader"; +import CardLabel from "../atoms/CardLabel"; +import TextInput from "../atoms/TextInput"; + +const TextInputCard = ({ header, subHeader, cardText, cardLabel, nextText, skipAndContinueText, skip, onSave, onSkip, textInput }) => { + return ( + + {subHeader} + {header} + + {/* If you know the pincode of the complaint address, provide below. It will + help us identify complaint location easily or you can skip and continue */} + {cardText} + + {cardLabel} + + + {skip ? : null} + + ); +}; + +TextInputCard.propTypes = { + header: PropTypes.string, + subHeader: PropTypes.string, + cardText: PropTypes.string, + cardLabel: PropTypes.string, + nextText: PropTypes.string, + skipAndContinueText: PropTypes.string, + skip: PropTypes.bool, + onSave: PropTypes.func, + onSkip: PropTypes.func, + textInput: PropTypes.string, +}; + +TextInputCard.defaultProps = { + header: "", + subHeader: "", + cardText: "", + cardLabel: "", + nextText: "", + skipAndContinueText: "", + skip: true, + onSave: undefined, + onSkip: undefined, + textInput: "", +}; + +export default TextInputCard; diff --git a/frontend/micro-ui-internals/packages/react-components/src/molecules/TextInputCard.stories.js b/frontend/micro-ui-internals/packages/react-components/src/molecules/TextInputCard.stories.js new file mode 100644 index 00000000000..4ca37c090f7 --- /dev/null +++ b/frontend/micro-ui-internals/packages/react-components/src/molecules/TextInputCard.stories.js @@ -0,0 +1,23 @@ +import React from "react"; + +import TextInputCard from "./TextInputCard"; + +export default { + title: "Molecule/TextInputCard", + component: TextInputCard, +}; + +const Template = (args) => ; + +export const Default = Template.bind({}); + +Default.args = { + header: "Header", + subHeader: "Sub Header", + cardText: "Card Text", + cardLabel: "Card Label", + nextText: "Next", + skipAndContinueText: "Skip", + skip: true, + textInput: "Text Input", +}; diff --git a/frontend/micro-ui-internals/packages/react-components/src/molecules/TypeSelectCard.js b/frontend/micro-ui-internals/packages/react-components/src/molecules/TypeSelectCard.js new file mode 100644 index 00000000000..fba7a50aba7 --- /dev/null +++ b/frontend/micro-ui-internals/packages/react-components/src/molecules/TypeSelectCard.js @@ -0,0 +1,51 @@ +import React from "react"; +import PropTypes from "prop-types"; + +import Card from "../atoms/Card"; +import CardCaption from "../atoms/CardCaption"; +import CardHeader from "../atoms/CardHeader"; +import CardText from "../atoms/CardText"; +import RadioButtons from "../atoms/RadioButtons"; +import SubmitBar from "../atoms/SubmitBar"; + +const TypeSelectCard = ({ + t, + headerCaption, + header, + cardText, + disabled = false, + submitBarLabel, + selectedOption, + menu, + optionsKey, + selected, + onSave, +}) => { + // console.log("cardText", t("ULBGRADE_MUNICIPAL_CORPORATION"), cardText); + return ( + + {t(headerCaption)} + {t(header)} + {t(cardText)} + {menu ? : null} + + + ); +}; + +TypeSelectCard.propTypes = { + headerCaption: PropTypes.string, + header: PropTypes.string, + cardText: PropTypes.string, + submitBarLabel: PropTypes.string, + selectedOption: PropTypes.any, + menu: PropTypes.any, + optionsKey: PropTypes.string, + selected: PropTypes.func, + onSave: PropTypes.func, + t: PropTypes.func, +}; + +TypeSelectCard.defaultProps = {}; + +export default TypeSelectCard; diff --git a/frontend/micro-ui-internals/packages/react-components/src/molecules/TypeSelectCard.stories.js b/frontend/micro-ui-internals/packages/react-components/src/molecules/TypeSelectCard.stories.js new file mode 100644 index 00000000000..dce755e4c4c --- /dev/null +++ b/frontend/micro-ui-internals/packages/react-components/src/molecules/TypeSelectCard.stories.js @@ -0,0 +1,22 @@ +import React from "react"; + +import TypeSelectCard from "./TypeSelectCard"; + +export default { + title: "Molecule/TypeSelectCard", + component: TypeSelectCard, +}; + +const Template = (args) => ; + +export const Default = Template.bind({}); + +Default.args = { + headerCaption: "Header Caption", + header: "Header", + cardText: "Card Text", + submitBarLabel: "Submit", + selectedOption: "first option", + menu: ["first option", "second option", "third option"], + optionsKey: "", +}; diff --git a/frontend/micro-ui-internals/packages/react-components/src/stories/Button.js b/frontend/micro-ui-internals/packages/react-components/src/stories/Button.js new file mode 100644 index 00000000000..1bde42d344a --- /dev/null +++ b/frontend/micro-ui-internals/packages/react-components/src/stories/Button.js @@ -0,0 +1,50 @@ +import React from "react"; +import PropTypes from "prop-types"; +import "./button.css"; + +/** + * Primary UI component for user interaction + */ +export const Button = ({ primary, backgroundColor, size, label, ...props }) => { + const mode = primary ? "storybook-button--primary" : "storybook-button--secondary"; + return ( + + ); +}; + +Button.propTypes = { + /** + * Is this the principal call to action on the page? + */ + primary: PropTypes.bool, + /** + * What background color to use + */ + backgroundColor: PropTypes.string, + /** + * How large should the button be? + */ + size: PropTypes.oneOf(["small", "medium", "large"]), + /** + * Button contents + */ + label: PropTypes.string.isRequired, + /** + * Optional click handler + */ + onClick: PropTypes.func, +}; + +Button.defaultProps = { + backgroundColor: null, + primary: false, + size: "medium", + onClick: undefined, +}; diff --git a/frontend/micro-ui-internals/packages/react-components/src/stories/Button.stories.js b/frontend/micro-ui-internals/packages/react-components/src/stories/Button.stories.js new file mode 100644 index 00000000000..44d09366da1 --- /dev/null +++ b/frontend/micro-ui-internals/packages/react-components/src/stories/Button.stories.js @@ -0,0 +1,36 @@ +import React from "react"; + +import { Button } from "./Button"; + +export default { + title: "Example/Button", + component: Button, + argTypes: { + backgroundColor: { control: "color" }, + }, +}; + +const Template = (args) =>