fix: remove unused imports and variables (part 3 β web/core/issues)#8753
fix: remove unused imports and variables (part 3 β web/core/issues)#8753darkingtail wants to merge 1 commit intomakeplane:previewfrom
Conversation
Resolve oxlint no-unused-vars warnings in apps/web/core/components/issues/.
π WalkthroughWalkthroughThis pull request removes unused type imports and constants across numerous component files in the issues module. The primary change involves eliminating Changes
Estimated code review effortπ― 2 (Simple) | β±οΈ ~12 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
π₯ Pre-merge checks | β 3β Passed checks (3 passed)
βοΈ Tip: You can configure your own custom pre-merge checks in the settings. β¨ 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.
Caution
Some comments are outside the diff and canβt be posted inline due to platform limitations.
β οΈ Outside diff range comments (2)
apps/web/core/components/issues/issue-layouts/list/headers/group-by-card.tsx (1)
67-90:β οΈ Potential issue | π‘ MinorFix the toast copy for module routes.
Line 68 already branches between module and cycle payloads, but Lines 81-90 always say
"cycle". In module views this handler reports the wrong target to the user.π‘ Suggested tweak
const renderExistingIssueModal = moduleId || cycleId; const existingIssuesListModalPayload = moduleId ? { module: moduleId.toString() } : { cycle: true }; + const targetLabel = moduleId ? "module" : "cycle"; const isGroupSelectionEmpty = selectionHelpers.isGroupSelected(groupID) === "empty"; @@ setToast({ type: TOAST_TYPE.SUCCESS, title: "Success!", - message: "Work items added to the cycle successfully.", + message: `Work items added to the ${targetLabel} successfully.`, }); } catch (_error) { setToast({ type: TOAST_TYPE.ERROR, title: "Error!", - message: "Selected work items could not be added to the cycle. Please try again.", + message: `Selected work items could not be added to the ${targetLabel}. Please try again.`, }); }π€ Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@apps/web/core/components/issues/issue-layouts/list/headers/group-by-card.tsx` around lines 67 - 90, The success/error toast messages in handleAddIssuesToView incorrectly always reference "cycle"; update handleAddIssuesToView to use the existing branch (moduleId vs cycle) β e.g., derive a targetLabel from existingIssuesListModalPayload or check moduleId (use "module" when moduleId is truthy else "cycle") and use that targetLabel in both the success and error setToast calls so messages correctly say "Work items added to the module successfully." or "Work items added to the cycle successfully." (references: renderExistingIssueModal, existingIssuesListModalPayload, handleAddIssuesToView).apps/web/core/components/issues/create-issue-toast-action-items.tsx (1)
16-43:β οΈ Potential issue | π‘ MinorRemove the unused
projectIdprop from the component signature.The type requires
projectIdbut the implementation does not destructure or use it; instead, it always derives the URL usingissue?.project_idfrom the store. This creates a silent contract violation: callers passprojectId(includingpayload.project_idin update flows atissue-modal/base.tsx:321), but the component ignores it in favor of a potentially stale store snapshot. Either remove the prop end-to-end or update the implementation to use the passed value when available.π€ Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@apps/web/core/components/issues/create-issue-toast-action-items.tsx` around lines 16 - 43, The TCreateIssueToastActionItems type declares a projectId prop but CreateIssueToastActionItems reads issue?.project_id from the store and never uses the passed projectId, causing a silent contract mismatch; fix by removing projectId from the TCreateIssueToastActionItems type and from the component props (and any callers) OR make CreateIssueToastActionItems use the passed projectId when present (e.g., prefer props.projectId over issue?.project_id when building workItemLink via generateWorkItemLink); update the type, the function signature, and all call sites consistently so the component and its type match.
π§Ή Nitpick comments (2)
apps/web/core/components/issues/peek-overview/root.tsx (1)
78-92: Prefer a realtry/catchin this async update path.Lines 78-92 mix
awaitwith.then().catch()and rename the caught value to_error, so this failure path no longer has a typed/loggable error object. A plaintry/catch (error: unknown)keeps it consistent with the rest of the file and preserves observability.As per coding guidelines "Use try-catch with proper error types and log errors appropriately for error handling."β»οΈ Suggested rewrite
update: async (workspaceSlug: string, projectId: string, issueId: string, data: Partial<TIssue>) => { - if (issues?.updateIssue) { - await issues - .updateIssue(workspaceSlug, projectId, issueId, data) - .then(async () => { - fetchActivities(workspaceSlug, projectId, issueId); - return; - }) - .catch((_error) => { - setToast({ - title: t("toast.error"), - type: TOAST_TYPE.ERROR, - message: t("entity.update.failed", { entity: t("issue.label", { count: 1 }) }), - }); - }); - } + if (!issues?.updateIssue) return; + try { + await issues.updateIssue(workspaceSlug, projectId, issueId, data); + fetchActivities(workspaceSlug, projectId, issueId); + } catch (error: unknown) { + console.error("Error updating issue", error); + setToast({ + title: t("toast.error"), + type: TOAST_TYPE.ERROR, + message: t("entity.update.failed", { entity: t("issue.label", { count: 1 }) }), + }); + } },π€ Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@apps/web/core/components/issues/peek-overview/root.tsx` around lines 78 - 92, The update handler inside the update method should stop mixing await with .then().catch(); replace the await ... .then().catch() block in update(workspaceSlug, projectId, issueId, data) with a plain try { await issues.updateIssue(...) ; fetchActivities(workspaceSlug, projectId, issueId); } catch (error: unknown) { setToast(...) ; log or inspect error } β ensure you catch error as unknown (not _error), preserve the existing setToast behavior on failure, and add logging/observability for the caught error so failures are traceable.apps/web/core/components/issues/issue-detail-widgets/sub-issues/title.tsx (1)
17-27: DropworkspaceSlugfrom the component contract too.After this destructuring change,
workspaceSlugis no longer read anywhere in the component, so callers still have to pass a dead prop. Removing it fromPropsand the call sites would make the API match the implementation.π€ Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@apps/web/core/components/issues/issue-detail-widgets/sub-issues/title.tsx` around lines 17 - 27, The Props type still declares workspaceSlug even though SubIssuesCollapsibleTitle no longer uses it; remove workspaceSlug from the Props type definition and from all call sites that pass it so the component contract matches the implementation (update the Props declaration and any invocations of SubIssuesCollapsibleTitle to stop providing workspaceSlug); verify the component signature and the destructuring in SubIssuesCollapsibleTitle remain correct after removal.
π€ Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Outside diff comments:
In `@apps/web/core/components/issues/create-issue-toast-action-items.tsx`:
- Around line 16-43: The TCreateIssueToastActionItems type declares a projectId
prop but CreateIssueToastActionItems reads issue?.project_id from the store and
never uses the passed projectId, causing a silent contract mismatch; fix by
removing projectId from the TCreateIssueToastActionItems type and from the
component props (and any callers) OR make CreateIssueToastActionItems use the
passed projectId when present (e.g., prefer props.projectId over
issue?.project_id when building workItemLink via generateWorkItemLink); update
the type, the function signature, and all call sites consistently so the
component and its type match.
In
`@apps/web/core/components/issues/issue-layouts/list/headers/group-by-card.tsx`:
- Around line 67-90: The success/error toast messages in handleAddIssuesToView
incorrectly always reference "cycle"; update handleAddIssuesToView to use the
existing branch (moduleId vs cycle) β e.g., derive a targetLabel from
existingIssuesListModalPayload or check moduleId (use "module" when moduleId is
truthy else "cycle") and use that targetLabel in both the success and error
setToast calls so messages correctly say "Work items added to the module
successfully." or "Work items added to the cycle successfully." (references:
renderExistingIssueModal, existingIssuesListModalPayload,
handleAddIssuesToView).
---
Nitpick comments:
In `@apps/web/core/components/issues/issue-detail-widgets/sub-issues/title.tsx`:
- Around line 17-27: The Props type still declares workspaceSlug even though
SubIssuesCollapsibleTitle no longer uses it; remove workspaceSlug from the Props
type definition and from all call sites that pass it so the component contract
matches the implementation (update the Props declaration and any invocations of
SubIssuesCollapsibleTitle to stop providing workspaceSlug); verify the component
signature and the destructuring in SubIssuesCollapsibleTitle remain correct
after removal.
In `@apps/web/core/components/issues/peek-overview/root.tsx`:
- Around line 78-92: The update handler inside the update method should stop
mixing await with .then().catch(); replace the await ... .then().catch() block
in update(workspaceSlug, projectId, issueId, data) with a plain try { await
issues.updateIssue(...) ; fetchActivities(workspaceSlug, projectId, issueId); }
catch (error: unknown) { setToast(...) ; log or inspect error } β ensure you
catch error as unknown (not _error), preserve the existing setToast behavior on
failure, and add logging/observability for the caught error so failures are
traceable.
βΉοΈ Review info
βοΈ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: b3c9786e-c315-4600-902b-e016f88800cc
π Files selected for processing (80)
apps/web/core/components/issues/archived-issues-header.tsxapps/web/core/components/issues/attachment/attachment-detail.tsxapps/web/core/components/issues/attachment/attachment-item-list.tsxapps/web/core/components/issues/attachment/attachment-list-item.tsxapps/web/core/components/issues/attachment/attachments-list.tsxapps/web/core/components/issues/attachment/delete-attachment-modal.tsxapps/web/core/components/issues/create-issue-toast-action-items.tsxapps/web/core/components/issues/issue-detail-widgets/action-buttons.tsxapps/web/core/components/issues/issue-detail-widgets/attachments/content.tsxapps/web/core/components/issues/issue-detail-widgets/attachments/quick-action-button.tsxapps/web/core/components/issues/issue-detail-widgets/attachments/root.tsxapps/web/core/components/issues/issue-detail-widgets/attachments/title.tsxapps/web/core/components/issues/issue-detail-widgets/issue-detail-widget-collapsibles.tsxapps/web/core/components/issues/issue-detail-widgets/issue-detail-widget-modals.tsxapps/web/core/components/issues/issue-detail-widgets/links/content.tsxapps/web/core/components/issues/issue-detail-widgets/links/quick-action-button.tsxapps/web/core/components/issues/issue-detail-widgets/links/root.tsxapps/web/core/components/issues/issue-detail-widgets/links/title.tsxapps/web/core/components/issues/issue-detail-widgets/relations/content.tsxapps/web/core/components/issues/issue-detail-widgets/relations/quick-action-button.tsxapps/web/core/components/issues/issue-detail-widgets/relations/root.tsxapps/web/core/components/issues/issue-detail-widgets/relations/title.tsxapps/web/core/components/issues/issue-detail-widgets/root.tsxapps/web/core/components/issues/issue-detail-widgets/sub-issues/content.tsxapps/web/core/components/issues/issue-detail-widgets/sub-issues/display-filters.tsxapps/web/core/components/issues/issue-detail-widgets/sub-issues/filters.tsxapps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-group.tsxapps/web/core/components/issues/issue-detail-widgets/sub-issues/quick-action-button.tsxapps/web/core/components/issues/issue-detail-widgets/sub-issues/root.tsxapps/web/core/components/issues/issue-detail-widgets/sub-issues/title-actions.tsxapps/web/core/components/issues/issue-detail-widgets/sub-issues/title.tsxapps/web/core/components/issues/issue-detail-widgets/widget-button.tsxapps/web/core/components/issues/issue-detail/issue-activity/activity/actions/helpers/activity-block.tsxapps/web/core/components/issues/issue-detail/issue-activity/activity/actions/target_date.tsxapps/web/core/components/issues/issue-detail/label/root.tsxapps/web/core/components/issues/issue-detail/links/create-update-link-modal.tsxapps/web/core/components/issues/issue-detail/reactions/issue.tsxapps/web/core/components/issues/issue-detail/subscription.tsxapps/web/core/components/issues/issue-layouts/calendar/calendar.tsxapps/web/core/components/issues/issue-layouts/calendar/day-tile.tsxapps/web/core/components/issues/issue-layouts/calendar/dropdowns/months-dropdown.tsxapps/web/core/components/issues/issue-layouts/calendar/dropdowns/options-dropdown.tsxapps/web/core/components/issues/issue-layouts/calendar/header.tsxapps/web/core/components/issues/issue-layouts/calendar/week-days.tsxapps/web/core/components/issues/issue-layouts/empty-states/project-view.tsxapps/web/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsxapps/web/core/components/issues/issue-layouts/kanban/default.tsxapps/web/core/components/issues/issue-layouts/kanban/headers/sub-group-by-card.tsxapps/web/core/components/issues/issue-layouts/list/block-root.tsxapps/web/core/components/issues/issue-layouts/list/blocks-list.tsxapps/web/core/components/issues/issue-layouts/list/headers/group-by-card.tsxapps/web/core/components/issues/issue-layouts/list/roots/archived-issue-root.tsxapps/web/core/components/issues/issue-layouts/list/roots/profile-issues-root.tsxapps/web/core/components/issues/issue-layouts/list/roots/project-root.tsxapps/web/core/components/issues/issue-layouts/quick-action-dropdowns/issue-detail.tsxapps/web/core/components/issues/issue-layouts/quick-add/button/gantt.tsxapps/web/core/components/issues/issue-layouts/quick-add/button/kanban.tsxapps/web/core/components/issues/issue-layouts/quick-add/button/list.tsxapps/web/core/components/issues/issue-layouts/quick-add/button/spreadsheet.tsxapps/web/core/components/issues/issue-layouts/quick-add/form/calendar.tsxapps/web/core/components/issues/issue-layouts/quick-add/form/gantt.tsxapps/web/core/components/issues/issue-layouts/quick-add/form/kanban.tsxapps/web/core/components/issues/issue-layouts/quick-add/form/list.tsxapps/web/core/components/issues/issue-layouts/quick-add/form/spreadsheet.tsxapps/web/core/components/issues/issue-layouts/roots/all-issue-layout-root.tsxapps/web/core/components/issues/issue-layouts/utils.tsxapps/web/core/components/issues/issue-modal/form.tsxapps/web/core/components/issues/layout-quick-actions.tsxapps/web/core/components/issues/peek-overview/error.tsxapps/web/core/components/issues/peek-overview/issue-detail.tsxapps/web/core/components/issues/peek-overview/loader.tsxapps/web/core/components/issues/peek-overview/root.tsxapps/web/core/components/issues/peek-overview/view.tsxapps/web/core/components/issues/relations/issue-list-item.tsxapps/web/core/components/issues/relations/issue-list.tsxapps/web/core/components/issues/relations/properties.tsxapps/web/core/components/issues/title-input.tsxapps/web/core/components/issues/workspace-draft/draft-issue-block.tsxapps/web/core/components/issues/workspace-draft/empty-state.tsxapps/web/core/components/issues/workspace-draft/loader.tsx
π€ Files with no reviewable changes (67)
- apps/web/core/components/issues/issue-detail-widgets/links/root.tsx
- apps/web/core/components/issues/issue-detail-widgets/issue-detail-widget-modals.tsx
- apps/web/core/components/issues/issue-detail-widgets/sub-issues/filters.tsx
- apps/web/core/components/issues/issue-detail-widgets/root.tsx
- apps/web/core/components/issues/issue-modal/form.tsx
- apps/web/core/components/issues/issue-layouts/quick-add/button/gantt.tsx
- apps/web/core/components/issues/archived-issues-header.tsx
- apps/web/core/components/issues/relations/issue-list-item.tsx
- apps/web/core/components/issues/issue-layouts/calendar/week-days.tsx
- apps/web/core/components/issues/peek-overview/issue-detail.tsx
- apps/web/core/components/issues/issue-detail-widgets/sub-issues/display-filters.tsx
- apps/web/core/components/issues/issue-detail-widgets/action-buttons.tsx
- apps/web/core/components/issues/issue-detail-widgets/attachments/title.tsx
- apps/web/core/components/issues/attachment/attachment-list-item.tsx
- apps/web/core/components/issues/attachment/attachments-list.tsx
- apps/web/core/components/issues/issue-detail-widgets/links/quick-action-button.tsx
- apps/web/core/components/issues/issue-detail-widgets/links/content.tsx
- apps/web/core/components/issues/issue-layouts/calendar/header.tsx
- apps/web/core/components/issues/issue-layouts/list/roots/project-root.tsx
- apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/target_date.tsx
- apps/web/core/components/issues/issue-layouts/quick-add/form/list.tsx
- apps/web/core/components/issues/issue-detail-widgets/attachments/quick-action-button.tsx
- apps/web/core/components/issues/issue-detail/subscription.tsx
- apps/web/core/components/issues/workspace-draft/empty-state.tsx
- apps/web/core/components/issues/attachment/delete-attachment-modal.tsx
- apps/web/core/components/issues/issue-layouts/quick-add/button/list.tsx
- apps/web/core/components/issues/issue-detail-widgets/attachments/root.tsx
- apps/web/core/components/issues/peek-overview/loader.tsx
- apps/web/core/components/issues/issue-layouts/calendar/dropdowns/options-dropdown.tsx
- apps/web/core/components/issues/issue-detail-widgets/sub-issues/quick-action-button.tsx
- apps/web/core/components/issues/issue-layouts/kanban/headers/sub-group-by-card.tsx
- apps/web/core/components/issues/attachment/attachment-item-list.tsx
- apps/web/core/components/issues/issue-layouts/roots/all-issue-layout-root.tsx
- apps/web/core/components/issues/issue-layouts/quick-add/form/spreadsheet.tsx
- apps/web/core/components/issues/issue-layouts/list/roots/archived-issue-root.tsx
- apps/web/core/components/issues/issue-detail-widgets/sub-issues/content.tsx
- apps/web/core/components/issues/issue-layouts/calendar/dropdowns/months-dropdown.tsx
- apps/web/core/components/issues/issue-detail-widgets/issue-detail-widget-collapsibles.tsx
- apps/web/core/components/issues/issue-layouts/kanban/default.tsx
- apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-group.tsx
- apps/web/core/components/issues/issue-detail-widgets/relations/title.tsx
- apps/web/core/components/issues/issue-detail-widgets/widget-button.tsx
- apps/web/core/components/issues/issue-detail-widgets/sub-issues/title-actions.tsx
- apps/web/core/components/issues/peek-overview/view.tsx
- apps/web/core/components/issues/issue-detail-widgets/relations/root.tsx
- apps/web/core/components/issues/issue-detail-widgets/relations/quick-action-button.tsx
- apps/web/core/components/issues/title-input.tsx
- apps/web/core/components/issues/issue-layouts/quick-add/button/kanban.tsx
- apps/web/core/components/issues/issue-detail-widgets/links/title.tsx
- apps/web/core/components/issues/issue-layouts/calendar/day-tile.tsx
- apps/web/core/components/issues/issue-detail-widgets/attachments/content.tsx
- apps/web/core/components/issues/issue-layouts/list/roots/profile-issues-root.tsx
- apps/web/core/components/issues/issue-detail/links/create-update-link-modal.tsx
- apps/web/core/components/issues/attachment/attachment-detail.tsx
- apps/web/core/components/issues/workspace-draft/loader.tsx
- apps/web/core/components/issues/issue-layouts/quick-add/form/calendar.tsx
- apps/web/core/components/issues/issue-layouts/quick-add/form/kanban.tsx
- apps/web/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx
- apps/web/core/components/issues/issue-detail-widgets/sub-issues/root.tsx
- apps/web/core/components/issues/relations/properties.tsx
- apps/web/core/components/issues/workspace-draft/draft-issue-block.tsx
- apps/web/core/components/issues/peek-overview/error.tsx
- apps/web/core/components/issues/issue-layouts/quick-add/form/gantt.tsx
- apps/web/core/components/issues/issue-detail-widgets/relations/content.tsx
- apps/web/core/components/issues/issue-layouts/calendar/calendar.tsx
- apps/web/core/components/issues/issue-layouts/quick-add/button/spreadsheet.tsx
- apps/web/core/components/issues/relations/issue-list.tsx
Summary
Remove unused imports and variables flagged by
oxlintno-unused-varsrule.Scope:
apps/web/core/components/issues/Files: 80
Changes:
_Context
This is 4 of 4 PRs splitting the full lint cleanup into reviewable chunks.
Test plan
Summary by CodeRabbit