From 806619d73f886a205c5580fb0dd5dc4ae3eeadc5 Mon Sep 17 00:00:00 2001 From: Vamsi Krishna <46787868+vamsikrishnamathala@users.noreply.github.com> Date: Wed, 6 Aug 2025 22:29:55 +0530 Subject: [PATCH] [WEB-4645]chore: added event trackers for labels #7552 --- .../labels/create-update-label-inline.tsx | 36 +++++++++++++++++-- .../components/labels/delete-label-modal.tsx | 18 ++++++++++ .../labels/project-setting-label-group.tsx | 12 ++++++- 3 files changed, 62 insertions(+), 4 deletions(-) diff --git a/apps/web/core/components/labels/create-update-label-inline.tsx b/apps/web/core/components/labels/create-update-label-inline.tsx index 9127ee3e2..faf5b8ca5 100644 --- a/apps/web/core/components/labels/create-update-label-inline.tsx +++ b/apps/web/core/components/labels/create-update-label-inline.tsx @@ -6,10 +6,11 @@ import { TwitterPicker } from "react-color"; import { Controller, SubmitHandler, useForm } from "react-hook-form"; import { Popover, Transition } from "@headlessui/react"; // plane imports -import { getRandomLabelColor, LABEL_COLOR_OPTIONS } from "@plane/constants"; +import { getRandomLabelColor, LABEL_COLOR_OPTIONS, PROJECT_SETTINGS_TRACKER_EVENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { IIssueLabel } from "@plane/types"; import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; export type TLabelOperationsCallbacks = { createLabel: (data: Partial) => Promise; @@ -59,11 +60,25 @@ export const CreateUpdateLabelInline = observer( await labelOperationsCallbacks .createLabel(formData) - .then(() => { + .then((res) => { + captureSuccess({ + eventName: PROJECT_SETTINGS_TRACKER_EVENTS.label_created, + payload: { + name: res.name, + id: res.id, + }, + }); handleClose(); reset(defaultValues); }) .catch((error) => { + captureError({ + eventName: PROJECT_SETTINGS_TRACKER_EVENTS.label_created, + payload: { + name: formData.name, + }, + error, + }); setToast({ title: "Error!", type: TOAST_TYPE.ERROR, @@ -78,11 +93,26 @@ export const CreateUpdateLabelInline = observer( await labelOperationsCallbacks .updateLabel(labelToUpdate.id, formData) - .then(() => { + .then((res) => { + captureSuccess({ + eventName: PROJECT_SETTINGS_TRACKER_EVENTS.label_updated, + payload: { + name: res.name, + id: res.id, + }, + }); reset(defaultValues); handleClose(); }) .catch((error) => { + captureError({ + eventName: PROJECT_SETTINGS_TRACKER_EVENTS.label_updated, + payload: { + name: formData.name, + id: labelToUpdate.id, + }, + error, + }); setToast({ title: "Oops!", type: TOAST_TYPE.ERROR, diff --git a/apps/web/core/components/labels/delete-label-modal.tsx b/apps/web/core/components/labels/delete-label-modal.tsx index 00aa409b0..3b50824ed 100644 --- a/apps/web/core/components/labels/delete-label-modal.tsx +++ b/apps/web/core/components/labels/delete-label-modal.tsx @@ -9,6 +9,8 @@ import type { IIssueLabel } from "@plane/types"; import { AlertModalCore, TOAST_TYPE, setToast } from "@plane/ui"; // hooks import { useLabel } from "@/hooks/store"; +import { PROJECT_SETTINGS_TRACKER_ELEMENTS, PROJECT_SETTINGS_TRACKER_EVENTS } from "@plane/constants"; +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; type Props = { isOpen: boolean; @@ -37,11 +39,27 @@ export const DeleteLabelModal: React.FC = observer((props) => { await deleteLabel(workspaceSlug.toString(), projectId.toString(), data.id) .then(() => { + captureSuccess({ + eventName: PROJECT_SETTINGS_TRACKER_EVENTS.label_deleted, + payload: { + name: data.name, + project_id: projectId, + }, + }); handleClose(); }) .catch((err) => { setIsDeleteLoading(false); + captureError({ + eventName: PROJECT_SETTINGS_TRACKER_EVENTS.label_deleted, + payload: { + name: data.name, + project_id: projectId, + }, + error: err, + }); + const error = err?.error || "Label could not be deleted. Please try again."; setToast({ type: TOAST_TYPE.ERROR, diff --git a/apps/web/core/components/labels/project-setting-label-group.tsx b/apps/web/core/components/labels/project-setting-label-group.tsx index 070a32c93..33973961f 100644 --- a/apps/web/core/components/labels/project-setting-label-group.tsx +++ b/apps/web/core/components/labels/project-setting-label-group.tsx @@ -11,6 +11,8 @@ import { CreateUpdateLabelInline, TLabelOperationsCallbacks } from "./create-upd import { ICustomMenuItem, LabelItemBlock } from "./label-block/label-item-block"; import { LabelDndHOC } from "./label-drag-n-drop-HOC"; import { ProjectSettingLabelItem } from "./project-setting-label-item"; +import { captureClick } from "@/helpers/event-tracker.helper"; +import { PROJECT_SETTINGS_TRACKER_ELEMENTS } from "@plane/constants"; type Props = { label: IIssueLabel; @@ -49,6 +51,9 @@ export const ProjectSettingLabelGroup: React.FC = observer((props) => { { CustomIcon: Pencil, onClick: () => { + captureClick({ + elementName: PROJECT_SETTINGS_TRACKER_ELEMENTS.LABELS_CONTEXT_MENU, + }); setEditLabelForm(true); setIsUpdating(true); }, @@ -58,7 +63,12 @@ export const ProjectSettingLabelGroup: React.FC = observer((props) => { }, { CustomIcon: Trash2, - onClick: handleLabelDelete, + onClick: () => { + captureClick({ + elementName: PROJECT_SETTINGS_TRACKER_ELEMENTS.LABELS_CONTEXT_MENU, + }); + handleLabelDelete(label); + }, isVisible: true, text: "Delete label", key: "delete_label",