diff --git a/packages/web/src/ducks/events/event.types.ts b/packages/web/src/ducks/events/event.types.ts index 480f02e5e..58f1a8b99 100644 --- a/packages/web/src/ducks/events/event.types.ts +++ b/packages/web/src/ducks/events/event.types.ts @@ -74,9 +74,10 @@ interface Payload_DeleteEvent { } export interface Payload_EditEvent { - applyTo?: Categories_Recur; _id: string; event: Schema_Event; + applyTo?: Categories_Recur; + shouldRemove?: boolean; } export interface Payload_GetPaginatedEvents extends Filters_Pagination { diff --git a/packages/web/src/ducks/events/sagas/event.sagas.ts b/packages/web/src/ducks/events/sagas/event.sagas.ts index be33bd0e0..4765559a8 100644 --- a/packages/web/src/ducks/events/sagas/event.sagas.ts +++ b/packages/web/src/ducks/events/sagas/event.sagas.ts @@ -164,10 +164,15 @@ export function* deleteSomedayEvent({ payload }: Action_DeleteEvent) { } export function* editEvent({ payload }: Action_EditEvent) { + const { _id, applyTo, event, shouldRemove } = payload; + try { - yield put(eventsEntitiesSlice.actions.edit(payload)); - yield call(EventApi.edit, payload._id, payload.event, { - applyTo: payload.applyTo, + shouldRemove + ? yield put(eventsEntitiesSlice.actions.delete({ _id })) + : yield put(eventsEntitiesSlice.actions.edit(payload)); + + yield call(EventApi.edit, _id, event, { + applyTo: applyTo, }); yield put(editEventSlice.actions.success()); } catch (error) { diff --git a/packages/web/src/views/Calendar/hooks/draft/useDraftUtil.ts b/packages/web/src/views/Calendar/hooks/draft/useDraftUtil.ts index eb75b98c9..6fe688dcc 100644 --- a/packages/web/src/views/Calendar/hooks/draft/useDraftUtil.ts +++ b/packages/web/src/views/Calendar/hooks/draft/useDraftUtil.ts @@ -377,16 +377,17 @@ export const useDraftUtil = ( const submit = (draft: Schema_GridEvent) => { const event = prepEvtBeforeSubmit(draft); + const { startOfView, endOfView } = weekProps.component; const isExisting = event._id; - // include param for how to handle recurrences if (isExisting) { - dispatch( - editEventSlice.actions.request({ - _id: event._id, - event, - }) - ); + const isOutsideView = + !dayjs(event.startDate).isBetween(startOfView, endOfView, null, "[]") && + !dayjs(event.endDate).isBetween(startOfView, endOfView, null, "[]"); + + const shouldRemove = isOutsideView ? true : false; + const payload = { _id: event._id, event, shouldRemove }; + dispatch(editEventSlice.actions.request(payload)); } else { dispatch(createEventSlice.actions.request(event)); }