- 
                Notifications
    You must be signed in to change notification settings 
- Fork 11
Imc latest UI #321
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Imc latest UI #321
Conversation
added two fields in Unit and query bulder and rowmapper
Create V20250702160740_alter_eg_pt_unit_ddl.sql
| WalkthroughThis update introduces a comprehensive refactor and feature expansion across the property tax (PT) micro-UI. It replaces legacy, generic form-composer flows with custom, modular React components for both citizen and employee property workflows. The release adds new configuration-driven form sections, custom address and ownership forms, document uploaders, table-driven unit details, and a new payment collection UI. Styles are unified and updated, and new hooks and services are added for MDMS-driven dropdowns and metadata. The sidebar, topbar, and dashboard layouts are restyled and simplified. Environment and proxy settings are updated, and the application title and branding are revised. Changes
 Sequence Diagram(s)sequenceDiagram
    participant User
    participant App
    participant FormSection
    participant MDMS
    participant API
    User->>App: Navigates to New Property Form
    App->>FormSection: Renders modular form sections (ownership, address, assessment, etc.)
    FormSection->>MDMS: Fetches dropdown metadata (e.g., salutations, assessment years)
    MDMS-->>FormSection: Returns metadata
    User->>FormSection: Fills form, uploads documents
    FormSection->>App: Updates local form state
    User->>App: Submits form
    App->>API: Sends structured payload (property, owners, docs, etc.)
    API-->>App: Returns success/acknowledgment
    App->>User: Shows SuccessModal with application/property ID
sequenceDiagram
    participant Employee
    participant Dashboard
    participant Sidebar
    participant Table
    participant Router
    Employee->>Dashboard: Logs in, sees styled dashboard with cards/sections
    Employee->>Sidebar: Navigates using simplified sidebar
    Sidebar->>Router: Triggers route change
    Router->>Table: Renders custom inbox/application table
    Employee->>Table: Views, edits, or processes applications
Suggested reviewers
 Poem
 ✨ Finishing Touches
 Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit: 
 SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
 Other keywords and placeholders
 Documentation and Community
 | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 279
🔭 Outside diff range comments (11)
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/ChangeLanguage.js (3)
20-29: Avoid hard-coding fixed height; prefer CSS class or rem units for responsive designA wrapper height of exactly 20 px is smaller than the visual height of most dropdown triggers (typically ≥ 32 px). This can cause clipping when the user’s base font size changes or on Hi-DPI displays. Move the rule to CSS and use
min-height,%, or a design token instead so the control scales with typography.- <div style={{height:"20px"}}> + {/* Use CSS for sizing – keeps UI responsive */} + <div className="language-dropdown-wrapper">
1-4: Remove unused imports to keep bundle lean
ActionBar,Button, andMenuare imported but never referenced. Dead imports increase bundle size and hinder tree-shaking.-import { ActionBar, Button, Dropdown } from "@egovernments/digit-ui-react-components"; +import { Dropdown } from "@egovernments/digit-ui-react-components"; @@ -import { CustomButton, Menu } from "@egovernments/digit-ui-react-components"; +import { CustomButton } from "@egovernments/digit-ui-react-components";
8-14:selectedLanguagebecomes stale after first changeAfter a language is switched, the constant
selectedLanguagestill holds the initial value, so theselectedprop given to<Dropdown>no longer reflects the current choice (only thecustomSelectordoes). This leads to inconsistent UI state.- selected={languages.find((language) => language.value === selectedLanguage)} + selected={languages.find((language) => language.value === selected)}frontend/micro-ui/web/micro-ui-internals/packages/css/src/components/CardBasedOptions.scss (1)
20-29: Mixed old & new brand colours in the same blockFill was changed to purple (
#4729A3) but the surrounding circle background (rgba(244, 119, 56, 0.12)) still references the old orange. Visually this clashes and defeats the purpose of the re-branding.- background: rgba(244, 119, 56, 0.12); + /* match new primary colour at 12 % opacity */ + background: rgba(71, 41, 163, 0.12);frontend/micro-ui/web/micro-ui-internals/packages/css/src/components/topbar.scss (1)
41-47: Replace magic color literal with theme variableThe hard-coded
#4729A3breaks the existing colour-token / theme-variable approach used elsewhere (var(--primary-main)etc.).
Use the central variable so future re-branding doesn’t require code search-and-replace.- background: #4729A3; + background: var(--egov-primary-dark, #4729A3);frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/PropertyDetails.js (1)
67-85: Event-listener leak inuseEffect
window.addEventListener("resize", () => { … })registers a new anonymous function on every re-render because the effect has no dependency array.
The correspondingremoveEventListeneruses a different arrow function reference, so nothing is removed — listeners accumulate indefinitely.- React.useEffect(() => { + React.useEffect(() => { const onResize = () => { … }; - window.addEventListener("resize", () => { - onResize(); - }); + window.addEventListener("resize", onResize); return () => { - window.removeEventListener("resize", () => { - onResize() - }); + window.removeEventListener("resize", onResize); }; - }); + }, []); // <- mount-onlyfrontend/micro-ui/web/micro-ui-internals/packages/css/src/pages/employee/index.scss (1)
55-61: Prefer shared colour token over literalSame comment as in
topbar.scss– hard-coding#4729A3makes future theming harder.- background: #4729A3; + background: var(--egov-primary-dark, #4729A3);frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/DesktopInbox.js (1)
96-141: Remove large blocks of commented code.The commented-out
ApplicationTableimplementation should be removed if it's no longer needed. Version control preserves the history if needed later.Consider removing lines 96-118 and 124-141 to improve code readability.
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/PTMyApplications/index.js (2)
74-98: Remove commented out codeLarge blocks of commented code should be removed as version control preserves the history.
Remove the entire commented block from lines 74-98.
1-7: Fix undefined history variableThe
historyobject is used but not imported. Add the necessary import.Add the import at the top of the file:
import { Header, Loader, Card, CardSubHeader, SubmitBar } from "@egovernments/digit-ui-react-components"; import React from "react"; -import { Link } from "react-router-dom"; +import { Link, useHistory } from "react-router-dom"; import { useTranslation } from "react-i18next";Then add the hook in the component:
export const PTMyApplications = () => { const { t } = useTranslation(); + const history = useHistory(); const tenantId = Digit.ULBService.getCitizenCurrentTenant(true) || Digit.ULBService.getCurrentTenantId();Also applies to: 168-168
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/SuccessModal.js (1)
26-139: Remove commented out code.The large block of commented-out code should be removed to keep the codebase clean. If this code needs to be preserved for reference, consider moving it to documentation or version control history.
- - - -// import React, { useEffect, useState } from "react"; -// import { useTranslation } from "react-i18next"; -// ... (entire commented block) -// export default SuccessModal;
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
⛔ Files ignored due to path filters (4)
- frontend/micro-ui/web/micro-ui-internals/example/public/images/image.pngis excluded by- !**/*.png
- frontend/micro-ui/web/micro-ui-internals/packages/css/img/image.pngis excluded by- !**/*.png
- frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/assets/img/image.pngis excluded by- !**/*.png
- frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/assets/img/imageSv.svgis excluded by- !**/*.svg
📒 Files selected for processing (107)
- frontend/micro-ui/web/.env.sample(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/example/public/index.html(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/example/src/setupProxy.js(2 hunks)
- frontend/micro-ui/web/micro-ui-internals/package.json(2 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/css/src/components/CardBasedOptions.scss(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/css/src/components/bannercomponents.scss(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/css/src/components/card.scss(0 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/css/src/components/navbar.scss(2 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/css/src/components/topbar.scss(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/css/src/pages/citizen/container.scss(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/css/src/pages/employee/inbox.scss(2 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/css/src/pages/employee/index.scss(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/css/src/pages/employee/login.scss(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/libraries/src/hooks/index.js(2 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/libraries/src/hooks/pt/usePropertyMDMS.js(3 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/libraries/src/hooks/pt/useSalutationsMDMS.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/libraries/src/services/atoms/urls.js(2 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/libraries/src/services/elements/InboxService.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/libraries/src/services/elements/MDMS.js(14 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/libraries/src/services/elements/User/index.js(2 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/commonPt/src/pages/pageComponents/createForm.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/AppModules.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/ChangeLanguage.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/Header.js(2 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/Home.js(3 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/EmployeeSideBar.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/NavItemHeader.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/StaticCitizenSideBar.js(3 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/SubMenu.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/index.js(2 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/TopBar.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/citizen/Home/LocationSelection.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/citizen/Home/index.js(5 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/citizen/index.js(7 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/employee/Login/login.js(5 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/employee/index.js(4 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/Module.js(4 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/DesktopInbox.js(4 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/SearchApplication.js(4 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/inbox/ApplicationTable.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/inbox/search.js(5 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/inboxTable.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/search/PropertySearchForm.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/search/PropertySearchResults.js(2 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/config/Create/config.js(10 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/AssessmentDetailsLayout.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/CreateProperty/AddressSection.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/CreateProperty/AssessmentDetailsSection.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/CreateProperty/AttachmentsSection.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/CreateProperty/CorrespondenceAddressSection.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/CreateProperty/DeclarationSection.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/CreateProperty/OtherDetailsSection.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/CreateProperty/OwnershipDetailsSection.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/CreateProperty/PTSelectAssessmentYears.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/CreateProperty/PropertyDetailsTableSection.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/OtherDetailStructure.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTAuthorizedPerson.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTCorrespondenceAddress.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTDeclare.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTExemption.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTOldPropertyId.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTPlotArea.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTRateZone.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTRoadFactor.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTRoomArea.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTSelectAssessmentYear.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTSelectColony.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTSelectOtherCheckBox.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTSelectPropertyType.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTSelectRoadFactor.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTSelectWard.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTSelectZone.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PreviewDemand.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PropertAddressLayout.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PropertyTaxForm.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/Response.js(3 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/AddressSection.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/AssessmentDetailsSection.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/Attachments.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/CorrespondenceAddressSection.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/IndexStyle.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/OtherDetailsSection.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/OwnershipDetailsSection.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/PropertyDetailsTableSection.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/SuccessModal.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/index.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/PTMyApplications/index.js(3 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/index.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/ApplicationDetails.js(6 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/Inbox.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/AddressSection.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/AssessmentDetailsSection.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/Attachments.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/CorrespondenceAddressSection.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/IndexStyle.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/OtherDetailsSection.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/OwnershipDetailsSection.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/PropertyDetailsTableSection.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/SuccessModal.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/index.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/PropertyDetails.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/SearchApp.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/index.js(6 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/templates/ApplicationDetails/Modal/PTActionModal.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/templates/ApplicationDetails/cashDeskIndex.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/templates/ApplicationDetails/components/ApplicationDetailsActionBar.js(1 hunks)
- frontend/micro-ui/web/micro-ui-internals/packages/modules/templates/ApplicationDetails/components/ApplicationDetailsContent.js(2 hunks)
💤 Files with no reviewable changes (1)
- frontend/micro-ui/web/micro-ui-internals/packages/css/src/components/card.scss
🧰 Additional context used
🧬 Code Graph Analysis (11)
frontend/micro-ui/web/micro-ui-internals/packages/libraries/src/services/elements/InboxService.js (1)
frontend/micro-ui/web/micro-ui-internals/packages/libraries/src/services/atoms/urls.js (1)
Urls(1-210)
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/NavItemHeader.js (1)
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/NavItem.js (1)
trimModuleName(48-48)
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/index.js (2)
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/EmployeeSideBar.js (1)
EmployeeSideBar(286-329)frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/index.js (1)
handleLogout(25-28)
frontend/micro-ui/web/micro-ui-internals/packages/modules/commonPt/src/pages/pageComponents/createForm.js (1)
frontend/micro-ui/web/micro-ui-internals/packages/modules/commonPt/src/pages/employee/NewApplication/index.js (1)
commonFields(21-21)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTCorrespondenceAddress.js (1)
frontend/micro-ui/web/micro-ui-internals/packages/react-components/src/atoms/CheckBox.js (1)
CheckBox(5-61)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/CreateProperty/OtherDetailsSection.js (1)
frontend/micro-ui/web/micro-ui-internals/packages/react-components/src/atoms/Dropdown.js (2)
t(98-98)
Dropdown(89-275)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/Response.js (2)
frontend/micro-ui/web/micro-ui-internals/packages/react-components/src/atoms/SubmitBar.js (1)
SubmitBar(4-26)frontend/micro-ui/web/micro-ui-internals/packages/react-components/src/atoms/Toast.js (1)
Toast(6-50)
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/employee/Login/login.js (5)
frontend/micro-ui/web/micro-ui-internals/packages/react-components/src/hoc/FormComposer.js (4)
FormComposer(23-390)
FormComposer(23-390)
isDisabled(357-357)
titleStyle(207-207)frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/Header.js (1)
Header(28-42)frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/employee/index.js (8)
containerStyle(252-259)
innerContainerStyle(261-266)
columnStyle(268-272)
titleStyle(274-278)
linkStyle(280-285)
bottomBarStyle(287-294)
socialIconsStyle(296-300)
iconStyle(302-305)frontend/micro-ui/web/micro-ui-internals/packages/react-components/src/atoms/Toast.js (1)
Toast(6-50)frontend/micro-ui/web/micro-ui-internals/packages/react-components/src/atoms/Dropdown.js (1)
t(98-98)
frontend/micro-ui/web/micro-ui-internals/packages/modules/templates/ApplicationDetails/cashDeskIndex.js (9)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/DesktopInbox.js (3)
props(13-13)
useTranslation(14-14)
history(11-11)frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/inboxTable.js (2)
tenantId(104-104)
Digit(120-120)frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/index.js (3)
tenantId(114-114)
useTranslation(25-25)
history(93-93)frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/SearchApp.js (4)
tenantId(11-11)
useTranslation(10-10)
useParams(9-9)
showToast(13-13)frontend/micro-ui/web/micro-ui-internals/packages/modules/fsm/src/components/RegistryInbox.js (1)
onActionSelect(265-272)frontend/micro-ui/web/micro-ui-internals/packages/modules/obps/src/pages/employee/BpaApplicationDetails/index.js (1)
nocMutation(119-122)frontend/micro-ui/web/micro-ui-internals/packages/react-components/src/atoms/Dropdown.js (1)
t(98-98)frontend/micro-ui/web/micro-ui-internals/packages/modules/ws/src/pages/employee/ApplicationDetails.js (1)
clearDataDetails(156-161)frontend/micro-ui/web/micro-ui-internals/packages/modules/templates/ApplicationDetails/components/ApplicationDetailsContent.js (1)
ApplicationDetailsContent(696-1362)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/AssessmentDetailsSection.js (1)
frontend/micro-ui/web/micro-ui-internals/packages/react-components/src/atoms/Dropdown.js (2)
t(98-98)
Dropdown(89-275)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/PTMyApplications/index.js (5)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/MyProperties/index.js (5)
user(11-11)
Digit(25-25)
filter1(22-24)
applicationsList(31-31)
tenantId(10-10)frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/PTApplicationDetails.js (4)
Digit(39-42)
serviceSearchArgs(46-56)
serviceloading(58-61)
history(29-29)frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/SearchProperty/searchProperty.js (2)
Digit(23-23)
history(22-22)frontend/micro-ui/web/micro-ui-internals/packages/react-components/src/atoms/CardSubHeader.js (1)
CardSubHeader(3-15)frontend/micro-ui/web/micro-ui-internals/packages/react-components/src/atoms/SubmitBar.js (1)
SubmitBar(4-26)
🪛 Biome (1.9.4)
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/Header.js
[error] 37-37: Provide a text alternative through the alt, aria-label or aria-labelledby attribute
Meaningful alternative text on elements helps users relying on screen readers to understand content's purpose within a page.
If the content is decorative, redundant, or obscured, consider hiding it from assistive technologies with the aria-hidden attribute.
(lint/a11y/useAltText)
frontend/micro-ui/web/micro-ui-internals/packages/modules/templates/ApplicationDetails/Modal/PTActionModal.js
[error] 23-23: Alternative text title element cannot be empty
For accessibility purposes, SVGs should have an alternative text, provided via title element. If the svg element has role="img", you should add the aria-label or aria-labelledby attribute.
(lint/a11y/noSvgWithoutTitle)
[error] 31-31: Enforce to have the onClick mouse event with the onKeyUp, the onKeyDown, or the onKeyPress keyboard event.
Actions triggered using mouse events should have corresponding keyboard events to account for keyboard-only navigation.
(lint/a11y/useKeyWithClickEvents)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/Attachments.js
[error] 5-23: Alternative text title element cannot be empty
For accessibility purposes, SVGs should have an alternative text, provided via title element. If the svg element has role="img", you should add the aria-label or aria-labelledby attribute.
(lint/a11y/noSvgWithoutTitle)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/SuccessModal.js
[error] 15-16: Provide an explicit type prop for the button element.
The default type of a button is submit, which causes the submission of a form when placed inside a form element. This is likely not the behaviour that you want inside a React application.
Allowed button types are: submit, button or reset
(lint/a11y/useButtonType)
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/StaticCitizenSideBar.js
[error] 58-58: Provide a text alternative through the alt, aria-label or aria-labelledby attribute
Meaningful alternative text on elements helps users relying on screen readers to understand content's purpose within a page.
If the content is decorative, redundant, or obscured, consider hiding it from assistive technologies with the aria-hidden attribute.
(lint/a11y/useAltText)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/IndexStyle.js
[error] 8-13: This property value named div is later overwritten by an object member with the same name.
Overwritten with this value.
If an object property with the same name is defined multiple times (except when combining a getter with a setter), only the last definition makes it into the object and previous definitions are ignored.
Unsafe fix: Remove this property value named div
(lint/suspicious/noDuplicateObjectKeys)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTSelectRoadFactor.js
[error] 135-135: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 167-167: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with
(lint/complexity/noUselessTernary)
[error] 10-10: This let declares a variable that is only assigned once.
'tenantId' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 60-60: This let declares a variable that is only assigned once.
'__localityList' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 109-109: This let declares a variable that is only assigned once.
'keys' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 113-113: This let declares a variable that is only assigned once.
'key' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTSelectAssessmentYear.js
[error] 89-89: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 62-62: This let declares a variable that is only assigned once.
'keys' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 66-66: This let declares a variable that is only assigned once.
'key' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/IndexStyle.js
[error] 3-7: This property value named div is later overwritten by an object member with the same name.
Overwritten with this value.
If an object property with the same name is defined multiple times (except when combining a getter with a setter), only the last definition makes it into the object and previous definitions are ignored.
Unsafe fix: Remove this property value named div
(lint/suspicious/noDuplicateObjectKeys)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/Response.js
[error] 247-247: This variable is used before its declaration.
The variable is declared here:
(lint/correctness/noInvalidUseBeforeDeclaration)
[error] 247-247: This let declares a variable that is only assigned once.
'tenantId' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 282-282: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with
(lint/complexity/noUselessTernary)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/CreateProperty/PropertyDetailsTableSection.js
[error] 148-148: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/Attachments.js
[error] 5-23: Alternative text title element cannot be empty
For accessibility purposes, SVGs should have an alternative text, provided via title element. If the svg element has role="img", you should add the aria-label or aria-labelledby attribute.
(lint/a11y/noSvgWithoutTitle)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PreviewDemand.js
[error] 126-126: This property value named color is later overwritten by an object member with the same name.
Overwritten with this value.
If an object property with the same name is defined multiple times (except when combining a getter with a setter), only the last definition makes it into the object and previous definitions are ignored.
Unsafe fix: Remove this property value named color
(lint/suspicious/noDuplicateObjectKeys)
[error] 172-173: JSX elements without children should be marked as self-closing. In JSX, it is valid for any element to be self-closing.
Unsafe fix: Use a SelfClosingElement instead
(lint/style/useSelfClosingElements)
[error] 174-175: JSX elements without children should be marked as self-closing. In JSX, it is valid for any element to be self-closing.
Unsafe fix: Use a SelfClosingElement instead
(lint/style/useSelfClosingElements)
[error] 159-159: Provide an explicit type prop for the button element.
The default type of a button is submit, which causes the submission of a form when placed inside a form element. This is likely not the behaviour that you want inside a React application.
Allowed button types are: submit, button or reset
(lint/a11y/useButtonType)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTRoomArea.js
[error] 39-39: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 40-40: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 51-51: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 105-105: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 28-28: This let declares a variable that is only assigned once.
'menu' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/SuccessModal.js
[error] 15-16: Provide an explicit type prop for the button element.
The default type of a button is submit, which causes the submission of a form when placed inside a form element. This is likely not the behaviour that you want inside a React application.
Allowed button types are: submit, button or reset
(lint/a11y/useButtonType)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/CreateProperty/AttachmentsSection.js
[error] 209-227: Alternative text title element cannot be empty
For accessibility purposes, SVGs should have an alternative text, provided via title element. If the svg element has role="img", you should add the aria-label or aria-labelledby attribute.
(lint/a11y/noSvgWithoutTitle)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/CreateProperty/CorrespondenceAddressSection.js
[error] 90-90: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/employee/Login/login.js
[error] 370-370: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 371-371: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 372-372: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 373-373: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 374-374: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 378-378: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 379-379: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 380-380: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 381-381: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 385-385: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 386-386: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 387-387: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 388-388: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 389-389: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 393-393: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 394-394: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 395-395: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 396-396: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 397-397: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTAuthorizedPerson.js
[error] 141-141: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 157-157: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 173-173: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 190-190: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 204-204: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 220-220: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 237-237: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 253-253: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
frontend/micro-ui/web/micro-ui-internals/packages/modules/templates/ApplicationDetails/cashDeskIndex.js
[error] 115-118: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
[error] 21-21: This let declares a variable that is only assigned once.
'applicationNumber' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 121-121: This let declares a variable that is only assigned once.
'errorValue' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/AssessmentDetailsSection.js
[error] 81-81: JSX elements without children should be marked as self-closing. In JSX, it is valid for any element to be self-closing.
Unsafe fix: Use a SelfClosingElement instead
(lint/style/useSelfClosingElements)
[error] 82-82: JSX elements without children should be marked as self-closing. In JSX, it is valid for any element to be self-closing.
Unsafe fix: Use a SelfClosingElement instead
(lint/style/useSelfClosingElements)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PropertyTaxForm.js
[error] 228-228: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 266-266: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 282-282: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 318-319: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 363-364: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 387-388: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 402-403: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 416-417: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 430-431: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 528-529: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 578-579: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 659-659: This property value named color is later overwritten by an object member with the same name.
Overwritten with this value.
If an object property with the same name is defined multiple times (except when combining a getter with a setter), only the last definition makes it into the object and previous definitions are ignored.
Unsafe fix: Remove this property value named color
(lint/suspicious/noDuplicateObjectKeys)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTSelectWard.js
[error] 135-135: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 169-169: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with
(lint/complexity/noUselessTernary)
[error] 10-10: This let declares a variable that is only assigned once.
'tenantId' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 60-60: This let declares a variable that is only assigned once.
'__localityList' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 109-109: This let declares a variable that is only assigned once.
'keys' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 113-113: This let declares a variable that is only assigned once.
'key' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/citizen/index.js
[error] 452-452: Enforce to have the onClick mouse event with the onKeyUp, the onKeyDown, or the onKeyPress keyboard event.
Actions triggered using mouse events should have corresponding keyboard events to account for keyboard-only navigation.
(lint/a11y/useKeyWithClickEvents)
[error] 453-453: Enforce to have the onClick mouse event with the onKeyUp, the onKeyDown, or the onKeyPress keyboard event.
Actions triggered using mouse events should have corresponding keyboard events to account for keyboard-only navigation.
(lint/a11y/useKeyWithClickEvents)
[error] 454-454: Enforce to have the onClick mouse event with the onKeyUp, the onKeyDown, or the onKeyPress keyboard event.
Actions triggered using mouse events should have corresponding keyboard events to account for keyboard-only navigation.
(lint/a11y/useKeyWithClickEvents)
[error] 424-424: Missing key property for this element in iterable.
The order of the items may change, and having a key can help React identify which item was moved.
Check the React documentation.
(lint/correctness/useJsxKeyInIterable)
[error] 591-591: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 592-592: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 593-593: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 594-594: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 595-595: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 599-599: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 600-600: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 601-601: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 602-602: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 606-606: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 607-607: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 608-608: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 609-609: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 610-610: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 614-614: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 615-615: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 616-616: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 617-617: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 618-618: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTSelectPropertyType.js
[error] 135-135: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 167-167: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with
(lint/complexity/noUselessTernary)
[error] 10-10: This let declares a variable that is only assigned once.
'tenantId' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 60-60: This let declares a variable that is only assigned once.
'__localityList' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 109-109: This let declares a variable that is only assigned once.
'keys' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 113-113: This let declares a variable that is only assigned once.
'key' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/OtherDetailsSection.js
[error] 24-24: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/DesktopInbox.js
[error] 58-58: JSX elements without children should be marked as self-closing. In JSX, it is valid for any element to be self-closing.
Unsafe fix: Use a SelfClosingElement instead
(lint/style/useSelfClosingElements)
[error] 77-82: Provide an explicit type prop for the button element.
The default type of a button is submit, which causes the submission of a form when placed inside a form element. This is likely not the behaviour that you want inside a React application.
Allowed button types are: submit, button or reset
(lint/a11y/useButtonType)
[error] 83-88: Provide an explicit type prop for the button element.
The default type of a button is submit, which causes the submission of a form when placed inside a form element. This is likely not the behaviour that you want inside a React application.
Allowed button types are: submit, button or reset
(lint/a11y/useButtonType)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/PTMyApplications/index.js
[error] 35-35: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with
(lint/complexity/noUselessTernary)
[error] 29-29: This let declares a variable that is only assigned once.
'combinedApplicationNumber' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 30-30: This let declares a variable that is only assigned once.
'serviceSearchArgs' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 38-38: This let declares a variable that is only assigned once.
'foundValue' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/AssessmentDetailsSection.js
[error] 80-80: JSX elements without children should be marked as self-closing. In JSX, it is valid for any element to be self-closing.
Unsafe fix: Use a SelfClosingElement instead
(lint/style/useSelfClosingElements)
[error] 81-81: JSX elements without children should be marked as self-closing. In JSX, it is valid for any element to be self-closing.
Unsafe fix: Use a SelfClosingElement instead
(lint/style/useSelfClosingElements)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTRoadFactor.js
[error] 39-39: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 40-40: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 51-51: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 104-104: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 28-28: This let declares a variable that is only assigned once.
'menu' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/SearchApp.js
[error] 16-16: Use let or const instead of var.
A variable declared with var is accessible in the whole body of the function. Thus, the variable can be accessed before its initialization and outside the block where it is declared.
See MDN web docs for more details.
Unsafe fix: Use 'const' instead.
(lint/style/noVar)
[error] 18-18: Use let or const instead of var.
A variable declared with var is accessible in the whole body of the function. Thus, the variable can be accessed before its initialization and outside the block where it is declared.
See MDN web docs for more details.
Unsafe fix: Use 'const' instead.
(lint/style/noVar)
[error] 26-26: This let declares a variable that is only assigned once.
'payload' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 26-26: Avoid the use of spread (...) syntax on accumulators.
Spread syntax should be avoided on accumulators (like those in .reduce) because it causes a time complexity of O(n^2).
Consider methods such as .splice or .push instead.
(lint/performance/noAccumulatingSpread)
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/employee/index.js
[error] 426-426: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 427-427: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 428-428: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 429-429: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 430-430: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 434-434: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 435-435: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 436-436: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 437-437: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 441-441: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 442-442: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 443-443: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 444-444: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 445-445: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 449-449: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 450-450: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 451-451: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 452-452: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 453-453: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/inboxTable.js
[error] 200-212: Provide an explicit type prop for the button element.
The default type of a button is submit, which causes the submission of a form when placed inside a form element. This is likely not the behaviour that you want inside a React application.
Allowed button types are: submit, button or reset
(lint/a11y/useButtonType)
[error] 220-233: Provide an explicit type prop for the button element.
The default type of a button is submit, which causes the submission of a form when placed inside a form element. This is likely not the behaviour that you want inside a React application.
Allowed button types are: submit, button or reset
(lint/a11y/useButtonType)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/PropertyDetailsTableSection.js
[error] 340-341: Use a button element instead of an a element.
Anchor elements should only be used for default sections or page navigation
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTExemption.js
[error] 39-39: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 40-40: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 51-51: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 104-104: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 28-28: This let declares a variable that is only assigned once.
'menu' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/search/PropertySearchForm.js
[error] 210-210: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 220-220: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 225-225: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 230-230: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 236-236: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 240-240: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 248-248: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 255-255: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 277-278: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 281-282: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 291-292: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 296-297: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/SubMenu.js
[error] 183-204: Enforce to have the onClick mouse event with the onKeyUp, the onKeyDown, or the onKeyPress keyboard event.
Actions triggered using mouse events should have corresponding keyboard events to account for keyboard-only navigation.
(lint/a11y/useKeyWithClickEvents)
[error] 310-326: Enforce to have the onClick mouse event with the onKeyUp, the onKeyDown, or the onKeyPress keyboard event.
Actions triggered using mouse events should have corresponding keyboard events to account for keyboard-only navigation.
(lint/a11y/useKeyWithClickEvents)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTSelectZone.js
[error] 135-135: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 168-168: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with
(lint/complexity/noUselessTernary)
[error] 10-10: This let declares a variable that is only assigned once.
'tenantId' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 60-60: This let declares a variable that is only assigned once.
'__localityList' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 109-109: This let declares a variable that is only assigned once.
'keys' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 113-113: This let declares a variable that is only assigned once.
'key' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTSelectColony.js
[error] 135-135: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 169-169: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with
(lint/complexity/noUselessTernary)
[error] 10-10: This let declares a variable that is only assigned once.
'tenantId' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 60-60: This let declares a variable that is only assigned once.
'__localityList' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 109-109: This let declares a variable that is only assigned once.
'keys' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 113-113: This let declares a variable that is only assigned once.
'key' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/TopBar.js
[error] 168-185: Enforce to have the onClick mouse event with the onKeyUp, the onKeyDown, or the onKeyPress keyboard event.
Actions triggered using mouse events should have corresponding keyboard events to account for keyboard-only navigation.
(lint/a11y/useKeyWithClickEvents)
[error] 258-258: Enforce to have the onClick mouse event with the onKeyUp, the onKeyDown, or the onKeyPress keyboard event.
Actions triggered using mouse events should have corresponding keyboard events to account for keyboard-only navigation.
(lint/a11y/useKeyWithClickEvents)
[error] 255-255: Provide an explicit type prop for the button element.
The default type of a button is submit, which causes the submission of a form when placed inside a form element. This is likely not the behaviour that you want inside a React application.
Allowed button types are: submit, button or reset
(lint/a11y/useButtonType)
[error] 256-256: Provide an explicit type prop for the button element.
The default type of a button is submit, which causes the submission of a form when placed inside a form element. This is likely not the behaviour that you want inside a React application.
Allowed button types are: submit, button or reset
(lint/a11y/useButtonType)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/SearchApplication.js
[error] 338-338: This let declares a variable that is only assigned once.
'newaddr' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 431-438: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 442-449: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 453-460: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 491-498: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 517-524: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 532-539: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 646-646: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with
(lint/complexity/noUselessTernary)
[error] 406-406: This let declares a variable that is only assigned once.
'validation' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 550-583: Provide an explicit type prop for the button element.
The default type of a button is submit, which causes the submission of a form when placed inside a form element. This is likely not the behaviour that you want inside a React application.
Allowed button types are: submit, button or reset
(lint/a11y/useButtonType)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/index.js
[error] 113-113: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with
(lint/complexity/noUselessTernary)
[error] 119-119: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with
(lint/complexity/noUselessTernary)
[error] 131-131: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with
(lint/complexity/noUselessTernary)
[error] 137-137: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with
(lint/complexity/noUselessTernary)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/PropertyDetailsTableSection.js
[error] 17-17: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 19-19: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 106-116: Use a button element instead of an a element.
Anchor elements should only be used for default sections or page navigation
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/index.js
[error] 281-282: This let declares a variable that is only assigned once.
'tenantIdss' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 284-284: This let declares a variable that is only assigned once.
'userInfo1' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 467-467: Use Number.parseInt instead of the equivalent global.
ES2015 moved some globals into the Number namespace for consistency.
Safe fix: Use Number.parseInt instead.
(lint/style/useNumberNamespace)
[error] 474-474: Use Number.parseInt instead of the equivalent global.
ES2015 moved some globals into the Number namespace for consistency.
Safe fix: Use Number.parseInt instead.
(lint/style/useNumberNamespace)
[error] 505-505: Use Number.parseInt instead of the equivalent global.
ES2015 moved some globals into the Number namespace for consistency.
Safe fix: Use Number.parseInt instead.
(lint/style/useNumberNamespace)
frontend/micro-ui/web/micro-ui-internals/packages/libraries/src/services/elements/MDMS.js
[error] 1105-1105: Avoid the use of spread (...) syntax on accumulators.
Spread syntax should be avoided on accumulators (like those in .reduce) because it causes a time complexity of O(n^2).
Consider methods such as .splice or .push instead.
(lint/performance/noAccumulatingSpread)
[error] 1115-1115: Avoid the use of spread (...) syntax on accumulators.
Spread syntax should be avoided on accumulators (like those in .reduce) because it causes a time complexity of O(n^2).
Consider methods such as .splice or .push instead.
(lint/performance/noAccumulatingSpread)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/OtherDetailsSection.js
[error] 21-21: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/index.js
[error] 112-112: This let declares a variable that is only assigned once.
'userInfo1' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 117-117: This let declares a variable that is only assigned once.
'tenantIdss' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
[error] 307-307: Use Number.parseInt instead of the equivalent global.
ES2015 moved some globals into the Number namespace for consistency.
Safe fix: Use Number.parseInt instead.
(lint/style/useNumberNamespace)
[error] 315-315: Use Number.parseInt instead of the equivalent global.
ES2015 moved some globals into the Number namespace for consistency.
Safe fix: Use Number.parseInt instead.
(lint/style/useNumberNamespace)
[error] 346-346: Use Number.parseInt instead of the equivalent global.
ES2015 moved some globals into the Number namespace for consistency.
Safe fix: Use Number.parseInt instead.
(lint/style/useNumberNamespace)
frontend/micro-ui/web/micro-ui-internals/packages/modules/templates/ApplicationDetails/components/ApplicationDetailsContent.js
[error] 467-474: This property value named input is later overwritten by an object member with the same name.
Overwritten with this value.
If an object property with the same name is defined multiple times (except when combining a getter with a setter), only the last definition makes it into the object and previous definitions are ignored.
Unsafe fix: Remove this property value named input
(lint/suspicious/noDuplicateObjectKeys)
[error] 876-876: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 930-931: JSX elements without children should be marked as self-closing. In JSX, it is valid for any element to be self-closing.
Unsafe fix: Use a SelfClosingElement instead
(lint/style/useSelfClosingElements)
[error] 1142-1143: JSX elements without children should be marked as self-closing. In JSX, it is valid for any element to be self-closing.
Unsafe fix: Use a SelfClosingElement instead
(lint/style/useSelfClosingElements)
[error] 1175-1178: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 1188-1191: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 1202-1205: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 1216-1219: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 1235-1238: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 1249-1252: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 1263-1266: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 1277-1280: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 1298-1301: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
[error] 938-943: Missing key property for this element in iterable.
The order of the items may change, and having a key can help React identify which item was moved.
Check the React documentation.
(lint/correctness/useJsxKeyInIterable)
[error] 1310-1311: Provide an explicit type prop for the button element.
The default type of a button is submit, which causes the submission of a form when placed inside a form element. This is likely not the behaviour that you want inside a React application.
Allowed button types are: submit, button or reset
(lint/a11y/useButtonType)
[error] 1314-1320: Provide an explicit type prop for the button element.
The default type of a button is submit, which causes the submission of a form when placed inside a form element. This is likely not the behaviour that you want inside a React application.
Allowed button types are: submit, button or reset
(lint/a11y/useButtonType)
[error] 1336-1337: Provide an explicit type prop for the button element.
The default type of a button is submit, which causes the submission of a form when placed inside a form element. This is likely not the behaviour that you want inside a React application.
Allowed button types are: submit, button or reset
(lint/a11y/useButtonType)
[error] 1354-1357: Provide an explicit type prop for the button element.
The default type of a button is submit, which causes the submission of a form when placed inside a form element. This is likely not the behaviour that you want inside a React application.
Allowed button types are: submit, button or reset
(lint/a11y/useButtonType)
🔇 Additional comments (45)
frontend/micro-ui/web/micro-ui-internals/packages/css/src/pages/citizen/container.scss (1)
12-14: LGTM – brand colour updated consistently here
Nothing further.frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/PropertyDetails.js (1)
6-6: Confirm new import path resolves correctly
cashDeskIndexis two directories deeper than the old location. Please run a quick build / tree-shake to ensure the alias is correct and no duplicateApplicationDetailsTemplateis bundled.frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/NavItemHeader.js (1)
75-75: LGTM! Color scheme update aligns with broader UI theme changes.The color change from orange to purple (#4729A3) when the sidebar item is expanded is consistent with the overall UI color scheme update mentioned across multiple files in this PR.
frontend/micro-ui/web/micro-ui-internals/packages/modules/templates/ApplicationDetails/components/ApplicationDetailsActionBar.js (1)
39-39: LGTM! Styling improvements align with UI simplification.The addition of
position: "relative"andboxShadow: "none"to the ActionBar style enhances the visual presentation and aligns with the broader UI refinement efforts mentioned in this PR.frontend/micro-ui/web/micro-ui-internals/packages/libraries/src/hooks/index.js (1)
331-331: LGTM! New hook properly added to PT module exports.The
useSalutationsMDMShook is correctly added to the pt object exports, following the established pattern for other MDMS hooks in the property tax module.frontend/micro-ui/web/micro-ui-internals/packages/libraries/src/services/elements/InboxService.js (1)
17-18: LGTM! URL change aligns with coordinated API migration.The switch from
Urls.InboxSearchV2toUrls.InboxSearchis consistent with the broader migration to v2 inbox search API. Both URLs now point to the same endpoint "/inbox/v2/_search" as confirmed by the relevant code snippets.frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/Inbox.js (1)
115-116: LGTM! Header removal aligns with UI simplification.Commenting out the conditional header rendering is consistent with the broader UI refactoring efforts. The headers are likely being managed by the new
DesktopInboxcomponent or other integrated UI elements mentioned in the PR.frontend/micro-ui/web/micro-ui-internals/packages/css/src/components/navbar.scss (1)
114-120: LGTM! Consistent color scheme update.The color changes from orange (#f47738) to purple (#4729A3) for active sidebar elements are consistent across both mobile and desktop views. This aligns with the broader UI theme update mentioned in the summary.
Also applies to: 223-230
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/index.js (1)
21-21: LGTM! Correctly passing handleLogout prop to EmployeeSideBar.The addition of the
handleLogoutprop to theEmployeeSideBarcomponent is correct and aligns with the component's expected props as shown in the relevant code snippets. This ensures the logout functionality works properly in the employee sidebar.frontend/micro-ui/web/micro-ui-internals/example/src/setupProxy.js (1)
13-13: Ensure consistent SSL settings across proxies.The assets proxy also has SSL verification disabled, which maintains consistency with the API proxy.
frontend/micro-ui/web/micro-ui-internals/packages/css/src/components/bannercomponents.scss (1)
113-113: Approve the gradient background update.The change from a background image to a pure gradient background improves consistency and aligns with the purple theme being applied throughout the application. This also removes the dependency on the CSS variable
--banner-url.frontend/micro-ui/web/micro-ui-internals/packages/libraries/src/services/elements/User/index.js (2)
16-16: LGTM: Authorization header formatting improvementThe logical OR operator formatting is cleaner and more readable.
55-57: Verify employee authentication redirection consistencyThe logout flow in
User/index.jsnow drops users straight on/digit-ui/employee/user/login, but other parts of the code still point at the language-selection step. Please confirm the intended end-to-end experience and update any stale redirects:•
react-components/src/atoms/PrivateRoute.js
–getLoginRedirectionLink()still returns/digit-ui/employee/user/language-selectionfor employees.
•modules/core/src/pages/employee/LanguageSelection/index.js
– on submit it pushes to/digit-ui/employee/user/login.
•services/elements/User/index.js
– on logout it now replaces with/digit-ui/employee/user/login.If the language-selection screen should be skipped entirely, update
PrivateRoute.js(and remove any leftover checks forlanguage-selection). Otherwise, ensure that redirect paths across all modules are consistent with the new flow.frontend/micro-ui/web/micro-ui-internals/packages/libraries/src/services/atoms/urls.js (1)
8-8: Boundary Type Updated forrevenue_localities– Localized ImpactThe change from
boundaryType=LocalitytoboundaryType=Cityinurls.jsonly affects the following internal usages:
packages/libraries/src/services/atoms/urls.js– therevenue_localitiesconstant
packages/libraries/src/services/elements/Location.js#getRevenueLocalities– uses the updated URL
packages/libraries/src/services/molecules/Store/service.js– assignsinitData.revenue_localitiesNo other code paths import or reference
Urls.location.revenue_localities. The many literal‐string usages of/boundaryType=Localityin the mono‐UI dev packages bypass this constant and are unaffected by this change.Please verify that:
- The upstream MDMS data and downstream UI/logic correctly handle City‐level revenue boundaries.
- Any consumers expecting Locality‐level revenue data are updated or intentionally preserved.
frontend/micro-ui/web/micro-ui-internals/package.json (2)
78-78: LGTM: Added http-proxy-middleware dependencyThe addition of
http-proxy-middlewaresupports the proxy configuration updates seen in the setupProxy.js file.
5-10: LGTM: Formatting improvementsThe workspaces array formatting is cleaner and more readable.
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/AssessmentDetailsLayout.js (2)
11-26: LGTM: Well-structured responsive styles.The flexbox layout with proper responsive design using
flex-wrap, gap spacing, and minimum widths provides a clean and adaptable layout structure.
50-61: Verify consistency of form-validation props across PT componentsI inspected the definitions of the other PT components and found that none of them currently destructure or use the form-related props passed into
PTRoadFactor:
- PTRateZone – no
config,formState,setError,clearErrors,onBluroruserType- PTOldPropertyId – no
config,formState,setError,clearErrors,onBluroruserType- PTPlotArea – no
config,formState,setError,clearErrors,onBluroruserTypePlease confirm whether this difference is intentional. If these components also need form-validation behavior, update their prop signatures and implementations accordingly.
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PropertAddressLayout.js (1)
195-233: Fix layout structure and style application.The current structure has incorrect nesting where
PTSelectColony,PTSelectWard, andPTSelectZoneare nested inside another div withrowStyle, but the parent divs don't apply the defined responsive styles. This breaks the intended layout.<div style={rowStyle}> <div> <PTSelectStreet // ... props /> </div> - <div > + <div> <PTSelectPincode // ... props /> </div> - <div style={rowStyle}> + <div> <PTSelectColony // ... props /> + </div> + <div> <PTSelectWard // ... props /> - + </div> + <div> <PTSelectZone // ... props /> </div> </div>Likely an incorrect or invalid review comment.
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/StaticCitizenSideBar.js (1)
61-80: LGTM: Consistent typography styling.The inline font styling with Poppins font family and proper color scheme provides consistent visual hierarchy for the profile information.
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/Response.js (1)
263-267: LGTM: Improved layout structure.Moving the SubmitBar outside the Card and right-aligning it provides better visual hierarchy and user experience for the download action.
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/CreateProperty/DeclarationSection.js (1)
5-10: Consider adding null safety for nested object access.The component accesses
formData?.declarationbut doesn't handle the case wheredeclarationmight be undefined when creating the updated object.const DeclarationSection = ({ t, config, onSelect, formData = {}, userType }) => { - const checkboxes = formData?.declaration || {}; + const checkboxes = formData?.declaration || {}; const handleChange = () => { - const updated = { ...checkboxes, selfDeclaration: !checkboxes.selfDeclaration }; + const updated = { ...checkboxes, selfDeclaration: !checkboxes?.selfDeclaration }; onSelect(config.key, updated); };Likely an incorrect or invalid review comment.
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/CorrespondenceAddressSection.js (2)
15-21: LGTM! Proper textarea implementation with conditional disable.The textarea correctly implements the disabled state when the checkbox is checked, preventing conflicting user input.
11-36: Well-structured component with proper event handling.The component correctly handles the conditional disabling of the textarea based on the checkbox state, and the event handlers are properly connected. The layout and styling approach is consistent with the overall design system.
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/OtherDetailStructure.js (2)
37-84: LGTM! Well-structured responsive layout component.The component effectively organizes three child components in a responsive flexbox layout with proper prop passing and consistent styling.
27-84: Well-structured responsive layout component.The component provides a clean, responsive three-column layout using flexbox. The props are properly passed to child components, maintaining consistency in the form data flow.
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/IndexStyle.js (2)
1-258: Well-organized and comprehensive style definitions.The style object provides consistent styling across the application with good use of CSS properties, flexbox layouts, and color schemes.
1-258: Comprehensive and well-organized style definitions.The style object provides a comprehensive set of styling definitions for the employee new application UI. The organization is logical and the design system is consistent with proper use of colors, spacing, and typography.
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/inbox/search.js (1)
217-231: LGTM! Well-structured button styling.The button style object is well-organized and follows good practices for maintainable CSS-in-JS.
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/Module.js (1)
15-137: LGTM: Component imports and registration look well-organized.The addition of new property tax components and their registration in the component registry follows the established pattern. The imports are properly organized and the component registrations maintain consistency with existing code.
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/CreateProperty/OtherDetailsSection.js (1)
105-213: LGTM: Clean implementation with proper component usage.The active implementation properly uses the design system components (
Dropdown,TextInput) and follows React best practices. The conditional rendering based onuserTypeand the form data handling logic are well-implemented.frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/employee/Login/login.js (1)
403-407: Replace placeholder image URLs with actual assets.The social media icons use placeholder URLs that will result in broken images. Use actual icon assets or icon libraries.
-<img src="facebook-icon-url" alt="Facebook" style={iconStyle} /> +<img src="https://github.com/assets/icons/facebook.svg" alt="Facebook" style={iconStyle} />Consider using an icon library like React Icons for better maintainability:
import { FaFacebook, FaTwitter, FaInstagram, FaLinkedin, FaYoutube } from 'react-icons/fa'; // Then use: <FaFacebook style={iconStyle} /> <FaTwitter style={iconStyle} />frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/employee/index.js (1)
426-453: Replace placeholder href values with actual URLsAll footer links use placeholder
href="#"values which don't provide meaningful navigation.These links should point to actual pages or be handled with proper onClick handlers if they're meant to be client-side navigation. Consider using React Router's Link component or proper URLs.
- <a href="#" style={linkStyle}>Privacy Policy</a> + <Link to="/privacy-policy" style={linkStyle}>Privacy Policy</Link>frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/PropertyDetailsTableSection.js (1)
1-125: Verify read-only intent for PropertyDetailsTableSectionAll inputs in this component are rendered as disabled, and the provided
handleUnitChangeandformErrorsprops are never used. Please confirm the intended behavior:
- Should this remain a read-only display?
- If yes, replace the disabled form elements with plain text or styled display components for clarity and better performance.
- Or should the inputs be interactive?
- If yes, remove the disabled flags and wire up the change handlers and error displays.
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PropertyTaxForm.js (1)
201-201: Ensure the update call includes your API’s base URLThe direct fetch(
/update/${propertyId}) relies on the current origin (and a dev proxy) and may fail in staging/production. Please confirm your actual API root (e.g. process.env.REACT_APP_API_BASE_URL) or the shared Request/ServiceRequest wrapper and update this call accordingly.• File: frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PropertyTaxForm.js @ line 201
Suggested change:
- const response = await fetch(`/update/${propertyId}`, { + const response = await fetch( + `${process.env.REACT_APP_API_BASE_URL || window.location.origin}/update/${propertyId}`, + { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) } );Or import and use the common Request/ServiceRequest helper for consistency:
import { ServiceRequest } from '.../Request'; // … const response = await ServiceRequest({ serviceName: 'PROPERTY_TAX', url: `/update/${propertyId}`, method: 'POST', data: payload, });frontend/micro-ui/web/micro-ui-internals/packages/libraries/src/hooks/pt/usePropertyMDMS.js (1)
14-36: Clean implementation of new MDMS hooks.The new hooks for assessment year, road factor, construction type, and occupancy type follow the existing patterns well and integrate seamlessly with the switch statement.
Also applies to: 61-74
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/EmployeeSideBar.js (1)
125-125: Fix typo in property access.There's a typo that will cause a runtime error.
- const errorsPresent = !!Object.keys(localFormState.errors).lengtha; + const errorsPresent = !!Object.keys(localFormState.errors).length;Likely an incorrect or invalid review comment.
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTRoadFactor.js (2)
144-144: Verify the text interpolation parameterThe
t()function is called withusageCategoryMajoras a parameter, but ensure this is the correct value to interpolate.If the translation key expects a string value, consider passing the appropriate property:
-{<CitizenInfoLabel info={t("CS_FILE_APPLICATION_INFO_LABEL")} text={t("PT_USAGE_TYPE_INFO_MSG", usageCategoryMajor)} />} +{<CitizenInfoLabel info={t("CS_FILE_APPLICATION_INFO_LABEL")} text={t("PT_USAGE_TYPE_INFO_MSG", { category: usageCategoryMajor?.i18nKey })} />}
20-20: Remove debug console.log statementDebug logging should not be present in production code.
-console.log("OwnerShipCategoryOb",OwnerShipCategoryOb)Likely an incorrect or invalid review comment.
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/search/PropertySearchForm.js (1)
302-303: Add explicit type attributes to buttons.Buttons should have explicit type attributes to prevent unintended form submission.
- <button style={clearButton} onClick={() => { reset(); onReset(); }}>Clear</button> - <button style={searchButton}>Search</button> + <button type="button" style={clearButton} onClick={() => { reset(); onReset(); }}>Clear</button> + <button type="submit" style={searchButton}>Search</button>Likely an incorrect or invalid review comment.
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/SearchApplication.js (1)
647-647: Good use of fallback component.The PTinboxTable component is used as a fallback when no data is present or loading, which improves user experience.
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/index.js (1)
145-146: Good addition of new PT components and routes.The registration of
PTPropertyTaxFormandPreviewDemandcomponents along with their corresponding routes enhances the property tax module functionality.Also applies to: 183-184
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/config/Create/config.js (1)
8-9: All referenced components exist and are registered correctlyI verified that each component specified in
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/config/Create/config.jshas a corresponding implementation undersrc/pageComponents. No missing or misnamed components were detected.frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/index.js (1)
122-126: Clarify assessment year validation requirementThe assessment year validation is commented out, but the field is shown in the UI (also commented). Either remove the field entirely or enable the validation if it's required.
Is the assessment year field required for property creation? The validation is commented out but the payload includes it.
Also applies to: 225-225
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/SuccessModal.js (1)
3-20: Good simplification of the success modal.The simplified approach focusing on display functionality without side effects is a good architectural decision. The component is now more focused and easier to test.
| <meta name="theme-color" content="#00bcd1"/> | ||
| <title>Digit</title> | ||
| <title>IMC</title> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Meta theme-color no longer matches new brand palette
meta[name="theme-color"] is still #00bcd1 (cyan) while every other file switches the primary accent to #4729A3 (purple). Browser UIs that pick up this value (Android address bar, PWA splash, etc.) will now look off-brand.
-    <meta name="theme-color" content="#00bcd1"/>
+    <meta name="theme-color" content="#4729A3"/>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <meta name="theme-color" content="#00bcd1"/> | |
| <title>Digit</title> | |
| <title>IMC</title> | |
| <meta name="theme-color" content="#4729A3"/> | |
| <title>IMC</title> | 
🤖 Prompt for AI Agents
In frontend/micro-ui/web/micro-ui-internals/example/public/index.html at lines 8
to 9, update the meta tag with name "theme-color" to use the new brand color
#4729A3 instead of the old cyan #00bcd1 to ensure consistency with the updated
primary accent color across the application.
| console.log("cities", cities); | ||
| console.log("Digit",Digit) | ||
| const [selectedCity, setSelectedCity] = useState(() => ({ code: Digit.ULBService.getCitizenCurrentTenant(true) })); | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove debug console.log statements before shipping
These logs dump the full cities MDMS payload and the global Digit object to every user’s console:
- Noise & performance overhead in production.
- Potential PII leakage if tenant metadata ever contains sensitive fields.
-console.log("cities", cities);
-console.log("Digit",Digit)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| console.log("cities", cities); | |
| console.log("Digit",Digit) | |
| const [selectedCity, setSelectedCity] = useState(() => ({ code: Digit.ULBService.getCitizenCurrentTenant(true) })); | |
| const [selectedCity, setSelectedCity] = useState(() => ({ code: Digit.ULBService.getCitizenCurrentTenant(true) })); | 
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/citizen/Home/LocationSelection.js
around lines 11 to 13, remove the debug console.log statements that output the
full cities MDMS payload and the global Digit object. These logs should be
deleted to avoid noise, performance overhead, and potential exposure of
sensitive information in production environments.
| return ( | ||
| <div className="ground-container"> | ||
| <div className="ground-container" style={{margin:"0px",padding:"0px"}}> | ||
| <Switch> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Inline style overrides make future theming harder
style={{margin:"0px",padding:"0px"}} hard-codes spacing and wins over utility classes/tailwind abstractions already used elsewhere (ground-container previously relied on CSS). Prefer a CSS/SCSS rule or utility class to keep layout concerns in one layer.
-    <div className="ground-container" style={{margin:"0px",padding:"0px"}}>
+    <div className="ground-container no-spacing">And in the stylesheet:
.no-spacing {
  margin: 0 !important;
  padding: 0 !important;
}🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/AppModules.js
around lines 38 to 40, remove the inline style setting margin and padding to 0
from the div with className "ground-container". Instead, create or use a
CSS/SCSS class such as "no-spacing" that applies margin and padding zero with
!important to override defaults. Then add this class to the div to replace the
inline style, ensuring layout styling is managed consistently via CSS rather
than inline styles.
| console.log("ApplicationTable data", data); | ||
| return ( | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove left-over debug console.log
Logging every render of a paginated table can spam the console, leak PII and affect performance.
-  console.log("ApplicationTable data", data);📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| console.log("ApplicationTable data", data); | |
| return ( | |
| return ( | 
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/inbox/ApplicationTable.js
at lines 19-20, remove the console.log statement that logs "ApplicationTable
data" and the data object to prevent console spamming, potential PII leaks, and
performance issues.
| @apply w-full; | ||
| background-color: #4729A3B2 !important; | ||
| } | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Use theme variable for button background
To stay consistent with the new purple palette use a CSS variable instead of an 8-digit hex literal.
-      background-color: #4729A3B2 !important;
+      background-color: var(--egov-primary-dark-70, rgba(71,41,163,0.7)) !important;📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| @apply w-full; | |
| background-color: #4729A3B2 !important; | |
| } | |
| @apply w-full; | |
| - background-color: #4729A3B2 !important; | |
| + background-color: var(--egov-primary-dark-70, rgba(71,41,163,0.7)) !important; | |
| } | 
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/css/src/pages/employee/login.scss
around lines 4 to 6, replace the hardcoded 8-digit hex color value for the
button background with the appropriate CSS variable from the theme's purple
palette to maintain consistency. Identify the correct CSS variable representing
the purple shade and update the background-color property to use that variable
instead of the literal hex code.
| <input | ||
| type="checkbox" | ||
| onChange={handleSameAsPropertyToggle} | ||
| checked={isSameAsPropertyAddress} | ||
| style={{ padding: "10px" }} | ||
| /> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Use UI library checkbox for consistency.
The native HTML checkbox should be replaced with the UI library's CheckBox component for consistency with other components.
+import { CheckBox } from "@egovernments/digit-ui-react-components";-            <input
-              type="checkbox"
-              onChange={handleSameAsPropertyToggle}
-              checked={isSameAsPropertyAddress}
-              style={{ padding: "10px" }}
-            />
+            <CheckBox
+              onChange={handleSameAsPropertyToggle}
+              checked={isSameAsPropertyAddress}
+              label=""
+            />📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <input | |
| type="checkbox" | |
| onChange={handleSameAsPropertyToggle} | |
| checked={isSameAsPropertyAddress} | |
| style={{ padding: "10px" }} | |
| /> | |
| // Add at the top of the file alongside other imports | |
| import { CheckBox } from "@egovernments/digit-ui-react-components"; | |
| … // other imports and code | |
| // Replace the native checkbox input with the UI library component | |
| - <input | |
| - type="checkbox" | |
| - onChange={handleSameAsPropertyToggle} | |
| - checked={isSameAsPropertyAddress} | |
| - style={{ padding: "10px" }} | |
| - /> | |
| + <CheckBox | |
| + onChange={handleSameAsPropertyToggle} | |
| + checked={isSameAsPropertyAddress} | |
| + label="" // adjust label text as needed | |
| + /> | 
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/CorrespondenceAddressSection.js
around lines 24 to 29, replace the native HTML input checkbox element with the
UI library's CheckBox component to maintain UI consistency. Import the CheckBox
component from the UI library if not already imported, then update the JSX to
use CheckBox with equivalent props such as onChange, checked, and style.
| @@ -0,0 +1,39 @@ | |||
| import React, { useState } from "react"; | |||
|  | |||
| const PTSelectOtherCheckBox = ({ t, onSelect }) => { | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Add PropTypes validation.
The component lacks PropTypes validation for its props, which helps catch bugs during development.
+import PropTypes from 'prop-types';Add at the end of the file:
+PTSelectOtherCheckBox.propTypes = {
+  t: PropTypes.func.isRequired,
+  onSelect: PropTypes.func.isRequired,
+};🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTSelectOtherCheckBox.js
at line 3, the PTSelectOtherCheckBox component is missing PropTypes validation
for its props. To fix this, import PropTypes at the top of the file and add a
PropTypes definition at the end of the file specifying the expected types for
the props 't' and 'onSelect'. This will help catch bugs by validating prop types
during development.
| const renderCheckbox = (key, label) => ( | ||
| <label style={{ display: "flex", alignItems: "center", gap: "0.5rem" }}> | ||
| <span>{label}</span> | ||
| <input | ||
| type="checkbox" | ||
| checked={checkboxStates[key]} | ||
| onChange={() => handleCheckboxChange(key)} | ||
| /> | ||
| </label> | ||
| ); | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Fix checkbox and label order for better UX.
The current order places the label before the checkbox, which is uncommon and may confuse users. Also consider using the UI library's CheckBox component for consistency.
  const renderCheckbox = (key, label) => (
    <label style={{ display: "flex", alignItems: "center", gap: "0.5rem" }}>
-      <span>{label}</span>
       <input
         type="checkbox"
         checked={checkboxStates[key]}
         onChange={() => handleCheckboxChange(key)}
       />
+      <span>{label}</span>
     </label>
   );📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| const renderCheckbox = (key, label) => ( | |
| <label style={{ display: "flex", alignItems: "center", gap: "0.5rem" }}> | |
| <span>{label}</span> | |
| <input | |
| type="checkbox" | |
| checked={checkboxStates[key]} | |
| onChange={() => handleCheckboxChange(key)} | |
| /> | |
| </label> | |
| ); | |
| const renderCheckbox = (key, label) => ( | |
| <label style={{ display: "flex", alignItems: "center", gap: "0.5rem" }}> | |
| <input | |
| type="checkbox" | |
| checked={checkboxStates[key]} | |
| onChange={() => handleCheckboxChange(key)} | |
| /> | |
| <span>{label}</span> | |
| </label> | |
| ); | 
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTSelectOtherCheckBox.js
between lines 18 and 27, the checkbox input is rendered after the label text,
which is not the typical order and can confuse users. To fix this, reorder the
JSX so that the checkbox input appears before the label text within the label
element. Additionally, replace the native input element with the UI library's
CheckBox component to maintain consistent styling and behavior across the app.
| STATE_LEVEL_TENANT_ID=pg | ||
| REACT_APP_PROXY_URL=https://urban.eydemoapp.in | ||
| REACT_APP_STATE_LEVEL_TENANT_ID=pg | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Clarify duplicate STATE_LEVEL_TENANT_ID variables.
There are two similar variables that might cause confusion. Consider adding comments to explain their purpose.
+# Backend state level tenant ID
 STATE_LEVEL_TENANT_ID=pg
+# Frontend state level tenant ID
 REACT_APP_STATE_LEVEL_TENANT_ID=pgCommittable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In frontend/micro-ui/web/.env.sample around lines 3 to 5, there are two
variables named STATE_LEVEL_TENANT_ID and REACT_APP_STATE_LEVEL_TENANT_ID that
could cause confusion due to their similarity. Add comments above each variable
to clearly explain their distinct purposes and usage contexts to avoid ambiguity
for future developers.
| REACT_APP_EMPLOYEE_TOKEN=ec6a2db1-c000-4927-af21-f4ce13c1d75f | ||
| REACT_APP_CITIZEN_TOKEN=dce88a06-7e09-4923-97f9-f15af2deea66 | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove authentication tokens from sample file.
Authentication tokens should not be included in sample environment files as they may be accidentally committed or used in production.
-REACT_APP_EMPLOYEE_TOKEN=ec6a2db1-c000-4927-af21-f4ce13c1d75f
-REACT_APP_CITIZEN_TOKEN=dce88a06-7e09-4923-97f9-f15af2deea66
+REACT_APP_EMPLOYEE_TOKEN=your-employee-token-here
+REACT_APP_CITIZEN_TOKEN=your-citizen-token-here📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| REACT_APP_EMPLOYEE_TOKEN=ec6a2db1-c000-4927-af21-f4ce13c1d75f | |
| REACT_APP_CITIZEN_TOKEN=dce88a06-7e09-4923-97f9-f15af2deea66 | |
| REACT_APP_EMPLOYEE_TOKEN=your-employee-token-here | |
| REACT_APP_CITIZEN_TOKEN=your-citizen-token-here | 
🤖 Prompt for AI Agents
In frontend/micro-ui/web/.env.sample at lines 8 to 9, remove the hardcoded
authentication tokens REACT_APP_EMPLOYEE_TOKEN and REACT_APP_CITIZEN_TOKEN from
the sample environment file. Replace them with placeholder values or leave them
blank to prevent accidental exposure or misuse of real tokens.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Review continued from previous batch...
|  | ||
|  | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Remove empty lines for better code formatting.
Empty lines in the middle of the function serve no purpose and should be removed.
   };
-
-
   return (Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTOldPropertyId.js
around lines 13 to 14, there are unnecessary empty lines within the function.
Remove these empty lines to improve code formatting and maintain cleaner, more
readable code.
| <TextInput | ||
| name="correspondenceAddress" | ||
| value={address} | ||
| onChange={handleAddressChange} | ||
| style={{width: "100%" }} | ||
| /> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Add proper accessibility attributes to the input.
The TextInput lacks proper accessibility attributes and should have consistent naming.
        <TextInput
-          name="correspondenceAddress"
+          name="oldPropertyId"
           value={address}
           onChange={handleAddressChange}
           style={{width: "100%" }}
+          aria-label={t("Old Property")}
         />📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <TextInput | |
| name="correspondenceAddress" | |
| value={address} | |
| onChange={handleAddressChange} | |
| style={{width: "100%" }} | |
| /> | |
| <TextInput | |
| name="oldPropertyId" | |
| value={address} | |
| onChange={handleAddressChange} | |
| style={{ width: "100%" }} | |
| aria-label={t("Old Property")} | |
| /> | 
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTOldPropertyId.js
between lines 19 and 24, the TextInput component is missing proper accessibility
attributes and consistent naming. Add an accessible label or aria-label
attribute to the TextInput to describe its purpose clearly for screen readers.
Also, ensure the name attribute matches the label or aria-label for consistency
and accessibility compliance.
| @@ -0,0 +1,31 @@ | |||
| import { LabelFieldPair, CardLabel, TextInput, CheckBox } from "@egovernments/digit-ui-react-components"; | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Remove unused imports.
The CheckBox import is not used in the component.
-import { LabelFieldPair, CardLabel, TextInput, CheckBox } from "@egovernments/digit-ui-react-components";
+import { LabelFieldPair, CardLabel, TextInput } from "@egovernments/digit-ui-react-components";📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| import { LabelFieldPair, CardLabel, TextInput, CheckBox } from "@egovernments/digit-ui-react-components"; | |
| import { LabelFieldPair, CardLabel, TextInput } from "@egovernments/digit-ui-react-components"; | 
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTOldPropertyId.js
at line 1, the CheckBox import is not used anywhere in the file. Remove CheckBox
from the import statement to clean up unused imports.
| const PTOldPropertyId = ({ t, onSelect }) => { | ||
| const [address, setAddress] = useState(""); | ||
| const [sameAsPropertyAddress, setSameAsPropertyAddress] = useState(false); | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Remove unused state variable and fix component naming.
The component name suggests "Old Property ID" but it's handling correspondence address. Also, sameAsPropertyAddress state is unused.
 const PTOldPropertyId = ({ t, onSelect }) => {
   const [address, setAddress] = useState("");
-  const [sameAsPropertyAddress, setSameAsPropertyAddress] = useState(false);Consider renaming the component to better reflect its purpose or fixing the onSelect key:
-    onSelect("correspondenceAddress", e.target.value);
+    onSelect("oldPropertyId", e.target.value);Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTOldPropertyId.js
around lines 4 to 6, the state variable sameAsPropertyAddress is declared but
never used, and the component name PTOldPropertyId does not match its
functionality related to correspondence address. Remove the unused
sameAsPropertyAddress state variable and rename the component to better reflect
its purpose, or adjust the onSelect key if that is the intended fix.
| @@ -0,0 +1,30 @@ | |||
| import { LabelFieldPair, CardLabel, TextInput, CheckBox } from "@egovernments/digit-ui-react-components"; | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Remove unused import.
The CheckBox component is imported but never used in this component.
-import { LabelFieldPair, CardLabel, TextInput, CheckBox } from "@egovernments/digit-ui-react-components";
+import { LabelFieldPair, CardLabel, TextInput } from "@egovernments/digit-ui-react-components";📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| import { LabelFieldPair, CardLabel, TextInput, CheckBox } from "@egovernments/digit-ui-react-components"; | |
| import { LabelFieldPair, CardLabel, TextInput } from "@egovernments/digit-ui-react-components"; | 
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTRateZone.js
at line 1, the CheckBox component is imported but not used anywhere in the file.
Remove CheckBox from the import statement to clean up unused imports and avoid
unnecessary code inclusion.
| if (userType === "employee") { | ||
| const labelStyle = { | ||
| textAlign: "left", | ||
| marginBottom: "0px", | ||
| display: "block", | ||
| lineHeight: "inherit", | ||
| fontFamily: "Poppins", | ||
| fontWeight: 500, | ||
| fontSize: "16px", | ||
| color: "#282828", | ||
| }; | ||
|  | ||
| const errorStyle = { | ||
| width: "70%", | ||
| marginLeft: "30%", | ||
| fontSize: "12px", | ||
| marginTop: "-21px", | ||
| color: "#d4351c", | ||
| }; | ||
|  | ||
| return ( | ||
| <React.Fragment> | ||
| <LabelFieldPair style={{ alignItems: "center", display: "block", marginBottom: "1rem" }}> | ||
| <CardLabel className="card-label-smaller" style={labelStyle}> | ||
| {t("Select Assessment Year")} <span style={{ color: "#d4351c" }}>*</span> | ||
| </CardLabel> | ||
| <div className="field"> | ||
| <Dropdown | ||
| option={years} | ||
| selected={selectedYear} | ||
| select={handleChange} | ||
| optionKey="name" | ||
| placeholder={t("Select")} | ||
| style={{ width: "300px" }} | ||
| /> | ||
| </div> | ||
| </LabelFieldPair> | ||
| {error ? <CardLabelError style={errorStyle}>{error}</CardLabelError> : null} | ||
| </React.Fragment> | ||
| ); | ||
| } | ||
|  | ||
| return null; | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Consider making the component more reusable.
The component only renders for "employee" userType, which limits its reusability. Consider making this configurable or removing the restriction.
- if (userType === "employee") {
+ if (userType === "employee" || config.showForAllUsers) {Or remove the restriction entirely if there's no specific reason to limit it to employees only.
Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/CreateProperty/PTSelectAssessmentYears.js
between lines 29 and 71, the component rendering is restricted to userType
"employee," limiting reusability. To fix this, remove the conditional check for
userType or make it configurable via props so the component can render for other
user types as needed, enhancing its flexibility and reuse.
🛠️ Refactor suggestion
Implement validation logic for required field.
The component has error state management but never actually sets errors. The required field validation should be implemented.
const handleChange = (value) => {
  setSelectedYear(value);
- setError("");
+ if (value) {
+   setError("");
+ } else {
+   setError(t("REQUIRED_FIELD"));
+ }
  onSelect(config.key, value);
};
+ useEffect(() => {
+   if (config.isMendatory && !selectedYear) {
+     setError(t("REQUIRED_FIELD"));
+   }
+ }, [selectedYear, config.isMendatory]);Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/CreateProperty/PTSelectAssessmentYears.js
between lines 29 and 71, the component manages an error state but does not
implement validation logic to set errors for the required field. Add validation
to check if a year is selected when the user interacts with the dropdown or
submits the form, and set the error state accordingly to display the error
message. Ensure the error state is updated to trigger the error display when the
required field is empty.
| }; | ||
|  | ||
| const SearchApplication = ({ onSearch, type, onClose, searchFields, searchParams, isInboxPage, defaultSearchParams, clearSearch: _clearSearch }) => { | ||
| console.log("SearchApplication rendered with searchFields:", searchFields); | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Remove console.log statement.
Debug console.log statements should not be committed to production code.
- console.log("SearchApplication rendered with searchFields:", searchFields);📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| console.log("SearchApplication rendered with searchFields:", searchFields); | 
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/inbox/search.js
at line 35, remove the console.log statement that outputs "SearchApplication
rendered with searchFields:" and the searchFields variable to prevent debug logs
from being present in production code.
| <div style={{ | ||
| fontFamily: "Poppins", | ||
| fontWeight: 500, | ||
| fontSize: "16px", | ||
| lineHeight: "100%", | ||
| letterSpacing: "0%", | ||
| color: "#4729A3", | ||
| }}>Application Details</div> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Extract inline styles for better maintainability.
Consider extracting the inline styles to a separate styles object or CSS class.
+ const headerStyles = {
+   fontFamily: "Poppins",
+   fontWeight: 500,
+   fontSize: "16px",
+   lineHeight: "100%",
+   letterSpacing: "0%",
+   color: "#4729A3",
+ };
- <div style={{
-   fontFamily: "Poppins",
-   fontWeight: 500,
-   fontSize: "16px",
-   lineHeight: "100%",
-   letterSpacing: "0%",
-   color: "#4729A3",
- }}>Application Details</div>
+ <div style={headerStyles}>Application Details</div>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <div style={{ | |
| fontFamily: "Poppins", | |
| fontWeight: 500, | |
| fontSize: "16px", | |
| lineHeight: "100%", | |
| letterSpacing: "0%", | |
| color: "#4729A3", | |
| }}>Application Details</div> | |
| const headerStyles = { | |
| fontFamily: "Poppins", | |
| fontWeight: 500, | |
| fontSize: "16px", | |
| lineHeight: "100%", | |
| letterSpacing: "0%", | |
| color: "#4729A3", | |
| }; | |
| <div style={headerStyles}>Application Details</div> | 
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/inbox/search.js
around lines 125 to 132, the inline styles applied to the div with "Application
Details" should be extracted into a separate styles object or CSS class. Create
a styles object or CSS class with the specified style properties and replace the
inline style attribute with a reference to that object or class to improve
maintainability.
| poppinsLabel: { | ||
| fontFamily: 'Poppins, sans-serif', | ||
| fontWeight: 400, | ||
| fontSize: '14px', | ||
| lineHeight: '22px', | ||
| letterSpacing: '0', | ||
| color: '#282828', | ||
| width: "200px" | ||
| }, | ||
| formSection: { | ||
| display: "flex", | ||
| flexWrap: "wrap", | ||
| gap: "1rem" | ||
| }, | ||
| flex30: { | ||
| flex: "1 1 30%" | ||
| }, | ||
| flex45: { | ||
| flex: "1 1 45%" | ||
| }, | ||
| table: { | ||
| borderCollapse: "collapse", | ||
| width: "100%" | ||
| }, | ||
| tableHeader: { | ||
| textAlign: "left", | ||
| padding: "8px", | ||
| border: "1px solid #ccc", | ||
| background: "#B9B9B9", | ||
| color: "#00000066" | ||
| }, | ||
| tableCell: { | ||
| padding: "8px", | ||
| border: "1px solid #ccc" | ||
| }, | ||
| select: { | ||
| width: "100%", | ||
| padding: "6px 8px", | ||
| borderRadius: "4px", | ||
| outline: "none", | ||
| boxShadow: "none", | ||
| appearance: "none", | ||
| WebkitAppearance: "none", | ||
| MozAppearance: "none", | ||
| backgroundColor: "white", | ||
| fontSize: "14px", | ||
| fontFamily: "inherit", | ||
| cursor: "pointer", | ||
| }, | ||
| addMoreLink: { | ||
| color: "purple", | ||
| textDecoration: "underline", | ||
| fontSize: "0.9rem" | ||
| }, | ||
| checkboxContainer: { | ||
| display: "flex", | ||
| flexWrap: "wrap", | ||
| gap: "1rem", | ||
| marginTop: "1rem", | ||
| marginBottom:"1rem" | ||
| }, | ||
| buttonContainer: { | ||
| marginTop: "2rem", | ||
| display: "flex", | ||
| justifyContent: "center", | ||
| gap: "2rem" | ||
| }, | ||
| successModal: { | ||
| border: "1px solid #ddd", | ||
| borderRadius: "8px", | ||
| padding: "2rem", | ||
| marginTop: "2rem", | ||
| textAlign: "center", | ||
| backgroundColor: "#fff", | ||
| boxShadow: "0px 2px 8px rgba(0, 0, 0, 0.1)", | ||
| maxWidth: "400px", | ||
| marginLeft: "auto", | ||
| marginRight: "auto", | ||
| }, | ||
| successIcon: { | ||
| width: "50px", | ||
| height: "50px", | ||
| borderRadius: "50%", | ||
| backgroundColor: "#000", | ||
| border: "3px solid green", | ||
| margin: "0 auto", | ||
| display: "flex", | ||
| alignItems: "center", | ||
| justifyContent: "center", | ||
| }, | ||
| successButton: { | ||
| marginTop: "1rem", | ||
| padding: "0.5rem 1.5rem", | ||
| backgroundColor: "#6A1B9A", | ||
| color: "white", | ||
| border: "none", | ||
| borderRadius: "5px", | ||
| cursor: "pointer" | ||
| }, | ||
| nameInputContainer: { | ||
| display: "flex", | ||
| gap: "0.5rem", | ||
| alignItems: "center" | ||
| }, | ||
| dropdown30: { | ||
| width: "30%", | ||
| height: "35px", | ||
| borderWidth: "1px", | ||
| borderRadius: "6px", | ||
| border: "1px solid #D9D9D9" | ||
| }, | ||
| inputFullWidth: { | ||
| flexGrow: 1 | ||
| }, | ||
| checkboxMargin: { | ||
| marginTop: "auto", | ||
|  | ||
| }, | ||
| checkboxLabel: { padding: "10px" }, | ||
| poppinsTextStyle: { | ||
| fontFamily: 'Poppins', | ||
| fontWeight: 500, | ||
| fontSize: '10px', | ||
| lineHeight: '24px', | ||
| letterSpacing: '0%', | ||
| }, | ||
| addOwnerButton: { | ||
| backgroundColor: "#8A63CC", | ||
| color: "white", | ||
| border: "none", | ||
| borderRadius: "4px", | ||
| padding: "8px 16px", | ||
| margin: "10px 0", | ||
| cursor: "pointer" | ||
| }, | ||
| ownerSection: { | ||
| border: "1px solid #ddd", | ||
| borderRadius: "8px", | ||
| padding: "16px", | ||
| margin: "16px 0", | ||
| backgroundColor: "#f9f9f9" | ||
| }, | ||
| assessmentStyle: { | ||
| fontFamily: 'Poppins, sans-serif', | ||
| fontWeight: 500, | ||
| fontSize: '16px', | ||
| lineHeight: '100%', | ||
| letterSpacing: '0', | ||
| textDecoration: 'underline', | ||
| textDecorationStyle: 'solid', | ||
| textDecorationColor: '#4729A3', | ||
| textDecorationThickness: '1px', | ||
| textDecorationOffset: '2px', | ||
| color: '#4729A3', | ||
| marginBottom: '20px' | ||
| }, | ||
| docBox: { | ||
| width: '300px', | ||
| height: '33px', | ||
| position: 'relative', | ||
| borderWidth: '1px', | ||
| borderRadius: '6px', | ||
| background: 'var(--Color-bg-input, #FAFAFA)', | ||
| border: '1px solid #D9D9D9', | ||
| display: 'flex', | ||
| alignItems: 'center' | ||
| }, | ||
| textBox: { | ||
| width: "244.23472595214844px", | ||
| height: "35px", | ||
| borderWidth: "1px", | ||
| borderRadius: "6px", | ||
| border: "1px solid #D9D9D9" | ||
| }, | ||
| widthInput: { | ||
| width: "100%", | ||
| height: "35px", | ||
| borderWidth: "1px", | ||
| borderRadius: "6px", | ||
| border: "1px solid #D9D9D9" | ||
|  | ||
| }, | ||
| widthInput300: { | ||
| width: "32%", | ||
| height: "35px", | ||
| borderWidth: "1px", | ||
| borderRadius: "6px", | ||
| border: "1px solid #D9D9D9" | ||
|  | ||
| }, | ||
| widthInputs: { | ||
| width: "32%", | ||
| height: "72px", | ||
| borderWidth: "1px", | ||
| borderRadius: "6px", | ||
| border: "1px solid #D9D9D9", | ||
| padding:"10px" | ||
| } | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Consider organizing styles for better maintainability.
The current organization mixes component-specific styles with generic patterns. Consider grouping related styles and using consistent naming conventions.
Potential improvements:
- Group styles by component type (buttons, inputs, tables, etc.)
- Use consistent naming patterns (e.g., prefix with component name)
- Consider extracting common patterns into reusable style functions
- Add comments to clarify the purpose of complex style objects
Example structure:
export default {
  // Layout containers
  card: { maxWidth: "none" },
  formSection: { display: "flex", flexWrap: "wrap", gap: "1rem" },
  
  // Typography
  titleDiv: { color: "#8A63CC", fontWeight: "bold", fontSize: "16px" },
  poppinsLabel: { fontFamily: 'Poppins, sans-serif', /* ... */ },
  
  // Form elements
  textBox: { /* ... */ },
  dropdown30: { /* ... */ },
  
  // Tables
  table: { /* ... */ },
  tableHeader: { /* ... */ },
  // ...
};🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/IndexStyle.js
between lines 24 and 221, the styles are currently mixed without clear grouping
or consistent naming, which reduces maintainability. Refactor by grouping styles
into logical categories such as layout containers, typography, form elements,
tables, and buttons. Use consistent naming conventions with clear prefixes
related to their component or purpose. Extract any repeated style patterns into
reusable style functions or constants. Add comments above each group to clarify
their purpose for easier navigation and future updates.
| div: { | ||
| color: "#8A63CC", | ||
| fontWeight: "bold", | ||
| fontSize: "16px" | ||
| }, | ||
| mandatory: { | ||
| color: "red" | ||
| }, | ||
| attachmentsHeader: { | ||
| color: "#3F0071", | ||
| fontWeight: "bold", | ||
| textDecoration: "underline", | ||
| marginTop: "1rem", | ||
| marginBottom: "0.5rem" | ||
| }, | ||
| div: { | ||
| display: "flex", | ||
| gap: "1rem", | ||
| alignItems: "center", | ||
| marginBottom: "1rem" | ||
| }, | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix duplicate object key: div property is defined twice.
The div key appears twice in the style object (lines 3-7 and 18-23), causing the first definition to be overwritten. This is a critical issue that needs immediate attention.
export default {
  card: { maxWidth: "none" },
-  div: {
+  titleDiv: {
    color: "#8A63CC",
    fontWeight: "bold",
    fontSize: "16px"
  },
  mandatory: {
    color: "red"
  },
  attachmentsHeader: {
    color: "#3F0071",
    fontWeight: "bold",
    textDecoration: "underline",
    marginTop: "1rem",
    marginBottom: "0.5rem"
  },
-  div: {
+  containerDiv: {
    display: "flex",
    gap: "1rem",
    alignItems: "center",
    marginBottom: "1rem"
  },📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| div: { | |
| color: "#8A63CC", | |
| fontWeight: "bold", | |
| fontSize: "16px" | |
| }, | |
| mandatory: { | |
| color: "red" | |
| }, | |
| attachmentsHeader: { | |
| color: "#3F0071", | |
| fontWeight: "bold", | |
| textDecoration: "underline", | |
| marginTop: "1rem", | |
| marginBottom: "0.5rem" | |
| }, | |
| div: { | |
| display: "flex", | |
| gap: "1rem", | |
| alignItems: "center", | |
| marginBottom: "1rem" | |
| }, | |
| export default { | |
| card: { maxWidth: "none" }, | |
| titleDiv: { | |
| color: "#8A63CC", | |
| fontWeight: "bold", | |
| fontSize: "16px" | |
| }, | |
| mandatory: { | |
| color: "red" | |
| }, | |
| attachmentsHeader: { | |
| color: "#3F0071", | |
| fontWeight: "bold", | |
| textDecoration: "underline", | |
| marginTop: "1rem", | |
| marginBottom: "0.5rem" | |
| }, | |
| containerDiv: { | |
| display: "flex", | |
| gap: "1rem", | |
| alignItems: "center", | |
| marginBottom: "1rem" | |
| } | |
| }; | 
🧰 Tools
🪛 Biome (1.9.4)
[error] 3-7: This property value named div is later overwritten by an object member with the same name.
Overwritten with this value.
If an object property with the same name is defined multiple times (except when combining a getter with a setter), only the last definition makes it into the object and previous definitions are ignored.
Unsafe fix: Remove this property value named div
(lint/suspicious/noDuplicateObjectKeys)
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/IndexStyle.js
between lines 3 and 23, the style object has duplicate keys named 'div', which
causes the first 'div' style to be overwritten by the second. To fix this, merge
the properties of both 'div' objects into a single 'div' key, combining all
style attributes without duplication.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Review continued from previous batch...
| import PTSelectGeolocation from "./pageComponents/PTSelectGeolocation"; | ||
| import PTSelectStreet from "./pageComponents/PTSelectStreet"; | ||
| import PTSelectPincode from "./pageComponents/PTSelectPincode"; | ||
| // import PTSelectAssessmentYear from "./pageComponents/PTSelectAssessmentYear"; | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Clean up commented import if no longer needed.
The commented import for PTSelectAssessmentYear should be removed if it's no longer needed, since the component is imported again on line 96.
-// import PTSelectAssessmentYear from "./pageComponents/PTSelectAssessmentYear";📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| // import PTSelectAssessmentYear from "./pageComponents/PTSelectAssessmentYear"; | 
🤖 Prompt for AI Agents
In frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/Module.js at
line 25, remove the commented out import statement for PTSelectAssessmentYear
since it is no longer needed and is already imported later on line 96. This will
clean up the code and avoid confusion.
| const PropertyForm = () => { | ||
| return ( | ||
| <Card> | ||
| <button style={styles.downloadBtn}>⬇ Download</button> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add explicit button type attribute.
The download button should have an explicit type attribute to prevent unintended form submission.
-<button style={styles.downloadBtn}>⬇ Download</button>
+<button type="button" style={styles.downloadBtn}>⬇ Download</button>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <button style={styles.downloadBtn}>⬇ Download</button> | |
| <button type="button" style={styles.downloadBtn}>⬇ Download</button> | 
🧰 Tools
🪛 Biome (1.9.4)
[error] 159-159: Provide an explicit type prop for the button element.
The default type of a button is submit, which causes the submission of a form when placed inside a form element. This is likely not the behaviour that you want inside a React application.
Allowed button types are: submit, button or reset
(lint/a11y/useButtonType)
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PreviewDemand.js
at line 159, the download button lacks an explicit type attribute, which can
cause it to submit a form unintentionally. Add the attribute type="button" to
the button element to explicitly define its behavior and prevent accidental form
submission.
| <div style={{ marginBottom: "20px" }}></div> | ||
| <InputFieldNew label="Father name" value="Mr. pradeep" /> | ||
| <div style={{ marginBottom: "20px" }}></div> | ||
| <InputFieldNew label="Address" value="Adarsh nagar, zone 45" /> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Use self-closing JSX elements.
Empty div elements should be self-closing for better readability and consistency.
-<div style={{ marginBottom: "20px" }}></div>
+<div style={{ marginBottom: "20px" }} />Apply the same fix to line 174.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <div style={{ marginBottom: "20px" }}></div> | |
| <InputFieldNew label="Father name" value="Mr. pradeep" /> | |
| <div style={{ marginBottom: "20px" }}></div> | |
| <InputFieldNew label="Address" value="Adarsh nagar, zone 45" /> | |
| <div style={{ marginBottom: "20px" }} /> | |
| <InputFieldNew label="Father name" value="Mr. pradeep" /> | |
| <div style={{ marginBottom: "20px" }} /> | |
| <InputFieldNew label="Address" value="Adarsh nagar, zone 45" /> | 
🧰 Tools
🪛 Biome (1.9.4)
[error] 172-173: JSX elements without children should be marked as self-closing. In JSX, it is valid for any element to be self-closing.
Unsafe fix: Use a SelfClosingElement instead
(lint/style/useSelfClosingElements)
[error] 174-175: JSX elements without children should be marked as self-closing. In JSX, it is valid for any element to be self-closing.
Unsafe fix: Use a SelfClosingElement instead
(lint/style/useSelfClosingElements)
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PreviewDemand.js
at lines 172 to 175, the empty div elements used for spacing are not
self-closing. Change these empty div tags to self-closing tags to improve
readability and maintain JSX consistency.
| const PropertyForm = () => { | ||
| return ( | ||
| <Card> | ||
| <button style={styles.downloadBtn}>⬇ Download</button> | ||
|  | ||
| {/* Property Details */} | ||
| <div style={styles.row}> | ||
| <InputField label="Property id" value="123456" /> | ||
| <InputField label="Old Property id" value="567889" /> | ||
| <InputField label="Rate zone" value="5" /> | ||
| </div> | ||
|  | ||
| {/* Owner 1 */} | ||
| <div style={styles.sectionHeader}>Owner 1</div> | ||
| <div style={styles.rowOwnerName}> | ||
| <InputFieldNew label="Name" value="Mr. john" /> | ||
| <div style={{ marginBottom: "20px" }}></div> | ||
| <InputFieldNew label="Father name" value="Mr. pradeep" /> | ||
| <div style={{ marginBottom: "20px" }}></div> | ||
| <InputFieldNew label="Address" value="Adarsh nagar, zone 45" /> | ||
|  | ||
| </div> | ||
| <div style={styles.row}> | ||
| <InputField label="Zone" value="45" /> | ||
| <InputField label="Ward" value="3" /> | ||
| <InputField label="Colony" value="sikhar nagar" /> | ||
| </div> | ||
| <div style={styles.row}> | ||
| <InputField label="Pin" value="1104778" /> | ||
| <InputField label="Mobile no" value="9874XXXX" /> | ||
| <InputField label="Aadhaar" value="1234567XXXX" /> | ||
| </div> | ||
| <div style={styles.row}> | ||
| <InputField label="Email" value="[email protected]" /> | ||
| <InputField label="Exemption" value="4" /> | ||
| <InputField label="Date" value="22/05/2025" /> | ||
| </div> | ||
|  | ||
|  | ||
|  | ||
| {/* Table 1 */} | ||
| <div style={styles.sectionHeader}>अचल विवरण</div> | ||
| <table style={styles.table}> | ||
| <thead> | ||
| <tr> | ||
| {["वर्ष", "उपयोग प्रकार", "उपयोगकर्ता", "मंजिल", "निर्माण प्रकार", "क्षेत्र", "दर", "वार्षिक मूल्य(ALV)"].map((h) => ( | ||
| <th key={h} style={styles.th}>{h}</th> | ||
| ))} | ||
| </tr> | ||
| </thead> | ||
| <tbody> | ||
| {[2014, 2015].map((year) => ( | ||
| <tr key={year}> | ||
| <td style={styles.td}>{year}-15</td> | ||
| <td style={styles.td}>Residential</td> | ||
| <td style={styles.td}>Self occupied</td> | ||
| <td style={styles.td}>Ground Floor</td> | ||
| <td style={styles.td}>Open land</td> | ||
| <td style={styles.td}>1000</td> | ||
| <td style={styles.td}>9.0</td> | ||
| <td style={styles.td}>9000.0</td> | ||
| </tr> | ||
| ))} | ||
| </tbody> | ||
| </table> | ||
|  | ||
| {/* Table 2 */} | ||
| <div style={styles.sectionHeader}>Property tax summary</div> | ||
| <table style={styles.table}> | ||
| <thead> | ||
| <tr> | ||
| {["Year", "ALV", "TPV", "PTAX", "SAM TAX", "URBAN TAX", "EDU TAX", "JAL ABHI", "JAL NIKAS", "SEWA KAR", "TOTAL TAX", "REB", "PENALTY", "NET TAX"].map((h) => ( | ||
| <th key={h} style={styles.th}>{h}</th> | ||
| ))} | ||
| </tr> | ||
| </thead> | ||
| <tbody> | ||
| {[2014, 2015].map((year) => ( | ||
| <tr key={year}> | ||
| <td style={styles.td}>{year}-15</td> | ||
| <td style={styles.td}>9000.0</td> | ||
| <td style={styles.td}>9000.0</td> | ||
| <td style={styles.td}>270</td> | ||
| <td style={styles.td}>270</td> | ||
| <td style={styles.td}>90</td> | ||
| <td style={styles.td}>180</td> | ||
| <td style={styles.td}>27</td> | ||
| <td style={styles.td}>54</td> | ||
| <td style={styles.td}>10</td> | ||
| <td style={styles.td}>901</td> | ||
| <td style={styles.td}>0</td> | ||
| <td style={styles.td}>135</td> | ||
| <td style={styles.td}>1036</td> | ||
| </tr> | ||
| ))} | ||
| <tr> | ||
| <td colSpan={13} style={{ ...styles.td, fontWeight: "bold" }}>TOTAL</td> | ||
| <td style={styles.td}>1036</td> | ||
| </tr> | ||
| </tbody> | ||
| </table> | ||
| <button style={styles.confirmBtn}>Confirm</button> | ||
| </Card> | ||
| ); | ||
| }; | ||
|  | ||
| export default PropertyForm; | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Replace hardcoded data with props for reusability.
The component uses hardcoded property and tax data, making it inflexible for different properties. Consider accepting data as props.
-const PropertyForm = () => {
+const PropertyForm = ({ propertyData, ownerData, assessmentData, taxSummary }) => {Then replace hardcoded values with prop data:
-<InputField label="Property id" value="123456" />
+<InputField label="Property id" value={propertyData?.id} />📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| const PropertyForm = () => { | |
| return ( | |
| <Card> | |
| <button style={styles.downloadBtn}>⬇ Download</button> | |
| {/* Property Details */} | |
| <div style={styles.row}> | |
| <InputField label="Property id" value="123456" /> | |
| <InputField label="Old Property id" value="567889" /> | |
| <InputField label="Rate zone" value="5" /> | |
| </div> | |
| {/* Owner 1 */} | |
| <div style={styles.sectionHeader}>Owner 1</div> | |
| <div style={styles.rowOwnerName}> | |
| <InputFieldNew label="Name" value="Mr. john" /> | |
| <div style={{ marginBottom: "20px" }}></div> | |
| <InputFieldNew label="Father name" value="Mr. pradeep" /> | |
| <div style={{ marginBottom: "20px" }}></div> | |
| <InputFieldNew label="Address" value="Adarsh nagar, zone 45" /> | |
| </div> | |
| <div style={styles.row}> | |
| <InputField label="Zone" value="45" /> | |
| <InputField label="Ward" value="3" /> | |
| <InputField label="Colony" value="sikhar nagar" /> | |
| </div> | |
| <div style={styles.row}> | |
| <InputField label="Pin" value="1104778" /> | |
| <InputField label="Mobile no" value="9874XXXX" /> | |
| <InputField label="Aadhaar" value="1234567XXXX" /> | |
| </div> | |
| <div style={styles.row}> | |
| <InputField label="Email" value="[email protected]" /> | |
| <InputField label="Exemption" value="4" /> | |
| <InputField label="Date" value="22/05/2025" /> | |
| </div> | |
| {/* Table 1 */} | |
| <div style={styles.sectionHeader}>अचल विवरण</div> | |
| <table style={styles.table}> | |
| <thead> | |
| <tr> | |
| {["वर्ष", "उपयोग प्रकार", "उपयोगकर्ता", "मंजिल", "निर्माण प्रकार", "क्षेत्र", "दर", "वार्षिक मूल्य(ALV)"].map((h) => ( | |
| <th key={h} style={styles.th}>{h}</th> | |
| ))} | |
| </tr> | |
| </thead> | |
| <tbody> | |
| {[2014, 2015].map((year) => ( | |
| <tr key={year}> | |
| <td style={styles.td}>{year}-15</td> | |
| <td style={styles.td}>Residential</td> | |
| <td style={styles.td}>Self occupied</td> | |
| <td style={styles.td}>Ground Floor</td> | |
| <td style={styles.td}>Open land</td> | |
| <td style={styles.td}>1000</td> | |
| <td style={styles.td}>9.0</td> | |
| <td style={styles.td}>9000.0</td> | |
| </tr> | |
| ))} | |
| </tbody> | |
| </table> | |
| {/* Table 2 */} | |
| <div style={styles.sectionHeader}>Property tax summary</div> | |
| <table style={styles.table}> | |
| <thead> | |
| <tr> | |
| {["Year", "ALV", "TPV", "PTAX", "SAM TAX", "URBAN TAX", "EDU TAX", "JAL ABHI", "JAL NIKAS", "SEWA KAR", "TOTAL TAX", "REB", "PENALTY", "NET TAX"].map((h) => ( | |
| <th key={h} style={styles.th}>{h}</th> | |
| ))} | |
| </tr> | |
| </thead> | |
| <tbody> | |
| {[2014, 2015].map((year) => ( | |
| <tr key={year}> | |
| <td style={styles.td}>{year}-15</td> | |
| <td style={styles.td}>9000.0</td> | |
| <td style={styles.td}>9000.0</td> | |
| <td style={styles.td}>270</td> | |
| <td style={styles.td}>270</td> | |
| <td style={styles.td}>90</td> | |
| <td style={styles.td}>180</td> | |
| <td style={styles.td}>27</td> | |
| <td style={styles.td}>54</td> | |
| <td style={styles.td}>10</td> | |
| <td style={styles.td}>901</td> | |
| <td style={styles.td}>0</td> | |
| <td style={styles.td}>135</td> | |
| <td style={styles.td}>1036</td> | |
| </tr> | |
| ))} | |
| <tr> | |
| <td colSpan={13} style={{ ...styles.td, fontWeight: "bold" }}>TOTAL</td> | |
| <td style={styles.td}>1036</td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| <button style={styles.confirmBtn}>Confirm</button> | |
| </Card> | |
| ); | |
| }; | |
| export default PropertyForm; | |
| const PropertyForm = ({ propertyData, ownerData, assessmentData, taxSummary }) => { | |
| return ( | |
| <Card> | |
| <button style={styles.downloadBtn}>⬇ Download</button> | |
| {/* Property Details */} | |
| <div style={styles.row}> | |
| <InputField label="Property id" value={propertyData?.id} /> | |
| <InputField label="Old Property id" value="567889" /> | |
| <InputField label="Rate zone" value="5" /> | |
| </div> | |
| // … rest of component unchanged … | |
| </Card> | |
| ); | |
| }; | 
🧰 Tools
🪛 Biome (1.9.4)
[error] 172-173: JSX elements without children should be marked as self-closing. In JSX, it is valid for any element to be self-closing.
Unsafe fix: Use a SelfClosingElement instead
(lint/style/useSelfClosingElements)
[error] 174-175: JSX elements without children should be marked as self-closing. In JSX, it is valid for any element to be self-closing.
Unsafe fix: Use a SelfClosingElement instead
(lint/style/useSelfClosingElements)
[error] 159-159: Provide an explicit type prop for the button element.
The default type of a button is submit, which causes the submission of a form when placed inside a form element. This is likely not the behaviour that you want inside a React application.
Allowed button types are: submit, button or reset
(lint/a11y/useButtonType)
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PreviewDemand.js
between lines 156 and 262, the PropertyForm component uses hardcoded property
and tax data, limiting reusability. Modify the component to accept property
details and tax data as props, then replace all hardcoded values and arrays with
these props to make the component flexible for different inputs.
| </tr> | ||
| </tbody> | ||
| </table> | ||
| <button style={styles.confirmBtn}>Confirm</button> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Add explicit button type and click handler.
The confirm button should have proper type and functionality.
-<button style={styles.confirmBtn}>Confirm</button>
+<button type="button" style={styles.confirmBtn} onClick={onConfirm}>
+  Confirm
+</button>Add onConfirm prop to handle the confirmation action.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <button style={styles.confirmBtn}>Confirm</button> | |
| <button type="button" style={styles.confirmBtn} onClick={onConfirm}> | |
| Confirm | |
| </button> | 
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PreviewDemand.js
at line 257, the Confirm button lacks an explicit type and a click handler. Add
type="button" to the button element to specify its behavior and add an onClick
handler that calls the onConfirm prop function passed to the component to handle
the confirmation action properly.
| const tenantId = Digit.ULBService.getCurrentTenantId(); | ||
| const response = await Digit.LocationService.getRevenueLocalities(tenantId); | ||
|  | ||
| console.log("🔍 Raw TenantBoundary Response:", response?.TenantBoundary); | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove debugging console.log statements
Remove all console.log statements before deploying to production. Consider using a proper logging library if logging is required.
-console.log("🔍 Raw TenantBoundary Response:", response?.TenantBoundary);
 
 const cityBoundary = response?.TenantBoundary?.[0]?.boundary?.[0];
 if (cityBoundary?.children?.length > 0) {
   setBoundaryData(cityBoundary);
   
   const zoneOptions = cityBoundary.children.map((zone) => ({
     code: zone.code,
     name: zone.name || zone.code,
   }));
   setZones(zoneOptions);
-  console.log("✅ Zones Loaded:", zoneOptions);
 } else {
-  console.warn("❌ No boundary children found.");
 }Also remove console.log statements at lines 41, 56, and 73.
Also applies to: 36-39, 41-41, 56-56, 73-73
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/AddressSection.js
at lines 25, 36-39, 41, 56, and 73, remove all console.log statements used for
debugging. Replace them with a proper logging mechanism if necessary, but ensure
no console.log calls remain before production deployment.
| @@ -0,0 +1,187 @@ | |||
|  | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Remove empty line at the beginning
Remove the unnecessary empty line at the start of the file.
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/AddressSection.js
at line 1, remove the empty line at the very beginning of the file to eliminate
unnecessary whitespace.
| // import { BackButton, WhatsappIcon, Card, CitizenHomeCard, CitizenInfoLabel, PrivateRoute } from "@egovernments/digit-ui-react-components"; | ||
| // import React from "react"; | ||
| // import { useTranslation } from "react-i18next"; | ||
| // import { Route, Switch, useRouteMatch, useHistory, Link } from "react-router-dom"; | ||
| // import ErrorBoundary from "../../components/ErrorBoundaries"; | ||
| // import { AppHome, processLinkData } from "../../components/Home"; | ||
| // import TopBarSideBar from "../../components/TopBarSideBar"; | ||
| // import StaticCitizenSideBar from "../../components/TopBarSideBar/SideBar/StaticCitizenSideBar"; | ||
| // import CitizenHome from "./Home"; | ||
| // import LanguageSelection from "./Home/LanguageSelection"; | ||
| // import LocationSelection from "./Home/LocationSelection"; | ||
| // import Login from "./Login"; | ||
| // import UserProfile from "./Home/UserProfile"; | ||
| // import ErrorComponent from "../../components/ErrorComponent"; | ||
| // import FAQsSection from "./FAQs/FAQs"; | ||
| // import HowItWorks from "./HowItWorks/howItWorks"; | ||
| // import StaticDynamicCard from "./StaticDynamicComponent/StaticDynamicCard"; | ||
| // import AcknowledgementCF from "../../components/AcknowledgementCF"; | ||
| // import CitizenFeedback from "../../components/CitizenFeedback"; | ||
| // import Search from "./SearchApp"; | ||
| // const sidebarHiddenFor = [ | ||
| // "digit-ui/citizen/register/name", | ||
| // "/digit-ui/citizen/select-language", | ||
| // "/digit-ui/citizen/select-location", | ||
| // "/digit-ui/citizen/login", | ||
| // "/digit-ui/citizen/register/otp", | ||
| // ]; | ||
|  | ||
| // const getTenants = (codes, tenants) => { | ||
| // return tenants.filter((tenant) => codes.map((item) => item.code).includes(tenant.code)); | ||
| // }; | ||
|  | ||
| // const Home = ({ | ||
| // stateInfo, | ||
| // userDetails, | ||
| // CITIZEN, | ||
| // cityDetails, | ||
| // mobileView, | ||
| // handleUserDropdownSelection, | ||
| // logoUrl, | ||
| // DSO, | ||
| // stateCode, | ||
| // modules, | ||
| // appTenants, | ||
| // sourceUrl, | ||
| // pathname, | ||
| // initData, | ||
| // }) => { | ||
| // const { isLoading: islinkDataLoading, data: linkData, isFetched: isLinkDataFetched } = Digit.Hooks.useCustomMDMS( | ||
| // Digit.ULBService.getStateId(), | ||
| // "ACCESSCONTROL-ACTIONS-TEST", | ||
| // [ | ||
| // { | ||
| // name: "actions-test", | ||
| // filter: "[?(@.url == 'digit-ui-card')]", | ||
| // }, | ||
| // ], | ||
| // { | ||
| // select: (data) => { | ||
| // const formattedData = data?.["ACCESSCONTROL-ACTIONS-TEST"]?.["actions-test"] | ||
| // ?.filter((el) => el.enabled === true) | ||
| // .reduce((a, b) => { | ||
| // a[b.parentModule] = a[b.parentModule]?.length > 0 ? [b, ...a[b.parentModule]] : [b]; | ||
| // return a; | ||
| // }, {}); | ||
| // return formattedData; | ||
| // }, | ||
| // } | ||
| // ); | ||
|  | ||
| // const classname = Digit.Hooks.fsm.useRouteSubscription(pathname); | ||
| // const { t } = useTranslation(); | ||
| // const { path } = useRouteMatch(); | ||
| // const history = useHistory(); | ||
| // const handleClickOnWhatsApp = (obj) => { | ||
| // window.open(obj); | ||
| // }; | ||
|  | ||
| // const hideSidebar = sidebarHiddenFor.some((e) => window.location.href.includes(e)); | ||
| // const appRoutes = modules?.map(({ code, tenants }, index) => { | ||
| // const Module = Digit.ComponentRegistryService.getComponent(`${code}Module`); | ||
| // return Module ? ( | ||
| // <Route key={index} path={`${path}/${code.toLowerCase()}`}> | ||
| // <Module stateCode={stateCode} moduleCode={code} userType="citizen" tenants={getTenants(tenants, appTenants)} /> | ||
| // </Route> | ||
| // ) : null; | ||
| // }); | ||
|  | ||
| // const ModuleLevelLinkHomePages = modules?.map(({ code, bannerImage }, index) => { | ||
| // let Links = Digit.ComponentRegistryService.getComponent(`${code}Links`) || (() => <React.Fragment />); | ||
| // let mdmsDataObj = isLinkDataFetched ? processLinkData(linkData, code, t) : undefined; | ||
|  | ||
| // //if (mdmsDataObj?.header === "ACTION_TEST_WS") { | ||
| // mdmsDataObj?.links && | ||
| // mdmsDataObj?.links.sort((a, b) => { | ||
| // return a.orderNumber - b.orderNumber; | ||
| // }); | ||
| // // } | ||
| // return ( | ||
| // <React.Fragment> | ||
| // <Route key={index} path={`${path}/${code.toLowerCase()}-home`}> | ||
| // <div className="moduleLinkHomePage"> | ||
| // <img src={bannerImage || stateInfo?.bannerUrl} alt="noimagefound" /> | ||
| // <BackButton className="moduleLinkHomePageBackButton" /> | ||
| // <h1>{t("MODULE_" + code.toUpperCase())}</h1> | ||
| // <div className="moduleLinkHomePageModuleLinks"> | ||
| // {mdmsDataObj && ( | ||
| // <CitizenHomeCard | ||
| // header={t(mdmsDataObj?.header)} | ||
| // links={mdmsDataObj?.links} | ||
| // Icon={() => <span />} | ||
| // Info={ | ||
| // code === "OBPS" | ||
| // ? () => ( | ||
| // <CitizenInfoLabel | ||
| // style={{ margin: "0px", padding: "10px" }} | ||
| // info={t("CS_FILE_APPLICATION_INFO_LABEL")} | ||
| // text={t(`BPA_CITIZEN_HOME_STAKEHOLDER_INCLUDES_INFO_LABEL`)} | ||
| // /> | ||
| // ) | ||
| // : null | ||
| // } | ||
| // isInfo={code === "OBPS" ? true : false} | ||
| // /> | ||
| // )} | ||
| // {/* <Links key={index} matchPath={`/digit-ui/citizen/${code.toLowerCase()}`} userType={"citizen"} /> */} | ||
| // </div> | ||
| // <StaticDynamicCard moduleCode={code?.toUpperCase()} /> | ||
| // </div> | ||
| // </Route> | ||
| // <Route key={"faq" + index} path={`${path}/${code.toLowerCase()}-faq`}> | ||
| // <FAQsSection module={code?.toUpperCase()} /> | ||
| // </Route> | ||
| // <Route key={"hiw" + index} path={`${path}/${code.toLowerCase()}-how-it-works`}> | ||
| // <HowItWorks module={code?.toUpperCase()} /> | ||
| // </Route> | ||
| // </React.Fragment> | ||
| // ); | ||
| // }); | ||
|  | ||
| // return ( | ||
| // <div className={classname}> | ||
| // <TopBarSideBar | ||
| // t={t} | ||
| // stateInfo={stateInfo} | ||
| // userDetails={userDetails} | ||
| // CITIZEN={CITIZEN} | ||
| // cityDetails={cityDetails} | ||
| // mobileView={mobileView} | ||
| // handleUserDropdownSelection={handleUserDropdownSelection} | ||
| // logoUrl={logoUrl} | ||
| // showSidebar={true} | ||
| // linkData={linkData} | ||
| // islinkDataLoading={islinkDataLoading} | ||
| // /> | ||
|  | ||
| // <div className={`main center-container citizen-home-container mb-25`}> | ||
| // {hideSidebar ? null : ( | ||
| // <div className="SideBarStatic"> | ||
| // <StaticCitizenSideBar linkData={linkData} islinkDataLoading={islinkDataLoading} /> | ||
| // </div> | ||
| // )} | ||
|  | ||
| // <Switch> | ||
| // <Route exact path={path}> | ||
| // <CitizenHome /> | ||
| // </Route> | ||
|  | ||
| // <PrivateRoute path={`${path}/feedback`} component={CitizenFeedback}></PrivateRoute> | ||
| // <PrivateRoute path={`${path}/feedback-acknowledgement`} component={AcknowledgementCF}></PrivateRoute> | ||
|  | ||
| // <Route exact path={`${path}/select-language`}> | ||
| // <LanguageSelection /> | ||
| // </Route> | ||
|  | ||
| // <Route exact path={`${path}/select-location`}> | ||
| // <LocationSelection /> | ||
| // </Route> | ||
| // <Route path={`${path}/error`}> | ||
| // <ErrorComponent | ||
| // initData={initData} | ||
| // goToHome={() => { | ||
| // history.push("/digit-ui/citizen"); | ||
| // }} | ||
| // /> | ||
| // </Route> | ||
| // <Route path={`${path}/all-services`}> | ||
| // <AppHome | ||
| // userType="citizen" | ||
| // modules={modules} | ||
| // getCitizenMenu={linkData} | ||
| // fetchedCitizen={isLinkDataFetched} | ||
| // isLoading={islinkDataLoading} | ||
| // /> | ||
| // </Route> | ||
|  | ||
| // <Route path={`${path}/login`}> | ||
| // <Login stateCode={stateCode} /> | ||
| // </Route> | ||
|  | ||
| // <Route path={`${path}/register`}> | ||
| // <Login stateCode={stateCode} isUserRegistered={false} /> | ||
| // </Route> | ||
|  | ||
| // <Route path={`${path}/user/profile`}> | ||
| // <UserProfile stateCode={stateCode} userType={"citizen"} cityDetails={cityDetails} /> | ||
| // </Route> | ||
|  | ||
| // <Route path={`${path}/Audit`}> | ||
| // <Search /> | ||
| // </Route> | ||
| // <ErrorBoundary initData={initData}> | ||
| // {appRoutes} | ||
| // {ModuleLevelLinkHomePages} | ||
| // </ErrorBoundary> | ||
| // </Switch> | ||
| // </div> | ||
| // <div className="citizen-home-footer" style={window.location.href.includes("citizen/obps") ? { zIndex: "-1" } : {}}> | ||
| // <img | ||
| // alt="Powered by DIGIT" | ||
| // src={window?.globalConfigs?.getConfig?.("DIGIT_FOOTER")} | ||
| // style={{ height: "1.2em", cursor: "pointer" }} | ||
| // onClick={() => { | ||
| // window.open(window?.globalConfigs?.getConfig?.("DIGIT_HOME_URL"), "_blank").focus(); | ||
| // }} | ||
| // /> | ||
| // </div> | ||
| // </div> | ||
| // ); | ||
| // }; | ||
|  | ||
| // export default Home; | ||
|  | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove large block of commented code
Delete the entire commented-out code block (lines 1-233). If this code is needed for reference, it should be preserved in version control history rather than as comments.
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/citizen/index.js
from lines 1 to 233, there is a large block of commented-out code that should be
removed entirely. Delete all these commented lines to clean up the file, as this
code can be retrieved from version control if needed later.
| <a href="#" style={linkStyle}>MoRTH</a> | ||
| </div> | ||
| <div style={columnStyle}> | ||
| <div style={titleStyle}>Recources</div> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Fix typo: "Recources" should be "Resources"
-<div style={titleStyle}>Recources</div>
+<div style={titleStyle}>Resources</div>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <div style={titleStyle}>Recources</div> | |
| <div style={titleStyle}>Resources</div> | 
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/citizen/index.js
at line 605, correct the typo in the div text from "Recources" to "Resources" to
fix the spelling mistake.
| <a href="#" style={linkStyle}>Privacy Policy</a> | ||
| <a href="#" style={linkStyle}>Hyperlink Policy</a> | ||
| <a href="#" style={linkStyle}>Website Policies</a> | ||
| <a href="#" style={linkStyle}>Content Policies</a> | ||
| <a href="#" style={linkStyle}>Contingency Plan</a> | ||
| </div> | ||
| <div style={columnStyle}> | ||
| <div style={titleStyle}>About</div> | ||
| <a href="#" style={linkStyle}>About Us</a> | ||
| <a href="#" style={linkStyle}>Sitemap</a> | ||
| <a href="#" style={linkStyle}>Terms of Use</a> | ||
| <a href="#" style={linkStyle}>MoRTH</a> | ||
| </div> | ||
| <div style={columnStyle}> | ||
| <div style={titleStyle}>Recources</div> | ||
| <a href="#" style={linkStyle}>Fees and User Charges</a> | ||
| <a href="#" style={linkStyle}>Act, Rule and Policies</a> | ||
| <a href="#" style={linkStyle}>Permit Fees and Period</a> | ||
| <a href="#" style={linkStyle}>Manual</a> | ||
| <a href="#" style={linkStyle}>Homologation</a> | ||
| </div> | ||
| <div style={columnStyle}> | ||
| <div style={titleStyle}>Need Help</div> | ||
| <a href="#" style={linkStyle}>Contact Us</a> | ||
| <a href="#" style={linkStyle}>FAQ's</a> | ||
| <a href="#" style={linkStyle}>Raise a Concern</a> | ||
| <a href="#" style={linkStyle}>Calendar</a> | ||
| <a href="#" style={linkStyle}>Web Information Manager</a> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Replace placeholder URLs and image sources
The footer contains placeholder href="#" links and placeholder image sources that need to be replaced with actual URLs.
The following placeholders need to be replaced:
- All href="#" links (lines 591-618)
- Social media icon image sources (lines 624-628)
Would you like me to help create a configuration object for these links and image URLs?
Also applies to: 624-628
🏁 Script executed:
#!/bin/bash
# Search for placeholder href attributes
rg --context 2 'href="#"' -n frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/citizen/index.js
# Extract lines around the social media icons to spot placeholder image sources
sed -n '620,650p' frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/citizen/index.jsLength of output: 2471
Replace placeholder footer links and social icons
All href="#" links and social media image sources are currently placeholders and need real URLs:
- 
Footer links (lines 591–618): 
 • Privacy Policy, Hyperlink Policy, Website Policies, Content Policies, Contingency Plan
 • About Us, Sitemap, Terms of Use, MoRTH
 • Fees and User Charges, Act, Rule and Policies, Permit Fees and Period, Manual, Homologation
 • Contact Us, FAQ’s, Raise a Concern, Calendar, Web Information Manager
- 
Social icons (lines 623–628): 
 •facebook-icon-url,x-icon-url,instagram-icon-url,linkedin-icon-url,youtube-icon-url
Consider creating a single configuration object (e.g. footerLinks and socialLinks) in a dedicated module and rendering these via .map(). This will make it easier to maintain and update the URLs centrally.
🧰 Tools
🪛 Biome (1.9.4)
[error] 591-591: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 592-592: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 593-593: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 594-594: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 595-595: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 599-599: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 600-600: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 601-601: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 602-602: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 606-606: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 607-607: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 608-608: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 609-609: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 610-610: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 614-614: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 615-615: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 616-616: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 617-617: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
[error] 618-618: Provide a valid value for the attribute href.
The href attribute should be a valid a URL
Check this thorough explanation to better understand the context.
(lint/a11y/useValidAnchor)
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/citizen/index.js
around lines 591 to 618 and 623 to 628, all footer links and social media icon
URLs are placeholders using href="#" and dummy image sources. Replace these
placeholders with actual URLs for each link and icon. Refactor the code by
creating centralized configuration objects, such as footerLinks and socialLinks,
in a separate module, then render the links and icons dynamically using .map()
to improve maintainability and ease future updates.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Review continued from previous batch...
| <div style={serviceItemStyle} onClick={() => history.push("/digit-ui/citizen/pt/property/citizen-search")}>Search and Pay</div> | ||
| <div style={serviceItemStyle} onClick={() => history.push("/digit-ui/citizen/pt/property/new-application")}>Create Property</div> | ||
| <div style={serviceItemStyle} onClick={() => history.push("/digit-ui/citizen/pt/property/my-applications")} >My Applications</div> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add keyboard accessibility for interactive elements
The clickable divs need keyboard event handlers for accessibility. Consider using button elements or adding keyboard support.
-<div style={serviceItemStyle}  onClick={() => history.push("/digit-ui/citizen/pt/property/citizen-search")}>Search and Pay</div>
-<div style={serviceItemStyle}  onClick={() => history.push("/digit-ui/citizen/pt/property/new-application")}>Create Property</div>
-<div style={serviceItemStyle} onClick={() => history.push("/digit-ui/citizen/pt/property/my-applications")}  >My Applications</div>
+<button 
+  style={{...serviceItemStyle, background: 'none', border: 'none', textAlign: 'left'}}  
+  onClick={() => history.push("/digit-ui/citizen/pt/property/citizen-search")}
+>
+  Search and Pay
+</button>
+<button 
+  style={{...serviceItemStyle, background: 'none', border: 'none', textAlign: 'left'}}  
+  onClick={() => history.push("/digit-ui/citizen/pt/property/new-application")}
+>
+  Create Property
+</button>
+<button 
+  style={{...serviceItemStyle, background: 'none', border: 'none', textAlign: 'left'}} 
+  onClick={() => history.push("/digit-ui/citizen/pt/property/my-applications")}
+>
+  My Applications
+</button>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <div style={serviceItemStyle} onClick={() => history.push("/digit-ui/citizen/pt/property/citizen-search")}>Search and Pay</div> | |
| <div style={serviceItemStyle} onClick={() => history.push("/digit-ui/citizen/pt/property/new-application")}>Create Property</div> | |
| <div style={serviceItemStyle} onClick={() => history.push("/digit-ui/citizen/pt/property/my-applications")} >My Applications</div> | |
| <button | |
| style={{ ...serviceItemStyle, background: 'none', border: 'none', textAlign: 'left' }} | |
| onClick={() => history.push("/digit-ui/citizen/pt/property/citizen-search")} | |
| > | |
| Search and Pay | |
| </button> | |
| <button | |
| style={{ ...serviceItemStyle, background: 'none', border: 'none', textAlign: 'left' }} | |
| onClick={() => history.push("/digit-ui/citizen/pt/property/new-application")} | |
| > | |
| Create Property | |
| </button> | |
| <button | |
| style={{ ...serviceItemStyle, background: 'none', border: 'none', textAlign: 'left' }} | |
| onClick={() => history.push("/digit-ui/citizen/pt/property/my-applications")} | |
| > | |
| My Applications | |
| </button> | 
🧰 Tools
🪛 Biome (1.9.4)
[error] 452-452: Enforce to have the onClick mouse event with the onKeyUp, the onKeyDown, or the onKeyPress keyboard event.
Actions triggered using mouse events should have corresponding keyboard events to account for keyboard-only navigation.
(lint/a11y/useKeyWithClickEvents)
[error] 453-453: Enforce to have the onClick mouse event with the onKeyUp, the onKeyDown, or the onKeyPress keyboard event.
Actions triggered using mouse events should have corresponding keyboard events to account for keyboard-only navigation.
(lint/a11y/useKeyWithClickEvents)
[error] 454-454: Enforce to have the onClick mouse event with the onKeyUp, the onKeyDown, or the onKeyPress keyboard event.
Actions triggered using mouse events should have corresponding keyboard events to account for keyboard-only navigation.
(lint/a11y/useKeyWithClickEvents)
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/citizen/index.js
around lines 452 to 454, the clickable div elements lack keyboard accessibility,
which affects users who navigate via keyboard. Replace these divs with semantic
button elements or add keyboard event handlers such as onKeyDown to handle Enter
and Space keys, ensuring the elements are focusable and operable via keyboard
for improved accessibility.
| return ( | ||
| // http://localhost:3000/digit-ui/citizen/pt/property/citizen-search | ||
| // digit-ui/citizen/pt/property/my-applications | ||
| // /digit-ui/citizen/pt/property/new-application/info | ||
| <React.Fragment> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add missing key prop to React.Fragment
The React.Fragment inside the map function needs a key prop.
 return (
-  <React.Fragment>
+  <React.Fragment key={index}>
     <Route key={index} path={`${path}/${code.toLowerCase()}-home`}>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| return ( | |
| // http://localhost:3000/digit-ui/citizen/pt/property/citizen-search | |
| // digit-ui/citizen/pt/property/my-applications | |
| // /digit-ui/citizen/pt/property/new-application/info | |
| <React.Fragment> | |
| return ( | |
| // http://localhost:3000/digit-ui/citizen/pt/property/citizen-search | |
| // digit-ui/citizen/pt/property/my-applications | |
| // /digit-ui/citizen/pt/property/new-application/info | |
| <React.Fragment key={index}> | |
| <Route key={index} path={`${path}/${code.toLowerCase()}-home`}> | |
| {/* … */} | |
| </Route> | |
| </React.Fragment> | |
| ); | 
🧰 Tools
🪛 Biome (1.9.4)
[error] 424-424: Missing key property for this element in iterable.
The order of the items may change, and having a key can help React identify which item was moved.
Check the React documentation.
(lint/correctness/useJsxKeyInIterable)
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/citizen/index.js
around lines 420 to 424, the React.Fragment used inside a map function is
missing a key prop. Add a unique key prop to the React.Fragment element to
ensure proper reconciliation by React during rendering.
| // useEffect(() => { | ||
| // if (sameAsProperty) { | ||
| // const combined = `${propertyAddress?.doorNo || ""}, ${propertyAddress?.street || ""}, ${propertyAddress?.pincode || ""}`; | ||
| // setCorrespondenceAddress(combined); | ||
| // onSelect(config.key, { | ||
| // address: combined, | ||
| // sameAsProperty: true, | ||
| // }); | ||
| // } else { | ||
| // onSelect(config.key, { | ||
| // address: correspondenceAddress, | ||
| // sameAsProperty: false, | ||
| // }); | ||
| // } | ||
| // }, [sameAsProperty, propertyAddress]); | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Remove or implement commented useEffect logic
The commented useEffect suggests incomplete functionality for syncing correspondence address with property address. Either implement this feature properly or remove the commented code.
Would you like me to help implement the proper logic for syncing the correspondence address with the property address when the checkbox is checked?
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/CreateProperty/CorrespondenceAddressSection.js
between lines 16 and 30, the useEffect hook that syncs the correspondence
address with the property address when the sameAsProperty flag is true is
commented out and incomplete. To fix this, either fully implement this useEffect
to update the correspondence address state and call onSelect with the combined
address and sameAsProperty flag when sameAsProperty or propertyAddress changes,
or remove the commented code entirely if this syncing behavior is not needed.
| <div style={checkboxContainer}> | ||
| <input | ||
| type="checkbox" | ||
| checked={sameAsProperty} | ||
| onChange={handleCheckboxChange} | ||
| /> | ||
| <label>{t("Same as property address")}</label> | ||
| </div> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix label accessibility for checkbox
The label element should be properly associated with the checkbox input for accessibility.
 <div style={checkboxContainer}>
   <input
+    id="sameAsPropertyCheckbox"
     type="checkbox"
     checked={sameAsProperty}
     onChange={handleCheckboxChange}
   />
-  <label>{t("Same as property address")}</label>
+  <label htmlFor="sameAsPropertyCheckbox">{t("Same as property address")}</label>
 </div>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <div style={checkboxContainer}> | |
| <input | |
| type="checkbox" | |
| checked={sameAsProperty} | |
| onChange={handleCheckboxChange} | |
| /> | |
| <label>{t("Same as property address")}</label> | |
| </div> | |
| <div style={checkboxContainer}> | |
| <input | |
| id="sameAsPropertyCheckbox" | |
| type="checkbox" | |
| checked={sameAsProperty} | |
| onChange={handleCheckboxChange} | |
| /> | |
| <label htmlFor="sameAsPropertyCheckbox"> | |
| {t("Same as property address")} | |
| </label> | |
| </div> | 
🧰 Tools
🪛 Biome (1.9.4)
[error] 90-90: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/CreateProperty/CorrespondenceAddressSection.js
around lines 84 to 91, the label element is not properly associated with the
checkbox input, which affects accessibility. Fix this by adding an id attribute
to the input element and linking the label's htmlFor attribute to this id,
ensuring screen readers correctly associate the label with the checkbox.
| if (userType !== "employee") return null; | ||
|  | ||
| const styles = { | ||
|  | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Remove empty style properties.
The styles object contains empty properties that serve no purpose.
Remove these empty lines to clean up the code:
   const styles = {
-
     table: {
       borderCollapse: "collapse",
       width: "100%"
     },
     // ... other styles ...
     addMoreLink: {
       color: "purple",
       textDecoration: "underline",
       fontSize: "0.9rem"
     },
-
     assessmentStyle: {
       fontFamily: 'Poppins, sans-serif',
       // ... rest of the style ...
       marginBottom: '20px'
     },
-  
- 
- 
-
   };Also applies to: 50-50, 65-68
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/CreateProperty/PropertyDetailsTableSection.js
at lines 15, 50, and 65 to 68, there are empty style properties within the
styles object that should be removed. Locate these empty style declarations and
delete them to clean up the code and improve readability.
|  | ||
| useEffect(() => { | ||
| if (userType === "employee") { | ||
| const errorsPresent = !!Object.keys(localFormState.errors).lengtha; | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix typo in length property.
There's a typo that will cause a runtime error - lengtha should be length.
-      const errorsPresent = !!Object.keys(localFormState.errors).lengtha;
+      const errorsPresent = !!Object.keys(localFormState.errors).length;📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| const errorsPresent = !!Object.keys(localFormState.errors).lengtha; | |
| const errorsPresent = !!Object.keys(localFormState.errors).length; | 
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTSelectPropertyType.js
at line 125, fix the typo in the property name by changing `lengtha` to `length`
to correctly check the number of keys in localFormState.errors and avoid runtime
errors.
| const tableContainer = { | ||
| backgroundColor: "#fff", | ||
| borderRadius: "10px", | ||
| overflow: "hidden", | ||
| boxShadow: "0px 2px 6px rgba(0, 0, 0, 0.1)", | ||
| fontFamily: "Poppins, sans-serif", | ||
| fontSize: "14px", | ||
| }; | ||
|  | ||
| const tableStyle = { | ||
| width: "100%", | ||
| borderCollapse: "collapse", | ||
| }; | ||
|  | ||
| const thStyle = { | ||
| backgroundColor: "#4729A34D", | ||
| padding: "12px 16px", | ||
| textAlign: "left", | ||
| borderBottom: "1px solid #ddd", | ||
| width: "150px", | ||
| fontFamily: "Poppins, sans-serif", | ||
| fontWeight: 400, | ||
| fontSize: "14px", | ||
| lineHeight: "175%", | ||
| letterSpacing: "-0.01em", | ||
| verticalAlign: "middle", | ||
| color: "#282828", | ||
| }; | ||
|  | ||
| const tdStyle = { | ||
| padding: "14px 16px", | ||
| borderBottom: "1px solid #f0f0f0", | ||
| fontFamily: "Poppins, sans-serif", | ||
| fontWeight: 400, | ||
| fontSize: "14px", | ||
| lineHeight: "175%", | ||
| letterSpacing: "-0.01em", | ||
| verticalAlign: "middle", | ||
| color: "#282828", | ||
| }; | ||
|  | ||
| const statusStyle = { | ||
| color: "#BAD316", | ||
| fontWeight: "500", | ||
| }; | ||
|  | ||
| const buttonContainerStyle = { | ||
| display: "block", | ||
| gap: "8px", | ||
| }; | ||
|  | ||
| const buttonStyle = { | ||
| backgroundColor: "#686DE0", | ||
| color: "#fff", | ||
| border: "none", | ||
| borderRadius: "6px", | ||
| padding: "8px 12px", | ||
| fontSize: "12px", | ||
| cursor: "pointer", | ||
| margin: "4px 0", | ||
| width: "175px", | ||
| }; | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Consider extracting inline styles to a separate styles file or using CSS modules.
The extensive inline styles (lines 162-223) reduce maintainability and violate separation of concerns. Consider moving these to a dedicated styles file or using CSS-in-JS solutions.
Would you like me to help refactor these inline styles into a more maintainable structure using CSS modules or styled-components?
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/DesktopInbox.js
between lines 162 and 223, the inline style objects reduce maintainability and
violate separation of concerns. To fix this, extract these style definitions
into a separate CSS module file or convert them into styled-components. Then,
replace the inline style usage in the component with className references from
the CSS module or styled component wrappers to improve code organization and
maintainability.
| <th style={thStyle}>Type</th> | ||
| <th style={thStyle}>Status</th> | ||
| <th style={thStyle}>Property ID</th> | ||
| <th style={thStyle}></th> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Use self-closing element for empty JSX element.
-<th style={thStyle}></th>
+<th style={thStyle} />📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <th style={thStyle}></th> | |
| <th style={thStyle} /> | 
🧰 Tools
🪛 Biome (1.9.4)
[error] 58-58: JSX elements without children should be marked as self-closing. In JSX, it is valid for any element to be self-closing.
Unsafe fix: Use a SelfClosingElement instead
(lint/style/useSelfClosingElements)
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/DesktopInbox.js
at line 58, the empty JSX <th> element should be converted to a self-closing
tag. Replace <th style={thStyle}></th> with <th style={thStyle} /> to follow JSX
best practices for empty elements.
| {property?.searchData?.propertyType?.includes('BUILTUP') ? 'Built-up Property' : 'Vacant Land'} | ||
| </td> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Property type check might be fragile.
Using includes('BUILTUP') to determine property type could lead to false positives if property types contain similar substrings. Consider using exact matching or a more robust check.
-{property?.searchData?.propertyType?.includes('BUILTUP') ? 'Built-up Property' : 'Vacant Land'}
+{property?.searchData?.propertyType === 'BUILTUP' ? 'Built-up Property' : 'Vacant Land'}Or if multiple built-up types exist:
-{property?.searchData?.propertyType?.includes('BUILTUP') ? 'Built-up Property' : 'Vacant Land'}
+{['BUILTUP', 'BUILTUP_INDEPENDENT', 'BUILTUP_SHAREDPROPERTY'].includes(property?.searchData?.propertyType) ? 'Built-up Property' : 'Vacant Land'}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| {property?.searchData?.propertyType?.includes('BUILTUP') ? 'Built-up Property' : 'Vacant Land'} | |
| </td> | |
| {['BUILTUP', 'BUILTUP_INDEPENDENT', 'BUILTUP_SHAREDPROPERTY'] | |
| .includes(property?.searchData?.propertyType) | |
| ? 'Built-up Property' | |
| : 'Vacant Land'} | |
| </td> | 
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/DesktopInbox.js
around lines 68 to 69, the property type check uses includes('BUILTUP'), which
can cause false positives. Replace this with an exact match check or a more
precise condition, such as comparing the propertyType string directly to
'BUILTUP' or checking against a list of valid built-up property types to ensure
accurate classification.
| <button style={buttonStyle} onClick={() => | ||
| history.push({ | ||
| pathname: `/digit-ui/employee/pt/PTPropertyTaxForm/${property.searchData.propertyId}`, | ||
| state: { propertyData: property } | ||
| }) | ||
| }>Edit Property Address</button> | ||
| <button style={buttonStyle} onClick={() => | ||
| history.push({ | ||
| pathname: `/digit-ui/employee/pt/PTPropertyTaxForm/${property.searchData.propertyId}`, | ||
| state: { propertyData: property } | ||
| }) | ||
| }>Edit Property Area</button> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Both buttons navigate to the same route with identical logic.
The "Edit Property Address" and "Edit Property Area" buttons have identical click handlers that navigate to the same route with the same state. This appears to be either a copy-paste error or missing implementation.
If these buttons should have different behaviors, implement the correct navigation logic. Otherwise, consider consolidating them:
-<div style={buttonContainerStyle}>
-  <button style={buttonStyle} onClick={() =>
-    history.push({
-      pathname: `/digit-ui/employee/pt/PTPropertyTaxForm/${property.searchData.propertyId}`,
-      state: { propertyData: property }
-    })
-  }>Edit Property Address</button>
-  <button style={buttonStyle} onClick={() =>
-    history.push({
-      pathname: `/digit-ui/employee/pt/PTPropertyTaxForm/${property.searchData.propertyId}`,
-      state: { propertyData: property }
-    })
-  }>Edit Property Area</button>
-</div>
+<div style={buttonContainerStyle}>
+  <button type="button" style={buttonStyle} onClick={() =>
+    history.push({
+      pathname: `/digit-ui/employee/pt/PTPropertyTaxForm/${property.searchData.propertyId}`,
+      state: { propertyData: property, editMode: 'address' }
+    })
+  }>Edit Property Address</button>
+  <button type="button" style={buttonStyle} onClick={() =>
+    history.push({
+      pathname: `/digit-ui/employee/pt/PTPropertyTaxForm/${property.searchData.propertyId}`,
+      state: { propertyData: property, editMode: 'area' }
+    })
+  }>Edit Property Area</button>
+</div>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <button style={buttonStyle} onClick={() => | |
| history.push({ | |
| pathname: `/digit-ui/employee/pt/PTPropertyTaxForm/${property.searchData.propertyId}`, | |
| state: { propertyData: property } | |
| }) | |
| }>Edit Property Address</button> | |
| <button style={buttonStyle} onClick={() => | |
| history.push({ | |
| pathname: `/digit-ui/employee/pt/PTPropertyTaxForm/${property.searchData.propertyId}`, | |
| state: { propertyData: property } | |
| }) | |
| }>Edit Property Area</button> | |
| <div style={buttonContainerStyle}> | |
| <button | |
| type="button" | |
| style={buttonStyle} | |
| onClick={() => | |
| history.push({ | |
| pathname: `/digit-ui/employee/pt/PTPropertyTaxForm/${property.searchData.propertyId}`, | |
| state: { propertyData: property, editMode: 'address' } | |
| }) | |
| } | |
| > | |
| Edit Property Address | |
| </button> | |
| <button | |
| type="button" | |
| style={buttonStyle} | |
| onClick={() => | |
| history.push({ | |
| pathname: `/digit-ui/employee/pt/PTPropertyTaxForm/${property.searchData.propertyId}`, | |
| state: { propertyData: property, editMode: 'area' } | |
| }) | |
| } | |
| > | |
| Edit Property Area | |
| </button> | |
| </div> | 
🧰 Tools
🪛 Biome (1.9.4)
[error] 77-82: Provide an explicit type prop for the button element.
The default type of a button is submit, which causes the submission of a form when placed inside a form element. This is likely not the behaviour that you want inside a React application.
Allowed button types are: submit, button or reset
(lint/a11y/useButtonType)
[error] 83-88: Provide an explicit type prop for the button element.
The default type of a button is submit, which causes the submission of a form when placed inside a form element. This is likely not the behaviour that you want inside a React application.
Allowed button types are: submit, button or reset
(lint/a11y/useButtonType)
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/DesktopInbox.js
around lines 77 to 88, both "Edit Property Address" and "Edit Property Area"
buttons have identical onClick handlers navigating to the same route with the
same state. Review the intended behavior for each button; if they should
navigate to different routes or pass different state data, update the onClick
handlers accordingly to reflect that. If they are meant to perform the same
action, consider consolidating them into a single button to avoid redundancy.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Review continued from previous batch...
| {/* <ApplicationDetailsContentVerifier | ||
| applicationDetails={applicationDetails} | ||
| workflowDetails={workflowDetails} | ||
| isDataLoading={isDataLoading} | ||
| applicationData={applicationData} | ||
| businessService={businessService} | ||
| timelineStatusPrefix={timelineStatusPrefix} | ||
| statusAttribute={statusAttribute} | ||
| paymentsList={paymentsList} | ||
| showTimeLine={showTimeLine} | ||
| oldValue={oldValue} | ||
| isInfoLabel={isInfoLabel} | ||
| /> */} | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Remove commented code blocks.
Large blocks of commented code should be removed to improve readability. Version control preserves the history.
Remove the commented ApplicationDetailsContentVerifier component (lines 196-208) and ApplicationDetailsActionBar component (lines 249-258).
Also applies to: 249-258
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/templates/ApplicationDetails/cashDeskIndex.js,
remove the commented-out ApplicationDetailsContentVerifier component between
lines 196 and 208, as well as the commented ApplicationDetailsActionBar
component between lines 249 and 258. This will clean up the code by eliminating
large commented blocks that are no longer needed, relying on version control for
history instead.
| const submitAction = async (data, nocData = false, isOBPS = {}) => { | ||
| setIsEnableLoader(true); | ||
| if (typeof data?.customFunctionToExecute === "function") { | ||
| data?.customFunctionToExecute({ ...data }); | ||
| } | ||
| if (nocData !== false && nocMutation) { | ||
| const nocPrmomises = nocData?.map((noc) => { | ||
| return nocMutation?.mutateAsync(noc); | ||
| }); | ||
| try { | ||
| setIsEnableLoader(true); | ||
| const values = await Promise.all(nocPrmomises); | ||
| values && | ||
| values.map((ob) => { | ||
| Digit.SessionStorage.del(ob?.Noc?.[0]?.nocType); | ||
| }); | ||
| } catch (err) { | ||
| setIsEnableLoader(false); | ||
| let errorValue = err?.response?.data?.Errors?.[0]?.code | ||
| ? t(err?.response?.data?.Errors?.[0]?.code) | ||
| : err?.response?.data?.Errors?.[0]?.message || err; | ||
| closeModal(); | ||
| setShowToast({ key: "error", error: { message: errorValue } }); | ||
| setTimeout(closeToast, 5000); | ||
| return; | ||
| } | ||
| } | ||
| if (mutate) { | ||
| setIsEnableLoader(true); | ||
| mutate(data, { | ||
| onError: (error, variables) => { | ||
| setIsEnableLoader(false); | ||
| setShowToast({ key: "error", error }); | ||
| setTimeout(closeToast, 5000); | ||
| }, | ||
| onSuccess: (data, variables) => { | ||
| sessionStorage.removeItem("WS_SESSION_APPLICATION_DETAILS"); | ||
| setIsEnableLoader(false); | ||
| if (isOBPS?.bpa) { | ||
| data.selectedAction = selectedAction; | ||
| history.replace(`/digit-ui/employee/obps/response`, { data: data }); | ||
| } | ||
| if (isOBPS?.isStakeholder) { | ||
| data.selectedAction = selectedAction; | ||
| history.push(`/digit-ui/employee/obps/stakeholder-response`, { data: data }); | ||
| } | ||
| if (isOBPS?.isNoc) { | ||
| history.push(`/digit-ui/employee/noc/response`, { data: data }); | ||
| } | ||
| if (data?.Amendments?.length > 0) { | ||
| //RAIN-6981 instead just show a toast here with appropriate message | ||
| //show toast here and return | ||
| //history.push("/digit-ui/employee/ws/response-bill-amend", { status: true, state: data?.Amendments?.[0] }) | ||
|  | ||
| if (variables?.AmendmentUpdate?.workflow?.action.includes("SEND_BACK")) { | ||
| setShowToast({ key: "success", label: t("ES_MODIFYSWCONNECTION_SEND_BACK_UPDATE_SUCCESS") }) | ||
| } else if (variables?.AmendmentUpdate?.workflow?.action.includes("RE-SUBMIT")) { | ||
| setShowToast({ key: "success", label: t("ES_MODIFYSWCONNECTION_RE_SUBMIT_UPDATE_SUCCESS") }) | ||
| } else if (variables?.AmendmentUpdate?.workflow?.action.includes("APPROVE")) { | ||
| setShowToast({ key: "success", label: t("ES_MODIFYSWCONNECTION_APPROVE_UPDATE_SUCCESS") }) | ||
| } | ||
| else if (variables?.AmendmentUpdate?.workflow?.action.includes("REJECT")) { | ||
| setShowToast({ key: "success", label: t("ES_MODIFYWSCONNECTION_REJECT_UPDATE_SUCCESS") }) | ||
| } | ||
| return | ||
| } | ||
| setShowToast({ key: "success", action: selectedAction }); | ||
| clearDataDetails && setTimeout(clearDataDetails, 3000); | ||
| setTimeout(closeToast, 5000); | ||
| queryClient.clear(); | ||
| queryClient.refetchQueries("APPLICATION_SEARCH"); | ||
| //push false status when reject | ||
|  | ||
| }, | ||
| }); | ||
| } | ||
|  | ||
| closeModal(); | ||
| }; | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Consider splitting the complex submitAction function.
The submitAction function handles multiple responsibilities including custom function execution, NOC mutations, main mutations, navigation, and error handling. This violates the Single Responsibility Principle.
Consider breaking this into smaller, focused functions:
- executeCustomFunction
- handleNocMutations
- handleMainMutation
- handleNavigationAfterSuccess
This would improve testability and maintainability.
🧰 Tools
🪛 Biome (1.9.4)
[error] 115-118: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
[error] 121-121: This let declares a variable that is only assigned once.
'errorValue' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
| const state = Digit.ULBService.getStateId(); | ||
| const { t } = useTranslation(); | ||
| const history = useHistory(); | ||
| let { id: applicationNumber } = useParams(); | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Use const for variable that's never reassigned.
-let { id: applicationNumber } = useParams();
+const { id: applicationNumber } = useParams();📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| let { id: applicationNumber } = useParams(); | |
| const { id: applicationNumber } = useParams(); | 
🧰 Tools
🪛 Biome (1.9.4)
[error] 21-21: This let declares a variable that is only assigned once.
'applicationNumber' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/templates/ApplicationDetails/cashDeskIndex.js
at line 21, the variable applicationNumber is declared with let but never
reassigned. Change the declaration from let to const to reflect that the
variable is constant and improve code clarity.
| values && | ||
| values.map((ob) => { | ||
| Digit.SessionStorage.del(ob?.Noc?.[0]?.nocType); | ||
| }); | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Use optional chaining for cleaner code.
-values &&
-  values.map((ob) => {
-    Digit.SessionStorage.del(ob?.Noc?.[0]?.nocType);
-  });
+values?.map((ob) => {
+  Digit.SessionStorage.del(ob?.Noc?.[0]?.nocType);
+});📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| values && | |
| values.map((ob) => { | |
| Digit.SessionStorage.del(ob?.Noc?.[0]?.nocType); | |
| }); | |
| values?.map((ob) => { | |
| Digit.SessionStorage.del(ob?.Noc?.[0]?.nocType); | |
| }); | 
🧰 Tools
🪛 Biome (1.9.4)
[error] 115-118: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/templates/ApplicationDetails/cashDeskIndex.js
around lines 115 to 118, the code accesses nested properties without optional
chaining, which can cause errors if any intermediate property is undefined.
Refactor the code to use optional chaining when accessing ob.Noc and nocType to
safely handle cases where these properties might be missing, making the code
cleaner and more robust.
| }); | ||
| } catch (err) { | ||
| setIsEnableLoader(false); | ||
| let errorValue = err?.response?.data?.Errors?.[0]?.code | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Use const for variable that's never reassigned.
-let errorValue = err?.response?.data?.Errors?.[0]?.code
+const errorValue = err?.response?.data?.Errors?.[0]?.code
   ? t(err?.response?.data?.Errors?.[0]?.code)
   : err?.response?.data?.Errors?.[0]?.message || err;📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| let errorValue = err?.response?.data?.Errors?.[0]?.code | |
| const errorValue = err?.response?.data?.Errors?.[0]?.code | |
| ? t(err?.response?.data?.Errors?.[0]?.code) | |
| : err?.response?.data?.Errors?.[0]?.message || err; | 
🧰 Tools
🪛 Biome (1.9.4)
[error] 121-121: This let declares a variable that is only assigned once.
'errorValue' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/templates/ApplicationDetails/cashDeskIndex.js
at line 121, the variable errorValue is declared with let but never reassigned.
Change the declaration from let to const to reflect that the variable is
immutable.
| const tenantId = Digit.ULBService.getCurrentTenantId(); | ||
| const response = await Digit.LocationService.getRevenueLocalities(tenantId); | ||
|  | ||
| console.log("🔍 Raw TenantBoundary Response:", response?.TenantBoundary); | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Remove debug console.log statement.
Debug logging should be removed from production code.
-        console.log("🔍 Raw TenantBoundary Response:", response?.TenantBoundary);📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| console.log("🔍 Raw TenantBoundary Response:", response?.TenantBoundary); | 
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/AddressSection.js
at line 363, remove the debug console.log statement that outputs the raw
TenantBoundary response to clean up the production code and avoid unnecessary
logging.
| {/* Rate Zone Dropdown */} | ||
| {/* <div style={styles.flex30}> | ||
| <div style={styles.poppinsLabel}> | ||
| {t("Rate Zone")}<span className="mandatory" style={styles.mandatory}>*</span> | ||
| </div> | ||
| <Dropdown | ||
| style={styles.widthInput} | ||
| t={t} | ||
| option={rateZones} | ||
| selected={addressDetails.rateZone} | ||
| select={(option) => handleDropdownChange("rateZone", option)} | ||
| optionKey="name" | ||
| placeholder={t("Select")} | ||
| /> | ||
| {formErrors?.rateZone && <p style={{ color: "red", fontSize: "12px" }}>{formErrors.rateZone}</p>} | ||
| </div> */} | ||
| </div> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Clarify the Rate Zone dropdown implementation.
The Rate Zone dropdown is fully implemented with state management and data fetching logic, but the UI is commented out. This creates confusion about the feature's status.
Should the Rate Zone dropdown be enabled? If not, consider removing all related code including state management (lines 354, 414-430, 490, 493, 514, 516-517, 536-537) to avoid maintaining dead code.
🏁 Script executed:
#!/bin/bash
# Search for state and logic related to rateZone and rateZones
rg "rateZone" -n frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/AddressSection.js
rg "rateZones" -n frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/AddressSection.js
rg "handleDropdownChange" -n frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/AddressSection.jsLength of output: 2438
Enable or remove the Rate Zone dropdown.
The dropdown’s UI (lines 545–561) is commented out, but its state, data‐mapping, and reset logic remain in the component—resulting in dead code. To clean this up, either:
- Un-comment and display the Rate Zone <Dropdown>block (lines 545–561), keeping the logic below; or
- Remove all rateZone-related code:
- The useStatehook at line 354
- The mapping from selectedColony?.children(around lines 420–427)
- Every handleDropdownChange("rateZone", null)call at lines 490, 514, 536
- References in JSX to addressDetails.rateZoneandformErrors?.rateZone
 
- The 
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/AddressSection.js
from lines 545 to 561, the Rate Zone dropdown JSX is commented out but related
state and logic remain, causing dead code. To fix this, either un-comment the
entire Rate Zone dropdown block to display it and keep the existing state and
handlers intact, or fully remove all rateZone-related code including the
useState hook at line 354, the mapping from selectedColony?.children around
lines 420-427, all handleDropdownChange("rateZone", null) calls at lines 490,
514, and 536, and any references to addressDetails.rateZone and
formErrors?.rateZone in the JSX.
| // import React, { useState, useEffect } from "react"; | ||
| // import { Dropdown, TextInput } from "@egovernments/digit-ui-react-components"; | ||
|  | ||
| // const AddressSection = ({ t, addressDetails, handleInputChange, handleDropdownChange, styles, formErrors }) => { | ||
| // let locality = []; | ||
| // const [localityList, setLocalityList] = useState(null); | ||
| // const [localities, setLocalities] = useState(null); | ||
|  | ||
| // useEffect(() => { | ||
| // (async () => { | ||
| // let tenantId = Digit.ULBService.getCurrentTenantId(); | ||
| // let response = await Digit.LocationService.getRevenueLocalities(tenantId); | ||
| // console.log("responsennnnnnnnnnnnn", response); | ||
| // let __localityList = []; | ||
| // if (response && response.TenantBoundary.length > 0) { | ||
| // __localityList = Digit.LocalityService.get(response.TenantBoundary[0]); | ||
| // } | ||
| // setLocalityList(__localityList); | ||
| // })(); | ||
| // }, []); | ||
|  | ||
| // useEffect(() => { | ||
| // if (localityList) { | ||
| // const __localities = localityList; | ||
| // __localities.forEach((element) => { | ||
| // locality.push({ name: t(element.i18nkey), code: element.code }); | ||
| // }); | ||
| // setLocalities(locality); | ||
| // } | ||
| // }, [localityList]); | ||
|  | ||
| // console.log("localitiesgjhhj localityList", localityList); | ||
|  | ||
| // return ( | ||
|  | ||
| // <div className="form-section" style={styles.formSection}> | ||
| // {/* Door/House Number */} | ||
| // <div style={styles.flex30}> | ||
| // <div style={styles.poppinsLabel}>{t("Door/House Number")}<span className="mandatory" style={styles.mandatory}>*</span></div> | ||
| // <TextInput | ||
| // style={styles.widthInput} | ||
| // name="doorNo" | ||
| // value={addressDetails.doorNo} | ||
| // onChange={handleInputChange} | ||
| // /> | ||
| // {formErrors?.doorNo && ( | ||
| // <p style={{ color: "red", fontSize: "12px" }}>{formErrors.doorNo}</p> | ||
| // )} | ||
| // </div> | ||
|  | ||
| // {/* Address */} | ||
| // <div style={styles.flex30}> | ||
| // <div style={styles.poppinsLabel}>{t("Address")}<span className="mandatory" style={styles.mandatory}>*</span></div> | ||
| // <TextInput | ||
| // style={styles.widthInput} | ||
| // name="address" | ||
| // value={addressDetails.address} | ||
| // onChange={handleInputChange} | ||
| // /> | ||
| // {formErrors?.address && ( | ||
| // <p style={{ color: "red", fontSize: "12px" }}>{formErrors.address}</p> | ||
| // )} | ||
| // </div> | ||
|  | ||
| // {/* Pincode */} | ||
| // <div style={styles.flex30}> | ||
| // <div style={styles.poppinsLabel}>{t("Pincode")}<span className="mandatory" style={styles.mandatory}>*</span></div> | ||
| // <TextInput | ||
| // style={styles.widthInput} | ||
| // name="pincode" | ||
| // value={addressDetails.pincode} | ||
| // onChange={handleInputChange} | ||
| // /> | ||
| // {formErrors?.pincode && ( | ||
| // <p style={{ color: "red", fontSize: "12px" }}>{formErrors.pincode}</p> | ||
| // )} | ||
| // </div> | ||
|  | ||
|  | ||
| // <div style={styles.flex30}> | ||
| // <div style={styles.poppinsLabel}> | ||
| // {t("Zone")} <span className="mandatory" style={styles.mandatory}>*</span> | ||
| // </div> | ||
| // <Dropdown | ||
| // style={styles.widthInput} | ||
| // t={t} | ||
| // option={[ | ||
| // { code: "Z01", name: t("Z01") }, | ||
| // { code: "Z02", name: t("Z02") }, | ||
| // { code: "Z03", name: t("Z03") } | ||
| // ]} | ||
| // selected={addressDetails.zone} | ||
| // select={(option) => handleDropdownChange("zone", option)} | ||
| // optionKey="name" | ||
| // placeholder={t("Select")} | ||
| // /> | ||
| // {formErrors?.zone && ( | ||
| // <p style={{ color: "red", fontSize: "12px" }}>{formErrors.zone}</p> | ||
| // )} | ||
| // </div> | ||
| // {/* Ward */} | ||
| // <div style={styles.flex30}> | ||
| // <div style={styles.poppinsLabel}> | ||
| // {t("Ward")} <span className="mandatory" style={styles.mandatory}>*</span> | ||
| // </div> | ||
| // <Dropdown | ||
| // style={styles.widthInput} | ||
| // t={t} | ||
| // option={[ | ||
| // { code: "W01", name: t("W01") }, | ||
| // { code: "W02", name: t("W02") }, | ||
| // { code: "W03", name: t("W03") } | ||
| // ]} | ||
| // selected={addressDetails.ward} | ||
| // select={(option) => handleDropdownChange("ward", option)} | ||
| // optionKey="name" | ||
| // placeholder={t("Select")} | ||
| // /> | ||
| // {formErrors?.ward && ( | ||
| // <p style={{ color: "red", fontSize: "12px" }}>{formErrors.ward}</p> | ||
| // )} | ||
| // </div> | ||
| // {/* Colony */} | ||
| // <div style={styles.flex30}> | ||
| // <div style={styles.poppinsLabel}> | ||
| // {t("Colony")} <span className="mandatory" style={styles.mandatory}>*</span> | ||
| // </div> | ||
| // <Dropdown | ||
| // style={styles.widthInput} | ||
| // t={t} | ||
| // option={localities} | ||
| // selected={addressDetails.colony} | ||
| // select={(option) => handleDropdownChange("colony", option)} | ||
| // optionKey="name" | ||
| // placeholder={t("Select")} | ||
| // /> | ||
| // {formErrors?.colony && ( | ||
| // <p style={{ color: "red", fontSize: "12px" }}>{formErrors.colony}</p> | ||
| // )} | ||
| // </div> | ||
|  | ||
| // </div> | ||
| // ); | ||
| // }; | ||
|  | ||
| // export default AddressSection; | ||
|  | ||
|  | ||
|  | ||
| // import React, { useState, useEffect } from "react"; | ||
| // import { Dropdown, TextInput } from "@egovernments/digit-ui-react-components"; | ||
|  | ||
| // const AddressSection = ({ | ||
| // t, | ||
| // addressDetails, | ||
| // handleInputChange, | ||
| // handleDropdownChange, | ||
| // styles, | ||
| // formErrors, | ||
| // }) => { | ||
| // const [boundaryData, setBoundaryData] = useState(null); | ||
| // const [zones, setZones] = useState([]); | ||
| // const [wards, setWards] = useState([]); | ||
| // const [colonies, setColonies] = useState([]); | ||
|  | ||
| // // Fetch boundary data and extract zones | ||
| // useEffect(() => { | ||
| // (async () => { | ||
| // try { | ||
| // const tenantId = Digit.ULBService.getCurrentTenantId(); | ||
| // const response = await Digit.LocationService.getRevenueLocalities(tenantId); | ||
|  | ||
| // console.log("🔍 Raw TenantBoundary Response:", response?.TenantBoundary); | ||
|  | ||
| // const cityBoundary = response?.TenantBoundary?.[0]?.boundary?.[0]; | ||
| // if (cityBoundary?.children?.length > 0) { | ||
| // setBoundaryData(cityBoundary); | ||
|  | ||
| // const zoneOptions = cityBoundary.children.map((zone) => ({ | ||
| // code: zone.code, | ||
| // name: zone.name || zone.code, | ||
| // })); | ||
| // setZones(zoneOptions); | ||
| // console.log("✅ Zones Loaded:", zoneOptions); | ||
| // } else { | ||
| // console.warn("❌ No boundary children found."); | ||
| // } | ||
| // } catch (error) { | ||
| // console.error("❌ Error fetching boundary data:", error); | ||
| // } | ||
| // })(); | ||
| // }, []); | ||
|  | ||
| // // Update Wards when Zone changes | ||
| // useEffect(() => { | ||
| // if (addressDetails.zone && boundaryData?.children?.length > 0) { | ||
| // const selectedZone = boundaryData.children.find((z) => z.code === addressDetails.zone.code); | ||
| // const wardList = selectedZone?.children || []; | ||
| // const formattedWards = wardList.map((ward) => ({ | ||
| // code: ward.code, | ||
| // name: ward.name || ward.code, | ||
| // })); | ||
| // setWards(formattedWards); | ||
| // console.log("📦 Wards for zone", addressDetails.zone.code, formattedWards); | ||
| // } else { | ||
| // setWards([]); | ||
| // } | ||
| // }, [addressDetails.zone, boundaryData]); | ||
|  | ||
| // // Update Colonies when Ward changes | ||
| // useEffect(() => { | ||
| // if (addressDetails.zone && addressDetails.ward && boundaryData?.children?.length > 0) { | ||
| // const selectedZone = boundaryData.children.find((z) => z.code === addressDetails.zone.code); | ||
| // const selectedWard = selectedZone?.children?.find((w) => w.code === addressDetails.ward.code); | ||
| // const colonyList = selectedWard?.children || []; | ||
| // const formattedColonies = colonyList.map((col) => ({ | ||
| // code: col.code, | ||
| // name: col.name || col.code, | ||
| // })); | ||
| // setColonies(formattedColonies); | ||
| // console.log("🏘 Colonies for ward", addressDetails.ward.code, formattedColonies); | ||
| // } else { | ||
| // setColonies([]); | ||
| // } | ||
| // }, [addressDetails.ward, addressDetails.zone, boundaryData]); | ||
|  | ||
| // return ( | ||
| // <div className="form-section" style={styles.formSection}> | ||
| // {/* Door/House Number */} | ||
| // <div style={styles.flex30}> | ||
| // <div style={styles.poppinsLabel}> | ||
| // {t("Door/House Number")}<span className="mandatory" style={styles.mandatory}>*</span> | ||
| // </div> | ||
| // <TextInput | ||
| // style={styles.widthInput} | ||
| // name="doorNo" | ||
| // value={addressDetails.doorNo} | ||
| // onChange={handleInputChange} | ||
| // /> | ||
| // {formErrors?.doorNo && <p style={{ color: "red", fontSize: "12px" }}>{formErrors.doorNo}</p>} | ||
| // </div> | ||
|  | ||
| // {/* Address */} | ||
| // <div style={styles.flex30}> | ||
| // <div style={styles.poppinsLabel}> | ||
| // {t("Address")}<span className="mandatory" style={styles.mandatory}>*</span> | ||
| // </div> | ||
| // <TextInput | ||
| // style={styles.widthInput} | ||
| // name="address" | ||
| // value={addressDetails.address} | ||
| // onChange={handleInputChange} | ||
| // /> | ||
| // {formErrors?.address && <p style={{ color: "red", fontSize: "12px" }}>{formErrors.address}</p>} | ||
| // </div> | ||
|  | ||
| // {/* Pincode */} | ||
| // <div style={styles.flex30}> | ||
| // <div style={styles.poppinsLabel}> | ||
| // {t("Pincode")}<span className="mandatory" style={styles.mandatory}>*</span> | ||
| // </div> | ||
| // <TextInput | ||
| // style={styles.widthInput} | ||
| // name="pincode" | ||
| // value={addressDetails.pincode} | ||
| // onChange={handleInputChange} | ||
| // /> | ||
| // {formErrors?.pincode && <p style={{ color: "red", fontSize: "12px" }}>{formErrors.pincode}</p>} | ||
| // </div> | ||
|  | ||
| // {/* Zone Dropdown */} | ||
| // <div style={styles.flex30}> | ||
| // <div style={styles.poppinsLabel}> | ||
| // {t("Zone")}<span className="mandatory" style={styles.mandatory}>*</span> | ||
| // </div> | ||
| // <Dropdown | ||
| // style={styles.widthInput} | ||
| // t={t} | ||
| // option={zones} | ||
| // selected={addressDetails.zone} | ||
| // select={(option) => { | ||
| // handleDropdownChange("zone", option); | ||
| // handleDropdownChange("ward", null); | ||
| // handleDropdownChange("colony", null); | ||
| // setWards([]); | ||
| // setColonies([]); | ||
| // }} | ||
| // optionKey="name" | ||
| // placeholder={t("Select")} | ||
| // /> | ||
| // {formErrors?.zone && <p style={{ color: "red", fontSize: "12px" }}>{formErrors.zone}</p>} | ||
| // </div> | ||
|  | ||
| // {/* Ward Dropdown */} | ||
| // <div style={styles.flex30}> | ||
| // <div style={styles.poppinsLabel}> | ||
| // {t("Ward")}<span className="mandatory" style={styles.mandatory}>*</span> | ||
| // </div> | ||
| // <Dropdown | ||
| // style={styles.widthInput} | ||
| // t={t} | ||
| // option={wards} | ||
| // selected={addressDetails.ward} | ||
| // select={(option) => { | ||
| // handleDropdownChange("ward", option); | ||
| // handleDropdownChange("colony", null); | ||
| // setColonies([]); | ||
| // }} | ||
| // optionKey="name" | ||
| // placeholder={t("Select")} | ||
| // /> | ||
| // {formErrors?.ward && <p style={{ color: "red", fontSize: "12px" }}>{formErrors.ward}</p>} | ||
| // </div> | ||
|  | ||
| // {/* Colony Dropdown */} | ||
| // <div style={styles.flex30}> | ||
| // <div style={styles.poppinsLabel}> | ||
| // {t("Colony")}<span className="mandatory" style={styles.mandatory}>*</span> | ||
| // </div> | ||
| // <Dropdown | ||
| // style={styles.widthInput} | ||
| // t={t} | ||
| // option={colonies} | ||
| // selected={addressDetails.colony} | ||
| // select={(option) => handleDropdownChange("colony", option)} | ||
| // optionKey="name" | ||
| // placeholder={t("Select")} | ||
| // /> | ||
| // {formErrors?.colony && <p style={{ color: "red", fontSize: "12px" }}>{formErrors.colony}</p>} | ||
| // </div> | ||
| // </div> | ||
| // ); | ||
| // }; | ||
|  | ||
| // export default AddressSection; | ||
|  | ||
|  | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Remove all commented-out code.
This file contains 337 lines of commented-out code representing two previous implementations. These should be removed to improve code readability and maintainability.
-// import React, { useState, useEffect } from "react";
-// import { Dropdown, TextInput } from "@egovernments/digit-ui-react-components";
-//
-// const AddressSection = ({ t, addressDetails, handleInputChange, handleDropdownChange, styles, formErrors }) => {
-// ... (lines 1-337)
-// export default AddressSection;
-
-
-
import React, { useState, useEffect } from "react";Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/employee/NewApplication/AddressSection.js
from lines 1 to 337, remove all the commented-out code blocks that contain
previous implementations of the AddressSection component to improve code
readability and maintainability. Keep only the active, uncommented
implementation of the component.
| {t( | ||
| "मैं यह सत्यापित करता / करती हूं कि उपरोक्त विवरणी मे दी गयी जानकारी सत्य है। मैने / हमने जिस भवन/ भूमि के संबंध मे विवरणी प्रस्तुत की है उसका मैं स्वामी/अधिभोगी हूं इसमे कोई भी तथ्य छू पाये अथवा गलत नहीं है। नोट - मध्यप्रदेश नगर पालिका (वार्षिक भाड़ा मूल्य का अवधारणा) नियम 1997 के नियम 10 (1) अंतर्गत प्रत्येक भवन स्वामी को स्व निर्धारण विवरणी (Self Assessment Form) के साथ संलग्नक (Attachment) scan कर सब्मिट करें । स्व निर्धारण विवरणी मौके पर सत्यापन के अध्याधीन रहेगी, जाँच मे अंतर पाये जाने पर या अन्य कारण से आवश्यक पाये जाने पर वार्षिक भाड़ा मूल्य का पुर्निर्धारण किया जाएगा व 0 प्रतिशत से अधिक अंतर पाये जाने पर सम्पतिकर के पुर्निर्धारण के अंतर की राशि की पाँच गुना शास्ति ,अधिरोपित की जा सकेगी।" | ||
| )} | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
🛠️ Refactor suggestion
Move hardcoded Hindi text to translation files.
The long Hindi self-declaration text should be moved to i18n translation files rather than being hardcoded in the component.
Would you like me to help move this text to the appropriate translation file and update the component to use the translation key?
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/OtherDetailsSection.js
around lines 124 to 126, the long Hindi self-declaration text is hardcoded
directly in the component. Move this entire text into the appropriate i18n
translation JSON file with a clear key, then update the component to use the
translation function t() with that key instead of the hardcoded string.
| if (Menu?.PropertyTax?.PropertyType?.length) { | ||
| const options = Menu.PropertyTax.PropertyType.map((item) => ({ | ||
| code: item.code, | ||
| name: t("COMMON_PROPTYPE_" + item.code.replace(/\./g, "_")), | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Use template literal instead of string concatenation.
-        name: t("COMMON_PROPTYPE_" + item.code.replace(/\./g, "_")),
+        name: t(`COMMON_PROPTYPE_${item.code.replace(/\./g, "_")}`),📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| name: t("COMMON_PROPTYPE_" + item.code.replace(/\./g, "_")), | |
| name: t(`COMMON_PROPTYPE_${item.code.replace(/\./g, "_")}`), | 
🧰 Tools
🪛 Biome (1.9.4)
[error] 21-21: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/OtherDetailsSection.js
at line 21, replace the string concatenation used in the name property with a
template literal. Change the expression from using the plus operator to embed
the dynamic value inside backticks and ${} for cleaner and more readable code.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Review continued from previous batch...
| {/* <div style={styles.flex30}> | ||
| <div style={{ ...styles.poppinsLabel, color: "#888" }}>{t("Property Type")}</div> | ||
| <Dropdown | ||
| style={styles.widthInput} | ||
| t={t} | ||
| option={propertyTypeOptions} | ||
| selected={propertyDetails.propertyType} | ||
| select={(option) => handlePropertyDetailsChange("propertyType", option)} | ||
| optionKey="name" | ||
| placeholder={t("Select")} | ||
| disable={true} | ||
| /> | ||
| </div> | ||
| <div style={styles.flex30}> | ||
| <div style={{ ...styles.poppinsLabel, color: "#888" }}>{t("Rooms/Area")}</div> | ||
| <TextInput | ||
| style={styles.widthInput} | ||
| placeholder={t("Enter")} | ||
| value={propertyDetails.roomsArea} | ||
| onChange={(e) => handlePropertyDetailsChange("roomsArea", e.target.value)} | ||
| disable={true} | ||
| /> | ||
| </div> */} | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Remove commented-out code for Property Type and Rooms/Area fields.
If these fields are not required in the current implementation, remove the commented code to improve readability.
-  {/* Property Type */}
-  {/* <div style={styles.flex30}>
-    <div style={{ ...styles.poppinsLabel, color: "#888" }}>{t("Property Type")}</div>
-    <Dropdown
-      style={styles.widthInput}
-      t={t}
-      option={propertyTypeOptions}
-      selected={propertyDetails.propertyType}
-      select={(option) => handlePropertyDetailsChange("propertyType", option)}
-      optionKey="name"
-      placeholder={t("Select")}
-      disable={true}
-    />
-  </div>
-
-
-  <div style={styles.flex30}>
-    <div style={{ ...styles.poppinsLabel, color: "#888" }}>{t("Rooms/Area")}</div>
-    <TextInput
-      style={styles.widthInput}
-      placeholder={t("Enter")}
-      value={propertyDetails.roomsArea}
-      onChange={(e) => handlePropertyDetailsChange("roomsArea", e.target.value)}
-      disable={true}
-    />
-  </div> */}
-
   {/* Exemption */}Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/OtherDetailsSection.js
between lines 38 and 62, remove the entire block of commented-out code related
to the Property Type and Rooms/Area fields to improve code readability since
these fields are not currently needed.
| const [isExpanded, setIsExpanded] = useState(true); // toggle state | ||
|  | ||
| sidebarRef.current.querySelectorAll(".dropdown-link").forEach((element) => { | ||
| element.style.display = "none"; | ||
| }); | ||
| sidebarRef.current.querySelectorAll(".actions").forEach((element) => { | ||
| element.style.padding = "0"; | ||
| }); | ||
| }; | ||
| const toggleSidebar = () => setIsExpanded((prev) => !prev); | ||
|  | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Remove unused toggle state and function.
The isExpanded state and toggleSidebar function are defined but never used since the toggle button is commented out.
-  const [isExpanded, setIsExpanded] = useState(true); // toggle state
-
-  const toggleSidebar = () => setIsExpanded((prev) => !prev);Also applies to: 323-325
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/EmployeeSideBar.js
around lines 290-293 and 323-325, the isExpanded state and toggleSidebar
function are declared but never used due to the toggle button being commented
out. Remove both the isExpanded state declaration and the toggleSidebar function
to clean up unused code.
| // import React, { useRef, useEffect, useState } from "react"; | ||
| // import SubMenu from "./SubMenu"; | ||
| // import { Loader, SearchIcon } from "@egovernments/digit-ui-react-components"; | ||
| // import { useTranslation } from "react-i18next"; | ||
| // import NavItem from "./NavItem"; | ||
| // import _, { findIndex } from "lodash"; | ||
|  | ||
| // const EmployeeSideBar = () => { | ||
| // const sidebarRef = useRef(null); | ||
| // const { isLoading, data } = Digit.Hooks.useAccessControl(); | ||
| // const [search, setSearch] = useState(""); | ||
| // const { t } = useTranslation(); | ||
| // useEffect(() => { | ||
| // if (isLoading) { | ||
| // return <Loader />; | ||
| // } | ||
| // sidebarRef.current.style.cursor = "pointer"; | ||
| // collapseNav(); | ||
| // }, [isLoading]); | ||
|  | ||
| // const expandNav = () => { | ||
| // sidebarRef.current.style.width = "260px"; | ||
| // sidebarRef.current.style.overflow = "auto"; | ||
|  | ||
| // sidebarRef.current.querySelectorAll(".dropdown-link").forEach((element) => { | ||
| // element.style.display = "flex"; | ||
| // }); | ||
| // }; | ||
| // const collapseNav = () => { | ||
| // sidebarRef.current.style.width = "55px"; | ||
| // sidebarRef.current.style.overflow = "hidden"; | ||
|  | ||
| // sidebarRef.current.querySelectorAll(".dropdown-link").forEach((element) => { | ||
| // element.style.display = "none"; | ||
| // }); | ||
| // sidebarRef.current.querySelectorAll(".actions").forEach((element) => { | ||
| // element.style.padding = "0"; | ||
| // }); | ||
| // }; | ||
|  | ||
| // const configEmployeeSideBar = {}; | ||
|  | ||
| // //creating the object structure from mdms value for easy iteration | ||
| // let configEmployeeSideBar1 = {}; | ||
| // data?.actions?.filter((e) => e.url === "url")?.forEach((item) => { | ||
| // _.set(configEmployeeSideBar1,item.path,{...item}) | ||
| // }) | ||
|  | ||
| // data?.actions | ||
| // .filter((e) => e.url === "url") | ||
| // .forEach((item) => { | ||
| // let index = item.path.split(".")[0]; | ||
| // if (search == "" && item.path !== "") { | ||
| // index = item.path.split(".")[0]; | ||
| // if (index === "TradeLicense") index = "Trade License"; | ||
| // if (!configEmployeeSideBar[index]) { | ||
| // configEmployeeSideBar[index] = [item]; | ||
| // } else { | ||
| // configEmployeeSideBar[index].push(item); | ||
| // } | ||
| // } else if (item.path !== "" && t(`ACTION_TEST_${index?.toUpperCase()?.replace(/[ -]/g, "_")}`)?.toLowerCase().includes(search.toLowerCase())) { | ||
| // index = item.path.split(".")[0]; | ||
| // if (index === "TradeLicense") index = "Trade License"; | ||
| // if (!configEmployeeSideBar[index]) { | ||
| // configEmployeeSideBar[index] = [item]; | ||
| // } else { | ||
| // configEmployeeSideBar[index].push(item); | ||
| // } | ||
| // } | ||
| // }); | ||
| // let res = []; | ||
|  | ||
| // //method is used for restructing of configEmployeeSideBar1 nested object into nested array object | ||
| // function restructuringOfConfig (tempconfig){ | ||
| // const result = []; | ||
| // for(const key in tempconfig){ | ||
| // const value= tempconfig[key]; | ||
| // if(typeof value === "object" && !(value?.id)){ | ||
| // const children = restructuringOfConfig(value); | ||
| // result.push({label : key,children, icon:children?.[0]?.icon, to:""}); | ||
| // } | ||
| // else{ | ||
| // result.push({label: key, value, icon:value?.leftIcon, to: key === "Home" ? "/digit-ui/employee" : value?.navigationURL}); | ||
| // } | ||
| // } | ||
|  | ||
| // return result | ||
| // } | ||
| // const splitKeyValue = () => { | ||
| // const keys = Object.keys(configEmployeeSideBar); | ||
| // keys.sort((a, b) => a.orderNumber - b.orderNumber); | ||
| // for (let i = 0; i < keys.length; i++) { | ||
| // if (configEmployeeSideBar[keys[i]][0].path.indexOf(".") === -1) { | ||
| // if (configEmployeeSideBar[keys[i]][0].displayName === "Home") { | ||
| // const homeURL = "/digit-ui/employee"; | ||
| // res.unshift({ | ||
| // moduleName: keys[i].toUpperCase(), | ||
| // icon: configEmployeeSideBar[keys[i]][0], | ||
| // navigationURL: homeURL, | ||
| // type: "single", | ||
| // }); | ||
| // } else { | ||
| // res.push({ | ||
| // moduleName: configEmployeeSideBar[keys[i]][0]?.displayName.toUpperCase(), | ||
| // type: "single", | ||
| // icon: configEmployeeSideBar[keys[i]][0], | ||
| // navigationURL: configEmployeeSideBar[keys[i]][0].navigationURL, | ||
| // }); | ||
| // } | ||
| // } else { | ||
| // res.push({ | ||
| // moduleName: keys[i].toUpperCase(), | ||
| // links: configEmployeeSideBar[keys[i]], | ||
| // icon: configEmployeeSideBar[keys[i]][0], | ||
| // orderNumber: configEmployeeSideBar[keys[i]][0].orderNumber, | ||
| // }); | ||
| // } | ||
| // } | ||
| // if(res.find(a => a.moduleName === "HOME")) | ||
| // { | ||
| // //res.splice(0,1); | ||
| // const indx = res.findIndex(a => a.moduleName === "HOME"); | ||
| // const home = res?.filter((ob) => ob?.moduleName === "HOME") | ||
| // let res1 = res?.filter((ob) => ob?.moduleName !== "HOME") | ||
| // res = res1.sort((a,b) => a.moduleName.localeCompare(b.moduleName)); | ||
| // home?.[0] && res.unshift(home[0]); | ||
| // } | ||
| // else | ||
| // { | ||
| // res.sort((a,b) => a.moduleName.localeCompare(b.moduleName)); | ||
| // } | ||
| // //reverting the newsidebar change for now, in order to solve ndss login issue | ||
| // //let newconfig = restructuringOfConfig(configEmployeeSideBar1); | ||
| // //below lines are used for shifting home object to first place | ||
| // // newconfig.splice(newconfig.findIndex((ob) => ob?.label === ""),1); | ||
| // // newconfig.sort((a,b) => a.label.localeCompare(b.label)); | ||
| // // const fndindex = newconfig?.findIndex((el) => el?.label === "Home"); | ||
| // // const homeitem = newconfig.splice(fndindex,1); | ||
| // // newconfig.unshift(homeitem?.[0]); | ||
| // // return ( | ||
| // // newconfig.map((item, index) => { | ||
| // // return <NavItem key={`${item?.label}-${index}`} item={item} />; | ||
| // // }) | ||
| // // ); | ||
| // return res?.map((item, index) => { | ||
| // return <SubMenu item={item} key={index + 1} />; | ||
| // }); | ||
| // }; | ||
|  | ||
| // if (isLoading) { | ||
| // return <Loader />; | ||
| // } | ||
| // if (!res) { | ||
| // return ""; | ||
| // } | ||
|  | ||
| // const renderSearch = () => { | ||
| // return ( | ||
| // <div className="submenu-container"> | ||
| // <div className="sidebar-link"> | ||
| // <div className="actions search-icon-wrapper"> | ||
| // <SearchIcon className="search-icon" /> | ||
| // <input | ||
| // className="employee-search-input" | ||
| // type="text" | ||
| // placeholder={t(`ACTION_TEST_SEARCH`)} | ||
| // name="search" | ||
| // value={search} | ||
| // onChange={(e) => setSearch(e.target.value)} | ||
| // /> | ||
| // </div> | ||
| // </div> | ||
| // </div> | ||
| // ); | ||
| // }; | ||
|  | ||
| // return ( | ||
| // <div className="sidebar" ref={sidebarRef} onMouseOver={expandNav} onMouseLeave={collapseNav}> | ||
| // {renderSearch()} | ||
| // {splitKeyValue()} | ||
| // </div> | ||
| // ); | ||
| // }; | ||
|  | ||
| // export default EmployeeSideBar; | ||
|  | ||
|  | ||
|  | ||
| // import React, { useRef, useEffect, useState } from "react"; | ||
| // import SubMenu from "./SubMenu"; | ||
| // import { Loader, SearchIcon } from "@egovernments/digit-ui-react-components"; | ||
| // import { useTranslation } from "react-i18next"; | ||
| // import NavItem from "./NavItem"; | ||
| // import _, { findIndex } from "lodash"; | ||
|  | ||
| // const EmployeeSideBar = () => { | ||
| // const sidebarRef = useRef(null); | ||
| // const { isLoading, data } = Digit.Hooks.useAccessControl(); | ||
| // const [search, setSearch] = useState(""); | ||
| // const { t } = useTranslation(); | ||
| // useEffect(() => { | ||
| // if (isLoading) { | ||
| // return <Loader />; | ||
| // } | ||
| // sidebarRef.current.style.cursor = "pointer"; | ||
| // collapseNav(); | ||
| // }, [isLoading]); | ||
|  | ||
| // const expandNav = () => { | ||
| // sidebarRef.current.style.width = "260px"; | ||
| // sidebarRef.current.style.overflow = "auto"; | ||
|  | ||
| // sidebarRef.current.querySelectorAll(".dropdown-link").forEach((element) => { | ||
| // element.style.display = "flex"; | ||
| // }); | ||
| // }; | ||
| // const collapseNav = () => { | ||
| // sidebarRef.current.style.width = "55px"; | ||
| // sidebarRef.current.style.overflow = "hidden"; | ||
|  | ||
| // sidebarRef.current.querySelectorAll(".dropdown-link").forEach((element) => { | ||
| // element.style.display = "none"; | ||
| // }); | ||
| // sidebarRef.current.querySelectorAll(".actions").forEach((element) => { | ||
| // element.style.padding = "0"; | ||
| // }); | ||
| // }; | ||
|  | ||
| // const configEmployeeSideBar = {}; | ||
|  | ||
| // //creating the object structure from mdms value for easy iteration | ||
| // let configEmployeeSideBar1 = {}; | ||
| // data?.actions?.filter((e) => e.url === "url")?.forEach((item) => { | ||
| // _.set(configEmployeeSideBar1,item.path,{...item}) | ||
| // }) | ||
|  | ||
| // data?.actions | ||
| // .filter((e) => e.url === "url") | ||
| // .forEach((item) => { | ||
| // let index = item.path.split(".")[0]; | ||
| // if (search == "" && item.path !== "") { | ||
| // index = item.path.split(".")[0]; | ||
| // if (index === "TradeLicense") index = "Trade License"; | ||
| // if (!configEmployeeSideBar[index]) { | ||
| // configEmployeeSideBar[index] = [item]; | ||
| // } else { | ||
| // configEmployeeSideBar[index].push(item); | ||
| // } | ||
| // } else if (item.path !== "" && t(`ACTION_TEST_${index?.toUpperCase()?.replace(/[ -]/g, "_")}`)?.toLowerCase().includes(search.toLowerCase())) { | ||
| // index = item.path.split(".")[0]; | ||
| // if (index === "TradeLicense") index = "Trade License"; | ||
| // if (!configEmployeeSideBar[index]) { | ||
| // configEmployeeSideBar[index] = [item]; | ||
| // } else { | ||
| // configEmployeeSideBar[index].push(item); | ||
| // } | ||
| // } | ||
| // }); | ||
| // let res = []; | ||
|  | ||
| // if (isLoading) { | ||
| // return <Loader />; | ||
| // } | ||
| // if (!res) { | ||
| // return ""; | ||
| // } | ||
|  | ||
| // return ( | ||
| // <div className="sidebar" ref={sidebarRef} onMouseOver={expandNav} onMouseLeave={collapseNav}> | ||
| // {/* {renderSearch()} */} | ||
| // {/* {splitKeyValue()} */} | ||
| // <SubMenu />; | ||
| // </div> | ||
| // ); | ||
| // }; | ||
|  | ||
| // export default EmployeeSideBar; | ||
|  | ||
|  | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Remove all commented-out legacy code.
The file contains 279 lines of commented-out code from the previous implementation. This should be removed as version control preserves the history.
-// import React, { useRef, useEffect, useState } from "react";
-// import SubMenu from "./SubMenu";
-// ... (lines 1-279)
-// export default EmployeeSideBar;
-
-
-
import React, { useState, useEffect } from "react";Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/SideBar/EmployeeSideBar.js
from lines 1 to 279, remove all the commented-out legacy code blocks. This
includes all commented import statements, component code, and any other
commented sections related to the previous implementation. Keep only the active,
uncommented code to improve readability and maintainability, as version control
already preserves the history.
| FormStep, | ||
| RadioButtons, | ||
| CitizenInfoLabel, | ||
| LabelFieldPair, | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Import missing Timeline component.
The Timeline component is used on line 130 but not imported.
import { useLocation } from "react-router-dom";
+import Timeline from "../components/TLTimeline";Also applies to: 130-130
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTExemption.js
at line 6, the Timeline component is used at line 130 but not imported. Add an
import statement for the Timeline component alongside the other imports at the
top of the file to ensure it is properly referenced.
| if (arr.length == 2) return { i18nKey: "PROPERTYTAX_BILLING_SLAB_" + arr[1], code: item?.code }; | ||
| else return { i18nKey: "PROPERTYTAX_BILLING_SLAB_" + item?.code, code: item?.code }; | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Use template literals instead of string concatenation.
-          if (arr.length == 2) return { i18nKey: "PROPERTYTAX_BILLING_SLAB_" + arr[1], code: item?.code };
-          else return { i18nKey: "PROPERTYTAX_BILLING_SLAB_" + item?.code, code: item?.code };
+          if (arr.length == 2) return { i18nKey: `PROPERTYTAX_BILLING_SLAB_${arr[1]}`, code: item?.code };
+          else return { i18nKey: `PROPERTYTAX_BILLING_SLAB_${item?.code}`, code: item?.code };-          menu.push({ i18nKey: "PROPERTYTAX_BILLING_SLAB_" + usagecat[i].code.split(".")[1], code: usagecat[i].code });
+          menu.push({ i18nKey: `PROPERTYTAX_BILLING_SLAB_${usagecat[i].code.split(".")[1]}`, code: usagecat[i].code });-          <CardLabel className="card-label-smaller" style={{display:"contents",marginBottom:"0px",lineHeight:"inherit"}}>{t("Exemption Applicable") + " *"}</CardLabel>
+          <CardLabel className="card-label-smaller" style={{display:"contents",marginBottom:"0px",lineHeight:"inherit"}}>{`${t("Exemption Applicable")} *`}</CardLabel>Also applies to: 51-51, 104-104
🧰 Tools
🪛 Biome (1.9.4)
[error] 39-39: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
[error] 40-40: Template literals are preferred over string concatenation.
Unsafe fix: Use a template literal.
(lint/style/useTemplate)
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/PTExemption.js
at lines 39-40, 51, and 104, replace string concatenation used to build the
i18nKey with template literals for better readability and consistency. Change
expressions like "PROPERTYTAX_BILLING_SLAB_" + arr[1] to use backticks and ${}
syntax, e.g., `PROPERTYTAX_BILLING_SLAB_${arr[1]}`.
| const containerStyle = { | ||
| margin: "2rem auto", | ||
| padding: "2rem", | ||
| maxWidth: "1000px", | ||
| backgroundColor: "#fff", | ||
| borderRadius: "10px", | ||
| boxShadow: "0 0 10px rgba(0,0,0,0.1)", | ||
| fontFamily: "Arial, sans-serif" | ||
| }; | ||
|  | ||
| const labelStyle = { | ||
| display: "block", | ||
| fontFamily: 'Poppins', | ||
| fontWeight: 400, | ||
| fontSize: '14px', | ||
| lineHeight: '22px', | ||
| letterSpacing: '0%', | ||
| }; | ||
|  | ||
| const inputStyle = { | ||
| width: "213px", | ||
| padding: "8px", | ||
| marginBottom: "1rem", | ||
| borderRadius: "5px", | ||
| border: "1px solid #ccc" | ||
| }; | ||
|  | ||
| const selectStyle = { | ||
| ...inputStyle | ||
| }; | ||
|  | ||
| const rowStyle = { | ||
| display: "flex", | ||
| flexWrap: "wrap", | ||
| // gap: "1rem" | ||
| }; | ||
|  | ||
| const colStyle = { | ||
| // flex: "1 1 calc(33.333% - 1rem)", | ||
| minWidth: "250px", | ||
| marginRight: "0px" | ||
| }; | ||
|  | ||
| const buttonContainer = { | ||
| display: "flex", | ||
| justifyContent: "flex-end", | ||
| marginTop: "1.5rem", | ||
| gap: "1rem", | ||
| marginLeft: "auto", | ||
| marginRight: "20px", | ||
| }; | ||
|  | ||
| const clearButton = { | ||
| padding: "10px 20px", | ||
| backgroundColor: "white", | ||
| color: "red", | ||
| border: "1px solid red", | ||
| borderRadius: "5px", | ||
| cursor: "pointer" | ||
| }; | ||
|  | ||
| const searchButton = { | ||
| padding: "10px 20px", | ||
| backgroundColor: "#4b0082", | ||
| color: "white", | ||
| border: "none", | ||
| borderRadius: "5px", | ||
| cursor: "pointer" | ||
| }; | ||
| const dtat = { | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Extract inline styles to improve maintainability.
Consider moving these style objects to a separate file or at least outside the component to improve readability and reusability.
Create a new file PropertySearchForm.styles.js:
export const styles = {
  container: {
    margin: "2rem auto",
    padding: "2rem",
    maxWidth: "1000px",
    backgroundColor: "#fff",
    borderRadius: "10px",
    boxShadow: "0 0 10px rgba(0,0,0,0.1)",
    fontFamily: "Arial, sans-serif"
  },
  label: {
    display: "block",
    fontFamily: 'Poppins',
    fontWeight: 400,
    fontSize: '14px',
    lineHeight: '22px',
    letterSpacing: '0%',
  },
  // ... other styles
};🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/search/PropertySearchForm.js
around lines 126 to 195, the inline style objects are defined inside the
component, which reduces maintainability and readability. To fix this, move all
these style objects into a new separate file named PropertySearchForm.styles.js
as named exports. Then import these styles back into the component file and
replace the inline style definitions with references to the imported styles.
This will improve reusability and keep the component code cleaner.
| <h3 style={dtat}>CashDesk</h3> | ||
|  | ||
| <div> | ||
| <label style={labelStyle}>Assessment Year</label> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add htmlFor attributes to form labels for accessibility.
Form labels must be associated with their corresponding inputs for screen reader accessibility.
Example fix for line 210:
-          <label style={labelStyle}>Assessment Year</label>
-          <select style={selectStyle} name="assessmentYear" ref={register}>
+          <label htmlFor="assessmentYear" style={labelStyle}>Assessment Year</label>
+          <select id="assessmentYear" style={selectStyle} name="assessmentYear" ref={register}>Apply similar fixes to all other label/input pairs.
Also applies to: 220-220, 225-225, 230-230, 236-236, 240-240, 248-248, 255-255, 277-277, 281-281, 291-291, 296-296
🧰 Tools
🪛 Biome (1.9.4)
[error] 210-210: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/search/PropertySearchForm.js
at line 210 and other specified lines (220, 225, 230, 236, 240, 248, 255, 277,
281, 291, 296), add htmlFor attributes to each label element that correspond to
the id of their associated input element. This links labels to inputs for better
screen reader accessibility. Ensure each input has a unique id and update the
label's htmlFor to match that id.
| {/* {loggedIn && ( | ||
| <div style={{height:"40px"}}> | ||
| <Dropdown | ||
| option={userOptions} | ||
| optionKey={"name"} | ||
| select={handleUserDropdownSelection} | ||
| showArrow={true} | ||
| freeze={true} | ||
| customSelector={ | ||
| profilePic ? ( | ||
| <img src={profilePic} alt="user" style={{ width: 40, height: 40, borderRadius: "50%" }} /> | ||
| ) : ( | ||
| <TextToImg name={userDetails?.info?.name || "E"} /> | ||
| ) | ||
| } | ||
| /> | ||
| </div> | ||
| )} | ||
| </span> | ||
| )} */} | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Remove or implement the commented user dropdown.
This commented code should either be implemented or removed entirely.
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/TopBar.js
between lines 279 and 296, the user dropdown component is commented out. You
should either fully implement this dropdown by uncommenting the code and
ensuring all referenced variables and functions like userOptions,
handleUserDropdownSelection, profilePic, and userDetails are properly defined
and working, or remove this entire commented block to clean up the codebase.
| // import { Dropdown, Hamburger, TopBar as TopBarComponent } from "@egovernments/digit-ui-react-components"; | ||
| // import React from "react"; | ||
| // import { useHistory, useLocation } from "react-router-dom"; | ||
| // import ChangeCity from "../ChangeCity"; | ||
| // import ChangeLanguage from "../ChangeLanguage"; | ||
|  | ||
| // const TextToImg = (props) => ( | ||
| // <span className="user-img-txt" style={{backgroundColor:"#4729A3"}} onClick={props.toggleMenu} title={props.name}> | ||
| // {props?.name?.[0]?.toUpperCase()} | ||
| // </span> | ||
| // ); | ||
| // const TopBar = ({ | ||
| // t, | ||
| // stateInfo, | ||
| // toggleSidebar, | ||
| // isSidebarOpen, | ||
| // handleLogout, | ||
| // userDetails, | ||
| // CITIZEN, | ||
| // cityDetails, | ||
| // mobileView, | ||
| // userOptions, | ||
| // handleUserDropdownSelection, | ||
| // logoUrl, | ||
| // showLanguageChange = true, | ||
| // setSideBarScrollTop, | ||
| // }) => { | ||
| // const [profilePic, setProfilePic] = React.useState(null); | ||
|  | ||
| // React.useEffect(async () => { | ||
| // const tenant = Digit.ULBService.getCurrentTenantId(); | ||
| // const uuid = userDetails?.info?.uuid; | ||
| // if (uuid) { | ||
| // const usersResponse = await Digit.UserService.userSearch(tenant, { uuid: [uuid] }, {}); | ||
| // if (usersResponse && usersResponse.user && usersResponse.user.length) { | ||
| // const userDetails = usersResponse.user[0]; | ||
| // const thumbs = userDetails?.photo?.split(","); | ||
| // setProfilePic(thumbs?.at(0)); | ||
| // } | ||
| // } | ||
| // }, [profilePic !== null, userDetails?.info?.uuid]); | ||
|  | ||
| // const CitizenHomePageTenantId = Digit.ULBService.getCitizenCurrentTenant(true); | ||
|  | ||
| // let history = useHistory(); | ||
| // const { pathname } = useLocation(); | ||
|  | ||
| // const conditionsToDisableNotificationCountTrigger = () => { | ||
| // if (Digit.UserService?.getUser()?.info?.type === "EMPLOYEE") return false; | ||
| // if (Digit.UserService?.getUser()?.info?.type === "CITIZEN") { | ||
| // if (!CitizenHomePageTenantId) return false; | ||
| // else return true; | ||
| // } | ||
| // return false; | ||
| // }; | ||
|  | ||
| // const { data: { unreadCount: unreadNotificationCount } = {}, isSuccess: notificationCountLoaded } = Digit.Hooks.useNotificationCount({ | ||
| // tenantId: CitizenHomePageTenantId, | ||
| // config: { | ||
| // enabled: conditionsToDisableNotificationCountTrigger(), | ||
| // }, | ||
| // }); | ||
|  | ||
| // const updateSidebar = () => { | ||
| // if (!Digit.clikOusideFired) { | ||
| // toggleSidebar(true); | ||
| // setSideBarScrollTop(true); | ||
| // } else { | ||
| // Digit.clikOusideFired = false; | ||
| // } | ||
| // }; | ||
|  | ||
| // function onNotificationIconClick() { | ||
| // history.push("/digit-ui/citizen/engagement/notifications"); | ||
| // } | ||
|  | ||
| // const urlsToDisableNotificationIcon = (pathname) => | ||
| // !!Digit.UserService?.getUser()?.access_token | ||
| // ? false | ||
| // : ["/digit-ui/citizen/select-language", "/digit-ui/citizen/select-location"].includes(pathname); | ||
|  | ||
| // if (CITIZEN) { | ||
| // return ( | ||
| // <div> | ||
| // <TopBarComponent | ||
| // img={stateInfo?.logoUrlWhite} | ||
| // isMobile={true} | ||
| // toggleSidebar={updateSidebar} | ||
| // logoUrl={stateInfo?.logoUrlWhite} | ||
| // onLogout={handleLogout} | ||
| // userDetails={userDetails} | ||
| // notificationCount={unreadNotificationCount < 99 ? unreadNotificationCount : 99} | ||
| // notificationCountLoaded={notificationCountLoaded} | ||
| // cityOfCitizenShownBesideLogo={t(CitizenHomePageTenantId)} | ||
| // onNotificationIconClick={onNotificationIconClick} | ||
| // hideNotificationIconOnSomeUrlsWhenNotLoggedIn={urlsToDisableNotificationIcon(pathname)} | ||
| // changeLanguage={!mobileView ? <ChangeLanguage dropdown={true} /> : null} | ||
| // /> | ||
| // </div> | ||
| // ); | ||
| // } | ||
| // const loggedin = userDetails?.access_token ? true : false; | ||
| // return ( | ||
| // <div className="topbar"> | ||
| // {mobileView ? <Hamburger handleClick={toggleSidebar} color="#9E9E9E" /> : null} | ||
| // <img className="city" src={loggedin ? cityDetails?.logoId : stateInfo?.statelogo} /> | ||
| // <span style={{ display: "flex", alignItems: "center", justifyContent: "space-between", width: "100%" }}> | ||
| // {loggedin && | ||
| // (cityDetails?.city?.ulbGrade ? ( | ||
| // <p className="ulb" style={mobileView ? { fontSize: "14px", display: "inline-block" } : {}}> | ||
| // {t(cityDetails?.i18nKey).toUpperCase()}{" "} | ||
| // {t(`ULBGRADE_${cityDetails?.city?.ulbGrade.toUpperCase().replace(" ", "_").replace(".", "_")}`).toUpperCase()} | ||
| // </p> | ||
| // ) : ( | ||
| // <img className="state" src={logoUrl} /> | ||
| // ))} | ||
| // {!loggedin && ( | ||
| // <p className="ulb" style={mobileView ? { fontSize: "14px", display: "inline-block" } : {}}> | ||
| // {t(`MYCITY_${stateInfo?.code?.toUpperCase()}_LABEL`)} {t(`MYCITY_STATECODE_LABEL`)} | ||
| // </p> | ||
| // )} | ||
| // {!mobileView && ( | ||
| // <div className={mobileView ? "right" : "flex-right right w-80 column-gap-15"} style={!loggedin ? { width: "80%" } : {}}> | ||
| // <div className="left"> | ||
| // {!window.location.href.includes("employee/user/login") && !window.location.href.includes("employee/user/language-selection") && ( | ||
| // <ChangeCity dropdown={true} t={t} /> | ||
| // )} | ||
| // </div> | ||
| // <div className="left">{showLanguageChange && <ChangeLanguage dropdown={true} />}</div> | ||
| // {userDetails?.access_token && ( | ||
| // <div className="left"> | ||
| // <Dropdown | ||
| // option={userOptions} | ||
| // optionKey={"name"} | ||
| // select={handleUserDropdownSelection} | ||
| // showArrow={true} | ||
| // freeze={true} | ||
| // style={mobileView ? { right: 0 } : {}} | ||
| // optionCardStyles={{ overflow: "revert" }} | ||
| // customSelector={ | ||
| // profilePic == null ? ( | ||
| // <TextToImg name={userDetails?.info?.name || userDetails?.info?.userInfo?.name || "Employee"} /> | ||
| // ) : ( | ||
| // <img src={profilePic} style={{ height: "48px", width: "48px", borderRadius: "50%" }} /> | ||
| // ) | ||
| // } | ||
| // /> | ||
| // </div> | ||
| // )} | ||
| // <img className="state" src={logoUrl} /> | ||
| // </div> | ||
| // )} | ||
| // </span> | ||
| // </div> | ||
| // ); | ||
| // }; | ||
|  | ||
| // export default TopBar; | ||
|  | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Remove the large block of commented legacy code.
This extensive commented code should be removed. The git history will preserve it if needed.
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/TopBar.js
from lines 1 to 159, remove the entire large block of commented-out legacy code
to clean up the file. Since the git history retains this code, it is safe to
delete these comments and unused code to improve readability and
maintainability.
| <button onClick={() => document.documentElement.style.fontSize = "smaller"} style={{ background: "none", border: "none" }}>A-</button> | ||
| <button onClick={() => document.documentElement.style.fontSize = "larger"} style={{ background: "none", border: "none" }}>A+</button> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add type attribute to font size adjustment buttons.
-        <button onClick={() => document.documentElement.style.fontSize = "smaller"} style={{ background: "none", border: "none" }}>A-</button>
-        <button onClick={() => document.documentElement.style.fontSize = "larger"} style={{ background: "none", border: "none" }}>A+</button>
+        <button type="button" onClick={() => document.documentElement.style.fontSize = "smaller"} style={{ background: "none", border: "none" }}>A-</button>
+        <button type="button" onClick={() => document.documentElement.style.fontSize = "larger"} style={{ background: "none", border: "none" }}>A+</button>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <button onClick={() => document.documentElement.style.fontSize = "smaller"} style={{ background: "none", border: "none" }}>A-</button> | |
| <button onClick={() => document.documentElement.style.fontSize = "larger"} style={{ background: "none", border: "none" }}>A+</button> | |
| <button | |
| type="button" | |
| onClick={() => document.documentElement.style.fontSize = "smaller"} | |
| style={{ background: "none", border: "none" }} | |
| > | |
| A- | |
| </button> | |
| <button | |
| type="button" | |
| onClick={() => document.documentElement.style.fontSize = "larger"} | |
| style={{ background: "none", border: "none" }} | |
| > | |
| A+ | |
| </button> | 
🧰 Tools
🪛 Biome (1.9.4)
[error] 255-255: Provide an explicit type prop for the button element.
The default type of a button is submit, which causes the submission of a form when placed inside a form element. This is likely not the behaviour that you want inside a React application.
Allowed button types are: submit, button or reset
(lint/a11y/useButtonType)
[error] 256-256: Provide an explicit type prop for the button element.
The default type of a button is submit, which causes the submission of a form when placed inside a form element. This is likely not the behaviour that you want inside a React application.
Allowed button types are: submit, button or reset
(lint/a11y/useButtonType)
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/TopBar.js
around lines 255 to 256, the font size adjustment buttons lack a type attribute,
which can cause unintended form submissions if these buttons are inside a form.
Add type="button" to both buttons to explicitly specify their behavior and
prevent default form submission.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Review continued from previous batch...
| <span | ||
| className="user-img-txt" | ||
| onClick={toggleMenu} | ||
| title={name} | ||
| style={{ | ||
| backgroundColor: "#4729A3", | ||
| color: "#fff", | ||
| borderRadius: "50%", | ||
| width: "40px", | ||
| height: "40px", | ||
| display: "flex", | ||
| justifyContent: "center", | ||
| alignItems: "center", | ||
| fontWeight: "bold", | ||
| fontSize: "16px", | ||
| cursor: "pointer" | ||
| }} | ||
| > | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add keyboard event handlers for accessibility.
The TextToImg component has onClick but no keyboard event handlers, making it inaccessible to keyboard users.
 const TextToImg = ({ name, toggleMenu }) => (
   <span
     className="user-img-txt"
     onClick={toggleMenu}
+    onKeyDown={(e) => {
+      if (e.key === 'Enter' || e.key === ' ') {
+        e.preventDefault();
+        toggleMenu();
+      }
+    }}
+    role="button"
+    tabIndex={0}
     title={name}
     style={{
       backgroundColor: "#4729A3",🧰 Tools
🪛 Biome (1.9.4)
[error] 168-185: Enforce to have the onClick mouse event with the onKeyUp, the onKeyDown, or the onKeyPress keyboard event.
Actions triggered using mouse events should have corresponding keyboard events to account for keyboard-only navigation.
(lint/a11y/useKeyWithClickEvents)
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/TopBar.js
between lines 168 and 185, the span element with onClick handler lacks keyboard
event handlers, reducing accessibility for keyboard users. Add onKeyDown and
onKeyPress handlers to handle Enter and Space keys to trigger toggleMenu, and
ensure the element has a tabIndex of 0 to make it focusable by keyboard
navigation.
| <div onClick={handleNotificationClick} style={{ position: "relative", cursor: "pointer" }}> | ||
| <span role="img" aria-label="notification">🔔</span> | ||
| {notificationCountLoaded && unreadCount > 0 && ( | ||
| <span style={{ | ||
| position: "absolute", | ||
| top: "-6px", | ||
| right: "-6px", | ||
| background: "red", | ||
| color: "white", | ||
| borderRadius: "50%", | ||
| fontSize: "10px", | ||
| width: "16px", | ||
| height: "16px", | ||
| display: "flex", | ||
| alignItems: "center", | ||
| justifyContent: "center" | ||
| }}> | ||
| {unreadCount < 99 ? unreadCount : "99+"} | ||
| </span> | ||
| )} | ||
| </div> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add keyboard accessibility to notification bell.
The notification bell div has onClick but no keyboard support.
-        <div onClick={handleNotificationClick} style={{ position: "relative", cursor: "pointer" }}>
+        <div 
+          onClick={handleNotificationClick}
+          onKeyDown={(e) => {
+            if (e.key === 'Enter' || e.key === ' ') {
+              e.preventDefault();
+              handleNotificationClick();
+            }
+          }}
+          role="button"
+          tabIndex={0}
+          style={{ position: "relative", cursor: "pointer" }}
+        >📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <div onClick={handleNotificationClick} style={{ position: "relative", cursor: "pointer" }}> | |
| <span role="img" aria-label="notification">🔔</span> | |
| {notificationCountLoaded && unreadCount > 0 && ( | |
| <span style={{ | |
| position: "absolute", | |
| top: "-6px", | |
| right: "-6px", | |
| background: "red", | |
| color: "white", | |
| borderRadius: "50%", | |
| fontSize: "10px", | |
| width: "16px", | |
| height: "16px", | |
| display: "flex", | |
| alignItems: "center", | |
| justifyContent: "center" | |
| }}> | |
| {unreadCount < 99 ? unreadCount : "99+"} | |
| </span> | |
| )} | |
| </div> | |
| <div | |
| onClick={handleNotificationClick} | |
| onKeyDown={(e) => { | |
| if (e.key === 'Enter' || e.key === ' ') { | |
| e.preventDefault(); | |
| handleNotificationClick(); | |
| } | |
| }} | |
| role="button" | |
| tabIndex={0} | |
| style={{ position: "relative", cursor: "pointer" }} | |
| > | |
| <span role="img" aria-label="notification">🔔</span> | |
| {notificationCountLoaded && unreadCount > 0 && ( | |
| <span style={{ | |
| position: "absolute", | |
| top: "-6px", | |
| right: "-6px", | |
| background: "red", | |
| color: "white", | |
| borderRadius: "50%", | |
| fontSize: "10px", | |
| width: "16px", | |
| height: "16px", | |
| display: "flex", | |
| alignItems: "center", | |
| justifyContent: "center" | |
| }}> | |
| {unreadCount < 99 ? unreadCount : "99+"} | |
| </span> | |
| )} | |
| </div> | 
🧰 Tools
🪛 Biome (1.9.4)
[error] 258-258: Enforce to have the onClick mouse event with the onKeyUp, the onKeyDown, or the onKeyPress keyboard event.
Actions triggered using mouse events should have corresponding keyboard events to account for keyboard-only navigation.
(lint/a11y/useKeyWithClickEvents)
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/TopBarSideBar/TopBar.js
around lines 258 to 278, the notification bell div has an onClick handler but
lacks keyboard accessibility. To fix this, add tabIndex="0" to make it
focusable, and implement an onKeyDown handler that triggers
handleNotificationClick when the Enter or Space key is pressed, ensuring
keyboard users can activate the notification bell.
| // import React, { useCallback, useMemo, useEffect } from "react" | ||
| // import { useForm, Controller } from "react-hook-form"; | ||
| // import { TextInput, SubmitBar, LinkLabel, ActionBar, CloseSvg, DatePicker, CardLabelError, SearchForm, SearchField, Dropdown, Table, Card, MobileNumber, Loader, CardText, Header } from "@egovernments/digit-ui-react-components"; | ||
| // import { Link } from "react-router-dom"; | ||
| // import MobileSearchApplication from "./MobileSearchApplication"; | ||
|  | ||
| // const PTSearchApplication = ({tenantId, isLoading, t, onSubmit, data, count, setShowToast }) => { | ||
| // const isMobile = window.Digit.Utils.browser.isMobile(); | ||
| // const { register, control, handleSubmit, setValue, getValues, reset, formState } = useForm({ | ||
| // defaultValues: { | ||
| // offset: 0, | ||
| // limit: !isMobile && 10, | ||
| // sortBy: "commencementDate", | ||
| // sortOrder: "DESC" | ||
| // } | ||
| // }) | ||
| // useEffect(() => { | ||
| // register("offset", 0) | ||
| // register("limit", 10) | ||
| // register("sortBy", "commencementDate") | ||
| // register("sortOrder", "DESC") | ||
| // },[register]) | ||
| // //need to get from workflow | ||
| // const applicationTypes = [ | ||
| // { | ||
| // code: "CREATE", | ||
| // i18nKey: "CREATE" | ||
| // }, | ||
| // { | ||
| // code: "UPDATE", | ||
| // i18nKey: "UPDATE" | ||
| // }, | ||
| // { | ||
| // code: "MUTATION", | ||
| // i18nKey: "MUTATION" | ||
| // }, | ||
| // ] | ||
| // const applicationStatuses = [ | ||
| // { | ||
| // code: "ACTIVE", | ||
| // i18nKey: "WF_PT_ACTIVE" | ||
| // }, | ||
| // { | ||
| // code: "INACTIVE", | ||
| // i18nKey: "WF_PT_INACTIVE" | ||
| // }, | ||
| // { | ||
| // code: "INWORKFLOW", | ||
| // i18nKey: "WF_PT_INWORKFLOW" | ||
| // }, | ||
| // ] | ||
|  | ||
| // const getaddress = (address) => { | ||
| // let newaddr = `${address?.doorNo ? `${address?.doorNo}, ` : ""} ${address?.street ? `${address?.street}, ` : ""}${ | ||
| // address?.landmark ? `${address?.landmark}, ` : "" | ||
| // }${t(address?.locality.code)}, ${t(address?.city)},${t(address?.pincode) ? `${address.pincode}` : " "}` | ||
| // return newaddr; | ||
| // } | ||
| // const GetCell = (value) => <span className="cell-text">{value}</span>; | ||
| // const columns = useMemo( () => ([ | ||
| // { | ||
| // Header: t("PT_SEARCHPROPERTY_TABEL_PID"), | ||
| // disableSortBy: true, | ||
| // accessor: (row) => GetCell(row.propertyId || ""), | ||
| // }, | ||
| // { | ||
| // Header: t("PT_APPLICATION_NO_LABEL"), | ||
| // accessor: "acknowldgementNumber", | ||
| // disableSortBy: true, | ||
| // Cell: ({ row }) => { | ||
| // return ( | ||
| // <div> | ||
| // <span className="link"> | ||
| // <Link to={`/digit-ui/employee/pt/applicationsearch/application-details/${row.original["propertyId"]}`}> | ||
| // {row.original["acknowldgementNumber"]} | ||
| // </Link> | ||
| // </span> | ||
| // </div> | ||
| // ); | ||
| // }, | ||
| // }, | ||
| // { | ||
| // Header: t("PT_SEARCHPROPERTY_TABEL_APPLICATIONTYPE"), | ||
| // disableSortBy: true, | ||
| // accessor: (row) => GetCell(row.creationReason || ""), | ||
| // }, | ||
| // { | ||
| // Header: t("PT_COMMON_TABLE_COL_OWNER_NAME"), | ||
| // accessor: (row) => GetCell(row.owners.map( o => o.name ). join(",") || ""), | ||
| // disableSortBy: true, | ||
| // }, | ||
| // { | ||
| // Header: t("ES_SEARCH_PROPERTY_STATUS"), | ||
| // accessor: (row) =>GetCell(t( row?.status &&`WF_PT_${row.status}`|| "NA") ), | ||
| // disableSortBy: true, | ||
| // }, | ||
| // { | ||
| // Header: t("PT_ADDRESS_LABEL"), | ||
| // disableSortBy: true, | ||
| // accessor: (row) => GetCell(getaddress(row.address) || ""), | ||
| // }, | ||
| // ]), [] ) | ||
|  | ||
| // const onSort = useCallback((args) => { | ||
| // if (args.length === 0) return | ||
| // setValue("sortBy", args.id) | ||
| // setValue("sortOrder", args.desc ? "DESC" : "ASC") | ||
| // }, []) | ||
|  | ||
| // function onPageSizeChange(e){ | ||
| // setValue("limit",Number(e.target.value)) | ||
| // handleSubmit(onSubmit)() | ||
| // } | ||
|  | ||
| // function nextPage () { | ||
| // setValue("offset", getValues("offset") + getValues("limit")) | ||
| // handleSubmit(onSubmit)() | ||
| // } | ||
| // function previousPage () { | ||
| // setValue("offset", getValues("offset") - getValues("limit") ) | ||
| // handleSubmit(onSubmit)() | ||
| // } | ||
| // let validation={} | ||
|  | ||
| // return <React.Fragment> | ||
| // {isMobile ? | ||
| // <MobileSearchApplication {...{ Controller, register, control, t, reset, previousPage, handleSubmit, tenantId, data, onSubmit, formState, setShowToast }}/> | ||
| // : | ||
| // <div> | ||
| // <Header>{t("PT_SEARCH_PROP_APP")}</Header> | ||
| // < Card className={"card-search-heading"}> | ||
| // <span style={{color:"#505A5F"}}>{t("Provide at least one parameter to search for an application")}</span> | ||
| // </Card> | ||
| // <SearchForm onSubmit={onSubmit} handleSubmit={handleSubmit}> | ||
| // <SearchField> | ||
| // <label>{t("PT_APPLICATION_NO_LABEL")}</label> | ||
| // <TextInput name="acknowledgementIds" inputRef={register({})} /> | ||
| // </SearchField> | ||
| // <SearchField> | ||
| // <label>{t("PT_SEARCHPROPERTY_TABEL_PID")}</label> | ||
| // <TextInput name="propertyIds" inputRef={register({})} /> | ||
| // </SearchField> | ||
| // <SearchField> | ||
| // <label>{t("PT_OWNER_MOBILE_NO")}</label> | ||
| // <MobileNumber | ||
| // name="mobileNumber" | ||
| // inputRef={register({ | ||
| // minLength: { | ||
| // value: 10, | ||
| // message: t("CORE_COMMON_MOBILE_ERROR"), | ||
| // }, | ||
| // maxLength: { | ||
| // value: 10, | ||
| // message: t("CORE_COMMON_MOBILE_ERROR"), | ||
| // }, | ||
| // pattern: { | ||
| // value: /[6789][0-9]{9}/, | ||
| // //type: "tel", | ||
| // message: t("CORE_COMMON_MOBILE_ERROR"), | ||
| // }, | ||
| // })} | ||
| // type="number" | ||
| // componentInFront={<div className="employee-card-input employee-card-input--front">+91</div>} | ||
| // //maxlength={10} | ||
| // /> | ||
| // <CardLabelError>{formState?.errors?.["mobileNumber"]?.message}</CardLabelError> | ||
| // </SearchField> | ||
| // <SearchField> | ||
| // <label>{t("PT_SEARCHPROPERTY_TABEL_APPLICATIONTYPE")}</label> | ||
| // <Controller | ||
| // control={control} | ||
| // name="creationReason" | ||
| // render={(props) => ( | ||
| // <Dropdown | ||
| // selected={props.value} | ||
| // select={props.onChange} | ||
| // onBlur={props.onBlur} | ||
| // option={applicationTypes} | ||
| // optionKey="i18nKey" | ||
| // t={t} | ||
| // disable={false} | ||
| // /> | ||
| // )} | ||
| // /> | ||
| // </SearchField> | ||
| // <SearchField> | ||
| // <label>{t("ES_SEARCH_PROPERTY_STATUS")}</label> | ||
| // <Controller | ||
| // control={control} | ||
| // name="status" | ||
| // render={(props) => ( | ||
| // <Dropdown | ||
| // selected={props.value} | ||
| // select={props.onChange} | ||
| // onBlur={props.onBlur} | ||
| // option={applicationStatuses} | ||
| // optionKey="i18nKey" | ||
| // t={t} | ||
| // disable={false} | ||
| // /> | ||
| // )} | ||
| // /> | ||
| // </SearchField> | ||
| // <SearchField> | ||
| // <label>{t("PT_FROM_DATE")}</label> | ||
| // <Controller | ||
| // render={(props) => <DatePicker date={props.value} disabled={false} onChange={props.onChange} />} | ||
| // name="fromDate" | ||
| // control={control} | ||
| // /> | ||
| // </SearchField> | ||
| // <SearchField> | ||
| // <label>{t("PT_TO_DATE")}</label> | ||
| // <Controller | ||
| // render={(props) => <DatePicker date={props.value} disabled={false} onChange={props.onChange} />} | ||
| // name="toDate" | ||
| // control={control} | ||
| // /> | ||
| // </SearchField> | ||
| // <SearchField className="submit"> | ||
| // <SubmitBar label={t("ES_COMMON_SEARCH")} submit /> | ||
| // <p style={{marginTop:"10px"}} | ||
| // onClick={() => { | ||
| // reset({ | ||
| // acknowledgementIds: "", | ||
| // fromDate: "", | ||
| // toDate: "", | ||
| // propertyIds: "", | ||
| // mobileNumber:"", | ||
| // status: "", | ||
| // creationReason: "", | ||
| // offset: 0, | ||
| // limit: 10, | ||
| // sortBy: "commencementDate", | ||
| // sortOrder: "DESC" | ||
| // }); | ||
| // setShowToast(null); | ||
| // previousPage(); | ||
| // }}>{t(`ES_COMMON_CLEAR_ALL`)}</p> | ||
| // </SearchField> | ||
| // </SearchForm> | ||
| // {!isLoading && data?.display ? <Card style={{ marginTop: 20 }}> | ||
| // { | ||
| // t(data.display) | ||
| // .split("\\n") | ||
| // .map((text, index) => ( | ||
| // <p key={index} style={{ textAlign: "center" }}> | ||
| // {text} | ||
| // </p> | ||
| // )) | ||
| // } | ||
| // </Card> | ||
| // :(!isLoading && data !== ""? <Table | ||
| // t={t} | ||
| // data={data} | ||
| // totalRecords={count} | ||
| // columns={columns} | ||
| // getCellProps={(cellInfo) => { | ||
| // return { | ||
| // style: { | ||
| // minWidth: cellInfo.column.Header === t("ES_INBOX_APPLICATION_NO") ? "240px" : "", | ||
| // padding: "20px 18px", | ||
| // fontSize: "16px" | ||
| // }, | ||
| // }; | ||
| // }} | ||
| // onPageSizeChange={onPageSizeChange} | ||
| // currentPage={getValues("offset")/getValues("limit")} | ||
| // onNextPage={nextPage} | ||
| // onPrevPage={previousPage} | ||
| // pageSizeLimit={getValues("limit")} | ||
| // onSort={onSort} | ||
| // disableSort={false} | ||
| // sortParams={[{id: getValues("sortBy"), desc: getValues("sortOrder") === "DESC" ? true : false}]} | ||
| // />: data !== "" || isLoading && <Loader/>)} | ||
| // </div>} | ||
| // </React.Fragment> | ||
| // } | ||
|  | ||
| // export default PTSearchApplication | ||
|  | ||
|  | ||
|  | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Remove the extensive commented code block.
This large block of commented code should be removed from the codebase.
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/SearchApplication.js
from lines 1 to 283, remove the entire large commented-out code block as it is
unnecessary and clutters the codebase.
| <label style={{ | ||
| fontFamily: "Poppins", | ||
| fontWeight: 400, | ||
| fontSize: "14px", | ||
| lineHeight: "22px", | ||
| letterSpacing: "0%", | ||
| color: "#282828" | ||
| }}>{t("PT_APPLICATION_NO_LABEL")}</label> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add htmlFor attributes to form labels.
Form labels need to be associated with their inputs for accessibility.
Example fix:
-                            <label style={{...}}>{t("PT_APPLICATION_NO_LABEL")}</label>
-                            <TextInput name="acknowledgementIds" style={{borderRadius:"6px",height:"35px"}} inputRef={register({})} />
+                            <label htmlFor="acknowledgementIds" style={{...}}>{t("PT_APPLICATION_NO_LABEL")}</label>
+                            <TextInput id="acknowledgementIds" name="acknowledgementIds" style={{borderRadius:"6px",height:"35px"}} inputRef={register({})} />Also applies to: 442-449, 453-460, 491-498, 517-524, 532-539
🧰 Tools
🪛 Biome (1.9.4)
[error] 431-438: A form label must be associated with an input.
Consider adding a for or htmlFor attribute to the label element or moving the input element to inside the label element.
(lint/a11y/noLabelWithoutControl)
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/SearchApplication.js
around lines 431 to 438, the label elements lack htmlFor attributes linking them
to their corresponding input elements, which is necessary for accessibility. Add
the htmlFor attribute to each label with the value matching the id of the
associated input element. Repeat this fix for the label-input pairs in lines
442-449, 453-460, 491-498, 517-524, and 532-539 as well.
| let newaddr = `${address?.doorNo ? `${address?.doorNo}, ` : ""} ${address?.street ? `${address?.street}, ` : ""}${ | ||
| address?.landmark ? `${address?.landmark}, ` : "" | ||
| }${t(address?.locality.code)}, ${t(address?.city)},${t(address?.pincode) ? `${address.pincode}` : " "}` | ||
| let newaddr = `${address?.doorNo ? `${address?.doorNo}, ` : ""} ${address?.street ? `${address?.street}, ` : ""}${address?.landmark ? `${address?.landmark}, ` : "" | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Use const instead of let for non-reassigned variables.
-        let newaddr = `${address?.doorNo ? `${address?.doorNo}, ` : ""} ${address?.street ? `${address?.street}, ` : ""}${address?.landmark ? `${address?.landmark}, ` : ""
+        const newaddr = `${address?.doorNo ? `${address?.doorNo}, ` : ""} ${address?.street ? `${address?.street}, ` : ""}${address?.landmark ? `${address?.landmark}, ` : ""📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| let newaddr = `${address?.doorNo ? `${address?.doorNo}, ` : ""} ${address?.street ? `${address?.street}, ` : ""}${address?.landmark ? `${address?.landmark}, ` : "" | |
| const newaddr = `${address?.doorNo ? `${address?.doorNo}, ` : ""} ${address?.street ? `${address?.street}, ` : ""}${address?.landmark ? `${address?.landmark}, ` : "" | 
🧰 Tools
🪛 Biome (1.9.4)
[error] 338-338: This let declares a variable that is only assigned once.
'newaddr' is never reassigned.
Safe fix: Use const instead.
(lint/style/useConst)
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/components/SearchApplication.js
at line 338, the variable newaddr is declared with let but it is not reassigned
later. Change the declaration from let to const to follow best practices for
variables that do not change.
| <tbody> | ||
| {applicationData?.units?.map((unit, index) => ( | ||
| <tr key={index}> | ||
| <td style={styles.td}>{unit.usageCategory || "N/A"}</td> | ||
| <td style={styles.td}>1.0</td> | ||
| <td style={styles.td}>{unit.floorNo || "N/A"}</td> | ||
| <td style={styles.td}>100%</td> | ||
| <td style={styles.td}>{unit.constructionDetail?.builtUpArea || "N/A"}</td> | ||
| <td style={styles.td}>10</td> | ||
| <td style={styles.td}>1000</td> | ||
| <td style={styles.td}>0</td> | ||
| <td style={styles.td}>1000</td> | ||
| <td style={styles.td}>100</td> | ||
| </tr> | ||
| ))} | ||
| </tbody> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Remove hard-coded values from property area table
The table contains hard-coded values for Usage Factor (1.0), Construction % (100%), Rate (10), ALV (1000), Discount (0), TPV (1000), and PTax (100). These should be calculated dynamically based on the actual property data.
🏁 Script executed:
#!/bin/bash
# Search for property calculation logic in the codebase
rg -A 5 "ALV|TPV|Usage.*Factor|Property.*Tax.*calculation" --type jsLength of output: 277319
Refactor Property Area Details table to use dynamic values and add row keys
Replace hard-coded literals and ensure each row has a stable key:
- In ApplicationDetailsContent.js(lines 957–972):- Replace hard-coded values
 • Usage Factor (1.0) →unit.usageFactor
 • Construction %(100%) →unit.constructionPercent
 • Rate (10) →unit.rate
 • ALV (1000) →unit.alv
 • Discount (0) →unit.discount
 • TPV (1000) →unit.tpv
 • PTax (100) →unit.ptax
- Add keyto each<tr>(e.g.key={unit.id || index})
 
- Replace hard-coded values
- Verify that the unitobject exposes these fields or implement their calculations in a shared utility.
Example diff:
<tbody>
  {applicationData?.units?.map((unit, index) => (
    <tr key={unit.id || index}>
      <td style={styles.td}>{unit.usageCategory || "N/A"}</td>
      <td style={styles.td}>{unit.usageFactor ?? "N/A"}</td>
      <td style={styles.td}>{unit.floorNo || "N/A"}</td>
      <td style={styles.td}>{unit.constructionPercent ?? "N/A"}</td>
      <td style={styles.td}>{unit.rate ?? "N/A"}</td>
      <td style={styles.td}>{unit.alv ?? "N/A"}</td>
      <td style={styles.td}>{unit.discount ?? "N/A"}</td>
      <td style={styles.td}>{unit.tpv ?? "N/A"}</td>
      <td style={styles.td}>{unit.ptax ?? "N/A"}</td>
    </tr>
  ))}
</tbody>
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/templates/ApplicationDetails/components/ApplicationDetailsContent.js
between lines 957 and 972, replace all hard-coded numeric values in the table
rows with their corresponding dynamic properties from the unit object:
usageFactor, constructionPercent, rate, alv, discount, tpv, and ptax. Also,
update the key prop on each <tr> to use unit.id if available, otherwise fallback
to the index, ensuring stable keys. Confirm these properties exist on unit or
implement their calculation elsewhere if missing.
| <textarea | ||
| rows="3" | ||
| style={styles.remarkBox} | ||
| /> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add state binding for remarks textarea
The remarks textarea is marked as required but has no value or onChange handler.
+  const [remarks, setRemarks] = useState("");
+
   // In the textarea:
   <textarea
     rows="3"
     style={styles.remarkBox}
+    value={remarks}
+    onChange={(e) => setRemarks(e.target.value)}
+    required
   />📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <textarea | |
| rows="3" | |
| style={styles.remarkBox} | |
| /> | |
| // (somewhere near the top of your component) | |
| const [remarks, setRemarks] = useState(""); | |
| // …later, in your JSX… | |
| // In the textarea: | |
| <textarea | |
| rows="3" | |
| style={styles.remarkBox} | |
| value={remarks} | |
| onChange={(e) => setRemarks(e.target.value)} | |
| required | |
| /> | 
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/templates/ApplicationDetails/components/ApplicationDetailsContent.js
around lines 1347 to 1350, the remarks textarea is missing state binding and an
onChange handler despite being required. To fix this, define a state variable to
hold the textarea value and add an onChange handler to update this state. Bind
the textarea's value attribute to this state variable to ensure controlled input
behavior.
| import { values } from "lodash"; | ||
| import React, { Fragment } from "react"; | ||
| import React, { Fragment, useState } from "react"; | ||
| import { useTranslation } from "react-i18next"; | ||
| import { Link } from "react-router-dom"; | ||
| import BPADocuments from "./BPADocuments"; | ||
| import InspectionReport from "./InspectionReport"; | ||
| import NOCDocuments from "./NOCDocuments"; | ||
| import PermissionCheck from "./PermissionCheck"; | ||
| import PropertyDocuments from "./PropertyDocuments"; | ||
| import PropertyEstimates from "./PropertyEstimates"; | ||
| import PropertyFloors from "./PropertyFloors"; | ||
| import PropertyOwners from "./PropertyOwners"; | ||
| import ScruntinyDetails from "./ScruntinyDetails"; | ||
| import SubOccupancyTable from "./SubOccupancyTable"; | ||
|  | ||
| import TLCaption from "./TLCaption"; | ||
| import TLTradeAccessories from "./TLTradeAccessories"; | ||
| import TLTradeUnits from "./TLTradeUnits"; | ||
| import WSAdditonalDetails from "./WSAdditonalDetails"; | ||
| import WSFeeEstimation from "./WSFeeEstimation"; | ||
| // import WSInfoLabel from "../../../ws/src/pageComponents/WSInfoLabel"; | ||
| import DocumentsPreview from "./DocumentsPreview"; | ||
| import InfoDetails from "./InfoDetails"; | ||
| import ViewBreakup from"./ViewBreakup"; | ||
|  | ||
| function ApplicationDetailsContent({ | ||
|  | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Remove unused imports
The values function from lodash and TLCaption component are imported but never used in the code.
 import {
   Card
 } from "@egovernments/digit-ui-react-components";
-import { values } from "lodash";
 import React, { Fragment, useState } from "react";
 import { useTranslation } from "react-i18next";
 import PropertyDocuments from "./PropertyDocuments";
-
-import TLCaption from "./TLCaption";📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| import { values } from "lodash"; | |
| import React, { Fragment } from "react"; | |
| import React, { Fragment, useState } from "react"; | |
| import { useTranslation } from "react-i18next"; | |
| import { Link } from "react-router-dom"; | |
| import BPADocuments from "./BPADocuments"; | |
| import InspectionReport from "./InspectionReport"; | |
| import NOCDocuments from "./NOCDocuments"; | |
| import PermissionCheck from "./PermissionCheck"; | |
| import PropertyDocuments from "./PropertyDocuments"; | |
| import PropertyEstimates from "./PropertyEstimates"; | |
| import PropertyFloors from "./PropertyFloors"; | |
| import PropertyOwners from "./PropertyOwners"; | |
| import ScruntinyDetails from "./ScruntinyDetails"; | |
| import SubOccupancyTable from "./SubOccupancyTable"; | |
| import TLCaption from "./TLCaption"; | |
| import TLTradeAccessories from "./TLTradeAccessories"; | |
| import TLTradeUnits from "./TLTradeUnits"; | |
| import WSAdditonalDetails from "./WSAdditonalDetails"; | |
| import WSFeeEstimation from "./WSFeeEstimation"; | |
| // import WSInfoLabel from "../../../ws/src/pageComponents/WSInfoLabel"; | |
| import DocumentsPreview from "./DocumentsPreview"; | |
| import InfoDetails from "./InfoDetails"; | |
| import ViewBreakup from"./ViewBreakup"; | |
| function ApplicationDetailsContent({ | |
| import { | |
| Card | |
| } from "@egovernments/digit-ui-react-components"; | |
| import React, { Fragment, useState } from "react"; | |
| import { useTranslation } from "react-i18next"; | |
| import PropertyDocuments from "./PropertyDocuments"; | 
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/templates/ApplicationDetails/components/ApplicationDetailsContent.js
around lines 432 to 438, the imports for `values` from lodash and `TLCaption`
component are not used anywhere in the code. Remove these two unused imports to
clean up the code and avoid unnecessary dependencies.
| const DeclarationSection = ({ t, config, onSelect, formData = {}, userType }) => { | ||
| const checkboxes = formData?.declaration || {}; | ||
|  | ||
| const handleChange = () => { | ||
| const updated = { ...checkboxes, selfDeclaration: !checkboxes.selfDeclaration }; | ||
| onSelect(config.key, updated); | ||
| }; | ||
|  | ||
| if (userType !== "employee") return null; | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Consider extracting styles to a separate file or using CSS modules.
While inline styles work for this component, consider moving the style definitions to a separate file or using CSS modules for better maintainability, especially given the comprehensive styling system introduced in IndexStyle.js.
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pageComponents/CreateProperty/DeclarationSection.js
around lines 4 to 12, the component uses inline styles which can reduce
maintainability. Refactor by moving these inline style definitions into a
separate CSS or CSS module file, then import and apply the styles via className
to keep styling consistent and easier to manage, aligning with the styling
approach used in IndexStyle.js.
| const CorrespondenceAddressSection = ({ | ||
| t, | ||
| correspondenceAddress, | ||
| handleCorrespondenceChange, | ||
| isSameAsPropertyAddress, | ||
| handleSameAsPropertyToggle, | ||
| styles,formErrors | ||
| }) => { | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Remove unused formErrors parameter.
The formErrors parameter is destructured but never used in the component. Consider removing it to clean up the interface.
-const CorrespondenceAddressSection = ({
-  t,
-  correspondenceAddress,
-  handleCorrespondenceChange,
-  isSameAsPropertyAddress,
-  handleSameAsPropertyToggle,
-  styles,formErrors
-}) => {
+const CorrespondenceAddressSection = ({
+  t,
+  correspondenceAddress,
+  handleCorrespondenceChange,
+  isSameAsPropertyAddress,
+  handleSameAsPropertyToggle,
+  styles
+}) => {📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| const CorrespondenceAddressSection = ({ | |
| t, | |
| correspondenceAddress, | |
| handleCorrespondenceChange, | |
| isSameAsPropertyAddress, | |
| handleSameAsPropertyToggle, | |
| styles,formErrors | |
| }) => { | |
| const CorrespondenceAddressSection = ({ | |
| t, | |
| correspondenceAddress, | |
| handleCorrespondenceChange, | |
| isSameAsPropertyAddress, | |
| handleSameAsPropertyToggle, | |
| styles | |
| }) => { | 
🤖 Prompt for AI Agents
In
frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/pages/citizen/Create/CorrespondenceAddressSection.js
around lines 3 to 10, the formErrors parameter is destructured but not used
anywhere in the component. Remove formErrors from the parameter list to clean up
the component interface and avoid unused variables.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (1)
- frontend/micro-ui/web/micro-ui-internals/example/.env(1 hunks)
🧰 Additional context used
🪛 Gitleaks (8.26.0)
frontend/micro-ui/web/micro-ui-internals/example/.env
15-15: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
16-16: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
| # SKIP_PREFLIGHT_CHECK=true | ||
| # REACT_APP_PROXY_API=https://unified-dev.digit.org | ||
| # REACT_APP_PROXY_ASSETS=https://unified-dev.digit.org | ||
| # REACT_APP_GLOBAL=https://s3.ap-south-1.amazonaws.com/egov-dev-assets/globalConfigs.js | ||
|  | ||
| # SKIP_PREFLIGHT_CHECK=true | ||
| # REACT_APP_USER_TYPE=EMPLOYEE | ||
| # REACT_APP_PROXY_API=https://urban.eydemoapp.in | ||
| # REACT_APP_PROXY_ASSETS=https://urban.eydemoapp.in | ||
| # REACT_APP_GLOBAL=https://tfstate8auyj.blob.core.windows.net/egov-dev-assets/globalConfigs.js | ||
|  | ||
|  | ||
| # SKIP_PREFLIGHT_CHECK=true | ||
| # REACT_APP_USER_TYPE=EMPLOYEE | ||
| # REACT_APP_EMPLOYEE_TOKEN=c835932f-2ad4-4d05-83d6-49e0b8c59f8a | ||
| # REACT_APP_CITIZEN_TOKEN=7cd58aae-30b3-41ed-a1b3-3417107a993c | ||
|  | ||
| SKIP_PREFLIGHT_CHECK=true | ||
| REACT_APP_USER_TYPE=EMPLOYEE | ||
| # REACT_APP_USER_TYPE=CITIZEN | ||
| # REACT_APP_PROXY_API=https://staging.digit.org | ||
| # REACT_APP_PROXY_ASSETS=https://staging.digit.org | ||
| # REACT_APP_GLOBAL=https://s3.ap-south-1.amazonaws.com/works-dev-asset/globalConfigsWorks.js | ||
|  | ||
| REACT_APP_PROXY_API=https://urban.eydemoapp.in | ||
| REACT_APP_PROXY_ASSETS=https://urban.eydemoapp.in | ||
| REACT_APP_GLOBAL=https://s3.ap-south-1.amazonaws.com/works-dev-asset/globalConfigsWorks.js | ||
|  | ||
| # SKIP_PREFLIGHT_CHECK=true | ||
| # REACT_APP_PROXY_API=https://unified-dev.digit.org | ||
| # REACT_APP_PROXY_ASSETS=https://unified-dev.digit.org | ||
| # REACT_APP_GLOBAL=https://s3.ap-south-1.amazonaws.com/egov-dev-assets/globalConfigs.js | ||
| # REACT_APP_USER_TYPE=EMPLOYEE No newline at end of file | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Streamline duplicated env blocks
Multiple, near-identical blocks (lines 1-11, 13-11, 18-28, 29-33) repeat the same variables with different values. This makes it hard to know which values are active and risks accidental deployment with the wrong configuration.
Suggested approach:
• Keep only one active block per environment (.env.development, .env.staging, .env.production).
• Delete or move commented reference values to .env.sample or docs.
This reduces noise and clarifies which variables the app will actually read.
🧰 Tools
🪛 Gitleaks (8.26.0)
15-15: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
16-16: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
🤖 Prompt for AI Agents
In frontend/micro-ui/web/micro-ui-internals/example/.env lines 1 to 33, there
are multiple duplicated environment variable blocks with different values,
causing confusion about which are active. To fix this, retain only one active
block corresponding to the intended environment and remove or relocate all other
commented blocks and reference values to a separate .env.sample file or
documentation. This will clarify which variables are used and reduce the risk of
deploying with incorrect settings.
| # REACT_APP_EMPLOYEE_TOKEN=c835932f-2ad4-4d05-83d6-49e0b8c59f8a | ||
| # REACT_APP_CITIZEN_TOKEN=7cd58aae-30b3-41ed-a1b3-3417107a993c | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
REACT_APP_EMPLOYEE_TOKEN and REACT_APP_CITIZEN_TOKEN expose real-looking UUIDs. Even though the lines are commented, they are now part of the git history and can be recovered.
Immediate actions:
- Purge these secrets from the repo history (e.g. git filter-repoorgit filter-branch+ force-push).
- Rotate/invalidate the exposed tokens in the backend.
- Keep secrets in a vault or CI secret manager and inject at build/runtime, never commit them—commented or not.
-# REACT_APP_EMPLOYEE_TOKEN=c835932f-2ad4-4d05-83d6-49e0b8c59f8a
-# REACT_APP_CITIZEN_TOKEN=7cd58aae-30b3-41ed-a1b3-3417107a993c📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| # REACT_APP_EMPLOYEE_TOKEN=c835932f-2ad4-4d05-83d6-49e0b8c59f8a | |
| # REACT_APP_CITIZEN_TOKEN=7cd58aae-30b3-41ed-a1b3-3417107a993c | 
🧰 Tools
🪛 Gitleaks (8.26.0)
15-15: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
16-16: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
🤖 Prompt for AI Agents
In frontend/micro-ui/web/micro-ui-internals/example/.env around lines 15 to 16,
there are hard-coded access tokens committed to version control, even though
commented out, they remain in git history and pose a security risk. Remove these
tokens from the git history using tools like git filter-repo or git
filter-branch followed by a force-push, rotate or invalidate the exposed tokens
in the backend, and ensure secrets are stored securely in a vault or CI secret
manager and injected at build or runtime without ever committing them to the
repository.
Changes In UI, LATEST Code.
Summary by CodeRabbit
New Features
Style
Refactor
Bug Fixes
Chores
Documentation