Skip to content

[WEB-5600] chore: project identifier char limit updated and table layout enhancements#8263

Merged
pushya22 merged 7 commits intopreviewfrom
chore-table-layout-column-separation
Dec 8, 2025
Merged

[WEB-5600] chore: project identifier char limit updated and table layout enhancements#8263
pushya22 merged 7 commits intopreviewfrom
chore-table-layout-column-separation

Conversation

@anmolsinghbhatia
Copy link
Collaborator

@anmolsinghbhatia anmolsinghbhatia commented Dec 8, 2025

Description

This PR updates to the project identifier character limit and introduces an identifier column in the table layout.

Type of Change

  • Improvement

Summary by CodeRabbit

  • Improvements

    • Unified spreadsheet rows and header into a single sticky left column for consistent name display, alignment, truncation, and hover quick-actions; preserved checkbox and sub-issue indentation behavior.
    • Work item layout adapted to better handle optional identifiers and responsive widths.
  • Features

    • Project identifier length increased from 5 to 10 characters.
    • Validation messages, tooltips, and translations updated across locales to reflect the new limit.

✏️ Tip: You can customize this high-level summary in your review settings.

@anmolsinghbhatia anmolsinghbhatia self-assigned this Dec 8, 2025
Copilot AI review requested due to automatic review settings December 8, 2025 12:25
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 8, 2025

Walkthrough

Refactors the spreadsheet issue left column into a single sticky column combining identifier and work-item, and increases project identifier max length from 5 to 10 across input validation, form handling, and translations for many locales.

Changes

Cohort / File(s) Summary
Spreadsheet layout reorganization
apps/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx, apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx
Combined identifier and work-item into one left sticky column; removed dynamic min-width; added conditional identifier block; adjusted inner flex layout, truncation/tooltips, quick-actions hover behavior, and header composition.
Project identifier validation & form
apps/web/core/components/project/create/common-attributes.tsx, apps/web/core/components/project/form.tsx
Increased identifier max length from 5 → 10 (input substring and validation rules); updated validation message keys and switched tooltip text to a translation key; minor submission call cleanup.
Internationalization updates
packages/i18n/src/locales/.../translations.ts
(e.g., en, de, fr, es, ja, ko, pl, pt-BR, ru, zh-CN, zh-TW, cs, id, it, ro, sk, tr-TR, ua, vi-VN, ...)
Updated project_id_tooltip_content and project_id_max_char strings in many locales to indicate a 10-character maximum instead of 5. No keys added or removed.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • Focus review on:
    • issue-row.tsx / spreadsheet-header.tsx: sticky column behavior, responsive min-width changes, truncation, tooltip accessibility, and quick-actions hover interactions.
    • common-attributes.tsx / form.tsx: input truncation (substring), validation rule updates, and correct i18n key usage.
    • A representative sample of locale files to confirm consistent 5→10 text updates and no accidental edits.

Poem

🐰 Ten characters now, not five—
I hop and stitch the spreadsheet hive.
One sticky column, tidy and bright,
IDs stretch longer, translations right.
Quick actions peek when you arrive. ✨

Pre-merge checks and finishing touches

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Description check ⚠️ Warning The description is mostly incomplete, missing key sections like detailed explanation, type of change selection, test scenarios, and references as defined in the template. Expand the description to include all template sections: detailed change explanation, complete type of change checkboxes, test scenarios, and issue references for full clarity.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes both main changes: increasing the project identifier character limit and enhancing table layout with an identifier column.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore-table-layout-column-separation

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

Comment @coderabbitai help to get the list of available commands and usage tips.

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/i18n/src/locales/id/translations.ts (1)

339-349: Update Indonesian max-length string to 10 characters

project_id_tooltip_content and project_id_max_char correctly say “Maksimal 10 karakter”, but project_id_must_be_at_most_5_characters still says “ID proyek maksimal 5 karakter”.

To avoid conflicting limits in the UI, update this message:

-  project_id_must_be_at_most_5_characters: "ID proyek maksimal 5 karakter",
+  project_id_must_be_at_most_5_characters: "ID proyek maksimal 10 karakter",
🧹 Nitpick comments (6)
packages/i18n/src/locales/zh-TW/translations.ts (1)

327-336: Project ID tooltip and max-length copy correctly updated to 10 characters

project_id_tooltip_content and project_id_max_char now clearly reflect the 10-character limit and match the new validation keys used in the forms. You may also want to eventually align or deprecate the older project_id_must_be_* keys that still mention 5 characters to avoid confusion.

apps/web/core/components/project/form.tsx (1)

328-343: Identifier validation and tooltip are consistent with the new 10-character limit

The identifier rules now cap length at 10 and reuse the shared project_id_max_char translation, and the tooltip correctly pulls t("project_id_tooltip_content"), which keeps edit and create flows aligned.

Two small follow-ups you might consider:

  • Add maxLength={10} to the identifier <Input> for immediate UX feedback, matching the validation rule.
  • Swap the hard-coded "Project ID" heading to t("project_id") to be fully localized, since that key already exists in translations.

Also applies to: 360-363

apps/web/core/components/project/create/common-attributes.tsx (1)

36-45: Create-flow identifier auto-generation and validation now match the 10-char spec

Updating substring(0, 10) and switching min/max messages to project_id_min_char / project_id_max_char keeps the create form aligned with the new limit and shared translations.

Optional UX polish:

  • Mirror the 10-char cap for manual edits as well (e.g., clamp alphanumericValue to 10 chars or set maxLength={10} on the identifier <Input>) so users can’t type beyond what will be accepted.

Also applies to: 87-100

packages/i18n/src/locales/ko/translations.ts (1)

332-341: Korean project ID tooltip and max-length messages updated correctly

project_id_tooltip_content and project_id_max_char now describe a 10-character limit and align with the updated frontend validation. Consider later cleaning up or updating the legacy project_id_must_be_* strings that still mention 5 characters so all related messages stay consistent.

packages/i18n/src/locales/ro/translations.ts (1)

338-347: Romanian project ID tooltip and max-length text aligned with 10-char rule

The new project_id_tooltip_content and project_id_max_char accurately reflect the 10-character limit and read naturally. If those older project_id_must_be_* keys are now obsolete, you might eventually update or remove them to avoid mixed 5 vs 10 character wording in the locale.

apps/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx (1)

277-294: Consider extracting the magic number 120px into a shared constant.

The identifier column width of 120px is hardcoded here and also in spreadsheet-header.tsx. Extracting this into a shared constant would improve maintainability and ensure consistency between the header and row widths.

// Could be defined in a constants file
export const SPREADSHEET_IDENTIFIER_COLUMN_WIDTH = 120;

Then use it as:

-                style={{ width: "120px" }}
+                style={{ width: `${SPREADSHEET_IDENTIFIER_COLUMN_WIDTH}px` }}
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f41e121 and 76f725e.

📒 Files selected for processing (23)
  • apps/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx (3 hunks)
  • apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx (1 hunks)
  • apps/web/core/components/project/create/common-attributes.tsx (2 hunks)
  • apps/web/core/components/project/form.tsx (3 hunks)
  • packages/i18n/src/locales/cs/translations.ts (1 hunks)
  • packages/i18n/src/locales/de/translations.ts (1 hunks)
  • packages/i18n/src/locales/en/translations.ts (1 hunks)
  • packages/i18n/src/locales/es/translations.ts (1 hunks)
  • packages/i18n/src/locales/fr/translations.ts (1 hunks)
  • packages/i18n/src/locales/id/translations.ts (1 hunks)
  • packages/i18n/src/locales/it/translations.ts (1 hunks)
  • packages/i18n/src/locales/ja/translations.ts (1 hunks)
  • packages/i18n/src/locales/ko/translations.ts (1 hunks)
  • packages/i18n/src/locales/pl/translations.ts (1 hunks)
  • packages/i18n/src/locales/pt-BR/translations.ts (1 hunks)
  • packages/i18n/src/locales/ro/translations.ts (1 hunks)
  • packages/i18n/src/locales/ru/translations.ts (1 hunks)
  • packages/i18n/src/locales/sk/translations.ts (1 hunks)
  • packages/i18n/src/locales/tr-TR/translations.ts (1 hunks)
  • packages/i18n/src/locales/ua/translations.ts (1 hunks)
  • packages/i18n/src/locales/vi-VN/translations.ts (1 hunks)
  • packages/i18n/src/locales/zh-CN/translations.ts (1 hunks)
  • packages/i18n/src/locales/zh-TW/translations.ts (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx,mts,cts}

📄 CodeRabbit inference engine (.github/instructions/typescript.instructions.md)

**/*.{ts,tsx,mts,cts}: Use const type parameters for more precise literal inference in TypeScript 5.0+
Use the satisfies operator to validate types without widening them
Leverage inferred type predicates to reduce the need for explicit is return types in filter/check functions
Use NoInfer<T> utility to block inference for specific type arguments when they should be determined by other arguments
Utilize narrowing in switch(true) blocks for control flow analysis (TypeScript 5.3+)
Rely on narrowing from direct boolean comparisons for type guards
Trust preserved narrowing in closures when variables aren't modified after the check (TypeScript 5.4+)
Use constant indices to narrow object/array properties (TypeScript 5.5+)
Use standard ECMAScript decorators (Stage 3) instead of legacy experimentalDecorators
Use using declarations for explicit resource management with Disposable pattern instead of manual cleanup (TypeScript 5.2+)
Use with { type: "json" } for import attributes; avoid deprecated assert syntax (TypeScript 5.3/5.8+)
Use import type explicitly when importing types to ensure they are erased during compilation, respecting verbatimModuleSyntax flag
Use .ts, .mts, .cts extensions in import type statements (TypeScript 5.2+)
Use import type { Type } from "mod" with { "resolution-mode": "import" } for specific module resolution contexts (TypeScript 5.3+)
Use new iterator methods (map, filter, etc.) if targeting modern environments (TypeScript 5.6+)
Utilize new Set methods like union, intersection, etc., when available (TypeScript 5.5+)
Use Object.groupBy / Map.groupBy standard methods for grouping instead of external libraries (TypeScript 5.4+)
Use Promise.withResolvers() for creating promises with exposed resolve/reject functions (TypeScript 5.7+)
Use copying array methods (toSorted, toSpliced, with) for immutable array operations (TypeScript 5.2+)
Avoid accessing instance fields via super in classes (TypeScript 5....

Files:

  • apps/web/core/components/project/create/common-attributes.tsx
  • packages/i18n/src/locales/de/translations.ts
  • packages/i18n/src/locales/ua/translations.ts
  • packages/i18n/src/locales/pl/translations.ts
  • packages/i18n/src/locales/zh-CN/translations.ts
  • apps/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx
  • packages/i18n/src/locales/es/translations.ts
  • packages/i18n/src/locales/it/translations.ts
  • packages/i18n/src/locales/id/translations.ts
  • packages/i18n/src/locales/ja/translations.ts
  • packages/i18n/src/locales/ro/translations.ts
  • packages/i18n/src/locales/ru/translations.ts
  • apps/web/core/components/project/form.tsx
  • packages/i18n/src/locales/vi-VN/translations.ts
  • packages/i18n/src/locales/en/translations.ts
  • packages/i18n/src/locales/ko/translations.ts
  • packages/i18n/src/locales/zh-TW/translations.ts
  • packages/i18n/src/locales/tr-TR/translations.ts
  • apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx
  • packages/i18n/src/locales/cs/translations.ts
  • packages/i18n/src/locales/fr/translations.ts
  • packages/i18n/src/locales/sk/translations.ts
  • packages/i18n/src/locales/pt-BR/translations.ts
🧠 Learnings (1)
📚 Learning: 2025-03-11T19:42:41.769Z
Learnt from: janreges
Repo: makeplane/plane PR: 6743
File: packages/i18n/src/store/index.ts:160-161
Timestamp: 2025-03-11T19:42:41.769Z
Learning: In the Plane project, the file 'packages/i18n/src/store/index.ts' already includes support for Polish language translations with the case "pl".

Applied to files:

  • packages/i18n/src/locales/pl/translations.ts
  • packages/i18n/src/locales/ru/translations.ts
  • packages/i18n/src/locales/cs/translations.ts
  • packages/i18n/src/locales/sk/translations.ts
🧬 Code graph analysis (2)
apps/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx (1)
apps/web/ce/components/issues/issue-details/issue-identifier.tsx (1)
  • IssueIdentifier (81-107)
apps/web/core/components/project/form.tsx (2)
apps/space/core/store/publish/publish.store.ts (1)
  • workspaceSlug (93-95)
packages/i18n/src/store/index.ts (1)
  • t (223-244)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: CodeQL analysis (javascript-typescript)
  • GitHub Check: Agent
  • GitHub Check: Build and lint web apps
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (17)
packages/i18n/src/locales/it/translations.ts (1)

343-343: LGTM! Italian translations correctly updated.

Both translation strings accurately reflect the new 10-character maximum limit for project identifiers. The Italian translations are grammatically correct and consistent with each other.

Also applies to: 349-349

packages/i18n/src/locales/es/translations.ts (2)

348-348: Correct update to project ID tooltip.

The tooltip content on line 348 has been properly updated to reflect the new 10-character maximum.


354-354: Correct update to project ID max character validation message.

The validation message on line 354 has been properly updated to reflect the new 10-character maximum.

packages/i18n/src/locales/pt-BR/translations.ts (2)

342-343: LGTM! Translation correctly updated.

The tooltip content has been properly updated to reflect the new 10-character maximum limit, and the Portuguese translation is accurate.


340-340: Unable to verify: Referenced translation keys not found in codebase.

The search for both project_id_must_be_at_most_5_characters and project_id_max_char returned no results. The file packages/i18n/src/locales/pt-BR/translations.ts and the referenced Portuguese text do not appear to exist in the current codebase. Please confirm the file path and key names are correct before proceeding with this review.

packages/i18n/src/locales/tr-TR/translations.ts (1)

340-340: Translation update looks correct.

The Turkish translation accurately reflects the new 10-character maximum limit for project identifiers.

packages/i18n/src/locales/cs/translations.ts (2)

340-340: LGTM! Czech translations correctly updated.

The translation strings accurately reflect the change from 5 to 10 characters for the project identifier maximum length. The Czech grammar and syntax are correct:

  • "Max. 10 znaků" (Max. 10 characters)
  • "ID projektu může mít maximálně 10 znaků" (Project ID can have a maximum of 10 characters)

Also applies to: 346-346


338-338: Verify if project_id_must_be_at_most_5_characters is actively used before deciding on updates.

The translation key project_id_must_be_at_most_5_characters still references "5 characters" across all 20 language files, while project_id_tooltip_content and project_id_max_char were correctly updated to "10 characters". This creates an inconsistency, but the key does not appear in the codebase (no results from code search). Confirm whether this translation key is still actively referenced in the application before updating it alongside the other strings.

packages/i18n/src/locales/fr/translations.ts (1)

344-344: LGTM: French translations updated correctly.

The updated translations accurately reflect the new 10-character maximum for project identifiers. The French wording is clear and grammatically correct.

Also applies to: 350-350

packages/i18n/src/locales/vi-VN/translations.ts (1)

341-341: LGTM! Translation accurately reflects the new 10-character limit.

The Vietnamese translations for both the tooltip and validation message have been correctly updated to reflect the increased maximum project identifier length from 5 to 10 characters.

Also applies to: 347-347

packages/i18n/src/locales/sk/translations.ts (1)

340-340: Slovak translations are accurate and grammatically correct.

The updated translations correctly reflect the change from 5 to 10 characters maximum for project identifiers. The Slovak grammar is proper: "znakov" is the correct genitive plural form used with numbers 5 and above.

Also applies to: 346-346

apps/web/core/components/project/form.tsx (1)

186-193: Using workspaceSlug directly in availability check looks good

Passing workspaceSlug directly into checkProjectIdentifierAvailability is type-correct and removes the unnecessary .toString() without changing behavior.

apps/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx (1)

296-376: LGTM!

The workitem section restructuring is well-implemented. The conditional min-width logic correctly adjusts based on whether the identifier column is displayed, and event handling for quick actions properly prevents event bubbling.

apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx (1)

46-86: LGTM! Header structure aligns well with issue row layout.

The header restructuring mirrors the issue-row.tsx layout correctly, with consistent conditional rendering for the identifier section and matching width constraints. The selection control placement within the workitem header area is appropriate.

Minor note: The same 120px width is hardcoded here as in issue-row.tsx. Consider the shared constant suggestion from the issue-row review to keep them in sync.

packages/i18n/src/locales/ua/translations.ts (3)

340-340: LGTM! Translation correctly updated to 10-character limit.

The tooltip content has been properly updated from 5 to 10 characters in Ukrainian, aligning with the PR objectives.


346-346: LGTM! Validation message correctly updated.

The maximum character limit message has been properly updated to reflect the new 10-character limit in Ukrainian.


338-338: The translation key project_id_must_be_at_most_5_characters is orphaned and unused—this is a pre-existing issue, not introduced by this PR.

The validation logic in apps/web/core/components/project/form.tsx and apps/web/core/components/project/create/common-attributes.tsx uses project_id_max_char (which correctly says "10 characters"), not the old 5-character key. Line 338 in the ua/translations.ts file contains dead code that exists across all 20 locale files but is never referenced in the application code. While this represents a translation maintenance issue (an outdated, orphaned key that should be removed from all locales), it does not affect the actual validation behavior or user experience, as the correct 10-character limit is enforced and displayed.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR enhances the table layout by introducing a dedicated identifier column in the spreadsheet view and increasing the project ID maximum length from 5 to 10 characters. The changes improve UI consistency and provide more flexibility for project identification while maintaining proper internationalization across all supported locales.

Key Changes:

  • Increased project ID maximum character limit from 5 to 10 across all validation logic and translations
  • Restructured spreadsheet layout to display identifier as a separate 120px fixed-width column
  • Improved internationalization by replacing hardcoded tooltip text with translation keys

Reviewed changes

Copilot reviewed 23 out of 23 changed files in this pull request and generated no comments.

Show a summary per file
File Description
packages/i18n/src/locales/*/translations.ts (19 files) Updated project_id_tooltip_content and project_id_max_char translations to reflect new 10-character limit
apps/web/core/components/project/form.tsx Updated maxLength validation to 10 and replaced hardcoded tooltip with internationalized text
apps/web/core/components/project/create/common-attributes.tsx Updated substring limit to 10 and standardized validation message keys
apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx Restructured header to include dedicated 120px identifier section with conditional rendering
apps/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx Restructured row layout to match header structure with consistent 120px identifier section

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

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

🧹 Nitpick comments (2)
apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx (2)

69-81: Consider improving keyboard accessibility for the bulk-select control

MultipleSelectGroupAction starts with opacity-0 pointer-events-none and only becomes interactive on hover or when a selection already exists. This makes the header bulk-select hard/impossible to access via keyboard-only navigation when no items are selected yet. Consider keeping it focusable (and ideally visible) at all times, or at least toggling via group-focus-within / focus styles so keyboard users can still trigger group selection without relying on hover.


53-67: Avoid hard-coded widths to keep header/body alignment maintainable

The identifier header uses style={{ width: "120px" }} and the workitem area switches between "min-w-[360px]" and "min-w-60" based on displayProperties.key. If the body cell widths change (e.g., in issue-row), this can easily drift out of sync. Consider:

  • Replacing the inline 120px with a shared Tailwind utility or CSS variable, and
  • Centralizing these width values/constants so both the header and row layout use the same source of truth.
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 76f725e and 00a5b33.

📒 Files selected for processing (1)
  • apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx,mts,cts}

📄 CodeRabbit inference engine (.github/instructions/typescript.instructions.md)

**/*.{ts,tsx,mts,cts}: Use const type parameters for more precise literal inference in TypeScript 5.0+
Use the satisfies operator to validate types without widening them
Leverage inferred type predicates to reduce the need for explicit is return types in filter/check functions
Use NoInfer<T> utility to block inference for specific type arguments when they should be determined by other arguments
Utilize narrowing in switch(true) blocks for control flow analysis (TypeScript 5.3+)
Rely on narrowing from direct boolean comparisons for type guards
Trust preserved narrowing in closures when variables aren't modified after the check (TypeScript 5.4+)
Use constant indices to narrow object/array properties (TypeScript 5.5+)
Use standard ECMAScript decorators (Stage 3) instead of legacy experimentalDecorators
Use using declarations for explicit resource management with Disposable pattern instead of manual cleanup (TypeScript 5.2+)
Use with { type: "json" } for import attributes; avoid deprecated assert syntax (TypeScript 5.3/5.8+)
Use import type explicitly when importing types to ensure they are erased during compilation, respecting verbatimModuleSyntax flag
Use .ts, .mts, .cts extensions in import type statements (TypeScript 5.2+)
Use import type { Type } from "mod" with { "resolution-mode": "import" } for specific module resolution contexts (TypeScript 5.3+)
Use new iterator methods (map, filter, etc.) if targeting modern environments (TypeScript 5.6+)
Utilize new Set methods like union, intersection, etc., when available (TypeScript 5.5+)
Use Object.groupBy / Map.groupBy standard methods for grouping instead of external libraries (TypeScript 5.4+)
Use Promise.withResolvers() for creating promises with exposed resolve/reject functions (TypeScript 5.7+)
Use copying array methods (toSorted, toSpliced, with) for immutable array operations (TypeScript 5.2+)
Avoid accessing instance fields via super in classes (TypeScript 5....

Files:

  • apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Build and lint web apps
  • GitHub Check: Analyze (javascript)

@anmolsinghbhatia anmolsinghbhatia marked this pull request as draft December 8, 2025 12:40
@anmolsinghbhatia anmolsinghbhatia changed the title Chore table layout enhancements [WEB-5600] chore: project identifier char limit updated and table layout enhancements Dec 8, 2025
@anmolsinghbhatia anmolsinghbhatia marked this pull request as ready for review December 8, 2025 14:10
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: 0

🧹 Nitpick comments (1)
apps/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx (1)

350-362: Consider simplifying truncation classes.

Lines 351-355 apply multiple truncation strategies (line-clamp-1, overflow-hidden, truncate) that may conflict. truncate already sets overflow: hidden; text-overflow: ellipsis; white-space: nowrap, while line-clamp-1 uses a different multi-line clamp approach.

For single-line truncation, truncate alone typically suffices.

-              <div className="w-full line-clamp-1 text-sm text-custom-text-100">
-                <div className="w-full overflow-hidden">
+              <div className="w-full text-sm text-custom-text-100">
+                <div className="w-full">
                   <Tooltip tooltipContent={issueDetail.name} isMobile={isMobile}>
                     <div
-                      className="h-full w-full cursor-pointer truncate pr-4 text-left text-[0.825rem] text-custom-text-100 focus:outline-none"
+                      className="h-full w-full cursor-pointer truncate pr-4 text-left text-[0.825rem] text-custom-text-100 focus:outline-none"
                       tabIndex={-1}
                     >
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 00a5b33 and 8167a2d.

📒 Files selected for processing (2)
  • apps/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx (3 hunks)
  • apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx,mts,cts}

📄 CodeRabbit inference engine (.github/instructions/typescript.instructions.md)

**/*.{ts,tsx,mts,cts}: Use const type parameters for more precise literal inference in TypeScript 5.0+
Use the satisfies operator to validate types without widening them
Leverage inferred type predicates to reduce the need for explicit is return types in filter/check functions
Use NoInfer<T> utility to block inference for specific type arguments when they should be determined by other arguments
Utilize narrowing in switch(true) blocks for control flow analysis (TypeScript 5.3+)
Rely on narrowing from direct boolean comparisons for type guards
Trust preserved narrowing in closures when variables aren't modified after the check (TypeScript 5.4+)
Use constant indices to narrow object/array properties (TypeScript 5.5+)
Use standard ECMAScript decorators (Stage 3) instead of legacy experimentalDecorators
Use using declarations for explicit resource management with Disposable pattern instead of manual cleanup (TypeScript 5.2+)
Use with { type: "json" } for import attributes; avoid deprecated assert syntax (TypeScript 5.3/5.8+)
Use import type explicitly when importing types to ensure they are erased during compilation, respecting verbatimModuleSyntax flag
Use .ts, .mts, .cts extensions in import type statements (TypeScript 5.2+)
Use import type { Type } from "mod" with { "resolution-mode": "import" } for specific module resolution contexts (TypeScript 5.3+)
Use new iterator methods (map, filter, etc.) if targeting modern environments (TypeScript 5.6+)
Utilize new Set methods like union, intersection, etc., when available (TypeScript 5.5+)
Use Object.groupBy / Map.groupBy standard methods for grouping instead of external libraries (TypeScript 5.4+)
Use Promise.withResolvers() for creating promises with exposed resolve/reject functions (TypeScript 5.7+)
Use copying array methods (toSorted, toSpliced, with) for immutable array operations (TypeScript 5.2+)
Avoid accessing instance fields via super in classes (TypeScript 5....

Files:

  • apps/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx
🧬 Code graph analysis (1)
apps/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx (1)
apps/web/ce/components/issues/issue-details/issue-identifier.tsx (1)
  • IssueIdentifier (81-107)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Build and lint web apps
🔇 Additional comments (4)
apps/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx (4)

253-258: LGTM!

The responsive md:sticky class appropriately enables sticky positioning only on medium+ screens, and the unified comment clearly documents the new column structure.


277-291: LGTM!

The conditional rendering with displayProperties?.key efficiently prevents unnecessary component mounting. The defensive check for issueDetail.project_id before rendering IssueIdentifier is a good safety measure.


293-299: LGTM!

The conditional min-width logic correctly adjusts the workitem section width based on identifier visibility, ensuring consistent layout proportions.


363-373: LGTM!

The hover-reveal pattern with opacity-0 group-hover:opacity-100 and the !opacity-100 override when isMenuActive ensures proper visibility states. The stopPropagation correctly prevents the click from bubbling to the parent ControlLink.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

♻️ Duplicate comments (1)
packages/i18n/src/locales/tr-TR/translations.ts (1)

337-338: Obsolete 5-character translation key still present

project_id_must_be_at_most_5_characters (line 338) appears to be a leftover from the old 5-char limit and was previously identified as unused and superseded by project_id_max_char. Consider removing this key here (and in other locales) to avoid confusion between 5- and 10-character messages.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 00a5b33 and b9ac1e5.

📒 Files selected for processing (3)
  • apps/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx (3 hunks)
  • apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx (1 hunks)
  • packages/i18n/src/locales/tr-TR/translations.ts (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx,mts,cts}

📄 CodeRabbit inference engine (.github/instructions/typescript.instructions.md)

**/*.{ts,tsx,mts,cts}: Use const type parameters for more precise literal inference in TypeScript 5.0+
Use the satisfies operator to validate types without widening them
Leverage inferred type predicates to reduce the need for explicit is return types in filter/check functions
Use NoInfer<T> utility to block inference for specific type arguments when they should be determined by other arguments
Utilize narrowing in switch(true) blocks for control flow analysis (TypeScript 5.3+)
Rely on narrowing from direct boolean comparisons for type guards
Trust preserved narrowing in closures when variables aren't modified after the check (TypeScript 5.4+)
Use constant indices to narrow object/array properties (TypeScript 5.5+)
Use standard ECMAScript decorators (Stage 3) instead of legacy experimentalDecorators
Use using declarations for explicit resource management with Disposable pattern instead of manual cleanup (TypeScript 5.2+)
Use with { type: "json" } for import attributes; avoid deprecated assert syntax (TypeScript 5.3/5.8+)
Use import type explicitly when importing types to ensure they are erased during compilation, respecting verbatimModuleSyntax flag
Use .ts, .mts, .cts extensions in import type statements (TypeScript 5.2+)
Use import type { Type } from "mod" with { "resolution-mode": "import" } for specific module resolution contexts (TypeScript 5.3+)
Use new iterator methods (map, filter, etc.) if targeting modern environments (TypeScript 5.6+)
Utilize new Set methods like union, intersection, etc., when available (TypeScript 5.5+)
Use Object.groupBy / Map.groupBy standard methods for grouping instead of external libraries (TypeScript 5.4+)
Use Promise.withResolvers() for creating promises with exposed resolve/reject functions (TypeScript 5.7+)
Use copying array methods (toSorted, toSpliced, with) for immutable array operations (TypeScript 5.2+)
Avoid accessing instance fields via super in classes (TypeScript 5....

Files:

  • apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx
  • packages/i18n/src/locales/tr-TR/translations.ts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Build and lint web apps
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (2)
packages/i18n/src/locales/tr-TR/translations.ts (1)

340-341: 10-character limit text looks correct and consistent

The updated tooltip and max-length validation message both clearly state a 10-character cap and read naturally in Turkish, matching the new identifier constraint.

Also applies to: 347-347

apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx (1)

54-68: LGTM!

The conditional rendering of the selection control and the dynamic label logic are correctly implemented. The hover effects using the group/list-header naming are properly configured, and the opacity transitions for the selection control work as intended.

@pushya22 pushya22 merged commit f0bc2bd into preview Dec 8, 2025
6 checks passed
@pushya22 pushya22 deleted the chore-table-layout-column-separation branch December 8, 2025 14:30
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.

4 participants