Skip to content

Lewis/settings UI#306

Merged
carhartlewis merged 3 commits into
mainfrom
lewis/settings-ui
Apr 5, 2025
Merged

Lewis/settings UI#306
carhartlewis merged 3 commits into
mainfrom
lewis/settings-ui

Conversation

@carhartlewis

@carhartlewis carhartlewis commented Apr 5, 2025

Copy link
Copy Markdown
Contributor

Summary by CodeRabbit

  • New Features

    • Introduced a refreshed loading indicator with improved placeholder visuals for vendor data.
  • Style

    • Updated card layouts, footer appearances, and grid responsiveness for a cleaner, more modern look.
  • Refactor

    • Streamlined tables in risk and vendor sections by consolidating controls and reorganizing column definitions.
    • Enhanced breadcrumb navigation to better reflect organization context and improve user guidance.

- Refactored SelectAssignee component for improved modularity and reusability across vendor and risk forms.
- Updated various forms to utilize the new SelectAssignee component, ensuring consistent UI and functionality.
- Improved code formatting and structure for better readability and maintainability.
- Added loading states for vendor and risk overview pages to enhance user experience during data fetching.
- Standardized formatting and structure in EvidenceAssigneeChart, EvidenceStatusChart, PolicyAssigneeChart, and PolicyStatusChart components for improved readability and maintainability.
- Updated chart data handling and tooltip components for better user experience.
- Improved loading state in the loading component for the evidence overview page.
- Ensured consistent use of Tailwind CSS classes across all chart components.
@vercel

vercel Bot commented Apr 5, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for Git ↗︎

2 Skipped Deployments
Name Status Preview Comments Updated (UTC)
app ⬜️ Skipped (Inspect) Apr 5, 2025 8:21pm
comp-portal ⬜️ Skipped (Inspect) Apr 5, 2025 8:21pm

@coderabbitai

coderabbitai Bot commented Apr 5, 2025

Copy link
Copy Markdown

Walkthrough

This pull request primarily consists of cosmetic changes across multiple components within the app. The updates involve reformatting and adjusting indentation, standardizing import paths, and reorganizing JSX structures. A few files also include minor layout modifications such as adjustments in column counts, updated grid class names, and the introduction of a new helper function and a Loading component. No functional logic or public API changes have been introduced.

Changes

File(s) Change Summary
apps/.../evidence/(overview)/components/evidence-assignee-chart.tsx
apps/.../evidence/(overview)/components/evidence-status-chart.tsx
apps/.../policies/(overview)/components/policy-assignee-chart.tsx
apps/.../policies/(overview)/components/policy-status-chart.tsx
Standardized formatting and indentation for import statements, interface definitions, and JSX; no functional changes.
apps/.../evidence/[evidenceId]/components/ReviewSection.tsx
apps/.../policies/(overview)/page.tsx
Consistent reformatting of parameters, return statements, and component layout with minor grid and indentation adjustments.
apps/.../evidence/all/loading.tsx
apps/.../risk/(overview)/loading.tsx
apps/.../vendors/(overview)/loading.tsx
Adjusted properties for DataTableSkeleton (column count and cellWidths) and introduced a new Loading component using React Suspense.
apps/.../frameworks/components/FrameworkCard.tsx Introduced subcomponents (CardHeader, CardDescription, CardTitle) and reorganized JSX for improved semantic structure.
apps/.../risk/(overview)/RisksTable.tsx
apps/.../risk/(overview)/page.tsx
apps/.../risk/[riskId]/page.tsx
Modified risk pages to include a new orgId parameter, updated search handling, and added breadcrumb wrapping; purely layout and formatting changes.
Vendors Section:
apps/.../vendors/(overview)/components/VendorColumns.tsx
apps/.../vendors/(overview)/components/VendorsTable.tsx
apps/.../vendors/(overview)/page.tsx
apps/.../vendors/[vendorId]/components/secondary-fields/update-secondary-fields-form.tsx
apps/.../vendors/[vendorId]/components/tasks/create-vendor-task-form.tsx
apps/.../vendors/[vendorId]/tasks/[taskId]/components/title/update-task-sheet.tsx
apps/.../vendors/components/create-vendor-form.tsx
Extensive reformatting, including updating import paths to absolute references (e.g. for SelectAssignee), streamlining table configurations, and introducing a cached helper function getVendors for data fetching.
Organization & Risk Forms:
apps/.../components/forms/organization/delete-organization.tsx
apps/.../components/forms/organization/update-organization-name.tsx
apps/.../components/forms/policies/UpdatePolicyOverview.tsx
apps/.../components/forms/risks/create-risk-form.tsx
apps/.../components/forms/risks/risk-overview.tsx
Purely cosmetic adjustments; mainly reformatting, indentation fixes, and class name updates to remove or change background styles.
packages/ui/src/components/card.tsx Updated CardFooter class attribute by adding background and text color classes to modify its visual styling.

Sequence Diagram(s)

sequenceDiagram
    actor User
    participant Page as Vendors Page
    participant Loader as getVendors (cached)
    participant DB as Vendor Service

    User->>Page: Request vendors page (with search parameters)
    Page->>Loader: Invoke getVendors(searchParams)
    Loader->>DB: Validate session & fetch vendor data using orgId
    DB-->>Loader: Return vendor data
    Loader-->>Page: Provide vendor data
    Page->>User: Render Vendors Table with updated DataTableToolbar
Loading

Possibly related PRs

Poem

I'm a rabbit with a coding groove,
Hopping through files to make things smooth.
Indents aligned and spaces refined,
Each component now perfectly designed.
With every change, I take a joyful leap,
Celebrating code that's clean and neat!
🐰✨

✨ 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.
    • 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 generate docstrings to generate docstrings for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai plan to trigger planning for file edits and PR creation.
  • @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.

@vercel vercel Bot temporarily deployed to Preview – comp-portal April 5, 2025 20:21 Inactive
@vercel vercel Bot temporarily deployed to Preview – app April 5, 2025 20:21 Inactive
@carhartlewis carhartlewis merged commit d26175a into main Apr 5, 2025

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (10)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/settings/page.tsx (1)

43-61: Effective Use of Caching in organizationDetails with a Minor Optional Chaining Note
The organizationDetails function is neatly encapsulated within a cache call and follows best practices in session validation and database querying.
Suggestion: Since you already check for the presence of session?.session.activeOrganizationId on line 48, you may consider removing the optional chaining in the database query (line 53) for clarity:

-    where: { id: session?.session.activeOrganizationId },
+    where: { id: session.session.activeOrganizationId },
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/policies/(overview)/components/policy-status-chart.tsx (3)

48-59: Standardized Tooltip Component Formatting
The StatusTooltip component has been reformatted for enhanced readability. While the use of any for props is common in quick implementations, consider strongly typing these props in the future for improved clarity and type safety.


129-134: Effective Calculation of the Most Common Status
The use of Array.reduce to determine the most common status based on the count is appropriate. One possible improvement for future consideration is handling tie cases explicitly, though the current implementation is acceptable for most scenarios.


167-235: Well-Structured Chart Rendering and Labeling
The chart rendering section, including the PieChart, ChartTooltip, and the inline Label rendering function, is clean and readable. The inline function for rendering custom labels is clear; however, if the labeling logic becomes more complex, consider refactoring it into a separate component for improved modularity.

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/[vendorId]/tasks/[taskId]/components/title/update-task-sheet.tsx (1)

79-105: Clear renderStatus Function with a Minor Suggestion
The renderStatus function effectively maps task statuses to their respective colors and formats the status text. As a minor improvement, consider using a global replacement (e.g., using a regular expression like status.replace(/_/g, " ")) if there’s any chance of multiple underscores.

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/[vendorId]/tasks/[taskId]/components/secondary-fields/secondary-fields.tsx (2)

146-184: Auto-submit Behavior on Status Change
Within the "Status" FormField, the onValueChange handler calls both field.onChange and immediately triggers an auto-submit using form.handleSubmit(onSubmit)(). While this pattern provides immediate feedback, please ensure that this automatic submission is the intended UX behavior.


186-229: Due Date Field with Calendar Integration
The due date field is nicely integrated with a Popover-based calendar. Similar to the status field, the auto-submission on date selection is a design choice—confirm that immediate submission aligns with user expectations.

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/frameworks/components/FrameworkCard.tsx (1)

176-180: Consider removing commented code

The commented-out section for trend information isn't being used. If this is planned for a future implementation, consider adding a TODO comment explaining the plan, otherwise it might be cleaner to remove it entirely.

-        {/* <div className="flex items-center">
-					<TrendingUp className="h-3.5 w-3.5 mr-1.5" />
-					Trend: +5%
-				</div> */}

Or add a TODO comment:

+        {/* TODO: Implement trend information in a future iteration 
          <div className="flex items-center">
 					<TrendingUp className="h-3.5 w-3.5 mr-1.5" />
 					Trend: +5%
 				</div> */}
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/(overview)/loading.tsx (1)

1-21: Well-implemented loading component.

The Loading component follows the application pattern for skeleton loaders. It properly utilizes React.Suspense with a DataTableSkeleton fallback configured with appropriate column count, filter count, and cell widths.

However, the Suspense component is closed without any children. If this is intentional as a pattern to only show the fallback, it should be documented with a comment for clarity.

-    <Suspense
-      fallback={
-        <DataTableSkeleton
-          columnCount={3}
-          filterCount={2}
-          cellWidths={[
-            "10rem",
-            "30rem",
-            "10rem",
-          ]}
-          shrinkZero
-        />
-      }
-    />
+    {/* Using Suspense for loading state only */}
+    <Suspense
+      fallback={
+        <DataTableSkeleton
+          columnCount={3}
+          filterCount={2}
+          cellWidths={[
+            "10rem",
+            "30rem",
+            "10rem",
+          ]}
+          shrinkZero
+        />
+      }
+    >
+      {/* Actual content will be loaded by parent */}
+    </Suspense>
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/(overview)/page.tsx (1)

119-122: Consider more detailed error handling.

The error handling for invalid search parameters now returns an empty array instead of redirecting. While this is cleaner, you might want to consider adding more detailed user feedback for invalid parameters.

 if (!result.success) {
   console.error("Invalid search params:", result.error);
-  return [];
+  // Consider adding telemetry/monitoring here to track invalid requests
+  // Alternatively, consider throwing a more specific error that can be caught by an error boundary
+  return [];
 }
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6921b48 and c2d097b.

📒 Files selected for processing (29)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/evidence/(overview)/components/evidence-assignee-chart.tsx (1 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/evidence/(overview)/components/evidence-status-chart.tsx (1 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/evidence/[evidenceId]/components/ReviewSection.tsx (2 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/evidence/all/loading.tsx (1 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/frameworks/components/FrameworkCard.tsx (2 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/policies/(overview)/components/policy-assignee-chart.tsx (1 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/policies/(overview)/components/policy-status-chart.tsx (1 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/policies/(overview)/page.tsx (1 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/risk/(overview)/RisksTable.tsx (1 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/risk/(overview)/components/table/RiskColumns.tsx (1 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/risk/(overview)/loading.tsx (0 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/risk/(overview)/page.tsx (3 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/risk/[riskId]/page.tsx (1 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/settings/page.tsx (1 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/(overview)/components/VendorColumns.tsx (1 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/(overview)/components/VendorsTable.tsx (1 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/(overview)/loading.tsx (1 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/(overview)/page.tsx (1 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/[vendorId]/components/secondary-fields/update-secondary-fields-form.tsx (1 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/[vendorId]/components/tasks/create-vendor-task-form.tsx (1 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/[vendorId]/tasks/[taskId]/components/secondary-fields/secondary-fields.tsx (2 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/[vendorId]/tasks/[taskId]/components/title/update-task-sheet.tsx (2 hunks)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/components/create-vendor-form.tsx (2 hunks)
  • apps/app/src/components/forms/organization/delete-organization.tsx (1 hunks)
  • apps/app/src/components/forms/organization/update-organization-name.tsx (1 hunks)
  • apps/app/src/components/forms/policies/UpdatePolicyOverview.tsx (2 hunks)
  • apps/app/src/components/forms/risks/create-risk-form.tsx (2 hunks)
  • apps/app/src/components/forms/risks/risk-overview.tsx (2 hunks)
  • packages/ui/src/components/card.tsx (1 hunks)
💤 Files with no reviewable changes (1)
  • apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/risk/(overview)/loading.tsx
🧰 Additional context used
🧬 Code Definitions (12)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/(overview)/loading.tsx (1)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/risk/(overview)/loading.tsx (1)
  • Loading (4-21)
apps/app/src/components/forms/organization/update-organization-name.tsx (1)
packages/ui/src/components/card.tsx (1)
  • CardFooter (78-78)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/settings/page.tsx (12)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/risk/(overview)/page.tsx (1)
  • generateMetadata (87-99)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/risk/[riskId]/page.tsx (1)
  • generateMetadata (231-243)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/(overview)/page.tsx (1)
  • generateMetadata (77-89)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/policies/(overview)/page.tsx (1)
  • generateMetadata (167-179)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/employees/[employeeId]/page.tsx (1)
  • generateMetadata (53-66)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/evidence/(overview)/page.tsx (1)
  • generateMetadata (157-169)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/integrations/page.tsx (1)
  • generateMetadata (52-64)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/risk/[riskId]/tasks/[taskId]/page.tsx (1)
  • generateMetadata (55-67)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/settings/api-keys/page.tsx (1)
  • generateMetadata (29-41)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/[vendorId]/page.tsx (1)
  • generateMetadata (222-234)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/policies/[policyId]/page.tsx (1)
  • generateMetadata (40-53)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/risk/backup-overview/page.tsx (1)
  • generateMetadata (39-51)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/evidence/[evidenceId]/components/ReviewSection.tsx (5)
apps/app/src/components/SelectAssignee.tsx (1)
  • SelectAssignee (21-152)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/evidence/[evidenceId]/components/EvidenceStatusSection.tsx (1)
  • EvidenceStatusSection (18-72)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/evidence/[evidenceId]/components/EvidenceDepartmentSection.tsx (1)
  • EvidenceDepartmentSection (19-57)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/evidence/[evidenceId]/components/EvidenceFrequencySection.tsx (1)
  • EvidenceFrequencySection (19-59)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/evidence/[evidenceId]/components/EvidenceNextReviewSection.tsx (1)
  • EvidenceNextReviewSection (3-29)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/[vendorId]/components/tasks/create-vendor-task-form.tsx (2)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/[vendorId]/actions/task/create-task-action.ts (1)
  • createVendorTaskAction (10-54)
apps/app/src/components/SelectAssignee.tsx (1)
  • SelectAssignee (21-152)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/frameworks/components/FrameworkCard.tsx (3)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/frameworks/types.ts (1)
  • FrameworkInstanceWithControls (10-18)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/frameworks/lib/getFrameworkDetails.ts (1)
  • getFrameworkDetails (4-6)
packages/ui/src/components/card.tsx (6)
  • Card (76-76)
  • CardHeader (77-77)
  • CardTitle (79-79)
  • CardDescription (80-80)
  • CardContent (81-81)
  • CardFooter (78-78)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/(overview)/components/VendorsTable.tsx (1)
apps/app/src/utils/auth.ts (1)
  • Member (90-90)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/[vendorId]/tasks/[taskId]/components/title/update-task-sheet.tsx (3)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/[vendorId]/actions/task/update-task-action.ts (1)
  • updateVendorTaskAction (11-73)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/[vendorId]/actions/schema.ts (1)
  • updateVendorTaskSchema (69-84)
apps/app/src/components/SelectAssignee.tsx (1)
  • SelectAssignee (21-152)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/[vendorId]/components/secondary-fields/update-secondary-fields-form.tsx (2)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/[vendorId]/actions/update-vendor-action.ts (1)
  • updateVendorAction (10-66)
apps/app/src/components/SelectAssignee.tsx (1)
  • SelectAssignee (21-152)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/risk/[riskId]/page.tsx (3)
apps/app/src/components/tables/risk-tasks/server-columns.tsx (1)
  • getServerColumnHeaders (3-11)
apps/app/src/components/risks/risk-overview.tsx (1)
  • RiskOverview (14-60)
apps/app/src/components/tables/risk-tasks/columns.tsx (1)
  • RiskTaskType (12-23)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/(overview)/page.tsx (2)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/(overview)/components/VendorsTable.tsx (1)
  • VendorsTable (21-65)
apps/app/src/lib/get-session.ts (1)
  • getServersideSession (5-21)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/components/create-vendor-form.tsx (3)
apps/app/src/utils/auth.ts (1)
  • Member (90-90)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/actions/create-vendor-action.ts (1)
  • createVendorAction (21-54)
apps/app/src/components/SelectAssignee.tsx (1)
  • SelectAssignee (21-152)
🔇 Additional comments (159)
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/settings/page.tsx (3)

11-15: Enhanced Function Signature Formatting in OrganizationSettings
The updated parameter declaration now leverages consistent indentation, which improves readability without any changes to functionality.


16-25: Clear and Consistent Component Implementation
The component correctly extracts the locale, applies static param settings, and fetches organization details before rendering the child components. The conditional use of optional chaining (e.g., organization?.name ?? "") is appropriately used for safe rendering.


29-41: Consistent Formatting in generateMetadata Function
The generateMetadata function has been reformatted to align with the codebase standards. The extraction of locale, setting of static parameters, and fetching of translations with getI18n mirrors what is seen in similar modules.

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/policies/(overview)/components/policy-status-chart.tsx (11)

7-11: Updated Card Component Imports
The Card component imports have been reformatted to list each component on its own line. This improves readability and consistency.


14-17: Enhanced Chart Component Imports
The import statements for chart-related components (including the type declaration for ChartConfig) have been standardized. This adjustment not only improves readability but also reinforces type safety.


28-32: Improved Interface Formatting for PolicyOverviewData
The properties in the PolicyOverviewData interface are now consistently indented, which enhances clarity. The descriptive naming of fields makes the interface self-explanatory.


36-36: Clear Optional Prop Definition in PolicyStatusChartProps
The PolicyStatusChartProps interface now clearly indicates that the data prop is optional (and can be null). This explicit typing helps prevent potential runtime issues.


40-43: Consistent CHART_COLORS Constant Definition
The mapping of status names to their corresponding HSL color strings is clear and consistently formatted. This enhances maintainability by ensuring color codes are easily identifiable.


66-93: Graceful Handling of Missing Data
The conditional block for when no data is provided returns a well-structured Card with helpful messaging and visual cues. The usage of UI components like CardHeader, Badge, and CardContent is consistent with the design system.


95-120: Optimized Chart Data Calculation with useMemo
Using React.useMemo to compute filtered chart data based on provided props is a good optimization. The filtering of items that have a falsy value improves efficiency and ensures only relevant data is rendered.


122-127: Type-Safe Chart Configuration
The chartConfig object utilizes the satisfies ChartConfig assertion, which is a neat way to ensure it adheres to the defined interface. This practice enforces compile-time checks and enhances maintainability.


137-154: Clear Rendering of Most Common Status Badge
The conditional rendering of the Badge component that displays the most common status is well implemented. It effectively uses the provided data to enhance the visual feedback of the chart.


157-164: Robust Progress Bar Calculation
The inline style for the progress bar correctly computes the width while safely avoiding division by zero by using Math.max. This is a good defensive coding practice that ensures UI stability.


240-257: Clear and Accessible Legend Rendering
Mapping over chartData to render legend entries is implemented in a straightforward and visually clear manner. Each legend item correctly reflects its corresponding status and count, contributing to a user-friendly UI.

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/[vendorId]/components/tasks/create-vendor-task-form.tsx (8)

9-12: Cosmetic Update: Accordion Imports Formatting

The reformatting of the Accordion component imports improves code consistency and readability. These changes are purely cosmetic with no impact on functionality.


37-37: Update Import Path: SelectAssignee

The import path for SelectAssignee has been updated to an absolute path (@/components/SelectAssignee), aligning it with the established conventions in the codebase.


40-44: Component Signature & Prop Destructuring

The changes to the component’s declaration—specifically the destructuring of the assignees prop and its inline type annotation—are cosmetic. They improve clarity and consistency without modifying the functionality.


47-50: Hook Usage: useQueryState and useParams

The formatting for the hook calls (using useQueryState and useParams) has been improved for readability. The updates do not alter the logic but make the code easier to read.


52-60: Action Hook Setup: createTask

The invocation and configuration of useAction (with its onSuccess and onError callbacks) have been reformatted. The refactored layout maintains the same functionality while enhancing readability.


62-71: Form Initialization with useForm

The form configuration, including the use of zodResolver and the definition of defaultValues, is now more neatly organized. This cosmetic adjustment improves clarity and consistency with no functional implications.


73-75: onSubmit Handler

The definition of the onSubmit function is concise and clearly formatted. There are no changes to the underlying logic; the update is solely for improved code clarity.


77-217: UI Markup & Layout Adjustments

The JSX returned by the component has been reformatted for consistent indentation and spacing. These cosmetic changes affect:

  • The structure of the <Accordion> and related items.
  • The alignment of form fields and buttons.
  • The overall readability of the component’s layout.

All changes preserve the original functionality while aligning with updated styling and formatting conventions.

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/[vendorId]/components/secondary-fields/update-secondary-fields-form.tsx (11)

8-14: Cosmetic Import Formatting
The reformatting of the import block from @comp/ui/form (lines 8–14) enhances readability and establishes consistent visual grouping.


16-21: Consistent Select Component Grouping
The standardized grouping and indentation of imports from @comp/ui/select (lines 16–21) improves clarity and maintains code consistency across components.


28-28: Absolute Path Import for SelectAssignee
Changing the import path for SelectAssignee to an absolute path ("@/components/SelectAssignee") improves maintainability by aligning with the project's import strategy.


32-38: Component Prop Types and Parameter Formatting
The function UpdateSecondaryFieldsForm (lines 32–38) clearly defines its props (i.e., vendor and assignees) with proper type annotations and consistent indentation. This ensures clarity when using these props within the component.


41-48: Action Hook Initialization
The initialization of the useAction hook (lines 41–48) is done correctly with well-defined onSuccess and onError callbacks leveraging the toast notifications. This provides immediate feedback on vendor updates.


50-60: Form Setup with useForm and zodResolver
The use of useForm (lines 50–60) with zodResolver for schema-based validation is implemented correctly. Default values are accurately set from the vendor prop, ensuring that the form has the correct initial state.


62-74: onSubmit Handler Logic
The onSubmit function (lines 62–74) correctly handles the normalization of assigneeId by converting an empty string to null and then passes all the required fields to the updateVendor.execute method. The logic is clear and preserves the intended behavior.


76-98: Assignee Field Implementation
The implementation of the assignee field using the FormField and integrating the SelectAssignee component (lines 76–98) is clean and maintains the established form control pattern. The disabled state tied to the action's status is handled appropriately.


99-126: Vendor Status Field via Select Component
The vendor status field (lines 99–126) is implemented using a Select component with clear separation of concerns. The dynamic rendering of the current status and the mapping over VENDOR_STATUS_TYPES ensure both functionality and ease of reading.


127-165: Vendor Category Field with Readable Formatting
The category field (lines 127–165) not only uses a Select component, but also transforms the enum values into a user-friendly format. This attention to detail contributes to a better user experience when selecting vendor categories.


167-184: Submission Button and Loader Management
The submit button (lines 167–184) correctly manages its state by disabling the button during execution and providing visual feedback via the Loader2 spinner. This conditional rendering ensures a responsive and intuitive user interface.

apps/app/src/components/forms/organization/update-organization-name.tsx (1)

93-107: Update to CardFooter Styling in UpdateOrganizationName.
The CardFooter component now uses className="flex justify-between", effectively removing the bg-accent/30 styling. This change appears intended to simplify the styling and align it with the standard set in other areas (such as in the delete organization component). Please verify that the adjusted styling meets the design requirements and maintains visual consistency across similar components.

packages/ui/src/components/card.tsx (1)

67-72: Refined CardFooter Styling in Card Component.
The updated CardFooter now applies the classes "flex items-center p-6 border-t text-xs bg-accent/20 text-muted-foreground", which provides a more defined background and text color. This enhancement should help standardize the footer appearance across different card usages. Please double-check the new styles in various contexts (e.g., light/dark modes) to ensure appropriate contrast and visual appeal.

apps/app/src/components/forms/organization/delete-organization.tsx (1)

64-70: Simplified CardFooter Styling in DeleteOrganization.
The CardFooter here has been updated to className="flex justify-between", removing the previously applied background color (e.g. bg-accent/30). This simplification helps to keep the visual style minimal in this context. Please confirm that the new styling still provides sufficient visual separation for the footer content, especially given the significance of deletion actions.

apps/app/src/components/forms/policies/UpdatePolicyOverview.tsx (3)

3-15: Improved Imports Organization.
The updated import block now includes the new SelectAssignee component and a reordering of related imports (e.g., from @comp/db/types). These changes enhance clarity and maintainability without impacting functionality.


44-48: Refined policyStatuses Array Formatting.
The policyStatuses array is now formatted with consistent indentation:

const policyStatuses: PolicyStatus[] = [
  "draft",
  "published",
  "needs_review",
] as const;

This purely cosmetic change improves readability.


102-310: Consistent JSX Layout and Formatting Enhancements.
The remainder of the component—spanning the JSX layout of the form—is now consistently formatted using grid layouts and improved indentation. These adjustments ensure better readability and maintainability while preserving the original functionality. No functional changes have been introduced.

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/[vendorId]/tasks/[taskId]/components/title/update-task-sheet.tsx (12)

3-3: Simplify Import Path for SelectAssignee
The import has been updated to use an absolute path, which improves clarity and consistency across the codebase.


6-10: Consistent Import Ordering for Accordion Components
The imports for Accordion, AccordionContent, AccordionItem, and AccordionTrigger are now clearly grouped with uniform indentation. This enhances readability and maintainability.


15-21: Standardized Import Structure for Form Components
Reordering and grouping of the form component imports (Form, FormControl, FormField, FormItem, FormLabel, and FormMessage) improve the code’s readability.


25-29: Clear Import Structure for Select Components
The updated, consistently ordered import block for Select components (including Select, SelectContent, SelectItem, SelectTrigger, and SelectValue) aids in clarity.


45-46: Updated Interface for Task and Assignees
The UpdateTaskSheetProps interface now clearly defines that the task includes an optional assignee object with its user details, and that assignees is a well-typed list. Verify that downstream components are updated accordingly.


50-51: Effective Use of State and Routing Parameters
The hooks useQueryState and useParams are used appropriately to manage state and retrieve parameters (e.g., taskId). The naming is clear and the usage fits well into the component’s flow.


53-61: Proper Configuration of the Update Action
The configuration of useAction with success and error callbacks (displaying toast messages and updating the query state) is succinct and effective.


63-73: Accurate Default Values in useForm Hook
The default values provided to useForm are correctly derived from task and URL parameters. This ensures that the form is pre-populated as expected.


75-77: Streamlined onSubmit Handler
The onSubmit function cleanly executes the task update. Its simplicity keeps the form submission logic focused and maintainable.


210-213: Confirm Auto-Submission on Status Change
Within the <Select> for the status field, the onValueChange handler calls both field.onChange(value) and immediately invokes form.handleSubmit(onSubmit)(). This triggers an auto-submit upon any status change. Please confirm if this auto-update behavior is intentional, as it might lead to unexpected submissions if the user also intends to click the Update button later.


242-259: Effective Integration of SelectAssignee Component
The <SelectAssignee> component is used appropriately, with all necessary props (assigneeId, assignees, onAssigneeChange, disabled, and withTitle) correctly passed. Its integration maintains consistency with the overall form design.


266-277: Clear Call-to-Action with Update Button
The update button is clearly defined and properly disabled when the update action is executing, preventing duplicate submissions and ensuring a smooth user experience.

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/[vendorId]/tasks/[taskId]/components/secondary-fields/secondary-fields.tsx (13)

3-3: Refined Import Path for SelectAssignee
The updated import on line 3 uses a concise path which improves clarity. Ensure that this update is consistent with other similar imports across the codebase.


10-15: Consistent Import Formatting for Form Components
The reformatting of the Form-related imports (Form, FormControl, FormField, etc.) enhances readability. The grouping neatly aligns with your project’s styling conventions.


19-23: Polished Import Formatting for Select Components
The updated grouping for the Select components (Select, SelectContent, SelectItem, SelectTrigger, SelectValue) is clear and organized.


35-58: Improved Component Formatting for SecondaryFields
The structural reformatting of the SecondaryFields component (lines 35–58) enhances clarity without altering behavior. The layout now portrays the component’s hierarchy more clearly.


60-68: Precise Destructuring in TaskSecondaryFieldsForm
The refined parameter destructuring and type definitions in the TaskSecondaryFieldsForm component improve clarity. This change aligns well with modern TypeScript practices.


69-76: Clean useAction Hook Setup
The configuration of the useAction hook with success and error callbacks is well structured. The toast notifications provide clear feedback on task updates.


78-88: Enhanced useForm Initialization
The default values and schema resolver setup for the form are clearly defined. The conditional initialization of the dueDate field is both clear and effective.


90-92: Streamlined onSubmit Handler
The onSubmit handler directly delegates form submission to the updateTask action. This concise approach maintains clarity and functionality.


94-120: Clear Implementation of renderStatus Function
The renderStatus function correctly maps task statuses to their corresponding color codes and formats the display. Its structure is both concise and readable.


122-124: Well-Structured Form Initialization
The integration of the <Form> and <form> elements is neatly organized, aiding in readability and maintenance.


125-144: Effective Assignee Field Integration
The FormField for the "Assignee" field is implemented clearly. The use of the custom SelectAssignee component along with proper control binding makes the code easy to follow.


231-247: Responsive Save Button Implementation
The submit button is well-implemented: it properly reflects the update status by displaying a loading spinner and disabling interactions as needed.


248-250: Tidy Component Closure
The final structure properly closes both the form and the component, maintaining a clean and legible JSX hierarchy.

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/frameworks/components/FrameworkCard.tsx (3)

6-6: Good improvement to component composition

Using the specialized card components from the UI library instead of a single Card component improves the semantic structure of the component and follows better composition principles.


83-181: Well-structured component layout with improved semantics

The refactored JSX structure with appropriate Card subcomponents (CardHeader, CardTitle, CardDescription, etc.) creates a more maintainable and semantically correct layout. The responsive design consideration (hiding the status badge on small screens) is also a good improvement.


79-80:

Details

❓ Verification inconclusive

Placeholder for last activity date might be misleading

The current implementation always shows today's date rather than actual framework activity data. Consider replacing this with real activity timestamp data from the framework instance if available.


🏁 Script executed:

#!/bin/bash
# Check if there's an actual lastUpdated field in frameworkInstance type
rg -A 10 "type FrameworkInstance" --glob "*.ts"

Length of output: 928


Action Required: Confirm Future Data Integration for Last Activity Date

The current implementation in FrameworkCard.tsx uses the current date as a fallback since no real activity timestamp exists in the framework instance types. Verification via the search indicates that the FrameworkInstance (and its extension in FrameworkInstanceWithControls) does not include a property such as lastUpdated or similar to represent the real last activity date.

  • The absence of a dedicated timestamp property means that the placeholder (new Date().toLocaleDateString()) is the only available option at this time.
  • If real activity data is intended, consider updating the framework instance type (or its source data) to include an actual activity timestamp, then update this component accordingly.
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/components/create-vendor-form.tsx (11)

7-10: Cosmetic Reformatting of Accordion Imports
The reordering and consistent indentation for the Accordion components improve readability. There are no functional changes.


14-19: Consistent Formatting for Form Imports
The grouped and indented import of Form-related components is clear and consistent, enhancing code clarity without impacting functionality.


23-27: Well-Formatted Select Imports
The adjusted indentation for the Select component imports improves visual clarity. This cosmetic change is well executed.


38-38: Standardizing Import Path for SelectAssignee
Changing the import from a relative path to an absolute path (@/components/SelectAssignee) aligns with project best practices and enhances maintainability and consistency across files.


42-47: Validation Schema Formatting
The createVendorSchema fields are clearly defined with appropriate validations and defaults. These cosmetic adjustments improve readability without affecting the logic.


51-52: Component Props Destructuring
The destructuring of the assignees prop in the CreateVendorForm component is concise and adheres to coding standards. No changes are needed here.


53-77: Query State Hooks Formatting
The usage of useQueryState for retrieving various query parameters is consistently formatted and clear. These changes enhance readability without altering functionality.


81-97: Vendor Creation Action Handling
The useAction hook implementation for createVendorAction is well structured with proper success and error notifications and router redirection. The cosmetic reformatting in this block preserves the intended behavior.


99-107: React Hook Form Initialization
The form initialization using useForm and zodResolver is clearly defined with sensible default values. The improved formatting makes the code more approachable and maintainable.


109-112: Submission Handler onSubmit
The onSubmit function is succinct and effectively delegates to the action executor. This straightforward functionality is preserved and clearly presented.


113-323: JSX Layout and Form Structure
The updated JSX layout, including the Accordion structure and all FormField components, has been reformatted to improve readability and consistency. All components (such as Input, Textarea, Select, and SelectAssignee) are arranged clearly, and the code’s logic remains intact.

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/risk/(overview)/RisksTable.tsx (4)

14-14: Good addition of the DataTableToolbar component.

The introduction of the DataTableToolbar centralizes UI controls for the table, improving organization and maintainability.


26-35: Code organization looks good.

The hooks setup is clean and well-structured, with proper memoization of the columns to avoid unnecessary recalculations when dependencies change.


55-72: Good restructuring with DataTableToolbar.

The UI restructuring using DataTableToolbar improves organization while maintaining the same functionality. The approach of using children to pass in the DataTableSortList provides good component composition.


37-49:

Details

✅ Verification successful

Note the removal of default sorting.

The initialState no longer contains sorting configuration that was likely present in the previous version. Verify this was intentional and won't affect user experience negatively.


🏁 Script executed:

#!/bin/bash
# Check the git history to see what sorting configuration was removed
git show HEAD~1:apps/app/src/app/[locale]/\(app\)/\(dashboard\)/[orgId]/risk/\(overview\)/RisksTable.tsx | grep -A 15 "initialState"

Length of output: 391


Action: Confirm Absence of Default Sorting in RisksTable.tsx

After verifying the HEAD~1 snapshot of the file, the initialState configuration only contains pagination settings (with no default sorting defined). This indicates that no default sorting was present in the previous version, and its absence in the current code appears intentional. Please confirm that this behavior aligns with the desired functionality and won’t negatively impact the user experience.

apps/app/src/components/forms/risks/create-risk-form.tsx (4)

5-5: Improved import path.

The import path for SelectAssignee has been simplified to use an absolute reference, which is consistent with the standardization effort across the codebase.


10-14: Consistent formatting.

The import groupings are now properly formatted with consistent indentation, improving readability.

Also applies to: 17-23, 26-31


46-68: Well-structured query state setup.

The query state setup is well-organized with clear comments and consistent formatting. Each state has appropriate default values and parsing.


96-277: Consistent form structure.

The form structure has been reformatted with consistent indentation while maintaining all functionality. The hierarchical structure of form fields within accordions makes the form organization clear and maintainable.

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/evidence/all/loading.tsx (1)

6-14:

Details

✅ Verification successful

Updated skeleton configuration.

The DataTableSkeleton configuration has been updated to match the current table layout with 5 columns and consistent cell widths. The changes ensure the loading state accurately represents the actual table structure.

Verify that these changes align with the actual evidence table structure to ensure a seamless transition when data loads.


🏁 Script executed:

#!/bin/bash
# Check for the actual table structure in evidence components
fd "evidence.*table" "apps/app/src" | xargs rg -l "cellWidths|columns" | xargs cat

Length of output: 1449


Skeleton Configuration Verified

The updated DataTableSkeleton now correctly reflects the evidence table’s layout by configuring 5 columns with the following cell widths:

  • 1st column: 10rem
  • 2nd column: 30rem
  • 3rd column: 10rem
  • 4th column: 10rem
  • 5th column: 10rem

After reviewing the EvidenceTable component (which constructs its columns via getEvidenceColumns()), no discrepancies were found between the skeleton’s configuration and the actual table structure. Please verify that the getEvidenceColumns implementation continues to align with these dimensions when making further changes.

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/evidence/(overview)/components/evidence-status-chart.tsx (7)

7-12: Enhanced Card Component Imports.
The Card component imports are now reformatted with consistent indentation, which improves readability without affecting functionality.


23-28: Interface Formatting Improvement.
The EvidenceOverviewData interface is reformatted for visual consistency. No logic changes were introduced.


41-73: Conditional Rendering Block Reformatting.
The block handling the "no data" case is now indented uniformly, making the component’s structure clearer.


75-95: Chart Data Calculation Clarity.
The memoized calculation of chartData is reformatted for improved readability while preserving its original logic.


97-102: Type-Safe Chart Configuration.
Using the satisfies ChartConfig operator for chartConfig enforces type safety and is now clearly formatted.


103-109: Most Common Status Calculation Formatting.
The useMemo hook that computes the most common status is now easier to read and maintains its intended functionality.


111-233: Consistent JSX Rendering Structure.
The comprehensive JSX block has been reformatted with consistent indentation and spacing, enhancing maintainability with no changes in behavior.

apps/app/src/components/forms/risks/risk-overview.tsx (2)

5-5: Cleaned Import for SelectAssignee.
The updated import now uses the simplified path (@/components/SelectAssignee), which increases clarity and aligns with project conventions.


40-229: Uniform Formatting in UpdateRiskOverview.
The UpdateRiskOverview component’s indentation and formatting have been standardized across the file. These cosmetic adjustments improve readability without modifying the component’s logic.

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/policies/(overview)/page.tsx (4)

12-17: Improved Function Parameter Indentation.
The parameters in the PoliciesOverview function are now indented consistently, which enhances the overall code clarity.


20-32: Consistent JSX Return Formatting.
The JSX structure within the PoliciesOverview component is uniformly formatted for improved readability with no functional changes.


34-165: Streamlined Data Fetching Logic.
The getPoliciesOverview function has been reformatted to organize asynchronous database calls more clearly; its logic remains unchanged.


167-180: Metadata Function Formatting.
The generateMetadata function now uses a consistent indentation style, making the code easier to read while preserving its behavior.

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/evidence/(overview)/components/evidence-assignee-chart.tsx (8)

6-12: Enhanced Import Formatting for Card Components.
The Card component imports are now neatly organized, which improves consistency across the codebase.


30-38: AssigneeData Interface Reformat.
The AssigneeData interface is reformatted to display each property on its own line, enhancing readability without altering the type structure.


40-81: No Data Fallback UI Formatting.
The conditional block that renders a fallback UI when no data is available is now uniformly indented to improve clarity.


83-89: Refined Sorted Data Calculation.
The memoized computation for sorting assignee data is now divided into clear steps (sorting, slicing, then reversing) for easier comprehension.


91-96: Chart Data Mapping Clarity.
The mapping function that creates chartData from sortedData is formatted to clearly express its purpose, with no logic changes.


97-107: Type-Safe Chart Configuration.
The chart configuration object now correctly employs the satisfies ChartConfig operator and is formatted for quick understanding.


108-120: Clear Summary Calculation.
The memoized computations for totalEvidence and topAssignee are now better formatted to showcase their intent while remaining functionally identical.


121-217: Comprehensive Chart Rendering Block.
The JSX rendering block for the evidence chart is reformatted with consistent spacing, making it more maintainable without modifying its functionality.

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/evidence/[evidenceId]/components/ReviewSection.tsx (9)

4-12: Enhanced Import Organization for Type Definitions.
The type imports from @comp/db/types are now grouped and indented properly, which enhances clarity and maintainability.


24-24: Streamlined SelectAssignee Import.
The import for SelectAssignee now adheres to project standards, ensuring a cleaner and more direct path.


26-41: ReviewSectionProps Interface Reformatting.
The interface ReviewSectionProps has been reformatted by placing each property on its own line, greatly improving its readability without altering its structure.


43-50: Improved Component Parameter Destructuring.
The destructuring of props in the ReviewSection component is now neatly organized, making the function signature clearer and easier to maintain.


51-64: State Initialization Clarity.
The initialization of state variables (frequency, department, assigneeId, status, isSaving) is formatted clearly, contributing to better code comprehension.


66-75: Action Hook Configuration and Handlers.
The useAction hook and its associated success/error handlers are now grouped and indented for clarity, without impacting execution.


77-86: handleSaveChanges Simplification.
The handleSaveChanges function is concise and its formatting now makes its intent immediately clear with no behavioral changes.


88-90: Event Handlers Formatting.
The formatting for handleDepartmentChange and handleStatusChange has been standardized, which improves the overall legibility of event management.


96-150: Clean and Structured JSX Markup.
The return block (JSX) is reformatted with consistent indentation and spacing. These improvements enhance maintainability while keeping the UI logic intact.

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/policies/(overview)/components/policy-assignee-chart.tsx (12)

5-11: LGTM! Clean formatting of UI component imports.

The import statement formatting looks good and follows a consistent indentation pattern, improving readability.


13-17: LGTM! Consistent formatting of chart imports.

The chart-related imports are now consistently formatted, matching the style of other import blocks.


22-29: LGTM! Well-structured Recharts component imports.

The Recharts library imports are properly formatted with consistent indentation.


31-39: LGTM! Clean interface definition.

The AssigneeData interface is well-structured with consistent indentation for all properties.


45-50: LGTM! Clear color constants definition.

The CHART_COLORS constant is well-formatted with helpful comments for each color.


55-85: LGTM! Well-structured empty state handling.

The conditional rendering for empty state is cleanly formatted with a logical component hierarchy.


87-93: LGTM! Clean data sorting implementation.

The useMemo implementation for sorting data is well-formatted and follows best practices.


95-101: LGTM! Clear data transformation logic.

The chart data mapping is cleanly structured and easy to follow.


103-120: LGTM! Well-organized chart configuration.

The chart configuration object is clearly structured with consistent formatting.


122-126: LGTM! Clean calculation logic.

The total policies calculation is implemented correctly with proper memoization.


128-133: LGTM! Well-implemented top assignee logic.

The top assignee calculation is implemented correctly with proper memoization.


135-246: LGTM! Clean component return structure.

The component return statement is well-organized with consistent indentation, making the JSX structure easy to follow.

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/risk/[riskId]/page.tsx (10)

16-25: LGTM! Clear interface definition.

The PageProps interface is well-structured with consistent indentation for all properties.


28-33: LGTM! Clean variable initialization.

The destructuring of params and subsequent API calls are well-formatted.


34-40: LGTM! Clear search parameters handling.

The destructuring of searchParams with default values is well-formatted.


42-53: LGTM! Well-structured tasks loading.

The column headers retrieval and task loading logic are properly formatted.


55-57: LGTM! Clear redirect handling.

The null risk check and redirect are properly formatted.


59-74: Updated breadcrumb label to improve UI consistency.

The breadcrumb label has been changed from "Risk" to "Risks" to better reflect that it links to the risks overview page.


77-101: LGTM! Clean getRisk implementation.

The getRisk function is well-structured with proper error handling and database querying.


103-205: LGTM! Well-structured getTasks implementation.

The getTasks function is properly formatted with clean indentation for the complex query structure.


207-229: LGTM! Clean getAssignees implementation.

The getAssignees function is well-implemented with proper session validation and database querying.


231-243: LGTM! Clean metadata generation.

The generateMetadata function is well-formatted with proper locale handling.

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/risk/(overview)/page.tsx (4)

18-20: Added orgId to params interface.

The orgId parameter has been added to the params interface, allowing direct access to the organization ID.


29-30: LGTM! Updated destructuring to include orgId.

The destructuring statement now includes orgId from the params object.


77-83: Enhanced UI with breadcrumb navigation.

The RisksTable component is now wrapped in a PageWithBreadcrumb component, providing better contextual navigation.


35-37:

Details

❓ Verification inconclusive

Modified search parameter handling.

The search parameter is now passed directly without the fallback to an empty string, which may affect search behavior when no search term is provided.


🏁 Script executed:

#!/bin/bash
# Check how the getRisks function handles undefined search parameters
rg --type typescript "export const getRisks|export function getRisks" -A 5

Length of output: 111


I'll run a revised shell script that targets TypeScript files (*.ts and *.tsx) to find the definition of getRisks and verify its handling of undefined search parameters:


🏁 Script executed:

#!/bin/bash
# Searching for the definition of the getRisks function in .ts and .tsx files
rg -g '*.ts' -g '*.tsx' "export (const|getRisks|function getRisks)" -A 10

Length of output: 73480


Verify search parameter handling in getRisks

The change now passes the search value directly (line 35–37 in apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/risk/(overview)/page.tsx) without the previous fallback to an empty string. This update may lead to unexpected behavior if getRisks is not designed to handle an undefined or null search parameter. Please manually verify that getRisks either internally defaults undefined values appropriately or otherwise handles the absence of a search term as intended.

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/risk/(overview)/components/table/RiskColumns.tsx (5)

8-8: LGTM! Added DataTableColumnHeader import.

Added import for DataTableColumnHeader component, which will be used for column headers.


11-31: Enhanced title column with better structure and filtering.

The title column now includes unique id, DataTableColumnHeader component, and meta information for improved filtering and sorting.


32-46: Enhanced status column with better structure and filtering.

The status column now includes unique id, DataTableColumnHeader component, and meta information for improved filtering and sorting.


47-65: Enhanced department column with better structure and filtering.

The department column now includes unique id, DataTableColumnHeader component, and meta information for improved filtering and sorting.


66-103: Enhanced assignee column with better structure and filtering.

The assignee column now includes unique id, DataTableColumnHeader component, and meta information for improved filtering capabilities.

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/(overview)/components/VendorColumns.tsx (3)

8-8: Good addition of the DataTableColumnHeader component.

Adding the DataTableColumnHeader component provides a consistent header appearance across all columns in the table.


10-107: Good restructuring of columns definition.

The changes improve the structure by:

  1. Assigning explicit IDs to each column
  2. Using DataTableColumnHeader consistently
  3. Adding metadata for better filtering and search functionality
  4. Enabling column filtering where appropriate

This restructuring aligns with best practices for TanStack Table and provides better maintainability.


19-19:

Details

❓ Verification inconclusive

Verify organization ID reference.

The link URL now uses row.original.organizationId directly from the row data instead of potentially getting it from a parameter. This should work correctly as long as each row contains the correct organizationId.


🏁 Script executed:

#!/bin/bash
# Check if VendorRegisterTableRow type includes organizationId
grep -r "VendorRegisterTableRow" --include="*.ts*" . | grep -i "organizationId"

Length of output: 77


Action: Verify the organizationId property on row data

The updated code now constructs the link URL using row.original.organizationId. However, our initial search for the expected type definition (e.g., in a type like VendorRegisterTableRow) did not return any results confirming that this property is defined. Please manually verify that the object referenced by row.original indeed contains a valid organizationId field. Consider the following:

  • Check that the type or interface for the row data (possibly named VendorRegisterTableRow or similar) includes an organizationId property.
  • Ensure that all rows passed to this component contain the correct organizationId required for the link URL.
apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/(overview)/components/VendorsTable.tsx (5)

11-13: Good imports for improved functionality.

Adding useParams simplifies access to route parameters, and the DataTableToolbar component provides a more consistent UI pattern across the application.


16-18: Improved type formatting.

The reformatting of the VendorRegisterTableRow type improves readability while maintaining the same structure.


28-30: Simplified organization ID retrieval.

Switching from useSession to useParams for retrieving the orgId simplifies the code by directly accessing the URL parameter rather than extracting it from the session.


32-45: Well-structured data table configuration.

The table configuration is now more streamlined:

  1. Directly using columns without passing orgId (consistent with VendorColumns.tsx changes)
  2. Setting appropriate pagination defaults
  3. Adding shallow and clearOnDefault options for better state management

This improves the component's maintainability and performance.


47-64: Improved component structure with DataTableToolbar.

The updated JSX structure is cleaner and more consistent:

  1. Using DataTableToolbar for standardized action handling
  2. Incorporating DataTableSortList within the toolbar
  3. Maintaining the CreateVendorSheet component for vendor creation

This approach provides better separation of concerns and a more consistent UI pattern.

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/vendors/(overview)/page.tsx (3)

17-35: Improved function signature and data fetching approach.

The updated Page function has better parameter formatting and uses the new getVendors helper function for cleaner data retrieval.


91-145: Good extraction of vendor fetching logic.

Creating a cached getVendors function:

  1. Improves code organization and separation of concerns
  2. Enhances performance through caching
  3. Centralizes data validation and error handling

The approach of returning an empty array instead of redirecting on validation failures is a cleaner pattern for handling invalid parameters.


147-171: Well-structured getAssignees function.

The reformatted getAssignees function maintains the same functionality with improved readability.

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.

1 participant