Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Console UI UX audit fixes #1746

Merged
merged 13 commits into from
Nov 6, 2024
Merged

Console UI UX audit fixes #1746

merged 13 commits into from
Nov 6, 2024

Conversation

suryansh-egov
Copy link
Collaborator

@suryansh-egov suryansh-egov commented Nov 5, 2024

Choose the appropriate template for your PR:

Summary by CodeRabbit

Release Notes

  • New Features

    • Updated CSS stylesheet to enhance visual consistency.
    • Introduced tooltip functionality across various components for improved user feedback.
    • Enhanced question numbering and management in checklist components.
    • Added new styles for mobile responsiveness in the employee checklist interface.
  • Bug Fixes

    • Improved error handling and state management in checklist creation and updates.
  • Style

    • Comprehensive updates to styling for employee and campaign management pages, ensuring a cohesive theme and improved layout.
    • New styles introduced for various components, including checkboxes, radio buttons, and mobile views.
  • Chores

    • Minor adjustments to component structures and import statements for better organization.

@suryansh-egov suryansh-egov requested a review from a team as a code owner November 5, 2024 11:55
Copy link
Contributor

coderabbitai bot commented Nov 5, 2024

📝 Walkthrough
📝 Walkthrough
📝 Walkthrough

Walkthrough

This pull request includes updates to various components and stylesheets within the health micro UI. Key changes involve updating a CSS stylesheet version in an HTML file, enhancing styling rules in SCSS files, and modifying JavaScript components to improve functionality and user interface elements. Notable additions include tooltip functionality in checkbox and dropdown components, adjustments to question handling in checklist components, and improvements in state management for active questions.

Changes

File Change Summary
health/micro-ui/web/micro-ui-internals/example/public/index.html Updated CSS stylesheet version from 0.1.21 to 0.1.22.
health/micro-ui/web/micro-ui-internals/packages/css/src/pages/employee/coreOverride.scss Added and modified CSS rules for various components, including new styles for .toast-success.animate and adjustments to z-index values for layout consistency.
health/micro-ui/web/micro-ui-internals/packages/css/src/pages/employee/index.scss Extensive layout adjustments, including new classes and modifications for improved spacing and typography.
health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/Checkboxes.js Added tooltip functionality and state management for input overflow; updated props to include parentNumber.
health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/CreateQuestion.js Enhanced question numbering system with new parentNumber prop; updated rendering logic for question labels.
health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/Dropdowns.js Introduced tooltip management and state variables for overflow detection; updated props to include parentNumber.
health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/MobileChecklist.js Simplified filtering logic and improved rendering of question titles with indices; adjusted interaction handling for options.
health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/MultipleChoice.js Added tooltip functionality and state management for overflow; updated props to include parentNumber.
health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/configs/UICustomizations.js Updated various configurations, including dynamic handling of switch labels and tooltip wrappers for improved UI context.
health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/CreateChecklist.js Enhanced generateCodes function for active question tracking; updated question object creation logic.
health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/SearchChecklist.js Adjusted layout with new spacing elements and modified card height to occupy full viewport height.
health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/SetupCampaign.js Updated URL construction in onActionSelect to include projectType query parameter.
health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/UpdateChecklist.js Added state variable for active status tracking and updated response processing logic for API data.
health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/ViewChecklist.js Modified question type handling in useEffect and adjusted pop-up button properties.
health/micro-ui/web/micro-ui-internals/packages/css/src/index.scss Added import statement for checklist.scss to include its styles in the overall stylesheet compilation.
health/micro-ui/web/micro-ui-internals/packages/css/src/pages/employee/checklist.scss Introduced comprehensive styles for various components in the employee checklist interface, enhancing layout and responsiveness.

Possibly related PRs

"In the garden of code, where changes bloom,
Styles and scripts weave a vibrant loom.
Tooltips dance and colors play,
Enhancing the UI in a joyful way.
With every line, a story unfolds,
A rabbit's delight in the code it holds! 🐇✨"


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ 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.
    • Generate unit testing code for this file.
    • 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 generate unit testing code for this file.
    • @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 generate unit testing code.
    • @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.

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

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

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.

@@ -1179,6 +1183,18 @@ tbody {
/* 10px */
}

.mobile-question-number {
Copy link
Collaborator

Choose a reason for hiding this comment

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

can u moe this to a new file called checklist styles and have it there?

@@ -129,8 +129,9 @@ const SearchChecklist = () => {
onStepClick={onStepClick}
activeSteps={6}
/>
<div style={{height:"2rem"}}></div>
<div style={{ display: "flex", justifyContent: "space-between" }}>
Copy link
Collaborator

Choose a reason for hiding this comment

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

add margin top instead of empty div

@@ -215,7 +216,7 @@ const SearchChecklist = () => {
<Card className="card-header-timeline">
<TextBlock subHeader={t("ACTION_LABEL_CONFIGURE_APP")} subHeaderClassName={"stepper-subheader"} wrapperClassName={"stepper-wrapper"} />
</Card>
<Card className="stepper-card">
<Card className="stepper-card" style={{height:"100vh"}}>
Copy link
Collaborator

Choose a reason for hiding this comment

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

remove this height

/>
{showTooltip && (
<Tooltip
Copy link
Collaborator

Choose a reason for hiding this comment

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

give some extra margin or pagging for the tooltip

@@ -54,6 +54,11 @@ const ViewChecklist = () => {
useEffect(() => {

if (data) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

remove some padding in preview of checklist

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: 42

🧹 Outside diff range comments (6)
health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/SearchChecklist.js (1)

Line range hint 1-249: Consider restructuring the component for better maintainability.

The component has several areas that could be improved:

  1. Component Organization:

    • Consider breaking down the large component into smaller, focused components (e.g., SearchHeader, ChecklistPopup)
    • Move the popup content to a separate component
  2. State Management:

    • Consider using a custom hook for managing checklist state
    • Group related state variables together
  3. Styling:

    • Move inline styles to CSS modules or styled components
    • Create consistent styling patterns
  4. Error Handling:

    • The toast notification for step clicks seems to block navigation without proper user feedback
    • Consider adding proper error boundaries

Would you like me to provide examples of how to implement these improvements?

🧰 Tools
🪛 Biome

[error] 132-132: 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)

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/UpdateChecklist.js (2)

Line range hint 75-95: Document type conversion logic and consider using constants.

The conversion between "String" and "Short Answer" types appears to be a workaround. Consider:

  1. Adding comments explaining why this conversion is necessary
  2. Using constants for the type values to prevent typos and improve maintainability
+    // Constants for question types
+    const QUESTION_TYPES = {
+      STRING: "String",
+      SHORT_ANSWER: "Short Answer"
+    };

     useEffect(() => {
         if (data) {
+            // Convert String type to Short Answer for UI display
             data.forEach((question) => {
-                if (question.type.code === "String") {
-                    question.type.code = "Short Answer";
+                if (question.type.code === QUESTION_TYPES.STRING) {
+                    question.type.code = QUESTION_TYPES.SHORT_ANSWER;
                 }
             });
             setViewData(data);
         }
     }, [data])

Line range hint 472-504: Fix React-specific issues in JSX.

  1. Add key prop for elements in iteration
  2. Use self-closing tags for elements without children
-                                <div></div>,
+                                <div key="footer-spacer" />,
     // ... other code ...
-                    <div style={{ height: "1rem" }}></div>
+                    <div style={{ height: "1rem" }} />
🧰 Tools
🪛 Biome

[error] 472-472: 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] 472-472: 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)

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/SetupCampaign.js (1)

Line range hint 1-700: Consider breaking down this large component for better maintainability.

The component is quite large and handles multiple responsibilities including form management, API calls, file uploads, and navigation. Consider:

  1. Extracting form-related logic into a custom hook (e.g., useCampaignForm)
  2. Moving API-related code into a separate service layer
  3. Creating smaller, focused components for each step of the campaign setup

Would you like me to provide a detailed refactoring plan with specific component breakdowns?

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/configs/UICustomizations.js (2)

Line range hint 73-635: Reduce code duplication across campaign configurations.

The configurations for different campaign states (Ongoing, Completed, Upcoming, Drafts, Failed) share significant code duplication, particularly in:

  • populateCampaignTypeReqCriteria method
  • Common action handling logic
  • Timeline popup implementation

Consider extracting common functionality into shared utilities:

  1. Create a shared MDMS criteria generator
  2. Create a common action handler
  3. Extract the timeline popup into a reusable component

Would you like me to provide a detailed refactoring plan?

🧰 Tools
🪛 Biome

[error] 76-76: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Unsafe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)


[error] 77-86: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Unsafe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)


[error] 89-89: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Unsafe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)


Line range hint 33-38: Add error boundary for service definition updates.

The updateServiceDefinition function's error handling is swallowing errors silently.

Add proper error boundary:

  try {
    const res = await Digit.CustomService.getResponse({
      url: "/service-request/service/definition/v1/_update",
      body: {
        ServiceDefinition: {
          "tenantId": tenantId,
          "code": sdcode,
          "isActive": newStatus
        },
      },
    });
-   if (res) {
-   }
    return res;
  } catch (error) {
-   // console.error("Error updating service definition:", error);
+   Digit.Utils.notify.error(t("HCM_SERVICE_UPDATE_ERROR"));
+   throw new Error(`Failed to update service definition: ${error.message}`);
    return null;
  }
🧰 Tools
🪛 Biome

[error] 76-76: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Unsafe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)


[error] 77-86: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Unsafe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)


[error] 89-89: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Unsafe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE

📥 Commits

Reviewing files that changed from the base of the PR and between fc47d06 and 5d65b92.

⛔ Files ignored due to path filters (1)
  • health/micro-ui/web/micro-ui-internals/packages/css/package.json is excluded by !**/*.json
📒 Files selected for processing (14)
  • health/micro-ui/web/micro-ui-internals/example/public/index.html (1 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/css/src/pages/employee/coreOverride.scss (1 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/css/src/pages/employee/index.scss (3 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/Checkboxes.js (5 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/CreateQuestion.js (10 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/Dropdowns.js (5 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/MobileChecklist.js (2 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/MultipleChoice.js (7 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/configs/UICustomizations.js (3 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/CreateChecklist.js (3 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/SearchChecklist.js (2 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/SetupCampaign.js (1 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/UpdateChecklist.js (10 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/ViewChecklist.js (2 hunks)
🧰 Additional context used
📓 Path-based instructions (11)
health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/Checkboxes.js (1)

Pattern **/*.js: check

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/CreateQuestion.js (1)

Pattern **/*.js: check

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/Dropdowns.js (1)

Pattern **/*.js: check

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/MobileChecklist.js (1)

Pattern **/*.js: check

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/MultipleChoice.js (1)

Pattern **/*.js: check

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/configs/UICustomizations.js (1)

Pattern **/*.js: check

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/CreateChecklist.js (1)

Pattern **/*.js: check

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/SearchChecklist.js (1)

Pattern **/*.js: check

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/SetupCampaign.js (1)

Pattern **/*.js: check

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/UpdateChecklist.js (1)

Pattern **/*.js: check

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/ViewChecklist.js (1)

Pattern **/*.js: check

🪛 Biome
health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/Checkboxes.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] 35-35: This let declares a variable that is only assigned once.

'dis' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 89-89: 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] 141-141: 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] 222-222: 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] 141-141: This let declares a variable that is only assigned once.

'dis' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/CreateQuestion.js

[error] 362-362: 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)

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/Dropdowns.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] 35-35: This let declares a variable that is only assigned once.

'dis' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 90-90: 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] 143-143: 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] 220-220: 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] 236-236: 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] 143-143: This let declares a variable that is only assigned once.

'dis' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 216-229: Avoid using unnecessary Fragment.

A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment

(lint/complexity/noUselessFragments)

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/MobileChecklist.js

[error] 17-17: 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] 43-43: 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] 50-50: 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)

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/MultipleChoice.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] 35-35: This let declares a variable that is only assigned once.

'dis' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 152-152: 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] 241-241: 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] 254-254: 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] 152-152: This let declares a variable that is only assigned once.

'dis' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 237-247: Avoid using unnecessary Fragment.

A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment

(lint/complexity/noUselessFragments)


[error] 250-260: Avoid using unnecessary Fragment.

A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment

(lint/complexity/noUselessFragments)

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/configs/UICustomizations.js

[error] 76-76: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Unsafe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)


[error] 77-86: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Unsafe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)


[error] 89-89: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Unsafe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/CreateChecklist.js

[error] 233-233: Template literals are preferred over string concatenation.

Unsafe fix: Use a template literal.

(lint/style/useTemplate)


[error] 207-207: This let declares a variable that is only assigned once.

'activeCounters' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 218-218: Reassigning a function parameter is confusing.

The parameter is declared here:

Use a local variable instead.

(lint/style/noParameterAssign)


[error] 233-233: Reassigning a function parameter is confusing.

The parameter is declared here:

Use a local variable instead.

(lint/style/noParameterAssign)


[error] 239-239: This let declares a variable that is only assigned once.

'moduleChecklist' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 241-241: This let declares a variable that is only assigned once.

'roleTemp' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 245-245: This let declares a variable that is only assigned once.

'formattedString' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 267-267: This let declares a variable that is only assigned once.

'formattedStringTemp' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 384-384: Avoid the delete operator which can impact performance.

Unsafe fix: Use an undefined assignment instead.

(lint/performance/noDelete)


[error] 389-389: This let declares some variables that are only assigned once.

'codes' is never reassigned.

'local' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 391-391: This let declares a variable that is only assigned once.

'final_payload' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/SearchChecklist.js

[error] 132-132: 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)

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/UpdateChecklist.js

[error] 18-18: Template literals are preferred over string concatenation.

Unsafe fix: Use a template literal.

(lint/style/useTemplate)


[error] 21-21: Template literals are preferred over string concatenation.

Unsafe fix: Use a template literal.

(lint/style/useTemplate)


[error] 20-20: This let declares a variable that is only assigned once.

'clt' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 181-181: Template literals are preferred over string concatenation.

Unsafe fix: Use a template literal.

(lint/style/useTemplate)


[error] 155-155: This let declares a variable that is only assigned once.

'activeCounters' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 166-166: Reassigning a function parameter is confusing.

The parameter is declared here:

Use a local variable instead.

(lint/style/noParameterAssign)


[error] 181-181: Reassigning a function parameter is confusing.

The parameter is declared here:

Use a local variable instead.

(lint/style/noParameterAssign)


[error] 187-187: This let declares a variable that is only assigned once.

'moduleChecklist' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 189-189: This let declares a variable that is only assigned once.

'roleTemp' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 193-193: This let declares a variable that is only assigned once.

'formattedString' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 215-215: This let declares a variable that is only assigned once.

'formattedStringTemp' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 332-332: Avoid the delete operator which can impact performance.

Unsafe fix: Use an undefined assignment instead.

(lint/performance/noDelete)


[error] 337-337: This let declares some variables that are only assigned once.

'codes' is never reassigned.

'local' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 339-339: This let declares a variable that is only assigned once.

'final_payload' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 472-472: 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] 472-472: 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] 504-504: 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)

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/ViewChecklist.js

[error] 177-177: 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] 177-177: 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)

🔇 Additional comments (10)
health/micro-ui/web/micro-ui-internals/example/public/index.html (1)

15-15: LGTM! Verify consistent stylesheet version across environments.

The CSS version update from 0.1.20 to 0.1.21 aligns with the broader styling updates mentioned in the summary.

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/Checkboxes.js (1)

89-89: ⚠️ Potential issue

Add key prop to Fragment iteration.

React requires a unique key for elements in an iteration to maintain component state and handle re-renders efficiently.

-<>
+<Fragment key={item.key}>

Likely invalid or redundant comment.

🧰 Tools
🪛 Biome

[error] 89-89: 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)

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/Dropdowns.js (2)

90-90: ⚠️ Potential issue

Add key prop to iterable element.

React requires a key prop for elements in an array to maintain component state and improve rendering performance.

-  <>
+  <Fragment key={item.key}>
     <DropdownOption
       key={item.key}
       // ... other props
     />
-  </>
+  </Fragment>

Likely invalid or redundant comment.

🧰 Tools
🪛 Biome

[error] 90-90: 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)


2-3: Verify consistent tooltip implementation across components.

The tooltip functionality has been added to this component. Let's verify if similar components in the codebase also implement tooltips consistently.

Also applies to: 138-142

✅ Verification successful

Let me gather more specific information about the tooltip implementation in these components.


Based on the gathered information, I can now provide the final response:

Tooltip implementation is consistent within the campaign-manager module

The tooltip functionality is consistently implemented across the campaign-manager components (Dropdowns.js, MultipleChoice.js, and Checkboxes.js) with:

  • Consistent import from @egovernments/digit-ui-components
  • Similar tooltip behavior using showTooltip state
  • Uniform positioning logic with adjustTooltipPosition
  • Consistent mouse event handling for tooltip visibility

The tooltip implementation in this file aligns with the module's existing patterns and doesn't require changes.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for other components that might need tooltip functionality
echo "Searching for similar input components that might need tooltips..."
rg -l "TextInput.*value.*onChange" --type js

# Check if Tooltip is consistently imported and used
echo "Checking Tooltip usage across components..."
rg "import.*Tooltip.*from.*@egovernments/digit-ui-components" --type js

Length of output: 2484


Script:

#!/bin/bash
# Check how Tooltip is being used in the campaign-manager components
echo "Checking Tooltip usage patterns in campaign-manager:"
rg -A 5 "Tooltip" health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/

# Check TextInput components specifically to see tooltip integration
echo "Checking TextInput with tooltip patterns:"
ast-grep --pattern 'TextInput $$$tooltip$$$'

# Check if there's any tooltip documentation or standards
echo "Checking for tooltip documentation:"
fd README.md --exec grep -l "tooltip" {} \;

Length of output: 20100

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/ViewChecklist.js (1)

Line range hint 178-185: Verify the button variation change impact.

The close button's variation has been changed from "secondary" to "primary". While this makes it more prominent, ensure this aligns with your design system's guidelines for modal actions.

🧰 Tools
🪛 Biome

[error] 177-177: 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] 177-177: 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)

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/MultipleChoice.js (1)

2-3: LGTM: Import and prop additions are appropriate.

The addition of Tooltip import and parentNumber prop aligns with the enhanced functionality for improved user interaction.

Also applies to: 32-33

health/micro-ui/web/micro-ui-internals/packages/css/src/pages/employee/index.scss (1)

1124-1129: LGTM! Mobile view styling improvements

The changes improve the mobile view's aesthetics by removing unnecessary borders and adding consistent padding.

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/UpdateChecklist.js (2)

355-355: LGTM: Proper state usage for isActive flag.

The isActive flag is correctly set from the component's state.


153-255: 🛠️ Refactor suggestion

Improve code generation logic with immutable parameters and const declarations.

The code generation logic has several areas for improvement:

  1. Avoid parameter reassignment
  2. Use const for variables that aren't reassigned
  3. Consider breaking down the complex logic into smaller functions
-    let activeCounters = { top: 0 };
+    const activeCounters = { top: 0 };

-    const generateCode = (question, prefix, index, parentCounter = '') => {
+    const generateCode = (question, prefix, index, initialParentCounter = '') => {
+        let currentParentCounter = initialParentCounter;
         // ... rest of the code ...
-        parentCounter = String(activeCounters.top);
+        currentParentCounter = String(activeCounters.top);
         // ... use currentParentCounter instead of parentCounter
     }
🧰 Tools
🪛 Biome

[error] 181-181: Template literals are preferred over string concatenation.

Unsafe fix: Use a template literal.

(lint/style/useTemplate)


[error] 155-155: This let declares a variable that is only assigned once.

'activeCounters' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 166-166: Reassigning a function parameter is confusing.

The parameter is declared here:

Use a local variable instead.

(lint/style/noParameterAssign)


[error] 181-181: Reassigning a function parameter is confusing.

The parameter is declared here:

Use a local variable instead.

(lint/style/noParameterAssign)


[error] 187-187: This let declares a variable that is only assigned once.

'moduleChecklist' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 189-189: This let declares a variable that is only assigned once.

'roleTemp' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 193-193: This let declares a variable that is only assigned once.

'formattedString' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 215-215: This let declares a variable that is only assigned once.

'formattedStringTemp' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/SetupCampaign.js (1)

653-659: LGTM! URL parameter enhancement looks good.

The addition of projectType to the URL parameters in the "HCM_CONFIGURE_APP" case is a good improvement for maintaining context during navigation.

✅ Verification successful

Based on the search results, I can generate the final response as we have sufficient information about URL parameter handling across the codebase.

URL parameter handling is consistent across the campaign manager module

The projectType parameter is consistently used across all navigation instances to the checklist/search route:

  • SetupCampaign.js: Both in the action handler and success callback
  • UpdateChecklist.js: In the success navigation
  • CreateChecklist.js: In the action link construction
  • UICustomizations.js: In the table row navigation handlers
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify consistent URL parameter handling across the codebase
# Look for other instances of campaign checklist navigation to ensure consistent parameter usage

# Search for checklist/search route usage
rg -A 3 "campaign/checklist/search\?" 

# Search for projectType parameter usage in URLs
rg "projectType=\$\{.*?\}"

Length of output: 4621

Comment on lines 192 to 200
.employee .digit-employeeSidebar .sidebar {
z-index: 999;
}
.employee .topbar {
z-index: 9999;
}
.digit-popup-overlay .digit-popup-wrapper {
z-index: 10000;
}
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 implementing a systematic z-index management approach.

While the z-index hierarchy is logically structured (sidebar < topbar < popup), using arbitrary large values can lead to maintainability issues. Consider refactoring to use SCSS variables for better z-index management.

+// Z-index layers
+$z-layer-base: 100;
+$z-layer-sidebar: $z-layer-base;
+$z-layer-topbar: $z-layer-base + 10;
+$z-layer-overlay: $z-layer-base + 20;
+
 .employee .digit-employeeSidebar .sidebar {
-  z-index: 999;
+  z-index: $z-layer-sidebar;
 }
 .employee .topbar {
-  z-index: 9999;
+  z-index: $z-layer-topbar;
 }
 .digit-popup-overlay .digit-popup-wrapper {
-  z-index: 10000;
+  z-index: $z-layer-overlay;
 }

This approach:

  • Makes z-index relationships explicit and maintainable
  • Allows easy adjustments to the entire stack by modifying the base value
  • Prevents z-index wars with arbitrary large numbers
📝 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
.employee .digit-employeeSidebar .sidebar {
z-index: 999;
}
.employee .topbar {
z-index: 9999;
}
.digit-popup-overlay .digit-popup-wrapper {
z-index: 10000;
}
// Z-index layers
$z-layer-base: 100;
$z-layer-sidebar: $z-layer-base;
$z-layer-topbar: $z-layer-base + 10;
$z-layer-overlay: $z-layer-base + 20;
.employee .digit-employeeSidebar .sidebar {
z-index: $z-layer-sidebar;
}
.employee .topbar {
z-index: $z-layer-topbar;
}
.digit-popup-overlay .digit-popup-wrapper {
z-index: $z-layer-overlay;
}

Comment on lines 389 to 391
let { codes, local } = generateCodes(processedData);
// let codes = generateCodes(processedData);
let final_payload = transformQuestions(processedData, tenantId, codes);
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 variables that are never reassigned.

codes, local, and final_payload are never reassigned, so they should be declared with const instead of let for better code clarity and to prevent accidental reassignment.

-    let { codes, local } = generateCodes(processedData);
-    let final_payload = transformQuestions(processedData, tenantId, codes);
+    const { codes, local } = generateCodes(processedData);
+    const final_payload = transformQuestions(processedData, tenantId, codes);
📝 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 { codes, local } = generateCodes(processedData);
// let codes = generateCodes(processedData);
let final_payload = transformQuestions(processedData, tenantId, codes);
const { codes, local } = generateCodes(processedData);
// let codes = generateCodes(processedData);
const final_payload = transformQuestions(processedData, tenantId, codes);
🧰 Tools
🪛 Biome

[error] 389-389: This let declares some variables that are only assigned once.

'codes' is never reassigned.

'local' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 391-391: This let declares a variable that is only assigned once.

'final_payload' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)

if (checklistTypeCode) checklistTypeTemp = checklistTypeCode;
option.label = transformedString;
let formattedStringTemp = `${campaignName}.${checklistTypeTemp}.${roleTemp}.${option.label}`;
let formattedStringTemp = `${campaignName}.${checklistTypeTemp}.${roleTemp}.${transformedString}`;
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 formattedStringTemp.

Since formattedStringTemp is never reassigned, it should be declared with const instead of let for better code clarity and to prevent accidental reassignment.

-          let formattedStringTemp = `${campaignName}.${checklistTypeTemp}.${roleTemp}.${transformedString}`;
+          const formattedStringTemp = `${campaignName}.${checklistTypeTemp}.${roleTemp}.${transformedString}`;
📝 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 formattedStringTemp = `${campaignName}.${checklistTypeTemp}.${roleTemp}.${transformedString}`;
const formattedStringTemp = `${campaignName}.${checklistTypeTemp}.${roleTemp}.${transformedString}`;
🧰 Tools
🪛 Biome

[error] 267-267: This let declares a variable that is only assigned once.

'formattedStringTemp' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)

Comment on lines +210 to +219
const generateCode = (question, prefix, index, parentCounter = '') => {
// Generate code regardless of isActive status
let code = '';
if (question.parentId === null) {
code = `SN${index + 1}`; // Top-level questions
code = `SN${index + 1}`;
// Only increment counter for active questions
if (question.isActive) {
activeCounters.top += 1;
parentCounter = String(activeCounters.top);
}
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

Avoid reassigning function parameters.

Reassigning function parameters can be confusing. Instead of modifying the parentCounter parameter directly, use a local variable.

-    const generateCode = (question, prefix, index, parentCounter = '') => {
+    const generateCode = (question, prefix, index, parentCounterParam = '') => {
+      let parentCounter = parentCounterParam;
       // Generate code regardless of isActive status
       let code = '';
       if (question.parentId === null) {
         code = `SN${index + 1}`;
         // Only increment counter for active questions
         if (question.isActive) {
           activeCounters.top += 1;
           parentCounter = String(activeCounters.top);
         }
       } else {
📝 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 generateCode = (question, prefix, index, parentCounter = '') => {
// Generate code regardless of isActive status
let code = '';
if (question.parentId === null) {
code = `SN${index + 1}`; // Top-level questions
code = `SN${index + 1}`;
// Only increment counter for active questions
if (question.isActive) {
activeCounters.top += 1;
parentCounter = String(activeCounters.top);
}
const generateCode = (question, prefix, index, parentCounterParam = '') => {
let parentCounter = parentCounterParam;
// Generate code regardless of isActive status
let code = '';
if (question.parentId === null) {
code = `SN${index + 1}`;
// Only increment counter for active questions
if (question.isActive) {
activeCounters.top += 1;
parentCounter = String(activeCounters.top);
}
🧰 Tools
🪛 Biome

[error] 218-218: Reassigning a function parameter is confusing.

The parameter is declared here:

Use a local variable instead.

(lint/style/noParameterAssign)

suryansh-egov and others added 8 commits November 6, 2024 12:02
* Update MapView.js

* Revert "Update MapView.js"

This reverts commit 483b53d.

* fixed build issue

* updated css verwsion

* Fixed some of the module level issues in console settings module

* Update health/micro-ui/web/micro-ui-internals/packages/modules/workbench-hcm/src/components/ProjectBeneficiaryComponent.js

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
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: 20

🧹 Outside diff range comments (4)
health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/SetupCampaign.js (4)

Line range hint 190-196: Add cleanup for window event listener.

The event listener for 'checking' should be cleaned up to prevent memory leaks.

  useEffect(() => {
    window.addEventListener("checking", getCurrentKey);
+   const handler = getCurrentKey;
    return () => {
-     window.removeEventListener("checking", getCurrentKey);
+     window.removeEventListener("checking", handler);
    };
  }, []);

Line range hint 350-353: Clear toast timeout on component unmount.

The toast timeout should be cleared when the component unmounts to prevent memory leaks.

  useEffect(() => {
    if (showToast) {
-     setTimeout(closeToast, 10000);
+     const timer = setTimeout(closeToast, 10000);
+     return () => clearTimeout(timer);
    }
  }, [showToast]);

Line range hint 350-550: Consider breaking down the complex useEffect.

The useEffect handling shouldUpdate is quite complex and handles multiple responsibilities. Consider breaking it down into smaller, more focused effects or extracting the API call logic into custom hooks.

Example structure:

// Custom hook for campaign updates
const useCampaignUpdate = (shouldUpdate, payload) => {
  const { mutate } = Digit.Hooks.campaign.useUpdateCampaign(tenantId);
  
  useEffect(() => {
    if (!shouldUpdate) return;
    
    const updateCampaign = async () => {
      try {
        const result = await mutate(payload);
        // Handle success
      } catch (error) {
        // Handle error
      }
    };
    
    updateCampaign();
  }, [shouldUpdate, payload]);
};

Line range hint 1-672: Standardize error handling across API calls.

The error handling is inconsistent across API calls. Some errors are logged to console while others are only shown in toast messages. Consider implementing a consistent error handling strategy.

Example approach:

const handleError = (error) => {
  // Log error for debugging
  console.error('API Error:', error);
  
  // Show user-friendly message
  setShowToast({ 
    key: "error", 
    label: error?.message || t('GENERIC_ERROR_MESSAGE')
  });
  
  // Optional: Report to error tracking service
};

// Use consistently in all API calls
try {
  await mutate(payload);
} catch (error) {
  handleError(error);
}
📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE

📥 Commits

Reviewing files that changed from the base of the PR and between 5d65b92 and a250994.

⛔ Files ignored due to path filters (1)
  • health/micro-ui/web/micro-ui-internals/packages/css/package.json is excluded by !**/*.json
📒 Files selected for processing (12)
  • health/micro-ui/web/micro-ui-internals/example/public/index.html (1 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/css/src/index.scss (1 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/css/src/pages/employee/checklist.scss (1 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/css/src/pages/employee/coreOverride.scss (1 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/css/src/pages/employee/index.scss (1 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/Checkboxes.js (5 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/Dropdowns.js (5 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/MobileChecklist.js (2 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/MultipleChoice.js (7 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/SearchChecklist.js (1 hunks)
  • health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/SetupCampaign.js (1 hunks)
  • health/micro-ui/web/public/index.html (1 hunks)
🧰 Additional context used
📓 Path-based instructions (6)
health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/Checkboxes.js (1)

Pattern **/*.js: check

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/Dropdowns.js (1)

Pattern **/*.js: check

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/MobileChecklist.js (1)

Pattern **/*.js: check

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/MultipleChoice.js (1)

Pattern **/*.js: check

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/SearchChecklist.js (1)

Pattern **/*.js: check

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/SetupCampaign.js (1)

Pattern **/*.js: check

🪛 Biome
health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/Checkboxes.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] 35-35: This let declares a variable that is only assigned once.

'dis' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 89-89: 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] 141-141: 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] 223-223: 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] 141-141: This let declares a variable that is only assigned once.

'dis' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/Dropdowns.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] 35-35: This let declares a variable that is only assigned once.

'dis' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 90-90: 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] 143-143: 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] 221-221: 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] 237-237: 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] 143-143: This let declares a variable that is only assigned once.

'dis' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 217-230: Avoid using unnecessary Fragment.

A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment

(lint/complexity/noUselessFragments)

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/MobileChecklist.js

[error] 43-43: 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] 50-50: 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)

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/MultipleChoice.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] 35-35: This let declares a variable that is only assigned once.

'dis' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 152-152: 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] 242-242: 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] 255-255: 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] 152-152: This let declares a variable that is only assigned once.

'dis' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


[error] 238-248: Avoid using unnecessary Fragment.

A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment

(lint/complexity/noUselessFragments)


[error] 251-261: Avoid using unnecessary Fragment.

A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment

(lint/complexity/noUselessFragments)

🔇 Additional comments (13)
health/micro-ui/web/micro-ui-internals/packages/css/src/index.scss (1)

19-19: LGTM! The import follows the established pattern.

The addition of checklist styles follows the existing organization pattern, properly grouped with other employee-specific page imports.

Let's verify the existence of the imported file to prevent potential build failures:

✅ Verification successful

Import path verified and file exists

The checklist.scss file exists at the expected location in the employee pages directory, confirming that the import statement is valid and won't cause build failures.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that the imported SCSS file exists
# Expected: File should exist at the specified path

fd --type f "checklist.scss" --base-directory "health/micro-ui/web/micro-ui-internals/packages/css/src/pages/employee"

Length of output: 131

health/micro-ui/web/micro-ui-internals/example/public/index.html (1)

15-15: Security and performance improvements needed.

health/micro-ui/web/public/index.html (1)

13-13: 🧹 Nitpick (assertive)

Verify the changes in [email protected].

The CSS version has been updated from 0.1.21 to 0.1.22. Since this PR is titled "audit fixes", we should verify the changelog or release notes for this version.

Consider the following improvements:

  1. Add SRI (Subresource Integrity) hash to the CSS link for enhanced security:
-  <link rel="stylesheet" href="https://unpkg.com/@egovernments/[email protected]/dist/index.css" />
+  <link rel="stylesheet" href="https://unpkg.com/@egovernments/[email protected]/dist/index.css" 
+        integrity_no="sha384-..." 
+        crossorigin="anonymous" />
  1. Add a local fallback in case the CDN is unavailable:
+  <script>
+    function fallbackCSS(link) {
+      var href = link.href;
+      if (href.includes('unpkg.com')) {
+        link.onerror = null;
+        link.href = '/fallback/css/' + href.split('/').pop();
+      }
+    }
+  </script>
   <link rel="stylesheet" href="https://unpkg.com/@egovernments/[email protected]/dist/index.css" 
+        onerror="fallbackCSS(this)" />

Let's verify the changes in this version:

✅ Verification successful

Based on the shell script results, I can now provide a conclusive response about the CSS version update:

CSS version update is part of audit fixes and UI improvements

The version bump from 0.1.21 to 0.1.22 is verified to be part of a larger set of changes that includes:

  • Audit fixes (commit 3f6d31c: "audit fixes")
  • Console settings module updates
  • UI/UX improvements and bug fixes

The changes were properly tested and merged through multiple PRs, and the version bump is intentional and necessary.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the changes in [email protected]

# Check for any package.json files that might reference this package
echo "Checking for package references..."
fd package.json | xargs rg "@egovernments/digit-ui-health-css"

# Look for any documentation about the version update
echo "Checking for changelog or release notes..."
fd -i -g "*change*log*" -g "*release*note*"

Length of output: 496


Script:

#!/bin/bash
# Let's check the package.json in the CSS package to understand version history
echo "Checking CSS package details..."
cat health/micro-ui/web/micro-ui-internals/packages/css/package.json

# Let's also check for any commit history related to this package
echo -e "\nChecking recent commits for CSS changes..."
git log --grep="css" --grep="0.1.22" --grep="audit" -i --since="3 months ago" -- health/

# Check for any audit-related files or configurations
echo -e "\nChecking for audit configurations..."
fd -g "*audit*" -g "*.json" -g "*.lock"

Length of output: 26133

health/micro-ui/web/micro-ui-internals/packages/css/src/pages/employee/coreOverride.scss (1)

192-203: 🛠️ Refactor suggestion

Implement systematic z-index management.

The current z-index values use arbitrary large numbers which can lead to maintainability issues. The hierarchy (sidebar < topbar < popup) is logical but could be better managed using SCSS variables.

Since this comment was previously made and is still valid, please refer to the earlier review comment for the detailed implementation suggestion using SCSS variables for z-index management.

Additional context: The new actionBarClass z-index (10) should also be included in this systematic approach to maintain consistency.

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/Checkboxes.js (5)

2-3: LGTM: Import and prop additions are appropriate.

The new imports and props support the tooltip functionality and parent-child question relationship.

Also applies to: 32-33


136-140: LGTM: Well-structured state and ref management.

The state variables and refs are appropriately defined for handling tooltip visibility and overflow detection.


143-149: LGTM: Overflow detection is well implemented.

The useEffect hook correctly handles overflow detection for the tooltip visibility.


35-35: 🛠️ Refactor suggestion

Simplify boolean assignment.

The current implementation can be simplified for better readability and maintainability.

-let dis = typeOfCall === "view" ? true : false;
+const dis = typeOfCall === "view";

Likely invalid or redundant comment.

🧰 Tools
🪛 Biome

[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] 35-35: This let declares a variable that is only assigned once.

'dis' is never reassigned.

Safe fix: Use const instead.

(lint/style/useConst)


151-166: 🧹 Nitpick (assertive)

Optimize tooltip position calculation.

The position calculation could be optimized to prevent unnecessary recalculations on each render.

+const memoizedPosition = useMemo(() => {
   return adjustTooltipPosition();
+}, [showTooltip]); // Recalculate only when tooltip visibility changes

+// Update the style spread in the Tooltip component
-...adjustTooltipPosition()
+...memoizedPosition

Likely invalid or redundant comment.

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/Dropdowns.js (1)

2-3: LGTM: Import and prop changes are well-structured.

The addition of Tooltip import and parentNumber prop aligns with the PR's objective of enhancing the UI with tooltips and improving question numbering in nested structures.

Also applies to: 33-33

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/MultipleChoice.js (1)

2-3: LGTM: Import and prop additions are well-structured.

The addition of Tooltip import and new props (typeOfCall, parentNumber) align well with the component's enhanced functionality.

Also applies to: 32-33

health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/SetupCampaign.js (1)

666-672: LGTM: Enhanced URL parameters for better context.

The addition of projectType parameter to the checklist search URL is a good improvement that provides necessary context for proper checklist configuration.

health/micro-ui/web/micro-ui-internals/packages/css/src/pages/employee/index.scss (1)

90-90: LGTM! The z-index adjustment enhances stacking context

Increasing the z-index to 10 for .actionBarClass improves the stacking order, ensuring that the action bar appears above other elements as intended. This change is appropriate.

@@ -12,7 +12,7 @@
<title>DIGIT</title>
<link rel="stylesheet" href="https://unpkg.com/@egovernments/[email protected]/dist/index.css" />
<link rel="stylesheet" href="https://unpkg.com/@egovernments/[email protected]/dist/index.css" />
<link rel="stylesheet" href="https://unpkg.com/@egovernments/[email protected].21/dist/index.css" />
<link rel="stylesheet" href="https://unpkg.com/@egovernments/[email protected].22/dist/index.css" />
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

❌ Invalid version update in CSS stylesheet URL

The version 0.1.22 specified in the stylesheet URL does not exist. The previous version 0.1.21 is accessible, but attempting to upgrade to version 0.1.22 will break the stylesheet loading as this version has not been published. Additionally, the latest published version on npm is 0.1.0.

  • Keep the version at 0.1.21 until a new version is properly published and verified
  • Coordinate with the team to ensure new versions are published before referencing them in the code
🔗 Analysis chain

Verify the new CSS version.

The version update from 0.1.21 to 0.1.22 aligns with the broader styling changes. Let's verify the version exists and is stable.


Version 0.1.22 of the CSS package is not available

The version update to 0.1.22 of @egovernments/digit-ui-health-css returns a 404 error, indicating this version does not exist on unpkg.com. Let's verify if the previous version is still available and check the latest published version.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the new CSS version exists and is accessible
# Test: Check if the new version is available and returns valid CSS
curl -s -I "https://unpkg.com/@egovernments/[email protected]/dist/index.css" | head -n 1

# Test: Check if there are any breaking changes in the CSS
curl -s "https://unpkg.com/@egovernments/[email protected]/dist/index.css" | grep -i "BREAKING" || true

Length of output: 221


Script:

#!/bin/bash
# Check if the previous version 0.1.21 exists
curl -s -I "https://unpkg.com/@egovernments/[email protected]/dist/index.css" | head -n 1

# Get the latest version information from npm
curl -s "https://registry.npmjs.org/@egovernments/digit-ui-health-css" | jq -r '."dist-tags".latest'

Length of output: 218

// Filter questions with parentId as null
const topLevelQuestions = questions.filter(q => q.parentId === null && (q.isActive === true));
const topLevelQuestions = questions.filter(q => q.parentId === null && q.isActive === true);
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)

Simplify the filtering condition.

The explicit comparison with true is redundant.

-  const topLevelQuestions = questions.filter(q => q.parentId === null && q.isActive === true);
+  const topLevelQuestions = questions.filter(q => q.parentId === null && q.isActive);
📝 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 topLevelQuestions = questions.filter(q => q.parentId === null && q.isActive === true);
const topLevelQuestions = questions.filter(q => q.parentId === null && q.isActive);

Comment on lines +30 to +44
<div key={index} className="mobile-option-item">
{/* Conditionally render radio or checkbox based on question.type.code */}
{question.type.code === "SingleValueList" ? (
<input
type="radio"
name={`question-${question.id}`}
onClick={(e) => e.preventDefault()} // Prevents interaction
/>
) : (
<input type="checkbox"
onClick={(e) => e.preventDefault()} // Prevents interaction
/>
)}
<label className="mobile-answer">{option.label}</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.

🛠️ Refactor suggestion

Add tooltip functionality for options.

According to the PR summary, tooltip functionality should be added to checkbox and dropdown components. Consider adding tooltips to improve user experience.

                    <div key={index} className="mobile-option-item">
                      {question.type.code === "SingleValueList" ? (
                        <input
                          type="radio"
                          name={`question-${question.id}`}
                          onClick={(e) => e.preventDefault()}
+                         title={option.tooltip || option.label}
                        />
                      ) : (
                        <input type="checkbox"
                          onClick={(e) => e.preventDefault()}
+                         title={option.tooltip || option.label}
                        />
                      )}
-                      <label className="mobile-answer">{option.label}</label>
+                      <label className="mobile-answer" title={option.tooltip || option.label}>{option.label}</label>
                    </div>

Committable suggestion skipped: line range outside the PR's diff.

🧰 Tools
🪛 Biome

[error] 43-43: 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)

Comment on lines +132 to +210

.question-label-field {
align-items: baseline !important;

.question-label {
width: 30%;
}

.question-field-container {
width: 100%;

.question-field {
display: flex;
gap: 1rem;
justify-content: space-between;
}
}
}

.checkboxOptionVariant {
margin-bottom: 0 !important;
margin-top: auto;
gap: 0.5rem;
}

.customradiobutton {
margin-bottom: 0 !important;
margin-top: auto;
gap: 0.5rem;

}

.optioncheckboxwrapper {
display: flex;
align-items: center;

.simple_editable-input,
.simple_readonly-input {
height: 1.5rem;
display: flex;
align-items: center;
align-self: center;
}

.pointer {
display: flex;
align-items: center;
}
}

.optionradiobtnwrapper {
display: flex;
align-items: center;

.simple_editable-input,
.simple_readonly-input {
height: 3rem;
display: flex;
align-items: center;
align-self: center;
}

.pointer {
display: flex;
align-items: center;
}
}

.example {
max-width: 100rem;

input {
max-width: 100rem;
}
}

.checkboxOptionVariant {
margin-bottom: 0px;
}
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 entirely duplicated section.

This entire section is a duplicate of lines 1-131. Remove lines 132-210 to maintain code cleanliness and prevent confusion.

Comment on lines +211 to +274

.custom-class {
width: auto;
}

.employeeCard {
.label-field-pair {
width: auto;
}

}

.digit-employee-card {
&.example-view-card {
margin-left: 0px !important;
margin-right: 0px !important;
}
}




.previewChecklist-app-container {
width: 100%;
margin: 0 auto;
padding: 16px;
background-color: #f5f5f5;
font-family: Arial, sans-serif;
}

.preview-question-title {
font-weight: bold;
margin-bottom: 10px;
}

.preview-options {
margin-left: 20px;
}

.preview-option {
font-weight: lighter;
margin-bottom: 5px;
}

.preview-sub-questions {
margin-left: 20px;
}

.tetxinput-example {
.input-container {
max-width: unset !important;
}
}

.digit-employee-card {
margin-bottom: 1rem;
margin-right: 0px !important;
margin-left: 0px !important
}

.digit-employee-card .digit-label-field-pair h2 {
width: auto;
font-size: larger;
}
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 using SCSS variables for consistent spacing.

While the styles are well-structured, consider extracting hardcoded values into SCSS variables for better maintainability and consistency.

Example:

// At the top of the file
$spacing-none: 0px;
$spacing-small: 0.5rem;
$spacing-medium: 1rem;

// Then use in styles
.digit-employee-card {
  margin-bottom: $spacing-medium;
  margin-right: $spacing-none !important;
  margin-left: $spacing-none !important;
}

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.

3 participants