Conversation
WalkthroughRefactors 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
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes
Poem
Pre-merge checks and finishing touches❌ Failed checks (2 warnings)
✅ Passed checks (1 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
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_contentandproject_id_max_charcorrectly say “Maksimal 10 karakter”, butproject_id_must_be_at_most_5_charactersstill 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_contentandproject_id_max_charnow 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 olderproject_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 limitThe identifier rules now cap length at 10 and reuse the shared
project_id_max_chartranslation, and the tooltip correctly pullst("project_id_tooltip_content"), which keeps edit and create flows aligned.Two small follow-ups you might consider:
- Add
maxLength={10}to theidentifier<Input>for immediate UX feedback, matching the validation rule.- Swap the hard-coded
"Project ID"heading tot("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 specUpdating
substring(0, 10)and switching min/max messages toproject_id_min_char/project_id_max_charkeeps 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
alphanumericValueto 10 chars or setmaxLength={10}on theidentifier<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_contentandproject_id_max_charnow describe a 10-character limit and align with the updated frontend validation. Consider later cleaning up or updating the legacyproject_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 ruleThe new
project_id_tooltip_contentandproject_id_max_characcurately reflect the 10-character limit and read naturally. If those olderproject_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 number120pxinto a shared constant.The identifier column width of
120pxis hardcoded here and also inspreadsheet-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
📒 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}: Useconsttype parameters for more precise literal inference in TypeScript 5.0+
Use thesatisfiesoperator to validate types without widening them
Leverage inferred type predicates to reduce the need for explicitisreturn types in filter/check functions
UseNoInfer<T>utility to block inference for specific type arguments when they should be determined by other arguments
Utilize narrowing inswitch(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 legacyexperimentalDecorators
Useusingdeclarations for explicit resource management with Disposable pattern instead of manual cleanup (TypeScript 5.2+)
Usewith { type: "json" }for import attributes; avoid deprecatedassertsyntax (TypeScript 5.3/5.8+)
Useimport typeexplicitly when importing types to ensure they are erased during compilation, respectingverbatimModuleSyntaxflag
Use.ts,.mts,.ctsextensions inimport typestatements (TypeScript 5.2+)
Useimport 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 newSetmethods likeunion,intersection, etc., when available (TypeScript 5.5+)
UseObject.groupBy/Map.groupBystandard methods for grouping instead of external libraries (TypeScript 5.4+)
UsePromise.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 viasuperin classes (TypeScript 5....
Files:
apps/web/core/components/project/create/common-attributes.tsxpackages/i18n/src/locales/de/translations.tspackages/i18n/src/locales/ua/translations.tspackages/i18n/src/locales/pl/translations.tspackages/i18n/src/locales/zh-CN/translations.tsapps/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsxpackages/i18n/src/locales/es/translations.tspackages/i18n/src/locales/it/translations.tspackages/i18n/src/locales/id/translations.tspackages/i18n/src/locales/ja/translations.tspackages/i18n/src/locales/ro/translations.tspackages/i18n/src/locales/ru/translations.tsapps/web/core/components/project/form.tsxpackages/i18n/src/locales/vi-VN/translations.tspackages/i18n/src/locales/en/translations.tspackages/i18n/src/locales/ko/translations.tspackages/i18n/src/locales/zh-TW/translations.tspackages/i18n/src/locales/tr-TR/translations.tsapps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsxpackages/i18n/src/locales/cs/translations.tspackages/i18n/src/locales/fr/translations.tspackages/i18n/src/locales/sk/translations.tspackages/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.tspackages/i18n/src/locales/ru/translations.tspackages/i18n/src/locales/cs/translations.tspackages/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_charactersandproject_id_max_charreturned no results. The filepackages/i18n/src/locales/pt-BR/translations.tsand 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 ifproject_id_must_be_at_most_5_charactersis actively used before deciding on updates.The translation key
project_id_must_be_at_most_5_charactersstill references "5 characters" across all 20 language files, whileproject_id_tooltip_contentandproject_id_max_charwere 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: UsingworkspaceSlugdirectly in availability check looks goodPassing
workspaceSlugdirectly intocheckProjectIdentifierAvailabilityis 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-widthlogic 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.tsxlayout 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
120pxwidth is hardcoded here as inissue-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 keyproject_id_must_be_at_most_5_charactersis orphaned and unused—this is a pre-existing issue, not introduced by this PR.The validation logic in
apps/web/core/components/project/form.tsxandapps/web/core/components/project/create/common-attributes.tsxusesproject_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.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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
MultipleSelectGroupActionstarts withopacity-0 pointer-events-noneand 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 viagroup-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 maintainableThe identifier header uses
style={{ width: "120px" }}and the workitem area switches between"min-w-[360px]"and"min-w-60"based ondisplayProperties.key. If the body cell widths change (e.g., inissue-row), this can easily drift out of sync. Consider:
- Replacing the inline
120pxwith 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
📒 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}: Useconsttype parameters for more precise literal inference in TypeScript 5.0+
Use thesatisfiesoperator to validate types without widening them
Leverage inferred type predicates to reduce the need for explicitisreturn types in filter/check functions
UseNoInfer<T>utility to block inference for specific type arguments when they should be determined by other arguments
Utilize narrowing inswitch(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 legacyexperimentalDecorators
Useusingdeclarations for explicit resource management with Disposable pattern instead of manual cleanup (TypeScript 5.2+)
Usewith { type: "json" }for import attributes; avoid deprecatedassertsyntax (TypeScript 5.3/5.8+)
Useimport typeexplicitly when importing types to ensure they are erased during compilation, respectingverbatimModuleSyntaxflag
Use.ts,.mts,.ctsextensions inimport typestatements (TypeScript 5.2+)
Useimport 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 newSetmethods likeunion,intersection, etc., when available (TypeScript 5.5+)
UseObject.groupBy/Map.groupBystandard methods for grouping instead of external libraries (TypeScript 5.4+)
UsePromise.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 viasuperin 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)
There was a problem hiding this comment.
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.truncatealready setsoverflow: hidden; text-overflow: ellipsis; white-space: nowrap, whileline-clamp-1uses a different multi-line clamp approach.For single-line truncation,
truncatealone 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
📒 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}: Useconsttype parameters for more precise literal inference in TypeScript 5.0+
Use thesatisfiesoperator to validate types without widening them
Leverage inferred type predicates to reduce the need for explicitisreturn types in filter/check functions
UseNoInfer<T>utility to block inference for specific type arguments when they should be determined by other arguments
Utilize narrowing inswitch(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 legacyexperimentalDecorators
Useusingdeclarations for explicit resource management with Disposable pattern instead of manual cleanup (TypeScript 5.2+)
Usewith { type: "json" }for import attributes; avoid deprecatedassertsyntax (TypeScript 5.3/5.8+)
Useimport typeexplicitly when importing types to ensure they are erased during compilation, respectingverbatimModuleSyntaxflag
Use.ts,.mts,.ctsextensions inimport typestatements (TypeScript 5.2+)
Useimport 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 newSetmethods likeunion,intersection, etc., when available (TypeScript 5.5+)
UseObject.groupBy/Map.groupBystandard methods for grouping instead of external libraries (TypeScript 5.4+)
UsePromise.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 viasuperin 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:stickyclass 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?.keyefficiently prevents unnecessary component mounting. The defensive check forissueDetail.project_idbefore renderingIssueIdentifieris 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-100and the!opacity-100override whenisMenuActiveensures proper visibility states. ThestopPropagationcorrectly prevents the click from bubbling to the parentControlLink.
There was a problem hiding this comment.
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 byproject_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
📒 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}: Useconsttype parameters for more precise literal inference in TypeScript 5.0+
Use thesatisfiesoperator to validate types without widening them
Leverage inferred type predicates to reduce the need for explicitisreturn types in filter/check functions
UseNoInfer<T>utility to block inference for specific type arguments when they should be determined by other arguments
Utilize narrowing inswitch(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 legacyexperimentalDecorators
Useusingdeclarations for explicit resource management with Disposable pattern instead of manual cleanup (TypeScript 5.2+)
Usewith { type: "json" }for import attributes; avoid deprecatedassertsyntax (TypeScript 5.3/5.8+)
Useimport typeexplicitly when importing types to ensure they are erased during compilation, respectingverbatimModuleSyntaxflag
Use.ts,.mts,.ctsextensions inimport typestatements (TypeScript 5.2+)
Useimport 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 newSetmethods likeunion,intersection, etc., when available (TypeScript 5.5+)
UseObject.groupBy/Map.groupBystandard methods for grouping instead of external libraries (TypeScript 5.4+)
UsePromise.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 viasuperin classes (TypeScript 5....
Files:
apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsxpackages/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 consistentThe 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-headernaming are properly configured, and the opacity transitions for the selection control work as intended.
Description
This PR updates to the project identifier character limit and introduces an identifier column in the table layout.
Type of Change
Summary by CodeRabbit
Improvements
Features
✏️ Tip: You can customize this high-level summary in your review settings.