[WEB-4423] refactor: event trackers#7289
Conversation
…e/plane into fix-workspace-events
fix: workspace events
|
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. |
|
Caution Review failedThe pull request is closed. WalkthroughThis 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
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
Possibly related PRs
Suggested labels
Suggested reviewers
Poem
📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (1)
✨ Finishing Touches
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed 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)
Other keywords and placeholders
CodeRabbit Configuration File (
|
* 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>
…into refactor-event-trackers
* 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>
…into refactor-event-trackers
…s and sidebar related events
refactor: global views, product tour, notifications, onboarding, users and sidebar related events
* chore: member-tracker-events * fix: constants
* 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>
|
Pull Request Linked with Plane Work Items Comment Automatically Generated by Plane |
There was a problem hiding this comment.
Actionable comments posted: 5
🔭 Outside diff range comments (1)
web/core/components/cycles/delete-modal.tsx (1)
78-84: Remove redundant empty catch blockBased 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-elementstring for both confirmation modal (insideDeleteWorkspaceModal) and this surface button could make funnel analysis harder.
Optionally append a suffix like_CTAhere 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_ELEMENTSaccordingly.web/ce/components/pages/header/lock-control.tsx (1)
10-10: Remove unused import.The
captureClickfunction is imported but never used in this component. Since the tracking is now handled declaratively via thedata-ph-elementattributes, 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
anytyping 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
📒 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_ELEMENTSimport and thedata-ph-elementattribute 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
captureClickcall 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-elementattribute withGLOBAL_VIEW_TRACKER_ELEMENTS.RIGHT_HEADER_ADD_BUTTONis 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-elementattribute. The removal ofuseEventTrackerfrom imports and addition ofWORK_ITEM_TRACKER_ELEMENTS.HEADER_ADD_BUTTON.WORK_ITEMSfollows 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-elementattribute withWORK_ITEM_TRACKER_ELEMENTS.HEADER_ADD_BUTTON.PROJECT_VIEWcorrectly 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-elementattributes are properly added to both lock buttons using the standardized constant fromPROJECT_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:
- Adding the
PROJECT_TRACKER_ELEMENTSimport from constants- Adding the
data-ph-elementattribute to the create page button using the standardized constantThis 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:
captureSuccessis called after successful archival with the cycle IDcaptureErroris called in the catch block with the cycle ID- Both use the standardized
CYCLE_TRACKER_EVENTS.archiveevent name- 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-elementattribute is properly added to the create work item button using the context-specific constantWORK_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:
MEMBER_TRACKER_ELEMENTSimport added to the constants importdata-ph-elementattribute added to the invite member button using the standardizedHEADER_ADD_BUTTONconstantThis 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 (
setTrackElementcalls) to declarative tracking usingdata-ph-elementattributes. 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
setTrackElementtocaptureClickprovides better type safety and consistency. Using the standardizedWORK_ITEM_TRACKER_ELEMENTS.EMPTY_STATE_ADD_BUTTON.CYCLEconstant 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
captureClickwith the appropriateWORK_ITEM_TRACKER_ELEMENTS.EMPTY_STATE_ADD_BUTTON.PROJECT_VIEWconstant 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-elementattribute withMODULE_TRACKER_ELEMENTS.RIGHT_HEADER_ADD_BUTTONfollows 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
useEventTrackerhook 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
useEventTrackerhook with thecaptureClickhelper 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
useEventTrackerapproach with a declarativedata-ph-elementattribute 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
useEventTrackerhook to declarative data attributes is well-executed:
- Proper import of
AUTH_TRACKER_ELEMENTSfrom constants- Removal of unused
useEventTrackerhook- Addition of
data-ph-elementattribute for tracking navigation to sign-upAlso 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_ELEMENTSconstants- Appropriate import of
captureClickhelper function- Removal of unused
useEventTrackerhook- Proper addition of
data-ph-elementattribute withCREATE_HEADER_BUTTONconstantAlso 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_ELEMENTSconstants- Removal of unused
useEventTrackerhook- Addition of
data-ph-elementattribute for empty state tracking usingEMPTY_STATE_ADD_BUTTONconstantAlso 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_ELEMENTSconstants- Correct import of
captureClickhelper function- Removal of unused
useEventTrackerhook- Proper replacement of
setTrackElementwithcaptureClickusing structured element nameAlso 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_EVENTSconstants for event names- Correct import of
captureClickhelper function- Removal of unused
useEventTrackerhook- Proper replacement of
setTrackElementcalls withcaptureClickcalls using structured event names for both create and add existing actionsAlso applies to: 11-12, 56-56, 62-62
web/app/(all)/sign-up/page.tsx (1)
9-9: LGTM: Clean refactoring to declarative event trackingThe changes successfully replace the hook-based event tracking with a declarative approach using
data-ph-elementattributes and standardized constants fromAUTH_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 refactorThe import changes correctly add the necessary constants and helper functions while removing the deprecated
useEventTrackerhook. This supports the transition to the new event tracking approach.Also applies to: 19-20
76-79: LGTM: Simplified success tracking payloadThe refactoring to use
captureSuccesswith a simplified payload containing only the essentialslugidentifier aligns with the broader simplification of event tracking across the codebase.
84-88: LGTM: Improved error tracking with explicit Error objectThe error handling is well-implemented with:
- Consistent use of
captureErrorhelper- Simplified payload structure
- Explicit
Errorobject creation for better error context
285-294: LGTM: Consistent button tracking implementationThe addition of the
data-ph-elementattribute usingWORKSPACE_TRACKER_ELEMENTS.ONBOARDING_CREATE_WORKSPACE_BUTTONfollows the established pattern for declarative element tracking.web/core/components/home/root.tsx (2)
4-21: LGTM: Improved import organizationThe 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 helperThe refactoring from
captureEventtocaptureSuccesswith a simplified payload structure containing only the essentialuser_idis 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 trackingThe import changes correctly add the necessary
PROJECT_TRACKER_ELEMENTSconstants andcaptureClickhelper function while removing the deprecateduseEventTrackerhook.Also applies to: 15-16
205-209: LGTM: Comprehensive button tracking implementationThe button tracking implementation is well-executed with:
- Declarative tracking via
data-ph-elementattribute usingEMPTY_STATE_CREATE_PROJECT_BUTTON- Imperative tracking via
captureClickcall withCREATE_PROJECT_JIRA_IMPORT_DETAIL_PAGE- Proper element name constants from
PROJECT_TRACKER_ELEMENTSweb/core/components/pages/pages-list-main-content.tsx (2)
4-4: LGTM: Proper import additions for page trackingThe import additions correctly add the necessary
PROJECT_PAGE_TRACKER_ELEMENTSconstants andcaptureClickhelper function to support the new event tracking functionality.Also applies to: 10-10
67-67: LGTM: Consistent tracking across all empty statesThe
captureClickcalls are properly implemented across all three empty state variants (general, public, private) using the standardizedEMPTY_STATE_CREATE_BUTTONelement 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_BUTTONfollows 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
captureEventtocaptureSuccessis well-executed. The payload is appropriately simplified to include only essential user identification data, and the use ofUSER_TRACKER_EVENTS.onboarding_completeprovides 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
setTrackElementwithcaptureClickusingWORK_ITEM_TRACKER_ELEMENTS.EMPTY_STATE_ADD_BUTTON.MODULEmaintains 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 removingdirtyFieldsAll usages of
<CycleForm>have been updated to pass a handler that only acceptsformData:
- web/core/components/cycles/modal.tsx:
•const handleFormSubmit = async (formData: Partial<ICycle>) => { … }
• Passed as<CycleForm handleFormSubmit={handleFormSubmit} … />Removing the unused
dirtyFieldsparameter is safe.web/core/components/project/card-list.tsx (1)
69-69: Consistent event tracking migration maintained.The replacement of
setTrackElement("Project empty state")withcaptureClick({ 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
useEventTrackerapproach with the new helper functions. The success path usescaptureElementAndEventwith proper element and event structure, while the error path usescaptureErrorwith 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
captureClickcalls to all relevant page actions using appropriate element names fromPROJECT_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
captureSuccessfor successful operations andcaptureErrorfor failures. The error object is properly passed tocaptureError, 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
captureSuccessfor successful deletions andcaptureErrorin 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 trackingThe refactoring from
useEventTrackerhook to directcaptureClickhelper function improves code clarity and consistency. Using the predefinedCOMMAND_PALETTE_TRACKER_ELEMENTS.COMMAND_PALETTE_SHORTCUT_KEYconstant 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 trackingThe refactoring correctly uses
captureElementAndEventto track both the UI element interaction and the business event. The structured approach with separateelementandeventobjects, 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 handlingThe 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
captureErrorcalls- Consistent usage of predefined event constants
- Removal of unnecessary
usePathnamedependencyThe 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 structureThe transition from
useEventTrackerto direct helper functions is well-executed. Usingidentifierin 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 functionsThe import of
captureSuccessandcaptureErrorhelper functions aligns with the new event tracking pattern across the codebase.
64-78: Well-implemented event tracking refactorThe refactor correctly:
- Uses
captureSuccesswith simplified payload containing only the essentialidfield- Passes the caught error object directly to
captureErrorfor better error context- Maintains the same event names from
PROJECT_PAGE_TRACKER_EVENTS.createThis 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 patternThe imports of
WORK_ITEM_TRACKER_EVENTSconstants andcaptureClickhelper function align with the standardized event tracking approach.Also applies to: 17-17
134-134: Proper implementation of click trackingThe
captureClickcalls correctly use theelementNameparameter with constants fromWORK_ITEM_TRACKER_EVENTSfor creating and adding existing work items. This replaces the previoussetTrackElementapproach 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 helpersThe import of
captureErrorandcaptureSuccessfollows the same pattern established across other page modal components.
47-52: Appropriate payload simplification for delete eventsBoth success and error tracking correctly use simplified payloads containing only the essential page
idfield. 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 trackingThe import of
MODULE_TRACKER_ELEMENTSconstants andcaptureElementAndEventhelper 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 implementationThe
captureElementAndEventcalls correctly separate:
- Element tracking: Using
MODULE_TRACKER_ELEMENTS.CARD_ITEMto identify the UI component- Event tracking: Using
MODULE_TRACKER_EVENTS.favorite/unfavoritewith module ID and success stateThis 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 trackingThe import changes correctly replace the
useEventTrackerhook with constants for declarative tracking via data attributes, and retain only the necessaryuseCommandPalettehook.Also applies to: 9-9
26-26: Proper implementation of declarative tracking attributesThe
data-ph-elementattributes correctly use constants from the centralized tracking elements:
CYCLE_TRACKER_ELEMENTS.COMMAND_PALETTE_ADD_ITEMfor cycle creationMODULE_TRACKER_ELEMENTS.COMMAND_PALETTE_ADD_ITEMfor module creationPROJECT_PAGE_TRACKER_ELEMENTS.COMMAND_PALETTE_CREATE_BUTTONfor page creationThis declarative approach eliminates the need for imperative
setTrackElementcalls 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 goodThe migration from
useEventTrackerhook to directcaptureSuccess/captureErrorhelper 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 refactorThe migration to
captureClickhelper function with standardizedWORK_ITEM_TRACKER_EVENTSconstants 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 refactorThe removal of
usePathnameand migration to directcaptureSuccess/captureErrorhelper 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 refactorThe migration to
captureSuccess/captureErrorhelper 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 trackingThe addition of
PROJECT_TRACKER_ELEMENTSconstant andcaptureClickhelper 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
captureSuccesshelper with the standardizedWORK_ITEM_TRACKER_EVENTS.updateconstant. The payload simplification to only include the issue ID follows the new pattern correctly.
46-56: Verify onChange callback signature update across IssueColumn consumersWe didn’t find any direct usages of
onChangewith three parameters in the repo, but please manually confirm that all consumers ofIssueColumn(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={…} />invocationweb/core/components/issues/issue-layouts/spreadsheet/columns/sub-issue-column.tsx: anyonChangeprop assignments- Any other components importing and rendering
IssueColumnorSpreadsheetSubIssueColumnEnsure no callers are still expecting a third
updatesargument.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_ELEMENTSfor element tracking andcaptureClickhelper function, replacing the previous hook-based approach.
115-117: Click tracking implemented correctly for start button.The
captureClickcall withPRODUCT_TOUR_TRACKER_ELEMENTS.START_BUTTONfollows the new tracking pattern correctly.
127-129: Click tracking implemented correctly for skip button.The
captureClickcall withPRODUCT_TOUR_TRACKER_ELEMENTS.SKIP_BUTTONfollows the new tracking pattern correctly.
178-180: Click tracking implemented correctly for create project button.The
captureClickcall withPRODUCT_TOUR_TRACKER_ELEMENTS.CREATE_PROJECT_BUTTONfollows 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
captureErrorandcaptureSuccesshelper functions, replacing the previous hook-based approach.
67-72: Success event tracking implemented correctly.The success case now uses
captureSuccesswith 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
captureErrorand 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
captureSuccesswith 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
captureErrorand 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-elementattribute 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
usePathnameand replaceuseEventTrackerwith thecaptureSuccesshelper function.
33-38: Event tracking simplified appropriately.The event tracking has been successfully refactored to use
captureSuccesswith 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
useEventTrackerandusePathnamehooks- 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_EVENTSconstantsAlso 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
setTrackElementcalls withcaptureClickhelper- 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-elementattribute 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
useEventTrackerhook to direct helper functions (captureSuccess,captureError) improves code clarity and error handling. The simplified payload containing onlyview_idis 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 imperativeonClickevent 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
setTrackElementtocaptureClickis consistent with the broader refactoring effort. The usage ofWORK_ITEM_TRACKER_ELEMENTS.EMPTY_STATE_ADD_BUTTON.GLOBAL_VIEWconstant 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 ofdata-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 trackingThe import changes properly replace the
useEventTrackerhook with the newcaptureClickhelper 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 itemsThe
CONTEXT_MENU_ITEMSmapping 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 implementationThe
captureClickcalls 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 trackingThe imports correctly replace the
useEventTrackerhook with the new helper functions and add the necessary event constants.Also applies to: 11-11
34-43: LGTM: Simplified success event trackingThe
captureSuccesscall with the simplified payload containing only essential identifiers (state_groupandid) is more focused and aligns with the refactoring goals.
66-74: LGTM: Consistent error tracking implementationThe error tracking correctly uses
captureErrorwith 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 refactoringThe 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 contextThe 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 interactionsThe
captureClickcalls 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 trackingThe imports correctly add the auth-specific tracking constants and helper functions, replacing the generic
useEventTrackerhook.Also applies to: 12-12
63-78: LGTM: Simplified event tracking for code generationThe 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 trackingThe form submission tracking correctly uses
captureSuccesson submit andcaptureErroron error, with appropriate payloads including thefirst_timeflag for new users.
169-169: LGTM: Proper UI element tracking attributesThe
data-ph-elementattributes are correctly added to the "Request New Code" button and submit button, using appropriate constants fromAUTH_TRACKER_ELEMENTS.Also applies to: 194-194
web/core/components/issues/issue-layouts/spreadsheet/columns/module-column.tsx (3)
4-4: LGTM: Clean import refactoringThe removal of
usePathnameand 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 payloadThe
captureSuccesscall 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 arrayThe 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
useEventTrackerhook to directcaptureSuccessandcaptureErrorhelper functions is implemented correctly throughout the file. Event names are properly standardized usingWORK_ITEM_TRACKER_EVENTSconstants, 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
captureViewfor form view tracking enhances analytics capabilities. Payloads appropriately include user personalization data (use_caseandrole).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
captureClickto 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-elementattributes 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_EVENTSandMEMBER_TRACKER_ELEMENTSaligns with the systematic refactor to use centralized event tracking constants.
15-16: Approve the event tracking refactor.The replacement of
useEventTrackerwith 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-elementattribute usingMEMBER_TRACKER_ELEMENTS.ONBOARDING_JOIN_WORKSPACEprovides consistent UI element tracking.web/core/components/project-states/create-update/create.tsx (4)
5-5: Good import standardization.Adding
STATE_TRACKER_EVENTSandSTATE_GROUPSfrom constants aligns with the systematic refactor approach.
11-11: Approve the event tracking modernization.Replacing
useEventTrackerwith 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 ofSTATE_TRACKER_EVENTS.createprovides consistency.
54-59: Appropriate error event tracking.The error tracking with minimal payload (
state_grouponly) 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
useStateimport while retaininguseEffectimproves 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
useEventTrackerwithcaptureElementAndEventaligns with the modernized event tracking approach.
64-64: Approve function signature simplification.Removing the
changedPropertyparameter simplifies the function interface while maintaining functionality.
69-80: Well-structured event tracking implementation.The
captureElementAndEventapproach with separate element and event objects provides clear separation of concerns and consistent tracking structure.
132-132: AllsubmitChangescalls now use the new single-argument signature.I’ve verified each occurrence of
submitChanges(across.tsand.tsxfiles, 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_ELEMENTSandPROJECT_TRACKER_EVENTSfrom constants supports the unified tracking approach.
30-31: Approve the event tracking modernization.Replacing
useEventTrackerwith 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
idfield, 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-elementattribute usingPROJECT_TRACKER_ELEMENTS.UPDATE_PROJECT_BUTTONenables 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_ELEMENTSprovides standardized element naming for issue-related tracking.
9-9: Appropriate type import for context menu.Adding
TContextMenuItemtype supports the new context menu tracking implementation.
15-16: Good refactor to helper function approach.Replacing
useEventTrackerwithcaptureClickfollows the consistent modernization pattern across the codebase.
66-72: Well-implemented menu item tracking wrapper.The
CONTEXT_MENU_ITEMSarray that wraps each menu item'sonClickhandler 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_ITEMSinstead of the originalMENU_ITEMSensures tracking is captured for context menu interactions.
103-103: Consistent tracking implementation for custom menu.Adding
captureClickafter 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 trackingThe replacement of
useEventTrackerhook with directcaptureClickhelper import aligns well with the standardized event tracking approach. The addition ofWORK_ITEM_TRACKER_ELEMENTSconstant ensures consistent element identification across the codebase.
100-106: LGTM: Effective wrapper pattern for context menu trackingThe
CONTEXT_MENU_ITEMSarray properly wraps the original menu items withcaptureClickcalls while preserving the original functionality. This is a clean approach that maintains separation of concerns.
195-196: LGTM: Consistent event tracking implementationThe
captureClickcalls are correctly placed in both nested and regular menu item handlers, using the standardizedWORK_ITEM_TRACKER_ELEMENTS.QUICK_ACTIONS.CYCLEelement name for consistent tracking.Also applies to: 233-234
web/core/components/issues/peek-overview/root.tsx (3)
14-15: LGTM: Appropriate helper function importsThe replacement of
useEventTrackerwith directcaptureSuccessandcaptureErrorimports aligns with the standardized event tracking refactor.
76-86: LGTM: Simplified and improved event trackingThe refactoring correctly:
- Replaces
captureIssueEventwithcaptureSuccess/captureError- Simplifies payloads to only include essential identifiers (
{ id: issueId })- Explicitly passes error objects to
captureErrorfor better error trackingThis standardization improves consistency across the codebase.
278-278: LGTM: Dependency array correctly updatedThe removal of event tracking related dependencies from the
useMemodependency 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 refactorThe import changes properly replace the
useEventTrackerhook with direct helper functions, maintaining consistency with the broader refactoring effort.
91-101: LGTM: Improved event tracking implementationThe refactoring correctly:
- Uses
captureSuccessfor successful operations- Uses
captureErrorwith 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 maintainedAdding
issueIdto the dependency array ensures theissueOperationsobject 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 refactorThe import changes properly introduce:
CYCLE_TRACKER_ELEMENTSfor standardized element identification- Direct helper functions replacing the
useEventTrackerhookThis aligns with the codebase-wide standardization effort.
Also applies to: 28-29
107-125: LGTM: Enhanced favorite/unfavorite event trackingThe refactored handlers now include:
- Proper
captureSuccesscalls for successful operationscaptureErrorcalls 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 trackingThe addition of
data-ph-element={CYCLE_TRACKER_ELEMENTS.LIST_ITEM}to theFavoriteStarcomponent 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 trackingThe removal of
usePathnameand replacement ofuseEventTrackerwithcaptureSuccesshelper aligns with the simplified event tracking approach that no longer requires routing context.Also applies to: 37-38
59-59: LGTM: Props interface simplificationRemoving the
activeLayoutprop is appropriate since the new event tracking approach uses simplified payloads that don't require layout context information.
110-113: LGTM: Consistent event tracking patternAll property update handlers correctly use:
captureSuccesswithWORK_ITEM_TRACKER_EVENTS.updateevent 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 updatedThe 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
captureSuccesshelper. The simplified payload containing onlymember_idis more focused and aligns with the standardized approach across the codebase.
116-123: Error tracking enhanced with explicit error object.Good improvement - the new
captureErrorhelper 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-elementattribute 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
useEventTrackerhook 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
captureElementAndEventapproach 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:
captureSuccessandcaptureErrorprovide 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.MODULEprovides 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
captureClickcalls. 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_MENUvsQUICK_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
dirtyFieldsparameter 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
useEventTrackerhook 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
idfield 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
dirtyFieldsparameter 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
dirtyFieldsparameter, 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_ELEMENTSandMODULE_TRACKER_EVENTSconstants 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
useEventTrackerhook with direct imports ofcaptureClick,captureSuccess, andcaptureErrorhelpers 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
idfield- 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 constfor 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.
web/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx
Outdated
Show resolved
Hide resolved
* 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>
Description
Type of Change
Screenshots and Media (if applicable)
Test Scenarios
References
Summary by CodeRabbit
New Features
Refactor
Style
Chores