From 95580d0c62df35d210d56f84bee353e78c346bdd Mon Sep 17 00:00:00 2001 From: rahulramesha <71900764+rahulramesha@users.noreply.github.com> Date: Tue, 9 Apr 2024 13:12:14 +0530 Subject: [PATCH] [WEB-881] fix: Sentry errors from previous build (#4142) * Sentry Fix for "Non-Error promise rejection captured with value: Route change to url was aborted" * Sentry fix for "undefined is not an object (evaluating 'n.response')" * Possible Sentry Fix for "TypeError Function.entries()" * Possible Sentry fix for "null is not an object (evaluating 'e.type')" --- .../src/ui/extensions/table/table/table-view.tsx | 2 +- .../filters/applied-filters/filters-list.tsx | 2 +- .../display-filters/display-filters-selection.tsx | 14 +++++++------- .../filters/header/display-filters/group-by.tsx | 12 ++++++++---- web/components/project/applied-filters/root.tsx | 2 +- web/components/project/create-project-form.tsx | 8 ++++---- web/components/project/form.tsx | 8 ++++---- web/constants/fetch-keys.ts | 6 +++--- web/helpers/string.helper.ts | 2 ++ web/hooks/use-reload-confirmation.tsx | 1 - web/pages/installations/[provider]/index.tsx | 2 +- 11 files changed, 32 insertions(+), 27 deletions(-) diff --git a/packages/editor/core/src/ui/extensions/table/table/table-view.tsx b/packages/editor/core/src/ui/extensions/table/table/table-view.tsx index 2941179c7..75b6bcb12 100644 --- a/packages/editor/core/src/ui/extensions/table/table/table-view.tsx +++ b/packages/editor/core/src/ui/extensions/table/table/table-view.tsx @@ -189,7 +189,7 @@ function createToolbox({ tippyOptions, onSelectColor, onClickItem, - colors, + colors = {}, }: { triggerButton: Element | null; items: ToolboxItem[]; diff --git a/space/components/issues/filters/applied-filters/filters-list.tsx b/space/components/issues/filters/applied-filters/filters-list.tsx index a036cfedf..e0d41341b 100644 --- a/space/components/issues/filters/applied-filters/filters-list.tsx +++ b/space/components/issues/filters/applied-filters/filters-list.tsx @@ -19,7 +19,7 @@ type Props = { export const replaceUnderscoreIfSnakeCase = (str: string) => str.replace(/_/g, " "); export const AppliedFiltersList: React.FC = (props) => { - const { appliedFilters, handleRemoveAllFilters, handleRemoveFilter, states } = props; + const { appliedFilters = {}, handleRemoveAllFilters, handleRemoveFilter, states } = props; return (
diff --git a/web/components/issues/issue-layouts/filters/header/display-filters/display-filters-selection.tsx b/web/components/issues/issue-layouts/filters/header/display-filters/display-filters-selection.tsx index eb2238a4b..0f7b87546 100644 --- a/web/components/issues/issue-layouts/filters/header/display-filters/display-filters-selection.tsx +++ b/web/components/issues/issue-layouts/filters/header/display-filters/display-filters-selection.tsx @@ -15,7 +15,7 @@ import { import { ILayoutDisplayFiltersOptions } from "@/constants/issue"; type Props = { - displayFilters: IIssueDisplayFilterOptions; + displayFilters: IIssueDisplayFilterOptions | undefined; displayProperties: IIssueDisplayProperties; handleDisplayFiltersUpdate: (updatedDisplayFilter: Partial) => void; handleDisplayPropertiesUpdate: (updatedDisplayProperties: Partial) => void; @@ -80,8 +80,8 @@ export const DisplayFiltersSelection: React.FC = observer((props) => { {/* sub-group by */} {isDisplayFilterEnabled("sub_group_by") && - displayFilters.group_by !== null && - displayFilters.layout === "kanban" && ( + displayFilters?.group_by !== null && + displayFilters?.layout === "kanban" && (
= observer((props) => { {isDisplayFilterEnabled("order_by") && (
handleDisplayFiltersUpdate({ order_by: val, @@ -115,7 +115,7 @@ export const DisplayFiltersSelection: React.FC = observer((props) => { {isDisplayFilterEnabled("type") && (
handleDisplayFiltersUpdate({ type: val, @@ -130,8 +130,8 @@ export const DisplayFiltersSelection: React.FC = observer((props) => {
handleDisplayFiltersUpdate({ diff --git a/web/components/issues/issue-layouts/filters/header/display-filters/group-by.tsx b/web/components/issues/issue-layouts/filters/header/display-filters/group-by.tsx index f05452f21..f103e55a6 100644 --- a/web/components/issues/issue-layouts/filters/header/display-filters/group-by.tsx +++ b/web/components/issues/issue-layouts/filters/header/display-filters/group-by.tsx @@ -8,7 +8,7 @@ import { ISSUE_GROUP_BY_OPTIONS } from "@/constants/issue"; // constants type Props = { - displayFilters: IIssueDisplayFilterOptions; + displayFilters: IIssueDisplayFilterOptions | undefined; groupByOptions: TIssueGroupByOptions[]; handleUpdate: (val: TIssueGroupByOptions) => void; ignoreGroupedFilters: Partial[]; @@ -19,8 +19,8 @@ export const FilterGroupBy: React.FC = observer((props) => { const [previewEnabled, setPreviewEnabled] = useState(true); - const selectedGroupBy = displayFilters.group_by ?? null; - const selectedSubGroupBy = displayFilters.sub_group_by ?? null; + const selectedGroupBy = displayFilters?.group_by ?? null; + const selectedSubGroupBy = displayFilters?.sub_group_by ?? null; return ( <> @@ -32,7 +32,11 @@ export const FilterGroupBy: React.FC = observer((props) => { {previewEnabled && (
{ISSUE_GROUP_BY_OPTIONS.filter((option) => groupByOptions.includes(option.key)).map((groupBy) => { - if (displayFilters.layout === "kanban" && selectedSubGroupBy !== null && groupBy.key === selectedSubGroupBy) + if ( + displayFilters?.layout === "kanban" && + selectedSubGroupBy !== null && + groupBy.key === selectedSubGroupBy + ) return null; if (ignoreGroupedFilters.includes(groupBy?.key)) return null; diff --git a/web/components/project/applied-filters/root.tsx b/web/components/project/applied-filters/root.tsx index 7c4381989..83eaf5def 100644 --- a/web/components/project/applied-filters/root.tsx +++ b/web/components/project/applied-filters/root.tsx @@ -48,7 +48,7 @@ export const ProjectAppliedFiltersList: React.FC = (props) => {
{/* Applied filters */} - {Object.entries(appliedFilters).map(([key, value]) => { + {Object.entries(appliedFilters ?? {}).map(([key, value]) => { const filterKey = key as keyof TProjectFilters; if (!value) return; diff --git a/web/components/project/create-project-form.tsx b/web/components/project/create-project-form.tsx index 27a19d7f8..8fa1b390f 100644 --- a/web/components/project/create-project-form.tsx +++ b/web/components/project/create-project-form.tsx @@ -197,16 +197,16 @@ export const CreateProjectForm: FC = observer((props) => { onChange={(val: any) => { let logoValue = {}; - if (val.type === "emoji") + if (val?.type === "emoji") logoValue = { value: convertHexEmojiToDecimal(val.value.unified), url: val.value.imageUrl, }; - else if (val.type === "icon") logoValue = val.value; + else if (val?.type === "icon") logoValue = val.value; onChange({ - in_use: val.type, - [val.type]: logoValue, + in_use: val?.type, + [val?.type]: logoValue, }); }} defaultIconColor={value.in_use && value.in_use === "icon" ? value.icon?.color : undefined} diff --git a/web/components/project/form.tsx b/web/components/project/form.tsx index 98a3e8d02..f2a87a173 100644 --- a/web/components/project/form.tsx +++ b/web/components/project/form.tsx @@ -157,16 +157,16 @@ export const ProjectDetailsForm: FC = (props) => { onChange={(val) => { let logoValue = {}; - if (val.type === "emoji") + if (val?.type === "emoji") logoValue = { value: convertHexEmojiToDecimal(val.value.unified), url: val.value.imageUrl, }; - else if (val.type === "icon") logoValue = val.value; + else if (val?.type === "icon") logoValue = val.value; onChange({ - in_use: val.type, - [val.type]: logoValue, + in_use: val?.type, + [val?.type]: logoValue, }); }} defaultIconColor={value?.in_use && value.in_use === "icon" ? value?.icon?.color : undefined} diff --git a/web/constants/fetch-keys.ts b/web/constants/fetch-keys.ts index 2a4e1827d..d5112a851 100644 --- a/web/constants/fetch-keys.ts +++ b/web/constants/fetch-keys.ts @@ -59,9 +59,9 @@ const myIssuesParamsToKey = (params: any) => { let labelsKey = labels ? labels.split(",") : []; const startDateKey = start_date ?? ""; const targetDateKey = target_date ?? ""; - const type = params.type ? params.type.toUpperCase() : "NULL"; - const groupBy = params.group_by ? params.group_by.toUpperCase() : "NULL"; - const orderBy = params.order_by ? params.order_by.toUpperCase() : "NULL"; + const type = params?.type ? params.type.toUpperCase() : "NULL"; + const groupBy = params?.group_by ? params.group_by.toUpperCase() : "NULL"; + const orderBy = params?.order_by ? params.order_by.toUpperCase() : "NULL"; // sorting each keys in ascending order assigneesKey = assigneesKey.sort().join("_"); diff --git a/web/helpers/string.helper.ts b/web/helpers/string.helper.ts index 03233a918..558c88883 100644 --- a/web/helpers/string.helper.ts +++ b/web/helpers/string.helper.ts @@ -152,6 +152,8 @@ export const getNumberCount = (number: number): string => { export const objToQueryParams = (obj: any) => { const params = new URLSearchParams(); + if (!obj) return params.toString(); + for (const [key, value] of Object.entries(obj)) { if (value !== undefined && value !== null) params.append(key, value as string); } diff --git a/web/hooks/use-reload-confirmation.tsx b/web/hooks/use-reload-confirmation.tsx index 8343ea78d..6cf6d3e88 100644 --- a/web/hooks/use-reload-confirmation.tsx +++ b/web/hooks/use-reload-confirmation.tsx @@ -21,7 +21,6 @@ const useReloadConfirmations = (isActive = true) => { const leave = confirm("Are you sure you want to leave? Changes you made may not be saved."); if (!leave) { router.events.emit("routeChangeError"); - throw `Route change to "${url}" was aborted (this error can be safely ignored).`; } }, [isActive, showAlert, router.events] diff --git a/web/pages/installations/[provider]/index.tsx b/web/pages/installations/[provider]/index.tsx index c66d7d7c5..0ce6f9eca 100644 --- a/web/pages/installations/[provider]/index.tsx +++ b/web/pages/installations/[provider]/index.tsx @@ -55,7 +55,7 @@ const AppPostInstallation: NextPageWithLayout = () => { window.close(); }) .catch((err) => { - throw err.response; + throw err?.response; }); } }