Skip to content

[GIT-248] Refactor: Components consolidation core Components#9245

Open
codingwolf-at wants to merge 74 commits into
previewfrom
git-248/components-consolidation-core-components
Open

[GIT-248] Refactor: Components consolidation core Components#9245
codingwolf-at wants to merge 74 commits into
previewfrom
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

Rahulcheryala and others added 30 commits June 15, 2026 17:12
…ne-extensions) from web/app/ce to web/app/core
@codingwolf-at codingwolf-at changed the base branch from preview to git-240/hooks-consolidation-core-hooks June 17, 2026 07:18
@codingwolf-at codingwolf-at changed the title [Git 248] Refactor: Components consolidation core Components [GIT-248] Refactor: Components consolidation core Components Jun 19, 2026
@makeplane

makeplane Bot commented Jun 19, 2026

Copy link
Copy Markdown

Linked to Plane Work Item(s)

This comment was auto-generated by Plane

@prateekshourya29

Copy link
Copy Markdown
Member

@coderabbitai, review these changes. Most of the files have just been moved, so ignore them and review the rest. We are also cleaning things up as part of this refactor.

@coderabbitai

coderabbitai Bot commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

@prateekshourya29 Understood — I’ll focus the review on the substantive cleanup/refactor changes and ignore files that were only moved.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Base automatically changed from git-240/hooks-consolidation-core-hooks to git-239/constants-consolidation-packages-constants June 26, 2026 15:01
Base automatically changed from git-239/constants-consolidation-packages-constants to preview June 26, 2026 15:06
is_pinned: preference?.is_pinned ?? false,
};
return (
WORKSPACE_SIDEBAR_DYNAMIC_NAVIGATION_ITEMS_LINKS.filter((item) => {

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/js-combine-iterations (warning)

This loops over your list twice because .filter().map() makes two passes, so do it in one pass with .reduce() or a for...of loop

Fix → Combine .map().filter() style chains into one pass with .reduce() or a for...of loop, so you only loop over the list once

Docs

const sortedNavigationItemsKeys = sortedNavigationItems.map((item) => item.key);

// oxlint-disable-next-line unicorn/consistent-function-scoping
const orderNavigationItem = (

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)

orderNavigationItem inside ExtendedAppSidebar 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


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

<ListLoaderItemRow />
) : (
// 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

<ListLoaderItemRow />
) : (
// 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

@@ -237,6 +239,7 @@ export const ListGroup = observer(function ListGroup(props: Props) {
})
);
}, [

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 handleWorkFlowState, t, handleOnDrop, isExpanded, handleCollapsedGroups & 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

);
}, [
// oxlint-disable-next-line eslint-plugin-react-hooks/exhaustive-deps
groupRef?.current,

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 won't re-run when groupRef.current changes, since a ref never triggers a redraw.

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

const maxDate = getDate(issue.target_date);

// oxlint-disable-next-line unicorn/consistent-function-scoping
const handleEventPropagation = (e: SyntheticEvent<HTMLDivElement>) => {

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)

handleEventPropagation inside IssueProperties 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

is_pinned: preference?.is_pinned ?? false,
};
return (
WORKSPACE_SIDEBAR_DYNAMIC_NAVIGATION_ITEMS_LINKS.filter((item) => {

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/js-combine-iterations (warning)

This loops over your list twice because .filter().map() makes two passes, so do it in one pass with .reduce() or a for...of loop

Fix → Combine .map().filter() style chains into one pass with .reduce() or a for...of loop, so you only loop over the list once

Docs

const sortedNavigationItemsKeys = sortedNavigationItems.map((item) => item.key);

// oxlint-disable-next-line unicorn/consistent-function-scoping
const orderNavigationItem = (

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)

orderNavigationItem inside ExtendedAppSidebar 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


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

<ListLoaderItemRow />
) : (
// 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

<ListLoaderItemRow />
) : (
// 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

@@ -237,6 +239,7 @@ export const ListGroup = observer(function ListGroup(props: Props) {
})
);
}, [

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 handleWorkFlowState, t, handleOnDrop, isExpanded, handleCollapsedGroups & 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

);
}, [
// oxlint-disable-next-line eslint-plugin-react-hooks/exhaustive-deps
groupRef?.current,

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 won't re-run when groupRef.current changes, since a ref never triggers a redraw.

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

const maxDate = getDate(issue.target_date);

// oxlint-disable-next-line unicorn/consistent-function-scoping
const handleEventPropagation = (e: SyntheticEvent<HTMLDivElement>) => {

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)

handleEventPropagation inside IssueProperties 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

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