Skip to content

Commit 9941459

Browse files
refactor: reorganize imports and enhance error handling in project and page creation components
1 parent a64bab7 commit 9941459

File tree

5 files changed

+80
-63
lines changed

5 files changed

+80
-63
lines changed

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

Lines changed: 43 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { useState } from "react";
21
import { observer } from "mobx-react";
32
import { useParams, useRouter, useSearchParams } from "next/navigation";
3+
import { useState } from "react";
44
// constants
55
import { EPageAccess, PROJECT_PAGE_TRACKER_EVENTS, PROJECT_TRACKER_ELEMENTS } from "@plane/constants";
66
// plane types
@@ -12,15 +12,15 @@ import type { TPage } from "@plane/types";
1212
import { Breadcrumbs, Header } from "@plane/ui";
1313
// helpers
1414
import { BreadcrumbLink } from "@/components/common/breadcrumb-link";
15-
import { captureError, captureSuccess } from "@/helpers/event-tracker.helper";
15+
import { captureError } from "@/helpers/event-tracker.helper";
1616
// hooks
1717
import { useProject } from "@/hooks/store/use-project";
1818
// plane web imports
19-
import { CommonProjectBreadcrumbs } from "@/plane-web/components/breadcrumbs/common";
20-
import { EPageStoreType, usePageStore } from "@/plane-web/hooks/store";
21-
import { useUser, useUserPermissions } from "@/hooks/store/user";
2219
import { useWorkspace } from "@/hooks/store/use-workspace";
20+
import { useUser, useUserPermissions } from "@/hooks/store/user";
21+
import { CommonProjectBreadcrumbs } from "@/plane-web/components/breadcrumbs/common";
2322
import { getUserRoleString, trackPageCreated } from "@/plane-web/helpers/event-tracker-v2.helper";
23+
import { EPageStoreType, usePageStore } from "@/plane-web/hooks/store";
2424

2525
export const PagesListHeader = observer(function PagesListHeader() {
2626
// states
@@ -38,41 +38,47 @@ export const PagesListHeader = observer(function PagesListHeader() {
3838
const { canCurrentUserCreatePage, createPage } = usePageStore(EPageStoreType.PROJECT);
3939
// handle page create
4040
const handleCreatePage = async () => {
41-
setIsCreatingPage(true);
41+
try {
42+
setIsCreatingPage(true);
4243

43-
const payload: Partial<TPage> = {
44-
access: pageType === "private" ? EPageAccess.PRIVATE : EPageAccess.PUBLIC,
45-
};
44+
const payload: Partial<TPage> = {
45+
access: pageType === "private" ? EPageAccess.PRIVATE : EPageAccess.PUBLIC,
46+
};
4647

47-
await createPage(payload)
48-
.then((res) => {
49-
if (currentWorkspace && currentUser) {
50-
const role = getWorkspaceRoleByWorkspaceSlug(currentWorkspace.slug);
51-
trackPageCreated(
52-
{ id: res?.id ?? "", created_at: new Date().toISOString() },
53-
currentWorkspace,
54-
currentUser,
55-
"project",
56-
getUserRoleString(role)
57-
);
58-
}
59-
const pageId = `/${workspaceSlug}/projects/${currentProjectDetails?.id}/pages/${res?.id}`;
60-
router.push(pageId);
61-
})
62-
.catch((err) => {
63-
captureError({
64-
eventName: PROJECT_PAGE_TRACKER_EVENTS.create,
65-
payload: {
66-
state: "ERROR",
48+
const pageData = await createPage(payload);
49+
if (!pageData?.id) throw new Error("Invalid response");
50+
if (currentWorkspace && currentUser) {
51+
const role = getWorkspaceRoleByWorkspaceSlug(currentWorkspace.slug);
52+
trackPageCreated(
53+
{
54+
id: pageData.id,
55+
project_id: projectId,
56+
created_at: pageData.created_at ?? "",
6757
},
68-
});
69-
setToast({
70-
type: TOAST_TYPE.ERROR,
71-
title: "Error!",
72-
message: err?.data?.error || "Page could not be created. Please try again.",
73-
});
74-
})
75-
.finally(() => setIsCreatingPage(false));
58+
currentWorkspace,
59+
currentUser,
60+
"project",
61+
getUserRoleString(role)
62+
);
63+
}
64+
const pageId = `/${workspaceSlug}/projects/${currentProjectDetails?.id}/pages/${pageData.id}`;
65+
router.push(pageId);
66+
} catch (err: any) {
67+
captureError({
68+
eventName: PROJECT_PAGE_TRACKER_EVENTS.create,
69+
payload: {
70+
state: "ERROR",
71+
error: err?.data?.error,
72+
},
73+
});
74+
setToast({
75+
type: TOAST_TYPE.ERROR,
76+
title: "Error!",
77+
message: err?.data?.error || "Page could not be created. Please try again.",
78+
});
79+
} finally {
80+
setIsCreatingPage(false);
81+
}
7682
};
7783

7884
return (

apps/web/ce/components/projects/create/root.tsx

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,27 @@
1-
import { useState } from "react";
1+
import { PROJECT_TRACKER_EVENTS } from "@plane/constants";
2+
import { useTranslation } from "@plane/i18n";
23
import { observer } from "mobx-react";
4+
import { useState } from "react";
35
import { FormProvider, useForm } from "react-hook-form";
4-
import { PROJECT_TRACKER_EVENTS, RANDOM_EMOJI_CODES } from "@plane/constants";
5-
import { useTranslation } from "@plane/i18n";
66
// ui
77
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
88
import { EFileAssetType } from "@plane/types";
9-
import type { IProject } from "@plane/types";
109
// constants
1110
import ProjectCommonAttributes from "@/components/project/create/common-attributes";
1211
import ProjectCreateHeader from "@/components/project/create/header";
1312
import ProjectCreateButtons from "@/components/project/create/project-create-buttons";
1413
// hooks
15-
import { DEFAULT_COVER_IMAGE_URL, getCoverImageType, uploadCoverImage } from "@/helpers/cover-image.helper";
16-
import { captureError, captureSuccess } from "@/helpers/event-tracker.helper";
14+
import { getCoverImageType, uploadCoverImage } from "@/helpers/cover-image.helper";
15+
import { captureError } from "@/helpers/event-tracker.helper";
1716
import { useProject } from "@/hooks/store/use-project";
1817
import { usePlatformOS } from "@/hooks/use-platform-os";
1918
// plane web types
19+
import { useWorkspace } from "@/hooks/store/use-workspace";
20+
import { useUser, useUserPermissions } from "@/hooks/store/user";
21+
import { getUserRoleString, trackProjectCreated } from "@/plane-web/helpers/event-tracker-v2.helper";
2022
import type { TProject } from "@/plane-web/types/projects";
2123
import ProjectAttributes from "./attributes";
2224
import { getProjectFormValues } from "./utils";
23-
import { getUserRoleString, trackProjectCreated } from "@/plane-web/helpers/event-tracker-v2.helper";
24-
import { useUser, useUserPermissions } from "@/hooks/store/user";
25-
import { useWorkspace } from "@/hooks/store/use-workspace";
2625

2726
export type TCreateProjectFormProps = {
2827
setToFavorite?: boolean;
@@ -107,7 +106,7 @@ export const CreateProjectForm = observer(function CreateProjectForm(props: TCre
107106
if (currentUser && currentWorkspace && res) {
108107
const role = getWorkspaceRoleByWorkspaceSlug(currentWorkspace.slug);
109108
trackProjectCreated(
110-
{ id: res.id, created_at: res.created_at instanceof Date ? res.created_at : new Date() },
109+
{ id: res.id, created_at: res.created_at ?? "" },
111110
currentWorkspace,
112111
currentUser,
113112
getUserRoleString(role)
@@ -123,6 +122,8 @@ export const CreateProjectForm = observer(function CreateProjectForm(props: TCre
123122
handleAddToFavorites(res.id);
124123
}
125124
handleNextStep(res.id);
125+
126+
return res;
126127
})
127128
.catch((err) => {
128129
try {

apps/web/core/components/inbox/modals/create-modal/create-root.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,34 +162,39 @@ export const InboxIssueCreateRoot = observer(function InboxIssueCreateRoot(props
162162

163163
await createInboxIssue(workspaceSlug, projectId, payload)
164164
.then(async (res) => {
165+
if (!res?.issue) return;
165166
if (uploadedAssetIds.length > 0) {
166-
await fileService.updateBulkProjectAssetsUploadStatus(workspaceSlug, projectId, res?.issue.id ?? "", {
167+
await fileService.updateBulkProjectAssetsUploadStatus(workspaceSlug, projectId, res.issue?.id ?? "", {
167168
asset_ids: uploadedAssetIds,
168169
});
169170
setUploadedAssetIds([]);
170171
}
171172
if (!createMore) {
172-
router.push(`/${workspaceSlug}/projects/${projectId}/intake/?currentTab=open&inboxIssueId=${res?.issue?.id}`);
173+
router.push(`/${workspaceSlug}/projects/${projectId}/intake/?currentTab=open&inboxIssueId=${res.issue?.id}`);
173174
handleModalClose();
174175
} else {
175176
descriptionEditorRef?.current?.clearEditor();
176177
setFormData(defaultIssueData);
177178
}
179+
178180
if (currentWorkspace && currentUser) {
179181
const role = getWorkspaceRoleByWorkspaceSlug(currentWorkspace.slug);
180182
trackWorkItemCreated(
181-
{ id: res?.issue?.id ?? "", created_at: new Date().toISOString() },
183+
{ id: res?.issue?.id ?? "", created_at: res.issue?.created_at ?? "" },
182184
{ id: projectId },
183185
currentWorkspace,
184186
currentUser,
185187
getUserRoleString(role)
186188
);
187189
}
190+
188191
setToast({
189192
type: TOAST_TYPE.SUCCESS,
190193
title: `Success!`,
191194
message: "Work item created successfully.",
192195
});
196+
197+
return res;
193198
})
194199
.catch((error) => {
195200
console.error(error);

apps/web/core/components/issues/issue-modal/base.tsx

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ export const CreateUpdateIssueModalBase = observer(function CreateUpdateIssueMod
249249
if (currentWorkspace && currentUser && response) {
250250
const role = getWorkspaceRoleByWorkspaceSlug(currentWorkspace.slug);
251251
trackWorkItemCreated(
252-
{ id: response.id, created_at: new Date().toISOString() },
252+
{ id: response.id, created_at: response.created_at },
253253
{ id: payload.project_id },
254254
currentWorkspace,
255255
currentUser,
@@ -333,14 +333,10 @@ export const CreateUpdateIssueModalBase = observer(function CreateUpdateIssueMod
333333
});
334334

335335
if (currentWorkspace && currentUser) {
336-
const role = getWorkspaceRoleByWorkspaceSlug(currentWorkspace.slug);
337-
trackWorkItemCreated(
338-
{ id: data.id, created_at: new Date().toISOString() },
339-
{ id: payload.project_id },
340-
currentWorkspace,
341-
currentUser,
342-
getUserRoleString(role)
343-
);
336+
captureSuccess({
337+
eventName: WORK_ITEM_TRACKER_EVENTS.update,
338+
payload: { id: data.id },
339+
});
344340
}
345341
handleClose();
346342
} catch (error: any) {

apps/web/core/components/pages/modals/create-page-modal.tsx

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import type { FC } from "react";
21
import { useEffect, useState } from "react";
32
// constants
43
import type { EPageAccess } from "@plane/constants";
@@ -7,8 +6,9 @@ import type { TPage } from "@plane/types";
76
// ui
87
import { EModalPosition, EModalWidth, ModalCore } from "@plane/ui";
98
// hooks
10-
import { captureSuccess, captureError } from "@/helpers/event-tracker.helper";
9+
import { captureError } from "@/helpers/event-tracker.helper";
1110
import { useAppRouter } from "@/hooks/use-app-router";
11+
import { setToast, TOAST_TYPE } from "@plane/propel/toast";
1212
// plane web hooks
1313
import type { EPageStoreType } from "@/plane-web/hooks/store";
1414
import { usePageStore } from "@/plane-web/hooks/store";
@@ -69,12 +69,16 @@ export function CreatePageModal(props: Props) {
6969
if (!workspaceSlug || !projectId) return;
7070

7171
try {
72-
const pageData = await createPage(pageFormData);
72+
const pageData = await createPage?.(pageFormData);
7373
if (pageData) {
7474
if (currentWorkspace && currentUser) {
7575
const role = getWorkspaceRoleByWorkspaceSlug(currentWorkspace.slug);
7676
trackPageCreated(
77-
{ id: pageData.id ?? "", created_at: new Date().toISOString() },
77+
{
78+
id: pageData.id ?? "",
79+
project_id: projectId,
80+
created_at: pageData.created_at ?? "",
81+
},
7882
currentWorkspace,
7983
currentUser,
8084
"project",
@@ -89,6 +93,11 @@ export function CreatePageModal(props: Props) {
8993
eventName: PROJECT_PAGE_TRACKER_EVENTS.create,
9094
error,
9195
});
96+
setToast({
97+
type: TOAST_TYPE.ERROR,
98+
title: "Error!",
99+
message: error?.data?.error || "Page could not be created. Please try again.",
100+
});
92101
}
93102
};
94103

0 commit comments

Comments
 (0)