Skip to content

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

Open
codingwolf-at wants to merge 37 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 37 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: 88434ffa-1ea3-4a82-8b2d-8bc9245f178f

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 153 issues in 67 files · 5 errors & 148 warnings · score 69 / 100 (Needs work) · vs git-240/hooks-consolidation-core-hooks

Errors

148 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

  • ⚠️ L74 JSX element passed as a prop jsx-no-jsx-as-prop
  • ⚠️ L84 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

ce/components/issues/header.tsx

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

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/cycles/list/cycle-list-item-action.tsx

  • ⚠️ L181 Button missing explicit type button-has-type
  • ⚠️ L188 Number before && renders stray 0 rendering-conditional-render
  • ⚠️ L196 Click handler missing keyboard handler click-events-have-key-events
  • ⚠️ L196 Interaction on static element no-static-element-interactions
  • ⚠️ L213 Component rendered by inline function call no-render-in-render
  • ⚠️ L215 Component rendered by inline function call no-render-in-render
  • ⚠️ L242 Time or random value in JSX rendering-hydration-mismatch-time
  • ⚠️ L242 Time or random value in JSX rendering-hydration-mismatch-time
  • ⚠️ L255 Component rendered by inline function call no-render-in-render
  • ⚠️ L257 Component rendered by inline function call no-render-in-render

core/components/dropdowns/intake-state/base.tsx

  • ⚠️ L85 Chained array iterations js-combine-iterations

core/components/dropdowns/state/base.tsx

  • ⚠️ L85 Chained array iterations js-combine-iterations

core/components/estimates/create/stage-one.tsx

  • ⚠️ L81 Button missing explicit type button-has-type
  • ⚠️ L100 Button missing explicit type button-has-type

core/components/estimates/estimate-list-item-buttons.tsx

  • ⚠️ L26 Button missing explicit type button-has-type

core/components/estimates/points/preview.tsx

  • ⚠️ L56 Event logic handled in an effect no-event-handler
  • ⚠️ L56 Event logic handled in an effect no-event-handler

98 more warnings not shown.

Reviewed by React Doctor for commit 3a48eef. 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
// components
import { LeftResizable } from "./blockResizables/left-resizable";
import { RightResizable } from "./blockResizables/right-resizable";
import { RightDependencyDraggable, LeftDependencyDraggable } from "../dependency";

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: "../dependency/blockDraggables/right-draggable", "../dependency/blockDraggables/left-draggable".

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

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


// helpers
// oxlint-disable-next-line unicorn/consistent-function-scoping
const renderIcon = (projectDetails: TProject) => (

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)

renderIcon inside ProjectBreadcrumb 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

<CycleAdditionalActions cycleId={cycleId} projectId={projectId} />
{showTransferIssues && (
// 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

<CycleAdditionalActions cycleId={cycleId} projectId={projectId} />
{showTransferIssues && (
// 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>
<div className="flex gap-2">
{/* eslint-disable-next-line jsx-a11y/tabindex-no-positive */}
<Button variant="secondary" size="lg" onClick={onClose} tabIndex={1}>

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/tabindex-no-positive (warning)

Keyboard users get jumped out of the normal order by a positive tabIndex, so use 0 or -1.

Fix → Use tabIndex={0} (focusable in source order) or tabIndex={-1} (focus only in code).

Docs

onClick={onClose}
className={getButtonStyling("primary", "lg")}
// oxlint-disable-next-line jsx-a11y/tabindex-no-positive
tabIndex={2}

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/tabindex-no-positive (warning)

Keyboard users get jumped out of the normal order by a positive tabIndex, so use 0 or -1.

Fix → Use tabIndex={0} (focusable in source order) or tabIndex={-1} (focus only in code).

Docs

})
);
// oxlint-disable-next-line eslint-plugin-react-hooks/exhaustive-deps
}, [projectId, isLastChild, projectListType, handleOnProjectDrop]);

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)

useEffect can run with a stale disableDrag, project, project.logo_props, project.name, disableDrop & 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

</div>
) : (
// oxlint-disable-next-line jsx_a11y/click-events-have-key-events oxlint-disable-next-line jsx_a11y/no-static-element-interactions
<div className="flex items-center justify-center py-4 text-13 font-medium" onClick={getNextNotifications}>

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 className="flex items-center justify-center py-4 text-13 font-medium" onClick={getNextNotifications}>

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

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

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

return (
<CustomMenu.MenuItem
// oxlint-disable-next-line react/no-array-index-key
key={index}

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-array-index-as-key (warning)

Your users can see & submit the wrong data when this list reorders or filters, so use a stable id like key={item.id}, not the array index "index".

Fix → Use a stable id from the item, like key={item.id} or key={item.slug}. Index keys break when the list reorders or filters.

Docs

<CycleAdditionalActions cycleId={cycleId} projectId={projectId} />
{showTransferIssues && (
// 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

// local imports
import { NotificationEmptyState } from "./empty-state";
import { AppliedFilters } from "./filters/applied-filter";
import { NotificationSidebarHeader } from "./header";

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 "./header/root".

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

Docs

<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

<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

value={filtersSearchQuery}
onChange={(e) => setFiltersSearchQuery(e.target.value)}
// oxlint-disable-next-line jsx_a11y/no-autofocus
autoFocus={!isMobile}

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-autofocus (warning)

autoFocus moves focus on load, which can disrupt screen reader and keyboard users. Remove it and let users choose where to focus.

Fix → Do not use autoFocus. It disorients users on load.

Docs

})
);
// oxlint-disable-next-line eslint-plugin-react-hooks/exhaustive-deps
}, [projectId, isLastChild, projectListType, handleOnProjectDrop]);

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)

useEffect can run with a stale disableDrag, project, project.logo_props, project.name, disableDrop & 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

…onents while updating import paths across various modules
</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

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

return (
<CustomMenu.MenuItem
// oxlint-disable-next-line react/no-array-index-key
key={index}

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-array-index-as-key (warning)

Your users can see & submit the wrong data when this list reorders or filters, so use a stable id like key={item.id}, not the array index "index".

Fix → Use a stable id from the item, like key={item.id} or key={item.slug}. Index keys break when the list reorders or filters.

Docs

<CycleAdditionalActions cycleId={cycleId} projectId={projectId} />
{showTransferIssues && (
// 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

<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

<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


{view?.anchor && publishLink ? (
// 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


{view?.anchor && publishLink ? (
// 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

value={filtersSearchQuery}
onChange={(e) => setFiltersSearchQuery(e.target.value)}
// oxlint-disable-next-line jsx_a11y/no-autofocus
autoFocus={!isMobile}

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-autofocus (warning)

autoFocus moves focus on load, which can disrupt screen reader and keyboard users. Remove it and let users choose where to focus.

Fix → Do not use autoFocus. It disorients users on load.

Docs

…t paths, and streamline workspace notification card structure
)}
</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

</div>
<div className="flex gap-2">
{/* eslint-disable-next-line jsx-a11y/tabindex-no-positive */}
<Button variant="secondary" size="lg" onClick={onClose} tabIndex={1}>

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/tabindex-no-positive (warning)

Keyboard users get jumped out of the normal order by a positive tabIndex, so use 0 or -1.

Fix → Use tabIndex={0} (focusable in source order) or tabIndex={-1} (focus only in code).

Docs

onClick={onClose}
className={getButtonStyling("primary", "lg")}
// oxlint-disable-next-line jsx-a11y/tabindex-no-positive
tabIndex={2}

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/tabindex-no-positive (warning)

Keyboard users get jumped out of the normal order by a positive tabIndex, so use 0 or -1.

Fix → Use tabIndex={0} (focusable in source order) or tabIndex={-1} (focus only in code).

Docs

</div>
) : (
// oxlint-disable-next-line jsx_a11y/click-events-have-key-events oxlint-disable-next-line jsx_a11y/no-static-element-interactions
<div className="flex items-center justify-center py-4 text-13 font-medium" onClick={getNextNotifications}>

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 className="flex items-center justify-center py-4 text-13 font-medium" onClick={getNextNotifications}>

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 className="mt-8 space-y-5">
{sidebarOptions.map((option) => (
// oxlint-disable-next-line jsx_a11y/click-events-have-key-events
<h5

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

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