Skip to content

Conversation

@rajayush97
Copy link

@rajayush97 rajayush97 commented Jul 3, 2025

Changes In UI, LATEST Code.

Summary by CodeRabbit

  • New Features

    • Introduced extensive new and redesigned property tax forms and sections for citizen and employee users, including ownership, address, assessment, property details, attachments, and declarations.
    • Added new dashboard layouts, simplified navigation sidebars, and a streamlined top bar with updated branding and color scheme.
    • Implemented paginated inbox and application tables, preview and success modals, and enhanced document upload interfaces.
    • Expanded property tax workflow configurations, new hooks for metadata fetching, and additional dropdown options.
    • Added new routes and components for detailed application review, payment collection, and acknowledgment download.
  • Style

    • Updated application-wide color scheme from orange to purple for a refreshed look.
    • Enhanced UI consistency with detailed inline styles and CSS-in-JS for cards, tables, buttons, forms, and modals.
  • Refactor

    • Replaced legacy multi-step wizards with single-page, state-managed forms for improved validation and performance.
    • Simplified sidebar and submenu components, removing complex DOM manipulations and restructuring.
    • Rewrote key templates and content components for improved maintainability and user experience.
    • Streamlined top bar and header components with minimalistic layouts and reduced conditional rendering.
  • Bug Fixes

    • Improved form validation, error handling, and document upload robustness.
    • Fixed layout and responsiveness issues across multiple modules.
  • Chores

    • Updated environment variables, dependencies, and configuration files to support new features.
    • Added and reorganized hooks, services, and utilities for property tax metadata and workflow management.
  • Documentation

    • Enhanced code comments and structure for better readability and maintainability.

EY-DIGIT and others added 5 commits June 30, 2025 16:34
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jul 3, 2025

Walkthrough

This 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

File(s) / Path(s) Change Summary
.../.env.sample, .../setupProxy.js, .../package.json, .../urls.js, .../index.html Updated environment variables, proxy settings, package dependencies, and branding/title changes.
.../bannercomponents.scss, .../navbar.scss, .../topbar.scss, .../card.scss, .../citizen/container.scss, .../employee/inbox.scss, .../employee/index.scss, .../employee/login.scss, .../CardBasedOptions.scss Unified color theme (orange to purple), removed max-width, and updated backgrounds for various UI components.
.../hooks/index.js, .../hooks/pt/usePropertyMDMS.js, .../hooks/pt/useSalutationsMDMS.js, .../services/elements/MDMS.js Added new hooks and MDMS service methods for fetching salutations, assessment years, construction/occupancy types.
.../services/atoms/urls.js, .../elements/InboxService.js, .../elements/User/index.js Updated API endpoints, switched to v2 inbox search, and changed logout redirection for employees.
.../modules/core/src/components/Header.js, .../TopBar.js, .../Home.js, .../SideBar/*, .../NavItemHeader.js, .../StaticCitizenSideBar.js, .../SubMenu.js Refactored and simplified header, topbar, sidebar, and dashboard UIs; updated branding and removed legacy logic.
.../modules/core/src/pages/citizen/Home/index.js, .../citizen/index.js, .../employee/index.js, .../Login/login.js Refactored home pages, footers, and login layout; replaced static banners with styled cards and modular footers.
.../modules/pt/src/Module.js, .../config/Create/config.js Registered new PT form components and expanded configuration for dynamic, section-based form flows.
.../modules/pt/src/components/*, .../inboxTable.js, .../search/PropertySearchForm.js, .../search/PropertySearchResults.js Replaced generic table and search with custom, styled tables and forms; added debug logs and improved UX.
.../modules/pt/src/pageComponents/* Added new modular React components for address, ownership, assessment, document uploads, property tables, etc.
.../modules/pt/src/pages/citizen/Create/, .../employee/NewApplication/ Complete rewrite of property creation flows for both citizen and employee: single-page, validated, modular forms.
.../modules/pt/src/pages/employee/index.js, .../ApplicationDetails.js, .../PropertyDetails.js Added new routes and registry for property tax forms and previews; updated imports and layout styles.
.../modules/templates/ApplicationDetails/* Replaced complex application details UI with a simplified, inline-styled component; updated modal and action bars.
.../modules/pt/src/pages/citizen/PTMyApplications/index.js Switched from card list to a styled table for displaying citizen applications.
.../modules/pt/src/pages/employee/Inbox.js, .../ApplicationTable.js, .../inbox/search.js Updated inbox UI, removed headers, added debug logs, and improved search/clear controls.
.../modules/pt/src/pages/employee/SearchApp.js Integrated property search hook with conditional activation and improved result rendering.
.../modules/pt/src/pages/Response.js Restyled response page, moved download button, and commented out card wrappers.
.../modules/pt/src/pages/citizen/index.js Added (commented) new preview demand route and debug logs.
.../modules/pt/src/pages/employee/NewApplication/IndexStyle.js, .../citizen/Create/IndexStyle.js Added and exported unified style objects for new application pages.

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
Loading
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
Loading

Suggested reviewers

  • kavi-egov
  • vinothrallapalli-eGov
  • pradeepkumarcm-egov

Poem

A rabbit hopped into UI code,
With purple dreams and forms bestowed.
Address and owner, docs in tow,
Modular flows now steal the show!
Tables neat and dashboards bright,
Property tax is now a delight.
🐇✨ — Commit, hop, and code all night!

✨ Finishing Touches
  • 📝 Generate Docstrings

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.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need 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)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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 design

A 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, and Menu are 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: selectedLanguage becomes stale after first change

After a language is switched, the constant selectedLanguage still holds the initial value, so the selected prop given to <Dropdown> no longer reflects the current choice (only the customSelector does). 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 block

Fill 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 variable

The hard-coded #4729A3 breaks 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 in useEffect

window.addEventListener("resize", () => { … }) registers a new anonymous function on every re-render because the effect has no dependency array.
The corresponding removeEventListener uses 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-only
frontend/micro-ui/web/micro-ui-internals/packages/css/src/pages/employee/index.scss (1)

55-61: Prefer shared colour token over literal

Same comment as in topbar.scss – hard-coding #4729A3 makes 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 ApplicationTable implementation 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 code

Large 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 variable

The history object 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

📥 Commits

Reviewing files that changed from the base of the PR and between a5f49df and b2766d0.

⛔ Files ignored due to path filters (4)
  • frontend/micro-ui/web/micro-ui-internals/example/public/images/image.png is excluded by !**/*.png
  • frontend/micro-ui/web/micro-ui-internals/packages/css/img/image.png is excluded by !**/*.png
  • frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/assets/img/image.png is excluded by !**/*.png
  • frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/components/assets/img/imageSv.svg is 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

cashDeskIndex is two directories deeper than the old location. Please run a quick build / tree-shake to ensure the alias is correct and no duplicate ApplicationDetailsTemplate is 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" and boxShadow: "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 useSalutationsMDMS hook 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.InboxSearchV2 to Urls.InboxSearch is 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 DesktopInbox component 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 handleLogout prop to the EmployeeSideBar component 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 improvement

The logical OR operator formatting is cleaner and more readable.


55-57: Verify employee authentication redirection consistency

The logout flow in User/index.js now 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-selection for 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 for language-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 for revenue_localities – Localized Impact

The change from boundaryType=Locality to boundaryType=City in urls.js only affects the following internal usages:

  • packages/libraries/src/services/atoms/urls.js – the revenue_localities constant
  • packages/libraries/src/services/elements/Location.js#getRevenueLocalities – uses the updated URL
  • packages/libraries/src/services/molecules/Store/service.js – assigns initData.revenue_localities

No other code paths import or reference Urls.location.revenue_localities. The many literal‐string usages of /boundaryType=Locality in 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 dependency

The addition of http-proxy-middleware supports the proxy configuration updates seen in the setupProxy.js file.


5-10: LGTM: Formatting improvements

The 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 components

I 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, onBlur or userType
  • PTOldPropertyId – no config, formState, setError, clearErrors, onBlur or userType
  • PTPlotArea – no config, formState, setError, clearErrors, onBlur or userType

Please 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, and PTSelectZone are nested inside another div with rowStyle, 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?.declaration but doesn't handle the case where declaration might 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 on userType and 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 URLs

All 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 PropertyDetailsTableSection

All inputs in this component are rendered as disabled, and the provided handleUnitChange and formErrors props 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 URL

The 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 parameter

The t() function is called with usageCategoryMajor as 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 statement

Debug 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 PTPropertyTaxForm and PreviewDemand components 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 correctly

I verified that each component specified in frontend/micro-ui/web/micro-ui-internals/packages/modules/pt/src/config/Create/config.js has a corresponding implementation under src/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 requirement

The 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.

Comment on lines 8 to +9
<meta name="theme-color" content="#00bcd1"/>
<title>Digit</title>
<title>IMC</title>
Copy link
Contributor

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.

Suggested change
<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.

Comment on lines +11 to 13
console.log("cities", cities);
console.log("Digit",Digit)
const [selectedCity, setSelectedCity] = useState(() => ({ code: Digit.ULBService.getCitizenCurrentTenant(true) }));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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:

  1. Noise & performance overhead in production.
  2. 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.

Suggested change
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.

Comment on lines 38 to 40
return (
<div className="ground-container">
<div className="ground-container" style={{margin:"0px",padding:"0px"}}>
<Switch>
Copy link
Contributor

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.

Comment on lines +19 to 20
console.log("ApplicationTable data", data);
return (
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Suggested change
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.

Comment on lines 4 to 6
@apply w-full;
background-color: #4729A3B2 !important;
}
Copy link
Contributor

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.

Suggested change
@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.

Comment on lines +24 to +29
<input
type="checkbox"
onChange={handleSameAsPropertyToggle}
checked={isSameAsPropertyAddress}
style={{ padding: "10px" }}
/>
Copy link
Contributor

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.

Suggested change
<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 }) => {
Copy link
Contributor

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.

Comment on lines +18 to +27
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>
);
Copy link
Contributor

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.

Suggested change
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.

Comment on lines +3 to +5
STATE_LEVEL_TENANT_ID=pg
REACT_APP_PROXY_URL=https://urban.eydemoapp.in
REACT_APP_STATE_LEVEL_TENANT_ID=pg
Copy link
Contributor

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=pg

Committable 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.

Comment on lines +8 to +9
REACT_APP_EMPLOYEE_TOKEN=ec6a2db1-c000-4927-af21-f4ce13c1d75f
REACT_APP_CITIZEN_TOKEN=dce88a06-7e09-4923-97f9-f15af2deea66
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Suggested change
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.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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...

Comment on lines +13 to +14


Copy link
Contributor

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.

Comment on lines +19 to +24
<TextInput
name="correspondenceAddress"
value={address}
onChange={handleAddressChange}
style={{width: "100%" }}
/>
Copy link
Contributor

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.

Suggested change
<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";
Copy link
Contributor

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.

Suggested change
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.

Comment on lines +4 to +6
const PTOldPropertyId = ({ t, onSelect }) => {
const [address, setAddress] = useState("");
const [sameAsPropertyAddress, setSameAsPropertyAddress] = useState(false);
Copy link
Contributor

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";
Copy link
Contributor

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.

Suggested change
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.

Comment on lines +29 to +71
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;
Copy link
Contributor

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);
Copy link
Contributor

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.

Suggested change
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.

Comment on lines +125 to +132
<div style={{
fontFamily: "Poppins",
fontWeight: 500,
fontSize: "16px",
lineHeight: "100%",
letterSpacing: "0%",
color: "#4729A3",
}}>Application Details</div>
Copy link
Contributor

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.

Suggested change
<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.

Comment on lines +24 to +221
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"
}
Copy link
Contributor

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.

Comment on lines +3 to +23
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"
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Suggested change
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.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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";
Copy link
Contributor

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.

Suggested change
// 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>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Suggested change
<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.

Comment on lines +172 to +175
<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" />
Copy link
Contributor

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.

Suggested change
<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.

Comment on lines +156 to +262
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;
Copy link
Contributor

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.

Suggested change
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>
Copy link
Contributor

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.

Suggested change
<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);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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 @@

Copy link
Contributor

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.

Comment on lines +1 to +233
// 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;

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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>
Copy link
Contributor

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.

Suggested change
<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.

Comment on lines +591 to +618
<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>
Copy link
Contributor

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.js

Length 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.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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...

Comment on lines +452 to +454
<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>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Suggested change
<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.

Comment on lines 420 to 424
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>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Suggested change
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.

Comment on lines +16 to +30
// 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]);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

⚠️ Potential issue

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.

Comment on lines +84 to +91
<div style={checkboxContainer}>
<input
type="checkbox"
checked={sameAsProperty}
onChange={handleCheckboxChange}
/>
<label>{t("Same as property address")}</label>
</div>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Suggested change
<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 = {

Copy link
Contributor

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;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Suggested change
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.

Comment on lines +162 to +223
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",
};
Copy link
Contributor

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>
Copy link
Contributor

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.

Suggested change
<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.

Comment on lines +68 to +69
{property?.searchData?.propertyType?.includes('BUILTUP') ? 'Built-up Property' : 'Vacant Land'}
</td>
Copy link
Contributor

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.

Suggested change
{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.

Comment on lines +77 to +88
<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>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Suggested change
<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.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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...

Comment on lines +196 to +208
{/* <ApplicationDetailsContentVerifier
applicationDetails={applicationDetails}
workflowDetails={workflowDetails}
isDataLoading={isDataLoading}
applicationData={applicationData}
businessService={businessService}
timelineStatusPrefix={timelineStatusPrefix}
statusAttribute={statusAttribute}
paymentsList={paymentsList}
showTimeLine={showTimeLine}
oldValue={oldValue}
isInfoLabel={isInfoLabel}
/> */}
Copy link
Contributor

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.

Comment on lines +103 to +181
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();
};
Copy link
Contributor

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();
Copy link
Contributor

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.

Suggested change
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.

Comment on lines +115 to +118
values &&
values.map((ob) => {
Digit.SessionStorage.del(ob?.Noc?.[0]?.nocType);
});
Copy link
Contributor

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.

Suggested change
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
Copy link
Contributor

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.

Suggested change
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);
Copy link
Contributor

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.

Suggested change
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.

Comment on lines +545 to +561
{/* 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>
Copy link
Contributor

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.js

Length 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 useState hook 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.rateZone and formErrors?.rateZone
🤖 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.

Comment on lines +1 to +337
// 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;


Copy link
Contributor

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.

Comment on lines +124 to +126
{t(
"मैं यह सत्यापित करता / करती हूं कि उपरोक्त विवरणी मे दी गयी जानकारी सत्य है। मैने / हमने जिस भवन/ भूमि के संबंध मे विवरणी प्रस्तुत की है उसका मैं स्वामी/अधिभोगी हूं इसमे कोई भी तथ्य छू पाये अथवा गलत नहीं है। नोट - मध्यप्रदेश नगर पालिका (वार्षिक भाड़ा मूल्य का अवधारणा) नियम 1997 के नियम 10 (1) अंतर्गत प्रत्येक भवन स्वामी को स्व निर्धारण विवरणी (Self Assessment Form) के साथ संलग्नक (Attachment) scan कर सब्मिट करें । स्व निर्धारण विवरणी मौके पर सत्यापन के अध्याधीन रहेगी, जाँच मे अंतर पाये जाने पर या अन्य कारण से आवश्यक पाये जाने पर वार्षिक भाड़ा मूल्य का पुर्निर्धारण किया जाएगा व 0 प्रतिशत से अधिक अंतर पाये जाने पर सम्पतिकर के पुर्निर्धारण के अंतर की राशि की पाँच गुना शास्ति ,अधिरोपित की जा सकेगी।"
)}
Copy link
Contributor

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, "_")),
Copy link
Contributor

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.

Suggested change
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.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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...

Comment on lines +38 to +62
{/* <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> */}
Copy link
Contributor

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.

Comment on lines +290 to 293
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);

Copy link
Contributor

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.

Comment on lines +1 to +279
// 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;


Copy link
Contributor

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,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Comment on lines +39 to +40
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 };
Copy link
Contributor

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]}`.

Comment on lines +126 to +195
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 = {
Copy link
Contributor

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>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Comment on lines +279 to +296
{/* {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>
)} */}
Copy link
Contributor

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.

Comment on lines +1 to +159
// 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;

Copy link
Contributor

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.

Comment on lines +255 to +256
<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>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Suggested change
<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.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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...

Comment on lines +168 to +185
<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"
}}
>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Comment on lines +258 to +278
<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>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Suggested change
<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.

Comment on lines +1 to +283
// 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



Copy link
Contributor

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.

Comment on lines +431 to +438
<label style={{
fontFamily: "Poppins",
fontWeight: 400,
fontSize: "14px",
lineHeight: "22px",
letterSpacing: "0%",
color: "#282828"
}}>{t("PT_APPLICATION_NO_LABEL")}</label>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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}, ` : ""
Copy link
Contributor

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.

Suggested change
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.

Comment on lines +957 to +972
<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>
Copy link
Contributor

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 js

Length 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 key to each <tr> (e.g. key={unit.id || index})
  • Verify that the unit object 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.

Comment on lines +1347 to +1350
<textarea
rows="3"
style={styles.remarkBox}
/>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Suggested change
<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.

Comment on lines 432 to +438
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({

Copy link
Contributor

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.

Suggested change
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.

Comment on lines +4 to +12
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;
Copy link
Contributor

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.

Comment on lines +3 to +10
const CorrespondenceAddressSection = ({
t,
correspondenceAddress,
handleCorrespondenceChange,
isSameAsPropertyAddress,
handleSameAsPropertyToggle,
styles,formErrors
}) => {
Copy link
Contributor

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.

Suggested change
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.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

📥 Commits

Reviewing files that changed from the base of the PR and between b2766d0 and 7795bde.

📒 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)

Comment on lines +1 to +33
# 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
Copy link
Contributor

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.

Comment on lines +15 to +16
# REACT_APP_EMPLOYEE_TOKEN=c835932f-2ad4-4d05-83d6-49e0b8c59f8a
# REACT_APP_CITIZEN_TOKEN=7cd58aae-30b3-41ed-a1b3-3417107a993c
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

‼️ Hard-coded access tokens committed to VCS

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:

  1. Purge these secrets from the repo history (e.g. git filter-repo or git filter-branch + force-push).
  2. Rotate/invalidate the exposed tokens in the backend.
  3. 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.

Suggested change
# 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants