Skip to content

[WEB-4423] refactor: event trackers#7289

Merged
sriramveeraghanta merged 44 commits intopreviewfrom
refactor-event-trackers
Jul 2, 2025
Merged

[WEB-4423] refactor: event trackers#7289
sriramveeraghanta merged 44 commits intopreviewfrom
refactor-event-trackers

Conversation

@gakshita
Copy link
Collaborator

@gakshita gakshita commented Jun 30, 2025

Description

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • Feature (non-breaking change which adds functionality)
  • Improvement (change that would cause existing functionality to not work as expected)
  • Code refactoring
  • Performance improvements
  • Documentation update

Screenshots and Media (if applicable)

Test Scenarios

References

Summary by CodeRabbit

  • New Features

    • Introduced detailed event tracking for user interactions across the app using standardized constants and data attributes on UI elements.
    • Added granular tracking for actions such as creating, updating, deleting, favoriting, and restoring items (projects, modules, cycles, pages, issues, etc.).
  • Refactor

    • Replaced previous event tracking hooks and functions with explicit helper functions for capturing success, error, and click events.
    • Simplified event tracking payloads to include only essential identifiers.
    • Updated function and prop signatures to remove unused parameters related to tracking.
    • Removed obsolete event tracking store and related types.
  • Style

    • Annotated buttons and interactive elements with new data attributes for event tracking consistency.
  • Chores

    • Cleaned up imports and removed unused tracking utilities and code.

@CLAassistant
Copy link

CLAassistant commented Jun 30, 2025

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.
4 out of 5 committers have signed the CLA.

✅ gakshita
✅ vamsikrishnamathala
✅ Palanikannan1437
✅ prateekshourya29
❌ Prateek Shourya


Prateek Shourya seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.
You have signed the CLA already but the status is still pending? Let us recheck it.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jun 30, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

This update removes all event payload construction types and functions from the event tracker core and replaces them with a comprehensive set of string constants for event and element names. Application code is refactored to use these constants and new helper functions for event tracking, replacing previous hook-based approaches and payload structures.

Changes

File(s) / Path(s) Change Summary
packages/constants/src/event-tracker/core.ts Removed all event payload types/functions; added new grouped string constants for event and element names for tracking.
web/ce/store/event-tracker.store.ts Deleted file; removed event tracker store interface and class.
web/core/components/issues/issue-layouts/quick-action-dropdowns/helper.tsx,
copy-menu-helper.tsx
Removed setTrackElement property from menu item helper interfaces and usage.
Multiple web/, web/ce/, web/core/ components and pages (many files) Replaced hook-based event tracking with helper functions (captureSuccess, captureError, captureClick, etc.) and constants; refactored event tracking payloads to use new structure and element names; added data-ph-element attributes for UI tracking.
Various onboarding, auth, and settings components Updated event tracking to use new helpers and constants; simplified payloads; added tracking attributes to buttons.
Project/module/cycle/page/issue state and action components Refactored event tracking logic and payloads; removed detailed payloads and hook usage; used new constants and helpers.
Command palette, quick actions, context menus Switched event tracking from hook/setTrackElement to helper/captureClick and new constants; added data-ph-element where relevant.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant UIComponent
    participant EventTrackerHelper
    participant EventConstants

    User->>UIComponent: Interacts (e.g., clicks button)
    UIComponent->>EventConstants: Get element/event name constant
    UIComponent->>EventTrackerHelper: Call captureSuccess/captureError/captureClick with constant
    EventTrackerHelper-->>UIComponent: Logs/tracks event
Loading

Possibly related PRs

  • makeplane/plane#7276: Refactors event constants and payload functions, directly related to the restructuring of event tracking constants and types.
  • makeplane/plane#7304: Modifies the same core event tracker file, removing payload functions and adding new grouped event and element constants.
  • makeplane/plane#7302: Also restructures event tracking constants and types, including changes to cycles and modules.

Suggested labels

🧹chore, 🛠️refactor, requires approval

Suggested reviewers

  • vamsikrishnamathala
  • Palanikannan1437

Poem

A rabbit hopped with code so neat,
Refactored events—a tracking treat!
Constants now guide every click,
No more hooks or payload tricks.
With helpers and names, the logs are bright—
Event tracking’s future looks just right!
🐇✨


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between aac6867 and b123568.

📒 Files selected for processing (1)
  • web/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx (3 hunks)
✨ Finishing Touches
  • 📝 Generate Docstrings

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

gakshita and others added 13 commits June 30, 2025 19:51
* chore: update event tracker helper types

* refactor: cycle events

* refactor: cycle events

* refactor: cycle event tracker

* chore: update tracker elements

* chore: check for closest element with data-ph-element attribute

---------

Co-authored-by: Prateek Shourya <prateekshourya@Prateeks-MacBook-Pro.local>
* chore: update event tracker helper types

* refactor: cycle events

* refactor: cycle events

* refactor: cycle event tracker

* refactor: module tracker event and element

* chore: update tracker element

* chore: revert unnecessary changes

---------

Co-authored-by: Prateek Shourya <prateekshourya@Prateeks-MacBook-Pro.local>
refactor: global views, product tour, notifications, onboarding, users and sidebar related events
* chore: member-tracker-events

* fix: constants
gakshita and others added 14 commits July 1, 2025 17:04
* chore: state events

* fix: refactor
* chore: project-events

* fix: refactor
* added events for most page events

* refactor: simplify lock button event handling in PageLockControl

---------

Co-authored-by: Palanikannan M <akashmalinimurugu@gmail.com>
Co-authored-by: M. Palanikannan <73993394+Palanikannan1437@users.noreply.github.com>
Co-authored-by: Prateek Shourya <prateekshourya29@gmail.com>
@prateekshourya29 prateekshourya29 changed the title Refactor event trackers [WEB-4423] refactor: event trackers Jul 1, 2025
@makeplane
Copy link

makeplane bot commented Jul 1, 2025

Pull Request Linked with Plane Work Items

Comment Automatically Generated by Plane

@prateekshourya29 prateekshourya29 marked this pull request as ready for review July 1, 2025 16:00
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🔭 Outside diff range comments (1)
web/core/components/cycles/delete-modal.tsx (1)

78-84: Remove redundant empty catch block

Based on previous feedback, try-catch blocks that only re-throw errors without any additional processing, logging, or cleanup are redundant and can be safely removed as the error will naturally propagate up the call stack.

-    } catch {
-      setToast({
-        type: TOAST_TYPE.ERROR,
-        title: "Warning!",
-        message: "Something went wrong please try again later.",
-      });
-    }
🧹 Nitpick comments (6)
web/app/(all)/[workspaceSlug]/(projects)/extended-project-sidebar.tsx (1)

123-131: Add an ARIA label for screen-reader users.

The icon-only “create project” button now carries a tracking attribute, but it is still missing an accessible name. Consider:

-<button
+<button
+  aria-label="Create project"
   type="button"
   data-ph-element={PROJECT_TRACKER_ELEMENTS.EXTENDED_SIDEBAR_ADD_BUTTON}
web/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx (1)

31-36: Provide an accessible label on the “Start your first project” button.

When the visual text might be replaced by an icon in the future, adding an explicit label keeps the control accessible:

-<Button
+<Button
+  aria-label="Start your first project"
   size="sm"
   onClick={() => toggleCreateProjectModal(true)}
   data-ph-element={PROJECT_TRACKER_ELEMENTS.EMPTY_STATE_CREATE_PROJECT_BUTTON}
>
web/ce/components/workspace/delete-workspace-section.tsx (1)

52-56: Minor: distinguish destructive action for analytics & accessibility.

Using the same data-ph-element string for both confirmation modal (inside DeleteWorkspaceModal) and this surface button could make funnel analysis harder.
Optionally append a suffix like _CTA here to differentiate entry points:

-data-ph-element={WORKSPACE_TRACKER_ELEMENTS.DELETE_WORKSPACE_BUTTON}
+data-ph-element={`${WORKSPACE_TRACKER_ELEMENTS.DELETE_WORKSPACE_BUTTON}_CTA`}
web/core/components/modules/links/list-item.tsx (1)

62-83: Use distinct tracking identifiers for Edit vs Delete.

Both actions share the same data-ph-element (LIST_ITEM). Down-stream analytics will be unable to differentiate which button was clicked without additional context. Define granular constants (e.g. LIST_ITEM_EDIT_BUTTON, LIST_ITEM_DELETE_BUTTON) to keep events self-describing:

- data-ph-element={MODULE_TRACKER_ELEMENTS.LIST_ITEM}
+ data-ph-element={MODULE_TRACKER_ELEMENTS.LIST_ITEM_EDIT_BUTTON}
...
- data-ph-element={MODULE_TRACKER_ELEMENTS.LIST_ITEM}
+ data-ph-element={MODULE_TRACKER_ELEMENTS.LIST_ITEM_DELETE_BUTTON}

You can extend MODULE_TRACKER_ELEMENTS accordingly.

web/ce/components/pages/header/lock-control.tsx (1)

10-10: Remove unused import.

The captureClick function is imported but never used in this component. Since the tracking is now handled declaratively via the data-ph-element attributes, this import can be removed.

-import { captureClick } from "@/helpers/event-tracker.helper";
web/core/components/onboarding/invitations.tsx (1)

53-70: Improve error typing for better type safety.

The event tracking refactor is well-implemented, but the explicit any typing for error could be improved for better type safety.

Consider using a more specific error type:

-    } catch (error: any) {
+    } catch (error: unknown) {
       console.error(error);
       captureError({
         eventName: MEMBER_TRACKER_EVENTS.accept,
         payload: {
           member_id: invitation?.id,
         },
-        error: error,
+        error: error instanceof Error ? error : new Error(String(error)),
       });
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between fa9c637 and aac6867.

📒 Files selected for processing (107)
  • packages/constants/src/event-tracker/core.ts (2 hunks)
  • space/core/components/account/auth-forms/unique-code.tsx (0 hunks)
  • web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/page.tsx (2 hunks)
  • web/app/(all)/[workspaceSlug]/(projects)/extended-project-sidebar.tsx (2 hunks)
  • web/app/(all)/[workspaceSlug]/(projects)/header.tsx (2 hunks)
  • web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx (2 hunks)
  • web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx (2 hunks)
  • web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/page.tsx (3 hunks)
  • web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx (2 hunks)
  • web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/header.tsx (2 hunks)
  • web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx (2 hunks)
  • web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx (2 hunks)
  • web/app/(all)/[workspaceSlug]/(projects)/workspace-views/header.tsx (2 hunks)
  • web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx (5 hunks)
  • web/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx (2 hunks)
  • web/app/(all)/accounts/forgot-password/page.tsx (4 hunks)
  • web/app/(all)/invitations/page.tsx (4 hunks)
  • web/app/(all)/onboarding/page.tsx (2 hunks)
  • web/app/(all)/sign-up/page.tsx (2 hunks)
  • web/app/(home)/page.tsx (2 hunks)
  • web/ce/components/issues/header.tsx (3 hunks)
  • web/ce/components/issues/issue-layouts/quick-action-dropdowns/copy-menu-helper.tsx (0 hunks)
  • web/ce/components/pages/header/lock-control.tsx (3 hunks)
  • web/ce/components/projects/create/root.tsx (2 hunks)
  • web/ce/components/workspace/delete-workspace-section.tsx (2 hunks)
  • web/ce/helpers/command-palette.ts (4 hunks)
  • web/ce/store/event-tracker.store.ts (0 hunks)
  • web/core/components/account/auth-forms/password.tsx (5 hunks)
  • web/core/components/account/auth-forms/unique-code.tsx (5 hunks)
  • web/core/components/command-palette/actions/project-actions.tsx (4 hunks)
  • web/core/components/command-palette/command-modal.tsx (4 hunks)
  • web/core/components/command-palette/command-palette.tsx (2 hunks)
  • web/core/components/cycles/analytics-sidebar/sidebar-header.tsx (3 hunks)
  • web/core/components/cycles/archived-cycles/modal.tsx (2 hunks)
  • web/core/components/cycles/delete-modal.tsx (3 hunks)
  • web/core/components/cycles/form.tsx (3 hunks)
  • web/core/components/cycles/list/cycle-list-item-action.tsx (5 hunks)
  • web/core/components/cycles/modal.tsx (6 hunks)
  • web/core/components/cycles/quick-actions.tsx (5 hunks)
  • web/core/components/home/root.tsx (2 hunks)
  • web/core/components/home/widgets/empty-states/no-projects.tsx (2 hunks)
  • web/core/components/inbox/content/issue-root.tsx (3 hunks)
  • web/core/components/inbox/modals/create-modal/create-root.tsx (3 hunks)
  • web/core/components/integration/jira/give-details.tsx (2 hunks)
  • web/core/components/issues/issue-detail-widgets/attachments/helper.tsx (4 hunks)
  • web/core/components/issues/issue-detail-widgets/relations/helper.tsx (3 hunks)
  • web/core/components/issues/issue-detail-widgets/sub-issues/helper.ts (4 hunks)
  • web/core/components/issues/issue-detail-widgets/sub-issues/quick-action-button.tsx (2 hunks)
  • web/core/components/issues/issue-detail/issue-detail-quick-actions.tsx (3 hunks)
  • web/core/components/issues/issue-detail/root.tsx (8 hunks)
  • web/core/components/issues/issue-layouts/empty-states/cycle.tsx (2 hunks)
  • web/core/components/issues/issue-layouts/empty-states/global-view.tsx (3 hunks)
  • web/core/components/issues/issue-layouts/empty-states/module.tsx (2 hunks)
  • web/core/components/issues/issue-layouts/empty-states/project-issues.tsx (2 hunks)
  • web/core/components/issues/issue-layouts/empty-states/project-view.tsx (2 hunks)
  • web/core/components/issues/issue-layouts/filters/applied-filters/roots/global-view-root.tsx (3 hunks)
  • web/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx (3 hunks)
  • web/core/components/issues/issue-layouts/kanban/headers/group-by-card.tsx (3 hunks)
  • web/core/components/issues/issue-layouts/list/headers/group-by-card.tsx (4 hunks)
  • web/core/components/issues/issue-layouts/properties/all-properties.tsx (8 hunks)
  • web/core/components/issues/issue-layouts/quick-action-dropdowns/all-issue.tsx (5 hunks)
  • web/core/components/issues/issue-layouts/quick-action-dropdowns/archived-issue.tsx (4 hunks)
  • web/core/components/issues/issue-layouts/quick-action-dropdowns/cycle-issue.tsx (5 hunks)
  • web/core/components/issues/issue-layouts/quick-action-dropdowns/draft-issue.tsx (4 hunks)
  • web/core/components/issues/issue-layouts/quick-action-dropdowns/helper.tsx (0 hunks)
  • web/core/components/issues/issue-layouts/quick-action-dropdowns/module-issue.tsx (5 hunks)
  • web/core/components/issues/issue-layouts/quick-action-dropdowns/project-issue.tsx (5 hunks)
  • web/core/components/issues/issue-layouts/quick-add/root.tsx (3 hunks)
  • web/core/components/issues/issue-layouts/spreadsheet/columns/cycle-column.tsx (2 hunks)
  • web/core/components/issues/issue-layouts/spreadsheet/columns/module-column.tsx (2 hunks)
  • web/core/components/issues/issue-layouts/spreadsheet/issue-column.tsx (2 hunks)
  • web/core/components/issues/issue-modal/base.tsx (5 hunks)
  • web/core/components/issues/issue-modal/draft-issue-layout.tsx (3 hunks)
  • web/core/components/issues/peek-overview/root.tsx (7 hunks)
  • web/core/components/issues/workspace-draft/root.tsx (2 hunks)
  • web/core/components/modules/analytics-sidebar/root.tsx (5 hunks)
  • web/core/components/modules/delete-module-modal.tsx (3 hunks)
  • web/core/components/modules/links/list-item.tsx (3 hunks)
  • web/core/components/modules/modal.tsx (5 hunks)
  • web/core/components/modules/module-card-item.tsx (4 hunks)
  • web/core/components/modules/module-list-item-action.tsx (4 hunks)
  • web/core/components/modules/modules-list-view.tsx (3 hunks)
  • web/core/components/modules/quick-actions.tsx (5 hunks)
  • web/core/components/onboarding/create-workspace.tsx (3 hunks)
  • web/core/components/onboarding/invitations.tsx (3 hunks)
  • web/core/components/onboarding/invite-members.tsx (4 hunks)
  • web/core/components/onboarding/profile-setup.tsx (8 hunks)
  • web/core/components/onboarding/tour/root.tsx (4 hunks)
  • web/core/components/pages/dropdowns/actions.tsx (4 hunks)
  • web/core/components/pages/header/favorite-control.tsx (2 hunks)
  • web/core/components/pages/list/block-item-action.tsx (2 hunks)
  • web/core/components/pages/modals/create-page-modal.tsx (2 hunks)
  • web/core/components/pages/modals/delete-page-modal.tsx (3 hunks)
  • web/core/components/pages/pages-list-main-content.tsx (4 hunks)
  • web/core/components/project-states/create-update/create.tsx (4 hunks)
  • web/core/components/project-states/create-update/update.tsx (3 hunks)
  • web/core/components/project-states/group-item.tsx (2 hunks)
  • web/core/components/project-states/options/delete.tsx (3 hunks)
  • web/core/components/project-states/state-delete-modal.tsx (3 hunks)
  • web/core/components/project-states/state-item-title.tsx (2 hunks)
  • web/core/components/project/card-list.tsx (2 hunks)
  • web/core/components/project/delete-project-modal.tsx (3 hunks)
  • web/core/components/project/form.tsx (6 hunks)
  • web/core/components/project/header.tsx (2 hunks)
  • web/core/components/project/leave-project-modal.tsx (2 hunks)
  • web/core/components/project/member-list-item.tsx (2 hunks)
  • web/core/components/project/member-list.tsx (2 hunks)
⛔ Files not processed due to max files limit (32)
  • web/core/components/project/send-project-invitation-modal.tsx
  • web/core/components/project/settings/delete-project-section.tsx
  • web/core/components/project/settings/features-list.tsx
  • web/core/components/project/settings/member-columns.tsx
  • web/core/components/views/update-view-component.tsx
  • web/core/components/workspace-notifications/sidebar/header/options/root.tsx
  • web/core/components/workspace-notifications/sidebar/notification-card/options/archive.tsx
  • web/core/components/workspace-notifications/sidebar/notification-card/options/read.tsx
  • web/core/components/workspace/create-workspace-form.tsx
  • web/core/components/workspace/delete-workspace-form.tsx
  • web/core/components/workspace/settings/invitations-list-item.tsx
  • web/core/components/workspace/settings/member-columns.tsx
  • web/core/components/workspace/settings/members-list-item.tsx
  • web/core/components/workspace/settings/workspace-details.tsx
  • web/core/components/workspace/sidebar/projects-list-item.tsx
  • web/core/components/workspace/sidebar/projects-list.tsx
  • web/core/components/workspace/sidebar/quick-actions.tsx
  • web/core/components/workspace/sidebar/user-menu-item.tsx
  • web/core/components/workspace/views/delete-view-modal.tsx
  • web/core/components/workspace/views/header.tsx
  • web/core/components/workspace/views/modal.tsx
  • web/core/components/workspace/views/quick-action.tsx
  • web/core/components/workspace/views/view-list-item.tsx
  • web/core/hooks/store/index.ts
  • web/core/hooks/store/use-event-tracker.ts
  • web/core/hooks/use-page-operations.ts
  • web/core/layouts/auth-layout/project-wrapper.tsx
  • web/core/lib/posthog-provider.tsx
  • web/core/store/event-tracker.store.ts
  • web/core/store/root.store.ts
  • web/ee/store/event-tracker.store.ts
  • web/helpers/event-tracker.helper.ts
💤 Files with no reviewable changes (4)
  • space/core/components/account/auth-forms/unique-code.tsx
  • web/ce/components/issues/issue-layouts/quick-action-dropdowns/copy-menu-helper.tsx
  • web/core/components/issues/issue-layouts/quick-action-dropdowns/helper.tsx
  • web/ce/store/event-tracker.store.ts
🧰 Additional context used
🧠 Learnings (67)
web/app/(all)/[workspaceSlug]/(projects)/extended-project-sidebar.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/modules/links/list-item.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx (2)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
Learnt from: janreges
PR: makeplane/plane#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".
web/core/components/issues/workspace-draft/root.tsx (2)
Learnt from: prateekshourya29
PR: makeplane/plane#7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx (4)
Learnt from: prateekshourya29
PR: makeplane/plane#7094
File: web/core/store/user/base-permissions.store.ts:196-201
Timestamp: 2025-05-28T09:53:44.635Z
Learning: All role enums in this codebase (EUserPermissions, EUserWorkspaceRoles, EUserProjectRoles) use the same consistent numeric values: ADMIN = 20, MEMBER = 15, GUEST = 5. None of these enums have a value of 0, so truthy checks work correctly with these enum values.
Learnt from: prateekshourya29
PR: makeplane/plane#7094
File: web/core/store/user/base-permissions.store.ts:196-201
Timestamp: 2025-05-28T09:53:44.635Z
Learning: The `EUserPermissions` enum in this codebase uses numeric values: ADMIN = 20, MEMBER = 15, GUEST = 5. All roles in this enum are always numbers, not string values.
Learnt from: mathalav55
PR: makeplane/plane#6452
File: web/helpers/issue.helper.ts:6-6
Timestamp: 2025-01-24T09:37:19.339Z
Learning: In the Plane codebase, `ISSUE_DISPLAY_FILTERS_BY_LAYOUT` and `ISSUE_DISPLAY_FILTERS_BY_PAGE` are two distinct constants serving different purposes - one for layout-level filters and another for page-level filters. They are not interchangeable and should coexist.
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
web/app/(all)/[workspaceSlug]/(projects)/workspace-views/header.tsx (1)
Learnt from: mathalav55
PR: makeplane/plane#6452
File: web/helpers/issue.helper.ts:6-6
Timestamp: 2025-01-24T09:37:19.339Z
Learning: In the Plane codebase, `ISSUE_DISPLAY_FILTERS_BY_LAYOUT` and `ISSUE_DISPLAY_FILTERS_BY_PAGE` are two distinct constants serving different purposes - one for layout-level filters and another for page-level filters. They are not interchangeable and should coexist.
web/core/components/project-states/group-item.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/ce/components/pages/header/lock-control.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/ce/components/issues/header.tsx (4)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
Learnt from: janreges
PR: makeplane/plane#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".
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7092
File: web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/root.tsx:109-113
Timestamp: 2025-05-22T11:21:49.370Z
Learning: Both translation keys "sub_work_item.empty_state.list_filters.action" and "sub_work_item.empty_state.sub_list_filters.action" have identical values across all language files in the Plane project, so they can be used interchangeably.
Learnt from: prateekshourya29
PR: makeplane/plane#7094
File: web/core/store/user/base-permissions.store.ts:196-201
Timestamp: 2025-05-28T09:53:44.635Z
Learning: All role enums in this codebase (EUserPermissions, EUserWorkspaceRoles, EUserProjectRoles) use the same consistent numeric values: ADMIN = 20, MEMBER = 15, GUEST = 5. None of these enums have a value of 0, so truthy checks work correctly with these enum values.
web/ce/components/projects/create/root.tsx (2)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
Learnt from: prateekshourya29
PR: makeplane/plane#7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.
web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/app/(all)/sign-up/page.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/header.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx (2)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
Learnt from: prateekshourya29
PR: makeplane/plane#7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.
web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx (6)
Learnt from: mathalav55
PR: makeplane/plane#6452
File: web/helpers/issue.helper.ts:6-6
Timestamp: 2025-01-24T09:37:19.339Z
Learning: In the Plane codebase, `ISSUE_DISPLAY_FILTERS_BY_LAYOUT` and `ISSUE_DISPLAY_FILTERS_BY_PAGE` are two distinct constants serving different purposes - one for layout-level filters and another for page-level filters. They are not interchangeable and should coexist.
Learnt from: janreges
PR: makeplane/plane#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".
Learnt from: prateekshourya29
PR: makeplane/plane#7094
File: web/core/store/user/base-permissions.store.ts:196-201
Timestamp: 2025-05-28T09:53:44.635Z
Learning: All role enums in this codebase (EUserPermissions, EUserWorkspaceRoles, EUserProjectRoles) use the same consistent numeric values: ADMIN = 20, MEMBER = 15, GUEST = 5. None of these enums have a value of 0, so truthy checks work correctly with these enum values.
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7092
File: web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/root.tsx:109-113
Timestamp: 2025-05-22T11:21:49.370Z
Learning: Both translation keys "sub_work_item.empty_state.list_filters.action" and "sub_work_item.empty_state.sub_list_filters.action" have identical values across all language files in the Plane project, so they can be used interchangeably.
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
web/core/components/project/header.tsx (2)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
Learnt from: prateekshourya29
PR: makeplane/plane#7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.
web/app/(home)/page.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/issues/issue-layouts/empty-states/project-view.tsx (1)
Learnt from: prateekshourya29
PR: makeplane/plane#7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.
web/core/components/home/root.tsx (3)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
Learnt from: mathalav55
PR: makeplane/plane#6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/archive.tsx:11-14
Timestamp: 2024-11-28T07:02:54.664Z
Learning: When components are still located in `core`, it's appropriate for files to import them using `@/components/...`, and the migration to the new import paths is not necessary in such cases.
Learnt from: mathalav55
PR: makeplane/plane#6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/read.tsx:11-12
Timestamp: 2024-11-28T07:02:15.514Z
Learning: Some components are still in core and have not been moved yet, so their import paths remain the same.
web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx (3)
Learnt from: prateekshourya29
PR: makeplane/plane#7094
File: web/core/store/user/base-permissions.store.ts:196-201
Timestamp: 2025-05-28T09:53:44.635Z
Learning: All role enums in this codebase (EUserPermissions, EUserWorkspaceRoles, EUserProjectRoles) use the same consistent numeric values: ADMIN = 20, MEMBER = 15, GUEST = 5. None of these enums have a value of 0, so truthy checks work correctly with these enum values.
Learnt from: prateekshourya29
PR: makeplane/plane#7094
File: web/core/store/user/base-permissions.store.ts:196-201
Timestamp: 2025-05-28T09:53:44.635Z
Learning: The `EUserPermissions` enum in this codebase uses numeric values: ADMIN = 20, MEMBER = 15, GUEST = 5. All roles in this enum are always numbers, not string values.
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
web/core/components/modules/modules-list-view.tsx (2)
Learnt from: mathalav55
PR: makeplane/plane#6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/read.tsx:11-12
Timestamp: 2024-11-28T07:02:15.514Z
Learning: Some components are still in core and have not been moved yet, so their import paths remain the same.
Learnt from: mathalav55
PR: makeplane/plane#6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/archive.tsx:11-14
Timestamp: 2024-11-28T07:02:54.664Z
Learning: When components are still located in `core`, it's appropriate for files to import them using `@/components/...`, and the migration to the new import paths is not necessary in such cases.
web/core/components/pages/header/favorite-control.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/page.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/pages/list/block-item-action.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/pages/pages-list-main-content.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/issues/issue-layouts/empty-states/cycle.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/pages/dropdowns/actions.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/issues/issue-detail-widgets/sub-issues/quick-action-button.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/app/(all)/onboarding/page.tsx (2)
Learnt from: lifeiscontent
PR: makeplane/plane#7164
File: packages/ui/.storybook/main.ts:24-47
Timestamp: 2025-06-04T16:22:44.344Z
Learning: In packages/ui/.storybook/main.ts, the webpackFinal function intentionally overrides the CSS loader strategy by finding and replacing existing CSS rules. This is a temporary workaround for a known upstream issue in Storybook's CSS handling that has been communicated to the Storybook maintainers. The current implementation should not be changed until the upstream issue is resolved.
Learnt from: lifeiscontent
PR: makeplane/plane#7004
File: tests/integration-tests/tests/auth.setup.ts:11-14
Timestamp: 2025-06-06T19:03:04.891Z
Learning: When setting up Playwright authentication for integration tests, use multiple authentication setups (admin.setup.ts, user.setup.ts, logged-out.setup.ts) with separate projects in playwright.config.ts rather than a single shared authentication state. This prevents architectural debt and makes it easier to test different user roles and logged-out scenarios.
web/core/components/issues/issue-modal/draft-issue-layout.tsx (1)
Learnt from: prateekshourya29
PR: makeplane/plane#7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.
web/core/components/issues/issue-modal/base.tsx (2)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/issues/issue-layouts/empty-states/project-issues.tsx (3)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
Learnt from: prateekshourya29
PR: makeplane/plane#7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx (2)
Learnt from: prateekshourya29
PR: makeplane/plane#7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
web/core/components/project/card-list.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/issues/issue-layouts/list/headers/group-by-card.tsx (2)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
web/core/components/modules/module-card-item.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/issues/issue-layouts/empty-states/module.tsx (2)
Learnt from: prateekshourya29
PR: makeplane/plane#7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/command-palette/command-palette.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/inbox/content/issue-root.tsx (2)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
Learnt from: prateekshourya29
PR: makeplane/plane#7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.
web/core/components/issues/issue-layouts/filters/applied-filters/roots/global-view-root.tsx (1)
Learnt from: mathalav55
PR: makeplane/plane#6452
File: web/helpers/issue.helper.ts:6-6
Timestamp: 2025-01-24T09:37:19.339Z
Learning: In the Plane codebase, `ISSUE_DISPLAY_FILTERS_BY_LAYOUT` and `ISSUE_DISPLAY_FILTERS_BY_PAGE` are two distinct constants serving different purposes - one for layout-level filters and another for page-level filters. They are not interchangeable and should coexist.
web/core/components/home/widgets/empty-states/no-projects.tsx (3)
Learnt from: prateekshourya29
PR: makeplane/plane#7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.
Learnt from: vamsikrishnamathala
PR: makeplane/plane#6820
File: web/core/hooks/use-timezone-converter.tsx:19-39
Timestamp: 2025-03-26T07:22:45.741Z
Learning: In the Plane project, the `getProjectUTCOffset` function in the timezone converter hook is designed to return undefined when there is no difference between the project's timezone and UTC (when offset is 0).
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/onboarding/invite-members.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/project-states/options/delete.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/issues/issue-detail-widgets/relations/helper.tsx (2)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/page.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/command-palette/actions/project-actions.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/issues/issue-layouts/empty-states/global-view.tsx (3)
Learnt from: prateekshourya29
PR: makeplane/plane#7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
Learnt from: prateekshourya29
PR: makeplane/plane#7094
File: web/core/store/user/base-permissions.store.ts:196-201
Timestamp: 2025-05-28T09:53:44.635Z
Learning: All role enums in this codebase (EUserPermissions, EUserWorkspaceRoles, EUserProjectRoles) use the same consistent numeric values: ADMIN = 20, MEMBER = 15, GUEST = 5. None of these enums have a value of 0, so truthy checks work correctly with these enum values.
web/core/components/issues/issue-layouts/kanban/headers/group-by-card.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/issues/issue-layouts/spreadsheet/issue-column.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
web/core/components/issues/issue-layouts/quick-add/root.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/app/(all)/accounts/forgot-password/page.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/inbox/modals/create-modal/create-root.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/issues/issue-detail-widgets/sub-issues/helper.ts (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/issues/issue-detail/root.tsx (3)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
Learnt from: prateekshourya29
PR: makeplane/plane#7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
web/app/(all)/invitations/page.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/issues/issue-layouts/quick-action-dropdowns/all-issue.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/issues/issue-layouts/quick-action-dropdowns/draft-issue.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/issues/issue-layouts/quick-action-dropdowns/cycle-issue.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/cycles/delete-modal.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7214
File: web/core/store/issue/workspace/filter.store.ts:135-177
Timestamp: 2025-06-16T07:21:23.688Z
Learning: Try-catch blocks that only re-throw errors (catch (error) { throw error; }) without any additional processing, logging, cleanup, or error transformation are redundant and can be safely removed as the error will naturally propagate up the call stack.
web/core/components/command-palette/command-modal.tsx (2)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
Learnt from: prateekshourya29
PR: makeplane/plane#7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.
web/core/components/issues/issue-layouts/quick-action-dropdowns/project-issue.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/modules/analytics-sidebar/root.tsx (3)
Learnt from: prateekshourya29
PR: makeplane/plane#7094
File: web/core/store/user/base-permissions.store.ts:196-201
Timestamp: 2025-05-28T09:53:44.635Z
Learning: The `EUserPermissions` enum in this codebase uses numeric values: ADMIN = 20, MEMBER = 15, GUEST = 5. All roles in this enum are always numbers, not string values.
Learnt from: janreges
PR: makeplane/plane#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".
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/issues/issue-layouts/properties/all-properties.tsx (2)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
Learnt from: prateekshourya29
PR: makeplane/plane#7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.
web/core/components/issues/issue-layouts/quick-action-dropdowns/module-issue.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/account/auth-forms/password.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias `@/plane-web` resolves to the `ce` directory, making imports like `@/plane-web/hooks/use-notification-preview` correctly resolve to files in `web/ce/hooks/`.
web/core/components/issues/peek-overview/root.tsx (1)
Learnt from: vamsikrishnamathala
PR: makeplane/plane#7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
🧬 Code Graph Analysis (61)
web/ce/components/workspace/delete-workspace-section.tsx (1)
packages/constants/src/event-tracker/core.ts (1)
  • WORKSPACE_TRACKER_ELEMENTS (18-23)
web/core/components/project-states/state-item-title.tsx (1)
packages/constants/src/event-tracker/core.ts (1)
  • STATE_TRACKER_ELEMENTS (151-155)
web/app/(all)/[workspaceSlug]/(projects)/extended-project-sidebar.tsx (1)
packages/constants/src/event-tracker/core.ts (1)
  • PROJECT_TRACKER_ELEMENTS (30-43)
web/core/components/modules/links/list-item.tsx (1)
packages/constants/src/event-tracker/core.ts (1)
  • MODULE_TRACKER_ELEMENTS (78-87)
web/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx (1)
packages/constants/src/event-tracker/core.ts (1)
  • PROJECT_TRACKER_ELEMENTS (30-43)
web/core/components/issues/workspace-draft/root.tsx (2)
web/helpers/event-tracker.helper.ts (1)
  • captureClick (52-54)
packages/constants/src/event-tracker/core.ts (1)
  • PROJECT_TRACKER_ELEMENTS (30-43)
web/app/(all)/[workspaceSlug]/(projects)/workspace-views/header.tsx (1)
packages/constants/src/event-tracker/core.ts (1)
  • GLOBAL_VIEW_TRACKER_ELEMENTS (230-235)
web/core/components/project-states/group-item.tsx (1)
packages/constants/src/event-tracker/core.ts (1)
  • STATE_TRACKER_ELEMENTS (151-155)
web/ce/components/pages/header/lock-control.tsx (1)
packages/constants/src/event-tracker/core.ts (1)
  • PROJECT_PAGE_TRACKER_ELEMENTS (171-183)
web/ce/components/issues/header.tsx (1)
packages/constants/src/event-tracker/core.ts (1)
  • WORK_ITEM_TRACKER_ELEMENTS (111-144)
web/ce/helpers/command-palette.ts (2)
web/helpers/event-tracker.helper.ts (1)
  • captureClick (52-54)
packages/constants/src/event-tracker/core.ts (5)
  • WORK_ITEM_TRACKER_ELEMENTS (111-144)
  • PROJECT_TRACKER_ELEMENTS (30-43)
  • PROJECT_PAGE_TRACKER_ELEMENTS (171-183)
  • MODULE_TRACKER_ELEMENTS (78-87)
  • CYCLE_TRACKER_ELEMENTS (54-62)
web/ce/components/projects/create/root.tsx (4)
web/helpers/event-tracker.helper.ts (2)
  • captureSuccess (112-114)
  • captureError (126-128)
packages/constants/src/event-tracker/core.ts (1)
  • PROJECT_TRACKER_EVENTS (25-29)
packages/ui/src/toast/index.tsx (1)
  • setToast (63-190)
packages/i18n/src/store/index.ts (1)
  • t (211-232)
web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx (1)
packages/constants/src/event-tracker/core.ts (1)
  • CYCLE_TRACKER_ELEMENTS (54-62)
web/app/(all)/sign-up/page.tsx (1)
packages/constants/src/event-tracker/core.ts (1)
  • AUTH_TRACKER_ELEMENTS (214-222)
web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/header.tsx (1)
packages/constants/src/event-tracker/core.ts (1)
  • MODULE_TRACKER_ELEMENTS (78-87)
web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx (1)
packages/constants/src/event-tracker/core.ts (1)
  • PROJECT_TRACKER_ELEMENTS (30-43)
web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx (1)
packages/constants/src/event-tracker/core.ts (1)
  • WORK_ITEM_TRACKER_ELEMENTS (111-144)
web/core/components/project-states/state-delete-modal.tsx (2)
web/helpers/event-tracker.helper.ts (2)
  • captureSuccess (112-114)
  • captureError (126-128)
packages/constants/src/event-tracker/core.ts (1)
  • STATE_TRACKER_EVENTS (146-150)
web/core/components/project/header.tsx (1)
packages/constants/src/event-tracker/core.ts (1)
  • PROJECT_TRACKER_ELEMENTS (30-43)
web/app/(home)/page.tsx (1)
packages/constants/src/event-tracker/core.ts (1)
  • AUTH_TRACKER_ELEMENTS (214-222)
web/core/components/issues/issue-layouts/empty-states/project-view.tsx (2)
web/helpers/event-tracker.helper.ts (1)
  • captureClick (52-54)
packages/constants/src/event-tracker/core.ts (1)
  • WORK_ITEM_TRACKER_ELEMENTS (111-144)
web/core/components/home/root.tsx (2)
web/helpers/event-tracker.helper.ts (1)
  • captureSuccess (112-114)
packages/constants/src/event-tracker/core.ts (1)
  • PRODUCT_TOUR_TRACKER_EVENTS (237-239)
web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx (1)
packages/constants/src/event-tracker/core.ts (1)
  • WORK_ITEM_TRACKER_ELEMENTS (111-144)
web/core/components/modules/modules-list-view.tsx (1)
packages/constants/src/event-tracker/core.ts (1)
  • MODULE_TRACKER_ELEMENTS (78-87)
web/core/components/pages/header/favorite-control.tsx (2)
web/helpers/event-tracker.helper.ts (1)
  • captureClick (52-54)
packages/constants/src/event-tracker/core.ts (1)
  • PROJECT_PAGE_TRACKER_ELEMENTS (171-183)
web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/page.tsx (1)
packages/constants/src/event-tracker/core.ts (1)
  • CYCLE_TRACKER_ELEMENTS (54-62)
web/core/components/project/member-list.tsx (1)
packages/constants/src/event-tracker/core.ts (1)
  • MEMBER_TRACKER_ELEMENTS (196-205)
web/core/components/onboarding/create-workspace.tsx (2)
web/helpers/event-tracker.helper.ts (2)
  • captureSuccess (112-114)
  • captureError (126-128)
packages/constants/src/event-tracker/core.ts (2)
  • WORKSPACE_TRACKER_EVENTS (13-17)
  • WORKSPACE_TRACKER_ELEMENTS (18-23)
web/core/components/pages/list/block-item-action.tsx (2)
web/helpers/event-tracker.helper.ts (1)
  • captureClick (52-54)
packages/constants/src/event-tracker/core.ts (1)
  • PROJECT_PAGE_TRACKER_ELEMENTS (171-183)
web/core/components/project/leave-project-modal.tsx (2)
web/helpers/event-tracker.helper.ts (2)
  • captureSuccess (112-114)
  • captureError (126-128)
packages/constants/src/event-tracker/core.ts (1)
  • MEMBER_TRACKER_EVENTS (185-195)
web/core/components/pages/pages-list-main-content.tsx (2)
web/helpers/event-tracker.helper.ts (1)
  • captureClick (52-54)
packages/constants/src/event-tracker/core.ts (1)
  • PROJECT_PAGE_TRACKER_ELEMENTS (171-183)
web/core/components/issues/issue-layouts/empty-states/cycle.tsx (2)
web/helpers/event-tracker.helper.ts (1)
  • captureClick (52-54)
packages/constants/src/event-tracker/core.ts (1)
  • WORK_ITEM_TRACKER_ELEMENTS (111-144)
web/core/components/pages/dropdowns/actions.tsx (3)
web/helpers/event-tracker.helper.ts (1)
  • captureClick (52-54)
packages/constants/src/event-tracker/core.ts (1)
  • PROJECT_PAGE_TRACKER_ELEMENTS (171-183)
web/core/store/pages/project-page.ts (3)
  • canCurrentUserLockPage (119-122)
  • canCurrentUserDuplicatePage (111-114)
  • canCurrentUserArchivePage (135-138)
web/app/(all)/[workspaceSlug]/(projects)/header.tsx (2)
web/helpers/event-tracker.helper.ts (1)
  • captureElementAndEvent (139-146)
packages/constants/src/event-tracker/core.ts (2)
  • HEADER_GITHUB_ICON (3-3)
  • GITHUB_REDIRECTED_TRACKER_EVENT (2-2)
web/core/components/project/delete-project-modal.tsx (2)
web/helpers/event-tracker.helper.ts (2)
  • captureSuccess (112-114)
  • captureError (126-128)
packages/constants/src/event-tracker/core.ts (1)
  • PROJECT_TRACKER_EVENTS (25-29)
web/app/(all)/onboarding/page.tsx (2)
web/helpers/event-tracker.helper.ts (1)
  • captureSuccess (112-114)
packages/constants/src/event-tracker/core.ts (1)
  • USER_TRACKER_EVENTS (259-262)
web/core/components/issues/issue-modal/base.tsx (2)
web/helpers/event-tracker.helper.ts (2)
  • captureSuccess (112-114)
  • captureError (126-128)
packages/constants/src/event-tracker/core.ts (1)
  • WORK_ITEM_TRACKER_EVENTS (89-110)
web/core/components/integration/jira/give-details.tsx (2)
packages/constants/src/event-tracker/core.ts (1)
  • PROJECT_TRACKER_ELEMENTS (30-43)
web/helpers/event-tracker.helper.ts (1)
  • captureClick (52-54)
web/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx (2)
web/helpers/event-tracker.helper.ts (1)
  • captureError (126-128)
packages/constants/src/event-tracker/core.ts (1)
  • WORK_ITEM_TRACKER_EVENTS (89-110)
web/core/components/project/card-list.tsx (2)
web/helpers/event-tracker.helper.ts (1)
  • captureClick (52-54)
packages/constants/src/event-tracker/core.ts (1)
  • PROJECT_TRACKER_ELEMENTS (30-43)
web/core/components/modules/module-card-item.tsx (2)
web/helpers/event-tracker.helper.ts (1)
  • captureElementAndEvent (139-146)
packages/constants/src/event-tracker/core.ts (2)
  • MODULE_TRACKER_ELEMENTS (78-87)
  • MODULE_TRACKER_EVENTS (64-77)
web/core/components/command-palette/command-palette.tsx (2)
web/helpers/event-tracker.helper.ts (1)
  • captureClick (52-54)
packages/constants/src/event-tracker/core.ts (1)
  • COMMAND_PALETTE_TRACKER_ELEMENTS (9-11)
web/core/components/home/widgets/empty-states/no-projects.tsx (2)
web/helpers/event-tracker.helper.ts (1)
  • captureClick (52-54)
packages/constants/src/event-tracker/core.ts (1)
  • PROJECT_TRACKER_ELEMENTS (30-43)
web/core/components/onboarding/invite-members.tsx (2)
web/helpers/event-tracker.helper.ts (2)
  • captureSuccess (112-114)
  • captureError (126-128)
packages/constants/src/event-tracker/core.ts (2)
  • MEMBER_TRACKER_EVENTS (185-195)
  • MEMBER_TRACKER_ELEMENTS (196-205)
web/core/components/project-states/create-update/update.tsx (2)
web/helpers/event-tracker.helper.ts (2)
  • captureSuccess (112-114)
  • captureError (126-128)
packages/constants/src/event-tracker/core.ts (1)
  • STATE_TRACKER_EVENTS (146-150)
web/core/components/issues/issue-layouts/spreadsheet/columns/cycle-column.tsx (2)
web/helpers/event-tracker.helper.ts (1)
  • captureSuccess (112-114)
packages/constants/src/event-tracker/core.ts (1)
  • WORK_ITEM_TRACKER_EVENTS (89-110)
web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/page.tsx (2)
web/helpers/event-tracker.helper.ts (1)
  • captureClick (52-54)
packages/constants/src/event-tracker/core.ts (1)
  • PROJECT_TRACKER_ELEMENTS (30-43)
web/core/components/onboarding/tour/root.tsx (2)
web/helpers/event-tracker.helper.ts (1)
  • captureClick (52-54)
packages/constants/src/event-tracker/core.ts (1)
  • PRODUCT_TOUR_TRACKER_ELEMENTS (240-244)
web/core/components/command-palette/actions/project-actions.tsx (1)
packages/constants/src/event-tracker/core.ts (3)
  • CYCLE_TRACKER_ELEMENTS (54-62)
  • MODULE_TRACKER_ELEMENTS (78-87)
  • PROJECT_PAGE_TRACKER_ELEMENTS (171-183)
web/core/components/issues/issue-layouts/empty-states/global-view.tsx (2)
web/helpers/event-tracker.helper.ts (1)
  • captureClick (52-54)
packages/constants/src/event-tracker/core.ts (1)
  • WORK_ITEM_TRACKER_ELEMENTS (111-144)
web/core/components/project-states/create-update/create.tsx (2)
web/helpers/event-tracker.helper.ts (2)
  • captureSuccess (112-114)
  • captureError (126-128)
packages/constants/src/event-tracker/core.ts (1)
  • STATE_TRACKER_EVENTS (146-150)
web/core/components/issues/issue-layouts/spreadsheet/issue-column.tsx (2)
web/helpers/event-tracker.helper.ts (1)
  • captureSuccess (112-114)
packages/constants/src/event-tracker/core.ts (1)
  • WORK_ITEM_TRACKER_EVENTS (89-110)
web/core/components/modules/delete-module-modal.tsx (2)
web/helpers/event-tracker.helper.ts (2)
  • captureSuccess (112-114)
  • captureError (126-128)
packages/constants/src/event-tracker/core.ts (1)
  • MODULE_TRACKER_EVENTS (64-77)
web/app/(all)/invitations/page.tsx (2)
web/helpers/event-tracker.helper.ts (3)
  • joinEventGroup (14-16)
  • captureSuccess (112-114)
  • captureError (126-128)
packages/constants/src/event-tracker/core.ts (3)
  • GROUP_WORKSPACE_TRACKER_EVENT (6-6)
  • MEMBER_TRACKER_EVENTS (185-195)
  • MEMBER_TRACKER_ELEMENTS (196-205)
web/core/components/issues/issue-layouts/quick-action-dropdowns/draft-issue.tsx (3)
packages/ui/src/dropdowns/context-menu/root.tsx (2)
  • TContextMenuItem (12-25)
  • ContextMenu (234-239)
web/helpers/event-tracker.helper.ts (1)
  • captureClick (52-54)
packages/constants/src/event-tracker/core.ts (1)
  • WORK_ITEM_TRACKER_ELEMENTS (111-144)
web/core/components/cycles/delete-modal.tsx (2)
web/helpers/event-tracker.helper.ts (2)
  • captureSuccess (112-114)
  • captureError (126-128)
packages/constants/src/event-tracker/core.ts (1)
  • CYCLE_TRACKER_EVENTS (45-53)
web/core/components/command-palette/command-modal.tsx (2)
web/helpers/event-tracker.helper.ts (1)
  • captureClick (52-54)
packages/constants/src/event-tracker/core.ts (2)
  • WORK_ITEM_TRACKER_ELEMENTS (111-144)
  • PROJECT_TRACKER_ELEMENTS (30-43)
web/core/components/issues/issue-layouts/quick-action-dropdowns/module-issue.tsx (3)
packages/ui/src/dropdowns/context-menu/root.tsx (2)
  • TContextMenuItem (12-25)
  • ContextMenu (234-239)
web/helpers/event-tracker.helper.ts (1)
  • captureClick (52-54)
packages/constants/src/event-tracker/core.ts (1)
  • WORK_ITEM_TRACKER_ELEMENTS (111-144)
web/core/components/onboarding/profile-setup.tsx (2)
web/helpers/event-tracker.helper.ts (3)
  • captureSuccess (112-114)
  • captureError (126-128)
  • captureView (62-64)
packages/constants/src/event-tracker/core.ts (2)
  • USER_TRACKER_EVENTS (259-262)
  • ONBOARDING_TRACKER_ELEMENTS (263-265)
web/core/components/project/form.tsx (3)
web/helpers/event-tracker.helper.ts (2)
  • captureSuccess (112-114)
  • captureError (126-128)
packages/constants/src/event-tracker/core.ts (2)
  • PROJECT_TRACKER_EVENTS (25-29)
  • PROJECT_TRACKER_ELEMENTS (30-43)
web/core/store/router.store.ts (1)
  • projectId (85-87)
web/core/components/cycles/quick-actions.tsx (4)
web/helpers/event-tracker.helper.ts (3)
  • captureSuccess (112-114)
  • captureError (126-128)
  • captureClick (52-54)
packages/constants/src/event-tracker/core.ts (2)
  • CYCLE_TRACKER_EVENTS (45-53)
  • CYCLE_TRACKER_ELEMENTS (54-62)
packages/ui/src/toast/index.tsx (1)
  • setToast (63-190)
packages/ui/src/dropdowns/context-menu/root.tsx (1)
  • ContextMenu (234-239)
🔇 Additional comments (188)
web/app/(all)/[workspaceSlug]/(projects)/extended-project-sidebar.tsx (1)

8-8: Import looks good.

Correct constant imported; no other side-effects.

web/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx (1)

5-5: Constant import is correct.

web/ce/components/workspace/delete-workspace-section.tsx (1)

5-5: Import verified.

web/core/components/modules/links/list-item.tsx (1)

4-4: Import looks fine.

web/core/components/project-states/state-item-title.tsx (2)

5-5: Import OK.


73-75: Good addition.

The edit button is now trackable and retains its existing functionality.

web/core/components/project-states/group-item.tsx (1)

7-7: LGTM: Event tracking refactor implemented correctly.

The addition of STATE_TRACKER_ELEMENTS import and the data-ph-element attribute on the state group add button properly implements the new declarative event tracking approach. This replaces the previous hook-based tracking with standardized element identifiers.

Also applies to: 84-84

web/core/components/issues/workspace-draft/root.tsx (1)

7-7: LGTM: Event tracking correctly implemented for project creation.

The addition of captureClick call with the appropriate tracker element constant properly implements the new event tracking approach. The timing and context of the tracking call is correct for capturing user interaction with the "Create Project" button in the empty state.

Also applies to: 14-14, 81-81

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

12-14: LGTM: Event tracking attribute added correctly.

The data-ph-element attribute with GLOBAL_VIEW_TRACKER_ELEMENTS.RIGHT_HEADER_ADD_BUTTON is properly implemented on the "Add View" button, following the standardized tracking approach.

Also applies to: 232-232

web/ce/components/issues/header.tsx (1)

13-13: LGTM: Event tracking migration implemented correctly.

The refactoring properly replaces hook-based event tracking with the declarative data-ph-element attribute. The removal of useEventTracker from imports and addition of WORK_ITEM_TRACKER_ELEMENTS.HEADER_ADD_BUTTON.WORK_ITEMS follows the established pattern for the new tracking approach.

Also applies to: 25-25, 109-109

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

15-15: LGTM: Consistent event tracking implementation.

The addition of data-ph-element attribute with WORK_ITEM_TRACKER_ELEMENTS.HEADER_ADD_BUTTON.PROJECT_VIEW correctly implements the new tracking approach for the project view context. This follows the established pattern of replacing hook-based tracking with declarative attributes.

Also applies to: 261-261

web/ce/components/pages/header/lock-control.tsx (1)

84-84: LGTM! Event tracking attributes added correctly.

The data-ph-element attributes are properly added to both lock buttons using the standardized constant from PROJECT_PAGE_TRACKER_ELEMENTS.LOCK_BUTTON. This aligns well with the declarative event tracking approach adopted in this refactor.

Also applies to: 97-97

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

7-7: LGTM! Event tracking refactored correctly.

The changes properly implement the new declarative event tracking approach by:

  1. Adding the PROJECT_TRACKER_ELEMENTS import from constants
  2. Adding the data-ph-element attribute to the create page button using the standardized constant

This aligns with the broader refactor moving away from hook-based tracking to declarative tracking.

Also applies to: 72-72

web/core/components/cycles/archived-cycles/modal.tsx (1)

6-6: LGTM! Event tracking implemented correctly for archive operation.

The success and error tracking calls are properly implemented:

  1. captureSuccess is called after successful archival with the cycle ID
  2. captureError is called in the catch block with the cycle ID
  3. Both use the standardized CYCLE_TRACKER_EVENTS.archive event name
  4. Tracking calls are placed after user feedback (toasts) which is the correct sequence

This follows the new pattern of using helper functions with standardized event constants.

Also applies to: 9-9, 47-52, 62-67

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

16-16: LGTM! Event tracking attribute added correctly.

The data-ph-element attribute is properly added to the create work item button using the context-specific constant WORK_ITEM_TRACKER_ELEMENTS.HEADER_ADD_BUTTON.CYCLE. This correctly identifies the button as a cycle-specific work item creation trigger, aligning with the standardized tracking constants structure.

Also applies to: 267-267

web/core/components/project/member-list.tsx (1)

7-7: LGTM! Event tracking refactored correctly.

The changes properly implement the new declarative event tracking approach:

  1. MEMBER_TRACKER_ELEMENTS import added to the constants import
  2. data-ph-element attribute added to the invite member button using the standardized HEADER_ADD_BUTTON constant

This aligns with the broader refactor pattern seen across all files in this PR.

Also applies to: 76-76

web/core/components/modules/modules-list-view.tsx (1)

5-5: LGTM! Clean migration to declarative event tracking.

This refactor successfully moves from imperative event tracking (setTrackElement calls) to declarative tracking using data-ph-element attributes. This approach improves separation of concerns by removing tracking logic from the business logic in click handlers.

Also applies to: 14-14, 62-62

web/core/components/issues/issue-layouts/empty-states/cycle.tsx (1)

9-9: LGTM! Improved event tracking with explicit helper function.

The migration from setTrackElement to captureClick provides better type safety and consistency. Using the standardized WORK_ITEM_TRACKER_ELEMENTS.EMPTY_STATE_ADD_BUTTON.CYCLE constant ensures consistent element naming across the application.

Also applies to: 16-17, 136-136

web/core/components/issues/issue-layouts/empty-states/project-view.tsx (1)

4-4: LGTM! Consistent application of the new event tracking pattern.

The refactor correctly applies the standardized event tracking approach using captureClick with the appropriate WORK_ITEM_TRACKER_ELEMENTS.EMPTY_STATE_ADD_BUTTON.PROJECT_VIEW constant for the project view context.

Also applies to: 7-7, 9-9, 36-36

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

6-6: LGTM! Consistent declarative tracking implementation.

The addition of the data-ph-element attribute with MODULE_TRACKER_ELEMENTS.RIGHT_HEADER_ADD_BUTTON follows the established pattern for declarative event tracking, providing better maintainability and consistency.

Also applies to: 13-13, 57-57

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

16-16: LGTM! Excellent completion of the event tracking refactor.

The addition of data-ph-element={WORK_ITEM_TRACKER_ELEMENTS.HEADER_ADD_BUTTON.MODULE} completes the consistent application of the new declarative tracking pattern. This systematic refactor across all files improves code maintainability and provides better separation of concerns between business logic and analytics tracking.

Also applies to: 263-263

web/core/components/project-states/state-delete-modal.tsx (1)

13-13: LGTM! Clean refactor to new event tracking pattern.

The refactor correctly replaces the useEventTracker hook with the new helper functions. The success and error tracking calls are properly placed in the respective handlers with simplified payloads containing only essential data.

Also applies to: 42-47, 64-69

web/ce/helpers/command-palette.ts (1)

2-11: LGTM! Comprehensive event tracking for command palette shortcuts.

The implementation correctly adds click tracking to command palette shortcuts using the appropriate constants for each entity type. The tracking calls are properly placed before the main action execution.

Also applies to: 21-24, 36-39, 57-60, 65-68, 73-76

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

7-7: LGTM! Proper migration to new event tracking system.

The refactor correctly replaces the useEventTracker hook with the captureClick helper function and uses the appropriate constant for the empty state create project button.

Also applies to: 15-16, 104-106

web/core/components/pages/list/block-item-action.tsx (1)

7-7: LGTM! Clean addition of favorite button tracking.

The implementation correctly adds click tracking to the favorite button using the appropriate constant. The tracking call is properly placed before the favorite toggle operation while maintaining the existing event handling logic.

Also applies to: 14-14, 70-72

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

7-7: LGTM! Proper migration to declarative event tracking.

The refactor correctly replaces the imperative useEventTracker approach with a declarative data-ph-element attribute using the appropriate constant. This aligns with the new tracking pattern while maintaining the button's functionality.

Also applies to: 13-13, 53-53

web/app/(home)/page.tsx (1)

9-9: LGTM! Event tracking refactoring correctly implemented.

The migration from the useEventTracker hook to declarative data attributes is well-executed:

  • Proper import of AUTH_TRACKER_ELEMENTS from constants
  • Removal of unused useEventTracker hook
  • Addition of data-ph-element attribute for tracking navigation to sign-up

Also applies to: 17-17, 64-64

web/core/components/project/header.tsx (1)

7-7: LGTM! Project header event tracking correctly refactored.

The event tracking migration is properly implemented:

  • Correct import of PROJECT_TRACKER_ELEMENTS constants
  • Appropriate import of captureClick helper function
  • Removal of unused useEventTracker hook
  • Proper addition of data-ph-element attribute with CREATE_HEADER_BUTTON constant

Also applies to: 13-13, 15-15, 62-62

web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/page.tsx (1)

7-7: LGTM! Cycles page event tracking migration completed correctly.

The refactoring maintains consistency with the new event tracking approach:

  • Proper import of CYCLE_TRACKER_ELEMENTS constants
  • Removal of unused useEventTracker hook
  • Addition of data-ph-element attribute for empty state tracking using EMPTY_STATE_ADD_BUTTON constant

Also applies to: 19-19, 102-102

web/core/components/issues/issue-layouts/empty-states/project-issues.tsx (1)

5-5: LGTM! Project issues empty state event tracking correctly refactored.

The migration from hook-based to helper-based event tracking is well-implemented:

  • Proper import of WORK_ITEM_TRACKER_ELEMENTS constants
  • Correct import of captureClick helper function
  • Removal of unused useEventTracker hook
  • Proper replacement of setTrackElement with captureClick using structured element name

Also applies to: 10-10, 12-12, 79-79

web/core/components/issues/issue-detail-widgets/sub-issues/quick-action-button.tsx (1)

6-6: LGTM! Sub-issues quick action event tracking successfully migrated.

The refactoring correctly implements the new event tracking approach:

  • Proper import of WORK_ITEM_TRACKER_EVENTS constants for event names
  • Correct import of captureClick helper function
  • Removal of unused useEventTracker hook
  • Proper replacement of setTrackElement calls with captureClick calls using structured event names for both create and add existing actions

Also applies to: 11-12, 56-56, 62-62

web/app/(all)/sign-up/page.tsx (1)

9-9: LGTM: Clean refactoring to declarative event tracking

The changes successfully replace the hook-based event tracking with a declarative approach using data-ph-element attributes and standardized constants from AUTH_TRACKER_ELEMENTS. This aligns well with the broader refactoring pattern across the codebase.

Also applies to: 53-53

web/core/components/onboarding/create-workspace.tsx (4)

11-11: LGTM: Proper import updates for the tracking refactor

The import changes correctly add the necessary constants and helper functions while removing the deprecated useEventTracker hook. This supports the transition to the new event tracking approach.

Also applies to: 19-20


76-79: LGTM: Simplified success tracking payload

The refactoring to use captureSuccess with a simplified payload containing only the essential slug identifier aligns with the broader simplification of event tracking across the codebase.


84-88: LGTM: Improved error tracking with explicit Error object

The error handling is well-implemented with:

  • Consistent use of captureError helper
  • Simplified payload structure
  • Explicit Error object creation for better error context

285-294: LGTM: Consistent button tracking implementation

The addition of the data-ph-element attribute using WORKSPACE_TRACKER_ELEMENTS.ONBOARDING_CREATE_WORKSPACE_BUTTON follows the established pattern for declarative element tracking.

web/core/components/home/root.tsx (2)

4-21: LGTM: Improved import organization

The import reorganization with clear grouping (plane imports, components, helpers, hooks, plane web components, local imports) enhances code readability and maintainability.


43-48: LGTM: Clean transition to captureSuccess helper

The refactoring from captureEvent to captureSuccess with a simplified payload structure containing only the essential user_id is consistent with the broader event tracking simplification effort.

web/core/components/integration/jira/give-details.tsx (2)

8-8: LGTM: Proper import updates for project tracking

The import changes correctly add the necessary PROJECT_TRACKER_ELEMENTS constants and captureClick helper function while removing the deprecated useEventTracker hook.

Also applies to: 15-16


205-209: LGTM: Comprehensive button tracking implementation

The button tracking implementation is well-executed with:

  • Declarative tracking via data-ph-element attribute using EMPTY_STATE_CREATE_PROJECT_BUTTON
  • Imperative tracking via captureClick call with CREATE_PROJECT_JIRA_IMPORT_DETAIL_PAGE
  • Proper element name constants from PROJECT_TRACKER_ELEMENTS
web/core/components/pages/pages-list-main-content.tsx (2)

4-4: LGTM: Proper import additions for page tracking

The import additions correctly add the necessary PROJECT_PAGE_TRACKER_ELEMENTS constants and captureClick helper function to support the new event tracking functionality.

Also applies to: 10-10


67-67: LGTM: Consistent tracking across all empty states

The captureClick calls are properly implemented across all three empty state variants (general, public, private) using the standardized EMPTY_STATE_CREATE_BUTTON element name. This ensures consistent tracking behavior regardless of the page type.

Also applies to: 84-84, 100-100

web/core/components/pages/header/favorite-control.tsx (1)

30-35: Clean event tracking implementation.

The event tracking is properly added before the toggle operation, maintaining the existing functionality while adding analytics. The use of the standardized constant PROJECT_PAGE_TRACKER_ELEMENTS.FAVORITE_BUTTON follows the established pattern in this refactor.

web/app/(all)/onboarding/page.tsx (1)

76-82: Clean migration to helper-based event tracking.

The conversion from captureEvent to captureSuccess is well-executed. The payload is appropriately simplified to include only essential user identification data, and the use of USER_TRACKER_EVENTS.onboarding_complete provides consistent event naming.

web/core/components/issues/issue-layouts/empty-states/module.tsx (1)

122-124: Consistent migration to standardized event tracking.

The replacement of setTrackElement with captureClick using WORK_ITEM_TRACKER_ELEMENTS.EMPTY_STATE_ADD_BUTTON.MODULE maintains the same tracking behavior while adopting the new standardized approach. The event is properly captured before executing the toggle action.

web/core/components/cycles/form.tsx (2)

67-67: Clean form submission simplification.

The form submission handler is appropriately simplified to only pass the form data, consistent with the updated prop interface.


19-19: No breaking changes from removing dirtyFields

All usages of <CycleForm> have been updated to pass a handler that only accepts formData:

  • web/core/components/cycles/modal.tsx:
    const handleFormSubmit = async (formData: Partial<ICycle>) => { … }
    • Passed as <CycleForm handleFormSubmit={handleFormSubmit} … />

Removing the unused dirtyFields parameter is safe.

web/core/components/project/card-list.tsx (1)

69-69: Consistent event tracking migration maintained.

The replacement of setTrackElement("Project empty state") with captureClick({ elementName: PROJECT_TRACKER_ELEMENTS.EMPTY_STATE_CREATE_PROJECT_BUTTON }) successfully adopts the standardized tracking approach while maintaining the same behavioral timing before the modal toggle.

web/core/components/modules/module-list-item-action.tsx (2)

73-90: LGTM! Event tracking refactoring looks solid.

The refactoring correctly replaces the previous useEventTracker approach with the new helper functions. The success path uses captureElementAndEvent with proper element and event structure, while the error path uses captureError with the error object. The promise handling and toast notifications remain intact.


116-133: Consistent event tracking implementation.

The unfavorite functionality follows the same pattern as the favorite functionality, maintaining consistency in the event tracking approach. Error handling is properly implemented with explicit error capture.

web/core/components/pages/dropdowns/actions.tsx (1)

96-163: Well-implemented click tracking for page actions.

The refactoring correctly adds captureClick calls to all relevant page actions using appropriate element names from PROJECT_PAGE_TRACKER_ELEMENTS. The click tracking is consistently applied before the actual operations, maintaining the user experience while adding proper analytics.

web/core/components/project/member-list-item.tsx (1)

47-67: Proper success and error tracking implementation.

The refactoring correctly implements the new event tracking pattern with captureSuccess for successful operations and captureError for failures. The error object is properly passed to captureError, and the payload is appropriately simplified.

web/core/components/issues/issue-detail/issue-detail-quick-actions.tsx (2)

103-119: Excellent success and error tracking implementation.

The delete operation correctly implements the new event tracking pattern with captureSuccess for successful deletions and captureError in the catch block with proper error object handling. The simplified payload containing only the issue ID is appropriate.


127-137: Consistent archive operation tracking.

The archive operation follows the same correct pattern as the delete operation, with proper success and error tracking. The error handling maintains the existing user experience while adding proper analytics.

web/core/components/command-palette/command-palette.tsx (1)

8-8: LGTM: Clean refactoring to standardized event tracking

The refactoring from useEventTracker hook to direct captureClick helper function improves code clarity and consistency. Using the predefined COMMAND_PALETTE_TRACKER_ELEMENTS.COMMAND_PALETTE_SHORTCUT_KEY constant ensures consistent element naming across the application.

Also applies to: 15-16, 199-199

web/app/(all)/[workspaceSlug]/(projects)/header.tsx (1)

10-10: LGTM: Proper implementation of combined element and event tracking

The refactoring correctly uses captureElementAndEvent to track both the UI element interaction and the business event. The structured approach with separate element and event objects, along with predefined constants for naming consistency, is well-implemented.

Also applies to: 17-17, 41-49

web/core/components/issues/issue-modal/base.tsx (1)

5-5: LGTM: Comprehensive refactoring with improved error handling

The refactoring successfully transitions from hook-based event tracking to helper functions. Key improvements include:

  • Simplified payloads with essential identifiers only
  • Explicit error objects passed to captureError calls
  • Consistent usage of predefined event constants
  • Removal of unnecessary usePathname dependency

The changes maintain the same tracking coverage while improving code clarity and error reporting.

Also applies to: 14-16, 239-242, 254-258, 300-303, 312-316

web/ce/components/projects/create/root.tsx (1)

15-16: LGTM: Clean refactoring with appropriate payload structure

The transition from useEventTracker to direct helper functions is well-executed. Using identifier in the payload is appropriate for project creation tracking, and the overall structure follows the established pattern correctly.

Also applies to: 73-78

web/core/components/pages/modals/create-page-modal.tsx (2)

10-10: LGTM: Clean refactor to helper functions

The import of captureSuccess and captureError helper functions aligns with the new event tracking pattern across the codebase.


64-78: Well-implemented event tracking refactor

The refactor correctly:

  • Uses captureSuccess with simplified payload containing only the essential id field
  • Passes the caught error object directly to captureError for better error context
  • Maintains the same event names from PROJECT_PAGE_TRACKER_EVENTS.create

This follows the established pattern of the broader event tracking refactor.

web/core/components/issues/issue-layouts/list/headers/group-by-card.tsx (2)

8-8: Correct imports for new event tracking pattern

The imports of WORK_ITEM_TRACKER_EVENTS constants and captureClick helper function align with the standardized event tracking approach.

Also applies to: 17-17


134-134: Proper implementation of click tracking

The captureClick calls correctly use the elementName parameter with constants from WORK_ITEM_TRACKER_EVENTS for creating and adding existing work items. This replaces the previous setTrackElement approach with a more explicit and standardized method.

Also applies to: 142-142, 153-153

web/core/components/pages/modals/delete-page-modal.tsx (2)

11-11: Consistent import pattern for event tracking helpers

The import of captureError and captureSuccess follows the same pattern established across other page modal components.


47-52: Appropriate payload simplification for delete events

Both success and error tracking correctly use simplified payloads containing only the essential page id field. This maintains tracking functionality while reducing payload complexity, consistent with the broader refactor goals.

Also applies to: 65-70

web/core/components/modules/module-card-item.tsx (2)

16-16: Correct imports for unified event tracking

The import of MODULE_TRACKER_ELEMENTS constants and captureElementAndEvent helper function follows the new standardized approach for tracking both UI element interactions and business events.

Also applies to: 37-37


83-92: Well-structured unified event tracking implementation

The captureElementAndEvent calls correctly separate:

  • Element tracking: Using MODULE_TRACKER_ELEMENTS.CARD_ITEM to identify the UI component
  • Event tracking: Using MODULE_TRACKER_EVENTS.favorite/unfavorite with module ID and success state

This unified approach provides better context for analytics by linking UI interactions with business events.

Also applies to: 119-128

web/core/components/command-palette/actions/project-actions.tsx (2)

6-6: Clean transition to declarative event tracking

The import changes correctly replace the useEventTracker hook with constants for declarative tracking via data attributes, and retain only the necessary useCommandPalette hook.

Also applies to: 9-9


26-26: Proper implementation of declarative tracking attributes

The data-ph-element attributes correctly use constants from the centralized tracking elements:

  • CYCLE_TRACKER_ELEMENTS.COMMAND_PALETTE_ADD_ITEM for cycle creation
  • MODULE_TRACKER_ELEMENTS.COMMAND_PALETTE_ADD_ITEM for module creation
  • PROJECT_PAGE_TRACKER_ELEMENTS.COMMAND_PALETTE_CREATE_BUTTON for page creation

This declarative approach eliminates the need for imperative setTrackElement calls while maintaining consistent tracking.

Also applies to: 42-42, 73-73

web/core/components/cycles/delete-modal.tsx (1)

12-13: LGTM: Event tracking refactor looks good

The migration from useEventTracker hook to direct captureSuccess/captureError helper functions improves code clarity. The simplified payloads containing only essential identifiers (id) and explicit error handling are well-implemented.

Also applies to: 52-57, 69-75

web/core/components/issues/issue-layouts/kanban/headers/group-by-card.tsx (1)

8-8: LGTM: Consistent event tracking refactor

The migration to captureClick helper function with standardized WORK_ITEM_TRACKER_EVENTS constants follows the established pattern. The event tracking for create and add existing work item actions is properly implemented.

Also applies to: 16-16, 169-169, 177-177, 188-188

web/core/components/issues/issue-layouts/quick-add/root.tsx (1)

5-5: LGTM: Clean event tracking refactor

The removal of usePathname and migration to direct captureSuccess/captureError helper functions is well-executed. The simplified payloads with essential identifiers and enhanced error handling align with the refactoring goals.

Also applies to: 21-21, 136-146

web/core/components/inbox/modals/create-modal/create-root.tsx (1)

17-18: LGTM: Consistent with event tracking refactor

The migration to captureSuccess/captureError helper functions with simplified payloads is well-implemented. The form submission logic remains intact while event tracking becomes more explicit and focused on essential data.

Also applies to: 167-172, 181-187

web/core/components/home/widgets/empty-states/no-projects.tsx (1)

8-8: LGTM: Proper implementation of standardized event tracking

The addition of PROJECT_TRACKER_ELEMENTS constant and captureClick helper function follows the established refactoring pattern. The event tracking for the empty state create project button is correctly implemented.

Also applies to: 14-15, 56-56

web/core/components/issues/issue-layouts/spreadsheet/issue-column.tsx (3)

4-7: LGTM! Event tracking imports updated correctly.

The imports have been properly updated to use the new event tracking constants and helper functions, aligning with the broader refactoring effort.


49-54: Event tracking simplified appropriately.

The event tracking has been successfully refactored to use the new captureSuccess helper with the standardized WORK_ITEM_TRACKER_EVENTS.update constant. The payload simplification to only include the issue ID follows the new pattern correctly.


46-56: Verify onChange callback signature update across IssueColumn consumers

We didn’t find any direct usages of onChange with three parameters in the repo, but please manually confirm that all consumers of IssueColumn (and related column components) have been updated to the new two-parameter signature. In particular, review:

  • web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx (around line 374): the <IssueColumn onChange={…} /> invocation
  • web/core/components/issues/issue-layouts/spreadsheet/columns/sub-issue-column.tsx: any onChange prop assignments
  • Any other components importing and rendering IssueColumn or SpreadsheetSubIssueColumn

Ensure no callers are still expecting a third updates argument.

web/core/components/onboarding/tour/root.tsx (4)

8-15: Event tracking imports updated correctly.

The imports have been properly updated to use PRODUCT_TOUR_TRACKER_ELEMENTS for element tracking and captureClick helper function, replacing the previous hook-based approach.


115-117: Click tracking implemented correctly for start button.

The captureClick call with PRODUCT_TOUR_TRACKER_ELEMENTS.START_BUTTON follows the new tracking pattern correctly.


127-129: Click tracking implemented correctly for skip button.

The captureClick call with PRODUCT_TOUR_TRACKER_ELEMENTS.SKIP_BUTTON follows the new tracking pattern correctly.


178-180: Click tracking implemented correctly for create project button.

The captureClick call with PRODUCT_TOUR_TRACKER_ELEMENTS.CREATE_PROJECT_BUTTON follows the new tracking pattern correctly.

web/core/components/project/leave-project-modal.tsx (3)

17-18: Event tracking imports updated correctly.

The imports have been properly updated to use the new captureError and captureSuccess helper functions, replacing the previous hook-based approach.


67-72: Success event tracking implemented correctly.

The success case now uses captureSuccess with the appropriate event constant and simplified payload containing only the project ID.


75-81: Error event tracking enhanced with error object.

The error case now uses captureError and properly includes the caught error object, which will provide better debugging information for failed project leave operations.

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

8-18: Event tracking imports updated correctly.

The imports have been properly updated to include the new tracker constants and helper functions, replacing the previous hook-based approach.


60-65: Success event tracking simplified appropriately.

The success case now uses captureSuccess with simplified payload containing only the invited email addresses, which is the essential data needed for tracking.


73-79: Error event tracking enhanced with error object.

The error case now uses captureError and properly includes the caught error object along with the email payload, providing better debugging information.


128-135: Declarative tracking attribute added correctly.

The button now includes the data-ph-element attribute with the appropriate constant, enabling declarative event tracking for the add member action.

web/core/components/issues/issue-layouts/spreadsheet/columns/cycle-column.tsx (3)

3-10: Event tracking imports updated correctly.

The imports have been properly updated to remove unused usePathname and replace useEventTracker with the captureSuccess helper function.


33-38: Event tracking simplified appropriately.

The event tracking has been successfully refactored to use captureSuccess with the standardized constant and simplified payload containing only the issue ID.


40-40: useCallback dependencies updated correctly.

The dependency array has been appropriately updated to remove references to the old event tracking hook dependencies.

web/core/components/issues/issue-detail-widgets/attachments/helper.tsx (1)

3-3: LGTM! Clean event tracking refactor.

The refactoring successfully modernizes the event tracking approach by:

  • Replacing hook-based tracking with direct helper functions
  • Using standardized constants from @plane/constants
  • Simplifying payloads to essential identifiers
  • Improving error handling with explicit error objects
  • Correctly updating the dependency array

Also applies to: 8-9, 55-65, 78-87, 96-96

web/core/components/inbox/content/issue-root.tsx (1)

24-25: LGTM! Consistent event tracking modernization.

The changes align well with the broader refactoring pattern:

  • Successfully removes dependency on useEventTracker and usePathname hooks
  • Properly implements simplified error handling with explicit error objects
  • Uses standardized event constants for consistency
  • Maintains all existing functionality while improving the tracking architecture

Also applies to: 103-106, 114-118, 124-127, 134-138, 144-147, 150-154

web/core/components/modules/delete-module-modal.tsx (1)

14-16: LGTM! Proper event tracking refactor with improved error handling.

The module deletion event tracking has been successfully modernized:

  • Clean transition from hook-based to helper function approach
  • Proper error object inclusion in error tracking
  • Consistent payload structure with other components
  • Uses standardized MODULE_TRACKER_EVENTS constants

Also applies to: 55-58, 70-74

web/core/components/command-palette/command-modal.tsx (1)

11-17: LGTM! Proper migration to element-based event tracking.

The command palette tracking has been effectively modernized:

  • Correctly replaces setTrackElement calls with captureClick helper
  • Uses standardized element constants for consistent tracking identifiers
  • Maintains the same user experience while improving tracking architecture
  • Proper element names for both work item and project creation buttons

Also applies to: 37-38, 348-350, 368-368

web/core/components/project-states/options/delete.tsx (1)

7-7: LGTM! Comprehensive event tracking modernization with declarative support.

The state deletion tracking has been thoroughly updated:

  • Successfully migrates from hook-based to helper function approach
  • Preserves conditional tracking logic based on shouldTrackEvents
  • Adds data-ph-element attribute for declarative tracking support
  • Proper error handling with explicit error objects
  • Uses standardized constants for both events and elements

Also applies to: 12-12, 39-46, 51-58, 104-104

web/core/components/issues/issue-layouts/filters/applied-filters/roots/global-view-root.tsx (1)

14-14: LGTM! Event tracking refactoring follows consistent pattern.

The refactoring from useEventTracker hook to direct helper functions (captureSuccess, captureError) improves code clarity and error handling. The simplified payload containing only view_id is appropriate, and the explicit .catch() block ensures error cases are properly tracked.

Also applies to: 24-25, 110-128

web/app/(all)/accounts/forgot-password/page.tsx (1)

12-12: LGTM! Consistent event tracking refactoring with improved declarative approach.

The changes properly migrate from hook-based event tracking to direct helper functions. The addition of data-ph-element={AUTH_TRACKER_ELEMENTS.SIGNUP_FROM_FORGOT_PASSWORD} on the signup link follows the new declarative tracking pattern, which is cleaner than imperative onClick event tracking.

Also applies to: 19-20, 73-98, 128-128

web/core/components/issues/issue-layouts/empty-states/global-view.tsx (1)

4-4: LGTM! Event tracking migration follows established pattern.

The migration from setTrackElement to captureClick is consistent with the broader refactoring effort. The usage of WORK_ITEM_TRACKER_ELEMENTS.EMPTY_STATE_ADD_BUTTON.GLOBAL_VIEW constant ensures standardized element tracking across the application.

Also applies to: 10-11, 50-50, 70-70

web/core/components/onboarding/invite-members.tsx (1)

23-23: LGTM! Event tracking refactoring maintains consistency and improves user experience.

The migration to helper functions (captureSuccess, captureError) with simplified payloads containing only the workspace slug is clean and efficient. The addition of data-ph-element={MEMBER_TRACKER_ELEMENTS.ONBOARDING_INVITE_MEMBER} to the submit button supports the new declarative tracking approach.

Also applies to: 32-32, 311-332, 423-423

web/core/components/issues/issue-layouts/quick-action-dropdowns/project-issue.tsx (3)

8-13: LGTM: Clean import refactoring for event tracking

The import changes properly replace the useEventTracker hook with the new captureClick helper and add the necessary tracking constants. This aligns with the broader refactoring pattern across the codebase.

Also applies to: 20-21


106-112: LGTM: Proper event tracking wrapper for context menu items

The CONTEXT_MENU_ITEMS mapping correctly wraps each menu item's action with the tracking call, ensuring consistent event capture across all context menu interactions.


200-200: LGTM: Consistent event tracking implementation

The captureClick calls are properly placed before the original actions in both nested and regular menu item handlers, ensuring all quick action interactions are tracked consistently.

Also applies to: 238-238

web/core/components/project-states/create-update/update.tsx (3)

5-5: LGTM: Proper import refactoring for state tracking

The imports correctly replace the useEventTracker hook with the new helper functions and add the necessary event constants.

Also applies to: 11-11


34-43: LGTM: Simplified success event tracking

The captureSuccess call with the simplified payload containing only essential identifiers (state_group and id) is more focused and aligns with the refactoring goals.


66-74: LGTM: Consistent error tracking implementation

The error tracking correctly uses captureError with the same payload structure as the success case, maintaining consistency in the event data structure.

web/core/components/issues/issue-layouts/quick-action-dropdowns/all-issue.tsx (3)

8-8: LGTM: Consistent import refactoring

The import changes properly align with the event tracking refactoring pattern, using the appropriate constants and helper functions.

Also applies to: 15-16


85-91: LGTM: Proper event tracking for global view context

The context menu wrapping correctly uses WORK_ITEM_TRACKER_ELEMENTS.QUICK_ACTIONS.GLOBAL_VIEW, which is appropriate for the all-issues context.


180-180: LGTM: Consistent event tracking across menu interactions

The captureClick calls are properly implemented in both nested and regular menu item handlers, maintaining consistency with the project-issue component pattern.

Also applies to: 218-218

web/core/components/account/auth-forms/unique-code.tsx (4)

5-5: LGTM: Proper import refactoring for auth tracking

The imports correctly add the auth-specific tracking constants and helper functions, replacing the generic useEventTracker hook.

Also applies to: 12-12


63-78: LGTM: Simplified event tracking for code generation

The success and error tracking for new code requests is properly implemented with simplified payloads containing only the email. The event structure is consistent between success and error cases.


97-113: LGTM: Proper form submission tracking

The form submission tracking correctly uses captureSuccess on submit and captureError on error, with appropriate payloads including the first_time flag for new users.


169-169: LGTM: Proper UI element tracking attributes

The data-ph-element attributes are correctly added to the "Request New Code" button and submit button, using appropriate constants from AUTH_TRACKER_ELEMENTS.

Also applies to: 194-194

web/core/components/issues/issue-layouts/spreadsheet/columns/module-column.tsx (3)

4-4: LGTM: Clean import refactoring

The removal of usePathname and addition of event tracking constants and helper functions properly align with the refactoring goals. The pathname is no longer needed for event tracking.

Also applies to: 6-6, 12-12


43-48: LGTM: Simplified event tracking payload

The captureSuccess call with the minimized payload containing only the issue ID is more focused and removes unnecessary complexity from the event data.


50-50: LGTM: Updated dependency array

The dependency array correctly reflects the removal of pathname-related dependencies while maintaining the necessary dependencies for the callback function.

web/core/components/issues/issue-detail-widgets/sub-issues/helper.ts (1)

1-232: Event tracking refactoring looks good!

The migration from useEventTracker hook to direct captureSuccess and captureError helper functions is implemented correctly throughout the file. Event names are properly standardized using WORK_ITEM_TRACKER_EVENTS constants, and payloads are appropriately simplified to essential identifiers.

web/core/components/issues/issue-detail-widgets/relations/helper.tsx (1)

1-84: Clean event tracking refactor!

The event tracking changes are consistent with the overall refactoring pattern. Payloads are correctly simplified to include only the issue ID, and the dependency array is properly updated.

web/core/components/onboarding/profile-setup.tsx (1)

1-599: Event tracking migration implemented correctly!

The refactoring properly replaces the hook-based tracking with helper functions. The addition of captureView for form view tracking enhances analytics capabilities. Payloads appropriately include user personalization data (use_case and role).

web/core/components/issues/issue-layouts/quick-action-dropdowns/draft-issue.tsx (1)

83-90: Elegant implementation of click tracking for menu items!

The wrapper pattern for adding captureClick to menu items is clean and maintainable. Good consistency between context menu and custom menu implementations.

Also applies to: 114-134

web/core/components/account/auth-forms/password.tsx (1)

85-85: Good use of declarative tracking attributes!

The addition of data-ph-element attributes for the "forgot password" link and "sign in with unique code" button follows the new declarative tracking pattern correctly.

Also applies to: 307-307

web/core/components/onboarding/invitations.tsx (3)

5-5: Good addition of standardized constants.

The import of MEMBER_TRACKER_EVENTS and MEMBER_TRACKER_ELEMENTS aligns with the systematic refactor to use centralized event tracking constants.


15-16: Approve the event tracking refactor.

The replacement of useEventTracker with direct helper function imports (captureError, captureSuccess) is consistent with the broader codebase modernization effort.


117-117: Excellent addition of tracking element attribute.

The data-ph-element attribute using MEMBER_TRACKER_ELEMENTS.ONBOARDING_JOIN_WORKSPACE provides consistent UI element tracking.

web/core/components/project-states/create-update/create.tsx (4)

5-5: Good import standardization.

Adding STATE_TRACKER_EVENTS and STATE_GROUPS from constants aligns with the systematic refactor approach.


11-11: Approve the event tracking modernization.

Replacing useEventTracker with direct helper function imports is consistent with the codebase-wide refactor to a more explicit event tracking approach.


37-43: Well-simplified success event payload.

The payload now includes only essential data (state_group, id) which is appropriate for the new tracking approach. The use of STATE_TRACKER_EVENTS.create provides consistency.


54-59: Appropriate error event tracking.

The error tracking with minimal payload (state_group only) is consistent with the pattern where error events focus on the context rather than detailed data.

web/core/components/cycles/analytics-sidebar/sidebar-header.tsx (6)

3-3: Clean import optimization.

Removing unused useState import while retaining useEffect improves code cleanliness.


8-14: Excellent constant imports for tracking.

The comprehensive import of CYCLE_TRACKER_EVENTS, CYCLE_TRACKER_ELEMENTS, and permission constants provides all necessary tracking infrastructure.


22-23: Good refactor to helper functions.

Replacing useEventTracker with captureElementAndEvent aligns with the modernized event tracking approach.


64-64: Approve function signature simplification.

Removing the changedProperty parameter simplifies the function interface while maintaining functionality.


69-80: Well-structured event tracking implementation.

The captureElementAndEvent approach with separate element and event objects provides clear separation of concerns and consistent tracking structure.


132-132: All submitChanges calls now use the new single-argument signature.

I’ve verified each occurrence of submitChanges( across .ts and .tsx files, and all calls pass exactly one object parameter. No further updates are needed.

web/core/components/project/form.tsx (5)

6-6: Good standardization of imports.

Adding PROJECT_TRACKER_ELEMENTS and PROJECT_TRACKER_EVENTS from constants supports the unified tracking approach.


30-31: Approve the event tracking modernization.

Replacing useEventTracker with direct helper function imports (captureError, captureSuccess) follows the consistent refactor pattern across the codebase.


95-99: Well-simplified success tracking payload.

The payload now includes only the essential id field, which is appropriate for the streamlined tracking approach.


108-113: Consistent error tracking implementation.

The error tracking with minimal payload matches the pattern established in other components.


397-405: Excellent addition of tracking attribute.

The data-ph-element attribute using PROJECT_TRACKER_ELEMENTS.UPDATE_PROJECT_BUTTON enables declarative UI element tracking consistent with the new approach.

web/core/components/issues/issue-layouts/quick-action-dropdowns/archived-issue.tsx (6)

7-7: Good addition of tracking constants.

The import of WORK_ITEM_TRACKER_ELEMENTS provides standardized element naming for issue-related tracking.


9-9: Appropriate type import for context menu.

Adding TContextMenuItem type supports the new context menu tracking implementation.


15-16: Good refactor to helper function approach.

Replacing useEventTracker with captureClick follows the consistent modernization pattern across the codebase.


66-72: Well-implemented menu item tracking wrapper.

The CONTEXT_MENU_ITEMS array that wraps each menu item's onClick handler to include tracking before executing the original action is a clean approach to centralized tracking.


83-83: Correct usage of wrapped menu items.

Using CONTEXT_MENU_ITEMS instead of the original MENU_ITEMS ensures tracking is captured for context menu interactions.


103-103: Consistent tracking implementation for custom menu.

Adding captureClick after the menu item action ensures tracking consistency between context menu and custom menu interactions.

web/core/components/issues/issue-layouts/quick-action-dropdowns/cycle-issue.tsx (3)

8-21: LGTM: Clean import refactoring for event tracking

The replacement of useEventTracker hook with direct captureClick helper import aligns well with the standardized event tracking approach. The addition of WORK_ITEM_TRACKER_ELEMENTS constant ensures consistent element identification across the codebase.


100-106: LGTM: Effective wrapper pattern for context menu tracking

The CONTEXT_MENU_ITEMS array properly wraps the original menu items with captureClick calls while preserving the original functionality. This is a clean approach that maintains separation of concerns.


195-196: LGTM: Consistent event tracking implementation

The captureClick calls are correctly placed in both nested and regular menu item handlers, using the standardized WORK_ITEM_TRACKER_ELEMENTS.QUICK_ACTIONS.CYCLE element name for consistent tracking.

Also applies to: 233-234

web/core/components/issues/peek-overview/root.tsx (3)

14-15: LGTM: Appropriate helper function imports

The replacement of useEventTracker with direct captureSuccess and captureError imports aligns with the standardized event tracking refactor.


76-86: LGTM: Simplified and improved event tracking

The refactoring correctly:

  • Replaces captureIssueEvent with captureSuccess/captureError
  • Simplifies payloads to only include essential identifiers ({ id: issueId })
  • Explicitly passes error objects to captureError for better error tracking

This standardization improves consistency across the codebase.


278-278: LGTM: Dependency array correctly updated

The removal of event tracking related dependencies from the useMemo dependency array is appropriate since the tracking implementation no longer depends on those values.

web/core/components/issues/issue-detail/root.tsx (3)

16-17: LGTM: Consistent event tracking refactor

The import changes properly replace the useEventTracker hook with direct helper functions, maintaining consistency with the broader refactoring effort.


91-101: LGTM: Improved event tracking implementation

The refactoring correctly:

  • Uses captureSuccess for successful operations
  • Uses captureError with explicit error objects for failures
  • Simplifies payloads to include only the essential issue ID

This approach provides better error tracking while reducing payload complexity.


274-275: LGTM: Dependency array properly maintained

Adding issueId to the dependency array ensures the issueOperations object is properly recreated when the issue changes, which is important for the tracking functionality.

web/core/components/cycles/list/cycle-list-item-action.tsx (3)

9-15: LGTM: Comprehensive event tracking refactor

The import changes properly introduce:

  • CYCLE_TRACKER_ELEMENTS for standardized element identification
  • Direct helper functions replacing the useEventTracker hook

This aligns with the codebase-wide standardization effort.

Also applies to: 28-29


107-125: LGTM: Enhanced favorite/unfavorite event tracking

The refactored handlers now include:

  • Proper captureSuccess calls for successful operations
  • captureError calls with explicit error handling in .catch() blocks
  • Simplified payloads containing only the cycle ID

This improves error tracking and maintains consistent event payload structure.

Also applies to: 144-161


317-317: LGTM: Declarative element tracking

The addition of data-ph-element={CYCLE_TRACKER_ELEMENTS.LIST_ITEM} to the FavoriteStar component supports declarative event tracking and improves consistency with the new tracking approach.

web/core/components/issues/issue-layouts/properties/all-properties.tsx (4)

6-6: LGTM: Streamlined imports and event tracking

The removal of usePathname and replacement of useEventTracker with captureSuccess helper aligns with the simplified event tracking approach that no longer requires routing context.

Also applies to: 37-38


59-59: LGTM: Props interface simplification

Removing the activeLayout prop is appropriate since the new event tracking approach uses simplified payloads that don't require layout context information.


110-113: LGTM: Consistent event tracking pattern

All property update handlers correctly use:

  • captureSuccess with WORK_ITEM_TRACKER_EVENTS.update event name
  • Simplified payloads containing only { id: issue.id }

This maintains consistency across all issue property update operations.

Also applies to: 120-123, 130-133


165-165: LGTM: Dependency arrays properly updated

The removal of unused variables from dependency arrays ensures the callbacks are only recreated when their actual dependencies change, improving performance.

Also applies to: 179-179

web/app/(all)/invitations/page.tsx (4)

12-12: LGTM! Event tracking refactor looks good.

The addition of new constants and helper functions from the refactored event tracking system is well-structured. The imports correctly include the required tracker events, elements, and helper functions.

Also applies to: 25-26


88-99: Improved event tracking with simplified payload.

The refactor correctly replaces the previous event tracking approach with the new captureSuccess helper. The simplified payload containing only member_id is more focused and aligns with the standardized approach across the codebase.


116-123: Error tracking enhanced with explicit error object.

Good improvement - the new captureError helper now explicitly includes the error object in the payload, which will provide better debugging information compared to the previous approach.


200-200: Declarative element tracking added.

The addition of the data-ph-element attribute using the standardized constant is a good practice for declarative event tracking. This will enable automatic tracking of user interactions with the accept button.

web/core/components/modules/analytics-sidebar/root.tsx (3)

15-16: Event tracking modernization implemented correctly.

The refactor properly replaces the old useEventTracker hook with the new centralized helper functions. The import changes align with the standardized event tracking approach across the codebase.

Also applies to: 27-30


75-84: Enhanced element tracking with explicit element identification.

The new captureElementAndEvent approach is more structured, explicitly identifying the UI element (RIGHT_SIDEBAR) along with the event. This provides better context for analytics compared to the previous generic approach.


86-92: Simplified and consistent error/success tracking.

The refactor correctly implements the new pattern:

  • captureSuccess and captureError provide clear state distinction
  • Simplified payloads with only module ID reduce data overhead
  • Error objects are properly included in error tracking
  • Consistent implementation across all async operations

This is a significant improvement in tracking clarity and standardization.

Also applies to: 100-114, 121-135, 140-162

web/core/components/issues/issue-layouts/quick-action-dropdowns/module-issue.tsx (3)

8-16: Event tracking imports updated correctly.

The refactor properly adds the new tracking constants and helper function while maintaining the existing functionality. The import changes align with the standardized event tracking approach.

Also applies to: 20-22


100-106: Context menu tracking implemented well.

The wrapper pattern for context menu items correctly captures click events before executing the original action. Using WORK_ITEM_TRACKER_ELEMENTS.QUICK_ACTIONS.MODULE provides clear context about the interaction source.


191-196: Consistent click tracking across menu types.

Good implementation - both nested submenu items and regular menu items are consistently wrapped with captureClick calls. This ensures comprehensive tracking of user interactions while preserving the original click handlers.

Also applies to: 225-233

web/core/components/cycles/quick-actions.tsx (3)

9-14: Cycle tracking refactor implemented correctly.

The import changes properly add the new cycle-specific tracking constants and helper functions. This maintains consistency with the broader event tracking refactor across the codebase.

Also applies to: 22-24


90-96: Comprehensive cycle restore tracking.

Excellent implementation of success and error tracking for the cycle restore operation. The tracking provides clear visibility into operation outcomes with appropriate event names and simplified payloads containing the cycle ID.

Also applies to: 104-110


167-175: Consistent click tracking across menu interfaces.

Good approach - creating wrapped context menu items and adding click tracking to custom menu items ensures comprehensive user interaction tracking. The use of appropriate element constants (CONTEXT_MENU vs QUICK_ACTIONS) provides clear context differentiation.

Also applies to: 215-215, 225-228

web/core/components/modules/modal.tsx (3)

14-18: Event tracking helpers imported correctly.

The refactor properly replaces the old event tracking approach with the new centralized helper functions. The import changes align with the standardized pattern used across the codebase.


67-83: Simplified and enhanced module operation tracking.

The new tracking implementation is well-structured:

  • Clear separation of success and error states
  • Simplified payloads with only essential module ID
  • Error objects properly included in error tracking
  • Consistent pattern across both create and update operations

This improves analytics clarity while reducing payload complexity.

Also applies to: 99-115


86-86: Function signatures simplified appropriately.

The removal of the dirtyFields parameter simplifies the API while maintaining functionality. This aligns with the broader refactor's goal of streamlining event tracking and reducing complexity.

Also applies to: 118-126

web/core/components/cycles/modal.tsx (6)

15-16: LGTM! Clean refactoring to direct helper imports.

The migration from useEventTracker hook to direct helper function imports (captureError, captureSuccess) simplifies the event tracking implementation and improves code clarity.


66-71: LGTM! Simplified payload structure is more focused.

The event payload now contains only the essential id field instead of spreading the entire response object, which is more efficient and reduces unnecessary data transmission.


79-83: LGTM! Improved error handling with direct error object capture.

The refactored error handling now passes the error object directly to captureError, which provides better error context for debugging compared to the previous approach.


86-115: LGTM! Consistent refactoring pattern applied to update cycle functionality.

The update cycle function follows the same refactoring pattern as create cycle, maintaining consistency across the codebase with simplified payloads and improved error handling.


127-127: LGTM! Function signature simplification removes unused parameter.

Removing the dirtyFields parameter simplifies the function signature and aligns with the overall refactoring effort to streamline event tracking.


151-151: LGTM! Function call updated to match simplified signature.

The function call correctly removes the dirtyFields parameter, maintaining consistency with the updated function signature.

web/core/components/modules/quick-actions.tsx (5)

9-14: LGTM! Comprehensive import of new event tracking constants.

The addition of MODULE_TRACKER_ELEMENTS and MODULE_TRACKER_EVENTS constants supports the new declarative event tracking approach and provides better organization of tracking identifiers.


22-24: LGTM! Clean migration to helper-based event tracking.

Replacing the useEventTracker hook with direct imports of captureClick, captureSuccess, and captureError helpers simplifies the component and aligns with the new event tracking architecture.


88-105: LGTM! Improved event tracking with proper error handling.

The refactored restore module functionality now uses the new helper functions with:

  • Simplified success payload containing only essential id field
  • Direct error object capture for better debugging context
  • Consistent event naming using the new constants

160-168: LGTM! Enhanced context menu with click tracking.

The wrapper function for context menu items properly captures click events before executing actions, providing better user interaction analytics while maintaining the original functionality.


201-204: LGTM! Consistent click tracking for quick actions.

The quick action menu items now include proper click tracking using the appropriate element constant, maintaining consistency with the context menu implementation.

packages/constants/src/event-tracker/core.ts (1)

1-271: LGTM! Excellent refactoring to a constants-based event tracking system.

This comprehensive refactoring brings several benefits:

Strengths:

  • Clear separation: Events (actions) vs Elements (UI components) are well-organized
  • Consistent naming: All constants follow a predictable pattern
  • Domain organization: Logical grouping by feature areas (workspace, project, cycle, etc.)
  • Type safety: Proper use of as const for literal types where needed
  • Maintainability: Simple string constants are easier to maintain than complex payload builders

Well-designed structure:

  • Hierarchical organization for complex domains (e.g., WORK_ITEM_TRACKER_EVENTS.attachment.add)
  • Comprehensive coverage of UI interaction points
  • Granular tracking capabilities with specific element identifiers

This new architecture should significantly improve event tracking consistency across the application while reducing complexity.

@sriramveeraghanta sriramveeraghanta merged commit cfe169c into preview Jul 2, 2025
2 of 5 checks passed
@sriramveeraghanta sriramveeraghanta deleted the refactor-event-trackers branch July 2, 2025 09:53
lifeiscontent pushed a commit that referenced this pull request Aug 18, 2025
* feat: event tracker helper

* feat: track click events for `data-ph-element`

* fix: handled click events

* fix: handled name

* chore: tracker element updates

* chore: remove export

* chore: tracker element type

* chore: track element and event helper.

* chore: minor improvements

* chore: minor refactors

* fix: workspace events

* fix: added slug

* fix: changes nomenclature

* fix: nomenclature

* chore: update event tracker helper types

* fix: data id

* refactor: cycle events (#7290)

* chore: update event tracker helper types

* refactor: cycle events

* refactor: cycle events

* refactor: cycle event tracker

* chore: update tracker elements

* chore: check for closest element with data-ph-element attribute

---------

Co-authored-by: Prateek Shourya <prateekshourya@Prateeks-MacBook-Pro.local>

* Refactor module events (#7291)

* chore: update event tracker helper types

* refactor: cycle events

* refactor: cycle events

* refactor: cycle event tracker

* refactor: module tracker event and element

* chore: update tracker element

* chore: revert unnecessary changes

---------

Co-authored-by: Prateek Shourya <prateekshourya@Prateeks-MacBook-Pro.local>

* refactor: global views, product tour, notifications, onboarding, users and sidebar related events

* chore: member tracker events (#7302)

* chore: member-tracker-events

* fix: constants

* refactor: update event tracker constants

* refactor: auth related event trackers (#7306)

* Chore: state events (#7307)

* chore: state events

* fix: refactor

* chore: project events (#7305)

* chore: project-events

* fix: refactor

* fix: removed hardcoded values

* fix: github redirection event

* chore: project page tracker events (#7304)

* added events for most page events

* refactor: simplify lock button event handling in PageLockControl

---------

Co-authored-by: Palanikannan M <akashmalinimurugu@gmail.com>
Co-authored-by: M. Palanikannan <73993394+Palanikannan1437@users.noreply.github.com>

* chore: minor cleanup and import fixes

* refactor: added tracker elements for buttons (#7308)

Co-authored-by: Prateek Shourya <prateekshourya29@gmail.com>

* fix: event type

* refactor: posthog group event

* chore: removed instances of event tracker (#7309)

* refactor: remove event tracker stores and hooks

* refactor: remove event tracker store

* fix: build errors

* clean up event tracker payloads

* fix: coderabbit suggestions

---------

Co-authored-by: Prateek Shourya <prateekshourya@Prateeks-MacBook-Pro.local>
Co-authored-by: Prateek Shourya <prateekshourya29@gmail.com>
Co-authored-by: Palanikannan M <akashmalinimurugu@gmail.com>
Co-authored-by: M. Palanikannan <73993394+Palanikannan1437@users.noreply.github.com>
Co-authored-by: Vamsi Krishna <46787868+vamsikrishnamathala@users.noreply.github.com>
@coderabbitai coderabbitai bot mentioned this pull request Dec 30, 2025
1 task
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.

6 participants