Skip to content

[Git 248] Refactor: Components consolidation core Components#9245

Open
codingwolf-at wants to merge 41 commits into
git-240/hooks-consolidation-core-hooksfrom
git-248/components-consolidation-core-components
Open

[Git 248] Refactor: Components consolidation core Components#9245
codingwolf-at wants to merge 41 commits into
git-240/hooks-consolidation-core-hooksfrom
git-248/components-consolidation-core-components

Conversation

@codingwolf-at

Copy link
Copy Markdown

Description

Moved Components from apps/web/ce/components to apps/web/core/components

Type of Change

  • Code refactoring

… ExtendedAppHeader, GlobalModals, and SubscriptionPill components
…date import paths in home and issues sections
…lation options in issue detail components, and introduce new activity helper functions
…troduce it in core filter value input component
@coderabbitai

coderabbitai Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 354c4691-7731-43b2-bd2d-100f1b1a86dc

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch git-248/components-consolidation-core-components

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.

@github-actions

github-actions Bot commented Jun 16, 2026

Copy link
Copy Markdown

React Doctor found 266 issues in 103 files · 14 errors & 252 warnings · score 66 / 100 (Needs work) · vs git-240/hooks-consolidation-core-hooks

Errors

252 warnings

app/(all)/[workspaceSlug]/(projects)/active-cycles/header.tsx

  • ⚠️ L24 JSX element passed as a prop jsx-no-jsx-as-prop

app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/page.tsx

  • ⚠️ L28 Event logic handled in an effect no-event-handler
  • ⚠️ L59 Derived value copied into state no-derived-state

app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/work-item-header.tsx

  • ⚠️ L45 JSX element passed as a prop jsx-no-jsx-as-prop
  • ⚠️ L54 JSX element passed as a prop jsx-no-jsx-as-prop

app/(all)/[workspaceSlug]/(projects)/extended-sidebar.tsx

  • ⚠️ L38 Chained array iterations js-combine-iterations
  • ⚠️ L68 Pure function rebuilt every render prefer-module-scope-pure-function

app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/header.tsx

  • ⚠️ L77 JSX element passed as a prop jsx-no-jsx-as-prop
  • ⚠️ L87 JSX element passed as a prop jsx-no-jsx-as-prop

app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/header.tsx

  • ⚠️ L46 JSX element passed as a prop jsx-no-jsx-as-prop
  • ⚠️ L55 JSX element passed as a prop jsx-no-jsx-as-prop
  • ⚠️ L64 JSX element passed as a prop jsx-no-jsx-as-prop

app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx

  • ⚠️ L143 JSX element passed as a prop jsx-no-jsx-as-prop
  • ⚠️ L152 JSX element passed as a prop jsx-no-jsx-as-prop

app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx

  • ⚠️ L48 JSX element passed as a prop jsx-no-jsx-as-prop

app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx

  • ⚠️ L140 JSX element passed as a prop jsx-no-jsx-as-prop
  • ⚠️ L151 JSX element passed as a prop jsx-no-jsx-as-prop

app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/header.tsx

  • ⚠️ L52 JSX element passed as a prop jsx-no-jsx-as-prop

app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx

  • ⚠️ L72 JSX element passed as a prop jsx-no-jsx-as-prop
  • ⚠️ L82 JSX element passed as a prop jsx-no-jsx-as-prop

app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx

  • ⚠️ L68 JSX element passed as a prop jsx-no-jsx-as-prop

app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx

  • ⚠️ L129 JSX element passed as a prop jsx-no-jsx-as-prop
  • ⚠️ L138 JSX element passed as a prop jsx-no-jsx-as-prop

app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/header.tsx

  • ⚠️ L36 JSX element passed as a prop jsx-no-jsx-as-prop

app/(all)/[workspaceSlug]/(projects)/workspace-views/header.tsx

  • ⚠️ L114 JSX element passed as a prop jsx-no-jsx-as-prop
  • ⚠️ L117 JSX element passed as a prop jsx-no-jsx-as-prop

app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx

  • ⚠️ L124 Control missing accessible label control-has-associated-label
  • ⚠️ L129 Autofocus on an element no-autofocus

core/components/breadcrumbs/project.tsx

  • ⚠️ L59 Pure function rebuilt every render prefer-module-scope-pure-function
  • ⚠️ L68 JSX element passed as a prop jsx-no-jsx-as-prop
  • ⚠️ L76 Component rendered by inline function call no-render-in-render

core/components/common/modal/global.tsx

  • ⚠️ L10 Non-component export in component file only-export-components

core/components/core/modals/bulk-delete-issues-modal-item.tsx

  • ⚠️ L36 Control missing accessible label control-has-associated-label

core/components/core/modals/existing-issues-list-modal.tsx

  • ⚠️ L46 Many related useState calls prefer-useReducer
  • ⚠️ L60 Event logic handled in an effect no-event-handler
  • ⚠️ L62 Loading useState forces extra render rendering-usetransition-loading
  • ⚠️ L126 Event logic handled in an effect no-event-handler
  • ⚠️ L127 Derived value copied into state no-derived-state
  • ⚠️ L133 Derived value copied into state no-derived-state
  • ⚠️ L133 Data passed to parent via effect no-pass-data-to-parent
  • ⚠️ L133 Live state pushed to parent via effect no-pass-live-state-to-parent
  • ⚠️ L134 Missing effect dependencies exhaustive-deps
  • ⚠️ L261 Control missing accessible label control-has-associated-label

core/components/cycles/active-cycle/cycle-stats.tsx

  • ⚠️ L71 Pure function rebuilt every render prefer-module-scope-pure-function
  • ⚠️ L94 Missing effect dependencies exhaustive-deps
  • ⚠️ L191 Click handler missing keyboard handler click-events-have-key-events
  • ⚠️ L191 Interaction on static element no-static-element-interactions
  • ⚠️ L228 Component rendered by inline function call no-render-in-render
  • ⚠️ L233 Component rendered by inline function call no-render-in-render
  • ⚠️ L300 Array index used as a key no-array-index-as-key

202 more warnings not shown.

Reviewed by React Doctor for commit 1789e66. See inline comments for fixes.

@CLAassistant

CLAassistant commented Jun 17, 2026

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

@codingwolf-at codingwolf-at changed the base branch from preview to git-240/hooks-consolidation-core-hooks June 17, 2026 07:18
</Loader>
)}
{/* eslint-disable-next-line react/iframe-missing-sandbox oxlint-disable-next-line jsx_a11y/iframe-has-title */}
<iframe

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

React Doctor · react-doctor/iframe-has-title (warning)

Screen reader users cannot identify this <iframe> because it has no title. Add a title that describes its content.

Fix → Add a descriptive title so screen reader users know what the embedded frame contains.

Docs

</Loader>
)}
{/* eslint-disable-next-line react/iframe-missing-sandbox oxlint-disable-next-line jsx_a11y/iframe-has-title */}
<iframe

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

React Doctor · react-doctor/iframe-missing-sandbox (warning)

An <iframe> with no sandbox is a security hole: the embedded page gets full access to your site.

Fix → Add sandbox="" or a curated value so embedded pages cannot get full access to your site by default.

Docs

position={block.position}
/>
{/* oxlint-disable-next-line jsx_a11y/no-static-element-interactions */}
<div

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

React Doctor · react-doctor/no-static-element-interactions (warning)

Screen reader users can't tell this click handler is interactive because it has no role, so add a role or use a button or link.

Fix → Give clickable static elements a role, or use a button or link.

Docs

import { HomePageHeader } from "@/plane-web/components/home/header";
// local imports
import { StickiesWidget } from "../stickies/widget";
import { HomeLoader, NoProjectsEmptyState, RecentActivityWidget } from "./widgets";

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

React Doctor · react-doctor/no-barrel-import (warning)

This ships extra code to your users & slows page load. Import directly from: "./widgets/loaders/home-loader", "./widgets/empty-states/no-projects", "./widgets/recents".

Fix → Import from the direct path: import { Button } from './components/Button' instead of ./components

Docs

},
}),
// oxlint-disable-next-line eslint-plugin-react-hooks/exhaustive-deps
[inboxIssue]

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

React Doctor · react-doctor/exhaustive-deps (warning)

useMemo can run with a stale removeIssue, workspaceSlug, projectId, archiveIssue & show your users old data.

Fix → Don't blindly add missing dependencies. Read the hook callback first.

Bad:
useEffect(() => {
setCount(count + 1);
}, [count]);

Better:
useEffect(() => {
setCount((currentCount) => currentCount + 1);
}, []);

If the missing value is recreated every render, move it inside the hook or stabilize it before adding it to deps.

Docs

@@ -69,6 +68,7 @@ export const NotificationsSidebarRoot = observer(function NotificationsSidebarRo

<Header variant={EHeaderVariant.SECONDARY} className="justify-start">
{NOTIFICATION_TABS.map((tab) => (
// oxlint-disable-next-line jsx_a11y/click-events-have-key-events oxlint-disable-next-line jsx_a11y/no-static-element-interactions
<div

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

React Doctor · react-doctor/click-events-have-key-events (warning)

Keyboard users can't trigger this click handler because there's no keyboard one, so add onKeyUp, onKeyDown, or onKeyPress.

Fix → Pair onClick with a key handler so keyboard users can trigger it.

Docs

@@ -69,6 +68,7 @@ export const NotificationsSidebarRoot = observer(function NotificationsSidebarRo

<Header variant={EHeaderVariant.SECONDARY} className="justify-start">
{NOTIFICATION_TABS.map((tab) => (
// oxlint-disable-next-line jsx_a11y/click-events-have-key-events oxlint-disable-next-line jsx_a11y/no-static-element-interactions
<div

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

React Doctor · react-doctor/no-static-element-interactions (warning)

Screen reader users can't tell this click handler is interactive because it has no role, so add a role or use a button or link.

Fix → Give clickable static elements a role, or use a button or link.

Docs


// Prevent typing invalid characters in number input
// oxlint-disable-next-line unicorn/consistent-function-scoping
const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

React Doctor · react-doctor/prefer-module-scope-pure-function (warning)

handleKeyDown inside CustomizeNavigationDialog uses no local state but is rebuilt on every render, so it wastes work & breaks memoized children. Move it to the top of the file, outside the component.

Fix → Move the function above the component, at the top of the file. It doesn't use local state, so rebuilding it each update is wasted work.

Docs

{/* state */}
<WithDisplayPropertiesHOC displayProperties={displayProperties} displayPropertyKey="state">
{/* oxlint-disable-next-line jsx_a11y/click-events-have-key-events oxlint-disable-next-line jsx_a11y/no-static-element-interactions */}
<div className="h-5" onFocus={handleEventPropagation} onClick={handleEventPropagation}>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

React Doctor · react-doctor/click-events-have-key-events (warning)

Keyboard users can't trigger this click handler because there's no keyboard one, so add onKeyUp, onKeyDown, or onKeyPress.

Fix → Pair onClick with a key handler so keyboard users can trigger it.

Docs

{/* state */}
<WithDisplayPropertiesHOC displayProperties={displayProperties} displayPropertyKey="state">
{/* oxlint-disable-next-line jsx_a11y/click-events-have-key-events oxlint-disable-next-line jsx_a11y/no-static-element-interactions */}
<div className="h-5" onFocus={handleEventPropagation} onClick={handleEventPropagation}>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

React Doctor · react-doctor/no-static-element-interactions (warning)

Screen reader users can't tell this click handler is interactive because it has no role, so add a role or use a button or link.

Fix → Give clickable static elements a role, or use a button or link.

Docs

)}
</div>
{/* oxlint-disable-next-line jsx_a11y/click-events-have-key-events oxlint-disable-next-line jsx_a11y/no-static-element-interactions */}
<div

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

React Doctor · react-doctor/click-events-have-key-events (warning)

Keyboard users can't trigger this click handler because there's no keyboard one, so add onKeyUp, onKeyDown, or onKeyPress.

Fix → Pair onClick with a key handler so keyboard users can trigger it.

Docs

)}
</div>
{/* oxlint-disable-next-line jsx_a11y/click-events-have-key-events oxlint-disable-next-line jsx_a11y/no-static-element-interactions */}
<div

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

React Doctor · react-doctor/no-static-element-interactions (warning)

Screen reader users can't tell this click handler is interactive because it has no role, so add a role or use a button or link.

Fix → Give clickable static elements a role, or use a button or link.

Docs

</div>
{estimatePoints.length > estimateCount.min && (
// oxlint-disable-next-line jsx_a11y/click-events-have-key-events oxlint-disable-next-line jsx_a11y/no-static-element-interactions
<div

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

React Doctor · react-doctor/click-events-have-key-events (warning)

Keyboard users can't trigger this click handler because there's no keyboard one, so add onKeyUp, onKeyDown, or onKeyPress.

Fix → Pair onClick with a key handler so keyboard users can trigger it.

Docs

</div>
{estimatePoints.length > estimateCount.min && (
// oxlint-disable-next-line jsx_a11y/click-events-have-key-events oxlint-disable-next-line jsx_a11y/no-static-element-interactions
<div

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

React Doctor · react-doctor/no-static-element-interactions (warning)

Screen reader users can't tell this click handler is interactive because it has no role, so add a role or use a button or link.

Fix → Give clickable static elements a role, or use a button or link.

Docs

position={block.position}
/>
{/* oxlint-disable-next-line jsx_a11y/no-static-element-interactions */}
<div

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

React Doctor · react-doctor/no-static-element-interactions (warning)

Screen reader users can't tell this click handler is interactive because it has no role, so add a role or use a button or link.

Fix → Give clickable static elements a role, or use a button or link.

Docs

shouldRenderProperty={() => !isDateRangeEnabled}
>
{/* oxlint-disable-next-line jsx_a11y/click-events-have-key-events oxlint-disable-next-line jsx_a11y/no-static-element-interactions */}
<div className="h-5" onFocus={handleEventPropagation} onClick={handleEventPropagation}>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

React Doctor · react-doctor/no-static-element-interactions (warning)

Screen reader users can't tell this click handler is interactive because it has no role, so add a role or use a button or link.

Fix → Give clickable static elements a role, or use a button or link.

Docs

{/* assignee */}
<WithDisplayPropertiesHOC displayProperties={displayProperties} displayPropertyKey="assignee">
{/* oxlint-disable-next-line jsx_a11y/click-events-have-key-events oxlint-disable-next-line jsx_a11y/no-static-element-interactions */}
<div className="h-5" onFocus={handleEventPropagation} onClick={handleEventPropagation}>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

React Doctor · react-doctor/click-events-have-key-events (warning)

Keyboard users can't trigger this click handler because there's no keyboard one, so add onKeyUp, onKeyDown, or onKeyPress.

Fix → Pair onClick with a key handler so keyboard users can trigger it.

Docs

{/* assignee */}
<WithDisplayPropertiesHOC displayProperties={displayProperties} displayPropertyKey="assignee">
{/* oxlint-disable-next-line jsx_a11y/click-events-have-key-events oxlint-disable-next-line jsx_a11y/no-static-element-interactions */}
<div className="h-5" onFocus={handleEventPropagation} onClick={handleEventPropagation}>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

React Doctor · react-doctor/no-static-element-interactions (warning)

Screen reader users can't tell this click handler is interactive because it has no role, so add a role or use a button or link.

Fix → Give clickable static elements a role, or use a button or link.

Docs

{projectDetails?.module_view && (
<WithDisplayPropertiesHOC displayProperties={displayProperties} displayPropertyKey="modules">
{/* oxlint-disable-next-line jsx_a11y/click-events-have-key-events oxlint-disable-next-line jsx_a11y/no-static-element-interactions */}
<div className="h-5" onFocus={handleEventPropagation} onClick={handleEventPropagation}>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

React Doctor · react-doctor/click-events-have-key-events (warning)

Keyboard users can't trigger this click handler because there's no keyboard one, so add onKeyUp, onKeyDown, or onKeyPress.

Fix → Pair onClick with a key handler so keyboard users can trigger it.

Docs

{projectDetails?.module_view && (
<WithDisplayPropertiesHOC displayProperties={displayProperties} displayPropertyKey="modules">
{/* oxlint-disable-next-line jsx_a11y/click-events-have-key-events oxlint-disable-next-line jsx_a11y/no-static-element-interactions */}
<div className="h-5" onFocus={handleEventPropagation} onClick={handleEventPropagation}>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

React Doctor · react-doctor/no-static-element-interactions (warning)

Screen reader users can't tell this click handler is interactive because it has no role, so add a role or use a button or link.

Fix → Give clickable static elements a role, or use a button or link.

Docs

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants