From 6989f8d34d4a27bd3c8d93bd27bee5061d670912 Mon Sep 17 00:00:00 2001 From: Ugur Armagan Date: Mon, 27 Apr 2026 17:08:42 -0500 Subject: [PATCH] chore(lint): fix safe lint cleanup --- e2e/utils/compass-window.ts | 6 +- .../src/__tests__/helpers/mock.setup.ts | 29 +++-- .../factories/gcal.event.factory.ts | 4 +- .../mocks.gcal/factories/gcal.factory.ts | 26 +++-- .../services/calendar.service.test.ts | 2 +- .../middleware/http.logger.middleware.ts | 4 +- .../src/common/services/gcal/gcal.utils.ts | 2 +- .../src/event/services/event.service.util.ts | 2 +- .../event/services/recur/util/recur.util.ts | 8 +- packages/backend/src/init.ts | 2 +- .../services/import/sync.import.util.test.ts | 2 +- .../src/sync/services/log/sync.logger.ts | 4 +- .../gcal.sync.processor.test.util.ts | 3 +- .../gcal.sync.processor.upsert.base.test.ts | 2 +- ...cal.sync.processor.upsert.instance.test.ts | 2 +- ...l.sync.processor.upsert.standalone.test.ts | 2 +- .../util/date/dayjs-compass.plugin.test.ts | 2 +- .../scripts/src/commands/build.backend.ts | 2 +- .../src/common/hooks/useFloatingAtCursor.ts | 2 +- .../common/utils/datetime/web.date.util.ts | 2 +- .../utils/dom/grid-organization.util.ts | 2 +- .../web/src/common/utils/overlap/overlap.ts | 2 +- .../ducks/events/selectors/event.selectors.ts | 2 +- .../ducks/events/slices/event.slice.util.ts | 2 +- .../views/Calendar/components/Draft/Draft.tsx | 22 ++-- .../Draft/hooks/actions/submit.parser.ts | 7 +- .../Event/Grid/GridEvent/GridEvent.tsx | 34 +++--- .../DraggableSomedayEvent.tsx | 32 +++--- .../SomedayEventsContainer.tsx | 100 +++++++++--------- .../Calendar/hooks/mouse/useEventListener.ts | 2 +- 30 files changed, 153 insertions(+), 160 deletions(-) diff --git a/e2e/utils/compass-window.ts b/e2e/utils/compass-window.ts index e869d575a..03f6fed94 100644 --- a/e2e/utils/compass-window.ts +++ b/e2e/utils/compass-window.ts @@ -42,10 +42,8 @@ declare global { interface Window { __COMPASS_E2E_TEST__?: boolean; __COMPASS_E2E_STORE__?: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - dispatch: (action: any) => any; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - getState: () => any; + dispatch: (action: unknown) => unknown; + getState: () => unknown; }; __COMPASS_E2E_HOOKS__?: { setAuthenticated: (value: boolean) => void; diff --git a/packages/backend/src/__tests__/helpers/mock.setup.ts b/packages/backend/src/__tests__/helpers/mock.setup.ts index 13fe7ef06..633c43c48 100644 --- a/packages/backend/src/__tests__/helpers/mock.setup.ts +++ b/packages/backend/src/__tests__/helpers/mock.setup.ts @@ -57,7 +57,7 @@ function mockGoogleapis() { function mockSuperTokens() { const userMetadata = new Map(); - function verifySession(input: { + function verifySession(_input: { verifySessionOptions?: VerifySessionOptions; options: APIOptions; userContext: UserContext; @@ -118,10 +118,6 @@ function mockSuperTokens() { } as SessionContainerInterface; return next?.(); - - if (input?.verifySessionOptions?.sessionRequired) { - throw new Error("invalid superToken session"); - } } catch (error) { if (next) { next(error); @@ -146,12 +142,12 @@ function mockSuperTokens() { data: Partial, ): Promise<{ status: "OK"; metadata: UserMetadata }> { const existingMetadata = userMetadata.get(userId) ?? {}; + const metadata = { ...existingMetadata, ...data }; + userMetadata.set(userId, metadata); return Promise.resolve({ status: "OK", - metadata: userMetadata - .set(userId, { ...existingMetadata, ...data }) - .get(userId)!, + metadata, }); } @@ -320,13 +316,16 @@ export function mockEnv(env: Partial) { [keyof typeof env, (typeof env)[keyof typeof env]] >; - return entries.reduce( - (newEnv, [key, value]) => ({ - ...newEnv, - [key]: jest.replaceProperty(ENV, key, value), - }), - {} as Record>, - ); + const newEnv = {} as Record< + keyof typeof env, + jest.ReplaceProperty + >; + + for (const [key, value] of entries) { + newEnv[key] = jest.replaceProperty(ENV, key, value); + } + + return newEnv; } export function mockNodeModules() { diff --git a/packages/backend/src/__tests__/mocks.gcal/factories/gcal.event.factory.ts b/packages/backend/src/__tests__/mocks.gcal/factories/gcal.event.factory.ts index 56182b71a..114659add 100644 --- a/packages/backend/src/__tests__/mocks.gcal/factories/gcal.event.factory.ts +++ b/packages/backend/src/__tests__/mocks.gcal/factories/gcal.event.factory.ts @@ -18,7 +18,7 @@ import { GcalEventRRule } from "@backend/event/classes/gcal.event.rrule"; * @returns A random base32 hex string */ export const generateGcalId = (length: number = 16) => { - const allowed = "abcdefghijklmnopqrstuvwxyz".slice(0, 22) + "0123456789"; // a-v and 0-9 + const allowed = `${"abcdefghijklmnopqrstuvwxyz".slice(0, 22)}0123456789`; // a-v and 0-9 let id = ""; for (let i = 0; i < length; i++) { id += allowed.charAt(Math.floor(Math.random() * allowed.length)); @@ -51,7 +51,7 @@ const mockGcalCoreEvent = (): WithGcalId< htmlLink: `https://www.google.com/calendar/event?eid=${id}`, created: faker.date.past().toISOString(), updated: faker.date.recent().toISOString(), - iCalUID: faker.string.uuid() + "@google.com", + iCalUID: `${faker.string.uuid()}@google.com`, sequence: 0, extendedProperties: { private: { diff --git a/packages/backend/src/__tests__/mocks.gcal/factories/gcal.factory.ts b/packages/backend/src/__tests__/mocks.gcal/factories/gcal.factory.ts index a893dbce1..47d1a294d 100644 --- a/packages/backend/src/__tests__/mocks.gcal/factories/gcal.factory.ts +++ b/packages/backend/src/__tests__/mocks.gcal/factories/gcal.factory.ts @@ -4,7 +4,11 @@ import { type MethodOptions, type StreamMethodOptions, } from "@googleapis/calendar"; -import { type GaxiosPromise, type GaxiosResponse } from "gaxios"; +import { + type GaxiosOptions, + type GaxiosPromise, + type GaxiosResponse, +} from "gaxios"; import { Status } from "@core/errors/status.codes"; import { type gSchema$CalendarList, @@ -39,7 +43,7 @@ const createMockGaxiosResponse = ( const url = responseURL || (config.url?.toString() ?? ""); return { - config: config as any, + config: config as GaxiosOptions, data, status, statusText, @@ -62,7 +66,7 @@ const createMockGaxiosResponse = ( formData: async () => { throw new Error("Not implemented"); }, - json: async () => data as any, + json: async () => data, text: async () => JSON.stringify(data), bytes: async () => { throw new Error("Not implemented"); @@ -85,7 +89,7 @@ const generatePaginatedGcalItems = ( pageSize: number, pageToken?: string, ): Omit & { items: Item[] } => { - const startIndex = pageToken ? parseInt(pageToken) : 0; + const startIndex = pageToken ? parseInt(pageToken, 10) : 0; const endIndex = startIndex + pageSize; const pageEvents = items.slice(startIndex, endIndex); const hasMore = endIndex < items.length; @@ -166,7 +170,7 @@ export const mockGcal = ({ options, 200, "OK", - params.requestBody!.id!, + id, ), ); }, @@ -210,13 +214,17 @@ export const mockGcal = ({ updatedEvent as WithGcalId, ); + if (!updatedEvent.id) { + throw new Error(`Event with id ${eventId} is missing an id`); + } + return Promise.resolve( createMockGaxiosResponse( updatedEvent, options, 200, "OK", - updatedEvent.id!, + updatedEvent.id, ), ); }, @@ -295,7 +303,11 @@ export const mockGcal = ({ throw new Error(`Event with id ${eventId} not found`); } - const event = events[eventIndex]!; + const event = events[eventIndex]; + + if (!event) { + throw new Error(`Event with id ${eventId} not found`); + } const isRecurring = isBaseGCalEvent(event); events.splice(eventIndex, 1); diff --git a/packages/backend/src/calendar/services/calendar.service.test.ts b/packages/backend/src/calendar/services/calendar.service.test.ts index 90ddadae8..7c3dac748 100644 --- a/packages/backend/src/calendar/services/calendar.service.test.ts +++ b/packages/backend/src/calendar/services/calendar.service.test.ts @@ -207,7 +207,7 @@ describe("CalendarService", () => { updatedCalendarList.forEach((c) => { const toggled = toggledCalendars.find(({ _id }) => c._id.equals(_id)); - expect(c.selected).toBe(toggled ? false : true); + expect(c.selected).toBe(!toggled); }); }); }); diff --git a/packages/backend/src/common/middleware/http.logger.middleware.ts b/packages/backend/src/common/middleware/http.logger.middleware.ts index f81f61f44..4ae701fbb 100644 --- a/packages/backend/src/common/middleware/http.logger.middleware.ts +++ b/packages/backend/src/common/middleware/http.logger.middleware.ts @@ -1,5 +1,5 @@ -import { type IncomingMessage, type ServerResponse } from "http"; import morgan from "morgan"; +import { type IncomingMessage, type ServerResponse } from "node:http"; import { styleText } from "node:util"; type HttpLogColor = "cyanBright" | "yellow" | "red" | "magentaBright"; @@ -54,7 +54,7 @@ export const httpLoggingMiddleware = morgan((tokens, req, res) => { styleText(["bold", statusColor], status), styleText(["bold", "whiteBright"], get("method", tokens, req, res)), styleText(["bold", "cyanBright"], get("url", tokens, req, res)), - styleText(["bold", "blueBright"], responseTime + "ms"), + styleText(["bold", "blueBright"], `${responseTime}ms`), styleText(["bold", "magentaBright"], get("date", tokens, req, res)), ].join(" "); }); diff --git a/packages/backend/src/common/services/gcal/gcal.utils.ts b/packages/backend/src/common/services/gcal/gcal.utils.ts index 6d6ec4c87..c2342cc23 100644 --- a/packages/backend/src/common/services/gcal/gcal.utils.ts +++ b/packages/backend/src/common/services/gcal/gcal.utils.ts @@ -38,7 +38,7 @@ export const categorizeGcalEvents = (events: gSchema$Event[]) => { export const getEmailFromUrl = (url: string) => { const emailMatch = url.match(/\/calendars\/([^/]+)\/events/); - if (emailMatch && emailMatch[1]) { + if (emailMatch?.[1]) { try { return decodeURIComponent(emailMatch[1]); } catch { diff --git a/packages/backend/src/event/services/event.service.util.ts b/packages/backend/src/event/services/event.service.util.ts index 90f51aa8c..1bfae22ab 100644 --- a/packages/backend/src/event/services/event.service.util.ts +++ b/packages/backend/src/event/services/event.service.util.ts @@ -25,7 +25,7 @@ export const getDeleteByIdFilter = ( return { ...filter, _id }; } - if (!event.recurrence || !event.recurrence.eventId) { + if (!event.recurrence?.eventId) { throw error( GenericError.DeveloperError, "Failed to get Delete Filter (missing recurrence id)", diff --git a/packages/backend/src/event/services/recur/util/recur.util.ts b/packages/backend/src/event/services/recur/util/recur.util.ts index 6391c3423..508e10ade 100644 --- a/packages/backend/src/event/services/recur/util/recur.util.ts +++ b/packages/backend/src/event/services/recur/util/recur.util.ts @@ -16,11 +16,7 @@ export const assembleInstances = ( event: Schema_Event_Core, baseId?: string, ) => { - if ( - !event.recurrence || - !event.recurrence.rule || - !event.recurrence.rule[0] - ) { + if (!event.recurrence?.rule?.[0]) { throw error( GenericError.DeveloperError, "Failed to assemble recurring events", @@ -252,10 +248,8 @@ const _getNextStart = (rule: string, startDate: string, endDate: string) => { switch (rule) { case RRULE.WEEK: return dayjs(startDate).startOfNextWeek(); - break; case RRULE.MONTH: return dayjs(endDate).startOfNextMonth(); - break; default: throw error(GenericError.DeveloperError, "Failed to get next start"); } diff --git a/packages/backend/src/init.ts b/packages/backend/src/init.ts index 68b63b744..acc6b1b3b 100644 --- a/packages/backend/src/init.ts +++ b/packages/backend/src/init.ts @@ -1,7 +1,7 @@ // sort-imports-ignore -import path from "path"; import { createRequire } from "node:module"; +import path from "node:path"; type AliasApi = { addAliases(aliases: Record): void; diff --git a/packages/backend/src/sync/services/import/sync.import.util.test.ts b/packages/backend/src/sync/services/import/sync.import.util.test.ts index 72ab9ae07..84c9acfd3 100644 --- a/packages/backend/src/sync/services/import/sync.import.util.test.ts +++ b/packages/backend/src/sync/services/import/sync.import.util.test.ts @@ -15,7 +15,7 @@ describe("categorizeGcalEvents", () => { // should be array of string numbers expect(typeof toDelete[1]).toBe("string"); - const parsedToInt = parseInt(toDelete[1] ?? ""); + const parsedToInt = parseInt(toDelete[1] ?? "", 10); expect(typeof parsedToInt).toBe("number"); }); it("finds deleted/cancelled events", () => { diff --git a/packages/backend/src/sync/services/log/sync.logger.ts b/packages/backend/src/sync/services/log/sync.logger.ts index 1cce25fea..d14c365e4 100644 --- a/packages/backend/src/sync/services/log/sync.logger.ts +++ b/packages/backend/src/sync/services/log/sync.logger.ts @@ -1,8 +1,8 @@ -import fs from "fs"; -import path from "path"; import { type Schema_Event_Core } from "@core/types/event.types"; import { type gSchema$Event } from "@core/types/gcal"; import dayjs from "@core/util/date/dayjs"; +import fs from "node:fs"; +import path from "node:path"; interface SyncLogData { updatedEvents: gSchema$Event[]; diff --git a/packages/backend/src/sync/services/sync/__tests__/gcal.sync.processor.test.util.ts b/packages/backend/src/sync/services/sync/__tests__/gcal.sync.processor.test.util.ts index 21251648d..eec0dea20 100644 --- a/packages/backend/src/sync/services/sync/__tests__/gcal.sync.processor.test.util.ts +++ b/packages/backend/src/sync/services/sync/__tests__/gcal.sync.processor.test.util.ts @@ -199,8 +199,7 @@ export const updateBasePayloadToExpireOneDayAfterFirstInstance = ( ); const untilDate = new Date(firstInstanceStart); untilDate.setDate(untilDate.getDate() + 1); - const untilDateStr = - untilDate.toISOString().replace(/[-:]/g, "").split(".")[0] + "Z"; + const untilDateStr = `${untilDate.toISOString().replace(/[-:]/g, "").split(".")[0]}Z`; const gBaseWithUntil = { ...gEvents.recurring, diff --git a/packages/backend/src/sync/services/sync/__tests__/gcal.sync.processor.upsert.base.test.ts b/packages/backend/src/sync/services/sync/__tests__/gcal.sync.processor.upsert.base.test.ts index d019451d4..211ef331e 100644 --- a/packages/backend/src/sync/services/sync/__tests__/gcal.sync.processor.upsert.base.test.ts +++ b/packages/backend/src/sync/services/sync/__tests__/gcal.sync.processor.upsert.base.test.ts @@ -168,7 +168,7 @@ describe("GcalSyncProcessor UPSERT: BASE", () => { /* Act */ const updatedGcalBase = { ...gcalEvents.recurring, - summary: gcalEvents.recurring.summary + " - UPDATED IN GCAL", + summary: `${gcalEvents.recurring.summary} - UPDATED IN GCAL`, description: "Description adjusted in Gcal", }; diff --git a/packages/backend/src/sync/services/sync/__tests__/gcal.sync.processor.upsert.instance.test.ts b/packages/backend/src/sync/services/sync/__tests__/gcal.sync.processor.upsert.instance.test.ts index fdee6d900..4819c8c8d 100644 --- a/packages/backend/src/sync/services/sync/__tests__/gcal.sync.processor.upsert.instance.test.ts +++ b/packages/backend/src/sync/services/sync/__tests__/gcal.sync.processor.upsert.instance.test.ts @@ -29,7 +29,7 @@ describe("GcalSyncProcessor UPSERT: INSTANCE", () => { const instance = { ...origInstance, - summary: origTitle + " - Changed in GCal", + summary: `${origTitle} - Changed in GCal`, }; const instanceTitle = instance.summary; diff --git a/packages/backend/src/sync/services/sync/__tests__/gcal.sync.processor.upsert.standalone.test.ts b/packages/backend/src/sync/services/sync/__tests__/gcal.sync.processor.upsert.standalone.test.ts index 79c2c2cd0..593f5478b 100644 --- a/packages/backend/src/sync/services/sync/__tests__/gcal.sync.processor.upsert.standalone.test.ts +++ b/packages/backend/src/sync/services/sync/__tests__/gcal.sync.processor.upsert.standalone.test.ts @@ -66,7 +66,7 @@ describe("GcalSyncProcessor UPSERT: STANDALONE", () => { const origStandalone = gcalEvents.regular; const updatedStandalone = { ...origStandalone, - summary: origStandalone.summary + " - Changed in GCal", + summary: `${origStandalone.summary} - Changed in GCal`, }; const origEventsCount = (await getEventsInDb({ user: user._id.toString() })) diff --git a/packages/core/src/util/date/dayjs-compass.plugin.test.ts b/packages/core/src/util/date/dayjs-compass.plugin.test.ts index 9894187fd..bc3d6a2ef 100644 --- a/packages/core/src/util/date/dayjs-compass.plugin.test.ts +++ b/packages/core/src/util/date/dayjs-compass.plugin.test.ts @@ -157,7 +157,7 @@ describe("monthStrFromZeroIndex", () => { for (let index = -5; index < 20; index++) { const validIndex = index >= 0 && index <= 11; const month = dayjs.monthStrFromZeroIndex(index); - const intMonth = parseInt(month); + const intMonth = parseInt(month, 10); if (validIndex) expect(intMonth).toStrictEqual(index + 1); diff --git a/packages/scripts/src/commands/build.backend.ts b/packages/scripts/src/commands/build.backend.ts index efe2fff4d..ebf82df0c 100644 --- a/packages/scripts/src/commands/build.backend.ts +++ b/packages/scripts/src/commands/build.backend.ts @@ -17,7 +17,7 @@ import { } from "@scripts/common/cli.constants"; import { getEnvironmentAnswer, log } from "@scripts/common/cli.utils"; import { $ } from "bun"; -import path from "path"; +import path from "node:path"; const BACKEND_BUILD = path.join(COMPASS_BUILD_DEV, "backend"); diff --git a/packages/web/src/common/hooks/useFloatingAtCursor.ts b/packages/web/src/common/hooks/useFloatingAtCursor.ts index 7f5c5d5a0..4520d2645 100644 --- a/packages/web/src/common/hooks/useFloatingAtCursor.ts +++ b/packages/web/src/common/hooks/useFloatingAtCursor.ts @@ -31,7 +31,7 @@ import { } from "@web/common/hooks/useOpenAtCursor"; import { theme } from "@web/common/styles/theme"; -const themeSpacing = parseInt(theme.spacing.xs); +const themeSpacing = parseInt(theme.spacing.xs, 10); const placements: Placement[] = [ "right-start", diff --git a/packages/web/src/common/utils/datetime/web.date.util.ts b/packages/web/src/common/utils/datetime/web.date.util.ts index 27a88b3d5..3ba1cd73b 100644 --- a/packages/web/src/common/utils/datetime/web.date.util.ts +++ b/packages/web/src/common/utils/datetime/web.date.util.ts @@ -154,7 +154,7 @@ export const getWeekRangeLabel = (weekStart: Dayjs, weekEnd: Dayjs) => { const isSameMonth = weekStart.month() === weekEnd.month(); const start = weekStart.format("M.D"); const end = weekEnd.format(isSameMonth ? "D" : "M.D"); - const label = start + " - " + end; + const label = `${start} - ${end}`; return label; }; diff --git a/packages/web/src/common/utils/dom/grid-organization.util.ts b/packages/web/src/common/utils/dom/grid-organization.util.ts index 5532a0ab0..f1cd35bdb 100644 --- a/packages/web/src/common/utils/dom/grid-organization.util.ts +++ b/packages/web/src/common/utils/dom/grid-organization.util.ts @@ -27,7 +27,7 @@ export const maxGridZIndex$ = new BehaviorSubject(0); const borderRingSpace = 2; const fullWidthFactorThreshold = 1.75; -const themeSpacing = parseInt(theme.spacing.s); +const themeSpacing = parseInt(theme.spacing.s, 10); const canvas = document.createElement("canvas"); const canvasContext = canvas.getContext("2d"); const selector = `.${CLASS_TIMED_CALENDAR_EVENT}`; diff --git a/packages/web/src/common/utils/overlap/overlap.ts b/packages/web/src/common/utils/overlap/overlap.ts index 60ee4eae8..6768c04a5 100644 --- a/packages/web/src/common/utils/overlap/overlap.ts +++ b/packages/web/src/common/utils/overlap/overlap.ts @@ -73,7 +73,7 @@ export const getOverlappingStyles = ( const totalEventsInGroup = event.position.totalEventsInGroup ?? 1; const order = event.position.horizontalOrder ?? 0; const index = (totalEventsInGroup ?? 1) - order; - const themeSpacing = parseInt(theme.spacing.s); + const themeSpacing = parseInt(theme.spacing.s, 10); const spacing = themeSpacing * 3; const maxWidthDivisor = isOverlapping ? 2 : 1; const maxContainerWidth = gridWidth - themeSpacing; diff --git a/packages/web/src/ducks/events/selectors/event.selectors.ts b/packages/web/src/ducks/events/selectors/event.selectors.ts index 9210b859e..802e0fde3 100644 --- a/packages/web/src/ducks/events/selectors/event.selectors.ts +++ b/packages/web/src/ducks/events/selectors/event.selectors.ts @@ -19,7 +19,7 @@ export const selectAllDayEvents = createSelector( (_id: string) => entities[_id], ); const _allDayEvents: Schema_GridEvent_NoPosition[] = weekEvents?.filter( - (e: Schema_Event) => e !== undefined && e.isAllDay, + (e: Schema_Event) => e?.isAllDay, ); const { allDayEvents } = assignEventsToRow(_allDayEvents); return allDayEvents; diff --git a/packages/web/src/ducks/events/slices/event.slice.util.ts b/packages/web/src/ducks/events/slices/event.slice.util.ts index d454bce68..e94d73c64 100644 --- a/packages/web/src/ducks/events/slices/event.slice.util.ts +++ b/packages/web/src/ducks/events/slices/event.slice.util.ts @@ -31,7 +31,7 @@ export const cancel = ( action: Action_DeleteEvent, ): void => { // Handle case where state.value or state.value.data might be undefined/null - if (!state.value || !state.value.data) { + if (!state.value?.data) { // If state is not initialized, there's nothing to delete return; } diff --git a/packages/web/src/views/Calendar/components/Draft/Draft.tsx b/packages/web/src/views/Calendar/components/Draft/Draft.tsx index dd9fdcadd..db06a3d96 100644 --- a/packages/web/src/views/Calendar/components/Draft/Draft.tsx +++ b/packages/web/src/views/Calendar/components/Draft/Draft.tsx @@ -1,4 +1,4 @@ -import React, { type FC } from "react"; +import { type FC } from "react"; import { createPortal } from "react-dom"; import { Categories_Event } from "@core/types/event.types"; import { getDraftContainer } from "@web/common/utils/draft/draft.util"; @@ -36,17 +36,15 @@ export const Draft: FC = ({ measurements, weekProps }) => { category === Categories_Event.ALLDAY || category === Categories_Event.TIMED; return createPortal( - <> - {isGridDraft && ( - - )} - , + isGridDraft && ( + + ), container, ); }; diff --git a/packages/web/src/views/Calendar/components/Draft/hooks/actions/submit.parser.ts b/packages/web/src/views/Calendar/components/Draft/hooks/actions/submit.parser.ts index 79b703138..acc0dacf0 100644 --- a/packages/web/src/views/Calendar/components/Draft/hooks/actions/submit.parser.ts +++ b/packages/web/src/views/Calendar/components/Draft/hooks/actions/submit.parser.ts @@ -61,10 +61,9 @@ export const prepEventBeforeSubmit = ( // Ensure the event has a position field for grid validation // If it doesn't have one (e.g., all-day events), convert it to a grid event first - const eventWithPosition = - _event.position && _event.position.isOverlapping - ? _event - : assembleGridEvent(_event); + const eventWithPosition = _event.position?.isOverlapping + ? _event + : assembleGridEvent(_event); const event = validateGridEvent(eventWithPosition); return event; diff --git a/packages/web/src/views/Calendar/components/Event/Grid/GridEvent/GridEvent.tsx b/packages/web/src/views/Calendar/components/Event/Grid/GridEvent/GridEvent.tsx index 817df7c33..4a0c0d81f 100644 --- a/packages/web/src/views/Calendar/components/Event/Grid/GridEvent/GridEvent.tsx +++ b/packages/web/src/views/Calendar/components/Event/Grid/GridEvent/GridEvent.tsx @@ -206,24 +206,22 @@ const _GridEvent = ( {getTimesLabel(event.startDate, event.endDate)} )} - <> -
{ - onScalerMouseDown(event, e, "startDate"); - }} - /> -
{ - onScalerMouseDown(event, e, "endDate"); - }} - /> - +
{ + onScalerMouseDown(event, e, "startDate"); + }} + /> +
{ + onScalerMouseDown(event, e, "endDate"); + }} + /> )} diff --git a/packages/web/src/views/Calendar/components/Sidebar/SomedayTab/SomedayEvents/DraggableSomedayEvent/DraggableSomedayEvent.tsx b/packages/web/src/views/Calendar/components/Sidebar/SomedayTab/SomedayEvents/DraggableSomedayEvent/DraggableSomedayEvent.tsx index d2af248e3..bbb74a280 100644 --- a/packages/web/src/views/Calendar/components/Sidebar/SomedayTab/SomedayEvents/DraggableSomedayEvent/DraggableSomedayEvent.tsx +++ b/packages/web/src/views/Calendar/components/Sidebar/SomedayTab/SomedayEvents/DraggableSomedayEvent/DraggableSomedayEvent.tsx @@ -1,5 +1,5 @@ import { Draggable } from "@hello-pangea/dnd"; -import React, { type FC } from "react"; +import { type FC } from "react"; import { type Categories_Event, type Schema_Event, @@ -42,22 +42,20 @@ export const DraggableSomedayEvent: FC = ({ > {(provided, snapshot) => { return ( - <> - actions.onSubmit(category, event)} - provided={provided} - snapshot={snapshot} - setEvent={setters.setDraft} - weekViewRange={{ startDate: start, endDate: end }} - /> - + actions.onSubmit(category, event)} + provided={provided} + snapshot={snapshot} + setEvent={setters.setDraft} + weekViewRange={{ startDate: start, endDate: end }} + /> ); }} diff --git a/packages/web/src/views/Calendar/components/Sidebar/SomedayTab/SomedayEvents/SomedayEventsContainer/SomedayEventsContainer.tsx b/packages/web/src/views/Calendar/components/Sidebar/SomedayTab/SomedayEvents/SomedayEventsContainer/SomedayEventsContainer.tsx index f9c25f86a..a106af59c 100644 --- a/packages/web/src/views/Calendar/components/Sidebar/SomedayTab/SomedayEvents/SomedayEventsContainer/SomedayEventsContainer.tsx +++ b/packages/web/src/views/Calendar/components/Sidebar/SomedayTab/SomedayEvents/SomedayEventsContainer/SomedayEventsContainer.tsx @@ -79,62 +79,60 @@ export const SomedayEventsContainer: FC = ({ }; return ( - <> - - {(provided, snapshot) => { - return ( - - - {provided.placeholder} + + {(provided, snapshot) => { + return ( + + + {provided.placeholder} - {!isDraftingNew && ( -
- {state.isDragging ? ( + {!isDraftingNew && ( +
+ {state.isDragging ? ( + + context.actions.createSomedayDraft(category) + } + /> + ) : ( + renderWithTooltip( context.actions.createSomedayDraft(category) } - /> - ) : ( - renderWithTooltip( - - context.actions.createSomedayDraft(category) - } - />, - ) - )} -
- )} + />, + ) + )} +
+ )} - {isDraftingThisCategory && state.draft && ( - - )} -
- ); - }} -
- + {isDraftingThisCategory && state.draft && ( + + )} +
+ ); + }} +
); }; diff --git a/packages/web/src/views/Calendar/hooks/mouse/useEventListener.ts b/packages/web/src/views/Calendar/hooks/mouse/useEventListener.ts index 0525074b8..1f63f6eae 100644 --- a/packages/web/src/views/Calendar/hooks/mouse/useEventListener.ts +++ b/packages/web/src/views/Calendar/hooks/mouse/useEventListener.ts @@ -16,7 +16,7 @@ export const useEventListener = ( }, [eventName, handler]); useEffect(() => { - const isSupported = element && element.addEventListener; + const isSupported = element?.addEventListener; if (!isSupported) return;