Skip to content

Commit 47e09f9

Browse files
committed
feat(web): move someday event from/to week or month section using keyboard shortcuts
1 parent 76fbb9e commit 47e09f9

File tree

3 files changed

+51
-16
lines changed

3 files changed

+51
-16
lines changed

packages/web/src/views/Calendar/components/Draft/sidebar/hooks/useSidebarActions.ts

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -361,28 +361,37 @@ export const useSidebarActions = (
361361
createDefaultSomeday();
362362
};
363363

364-
const onSubmit = async (category: Categories_Event) => {
365-
if (!state.draft) return;
364+
const onSubmit = async (
365+
category: Categories_Event,
366+
event: Schema_Event | null = state.draft,
367+
) => {
368+
if (!event) return;
366369

367-
const { startDate, endDate } = getDatesByCategory(
368-
category,
369-
viewStart,
370-
viewEnd,
371-
);
372-
const _event = { ...state.draft, startDate, endDate };
370+
let _event = { ...event };
371+
372+
if (!_event.startDate || !_event.endDate) {
373+
// This probably means we are creating a new event, hence why we don't have start/end dates
374+
const { startDate, endDate } = getDatesByCategory(
375+
category,
376+
viewStart,
377+
viewEnd,
378+
);
379+
_event.startDate = startDate;
380+
_event.endDate = endDate;
381+
}
373382

374383
const userId = await getUserId();
375-
const event = prepEvtBeforeSubmit(_event, userId);
384+
_event = prepEvtBeforeSubmit(_event, userId);
376385

377-
const isExisting = event._id;
386+
const isExisting = _event._id;
378387
if (isExisting) {
379-
const isRecurring = event.recurrence?.rule;
380-
const wasRecurring = event.recurrence?.rule === null;
388+
const isRecurring = _event.recurrence?.rule;
389+
const wasRecurring = _event.recurrence?.rule === null;
381390

382391
dispatch(
383392
editEventSlice.actions.request({
384-
_id: event._id,
385-
event,
393+
_id: _event._id,
394+
event: _event,
386395
applyTo: isRecurring || wasRecurring ? "all" : null,
387396
}),
388397
);
@@ -393,7 +402,7 @@ export const useSidebarActions = (
393402
: state.somedayMonthIds.length;
394403

395404
const eventWithOrder = {
396-
...event,
405+
..._event,
397406
order,
398407
};
399408
dispatch(createEventSlice.actions.request(eventWithOrder));

packages/web/src/views/Calendar/components/Sidebar/SomedayTab/SomedayEvents/DraggableSomedayEvent/DraggableSomedayEvent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export const DraggableSomedayEvent: FC<Props> = ({
4242
isDrafting={isDraftingThisEvent}
4343
isOverGrid={isOverGrid}
4444
onMigrate={actions.onMigrate}
45-
onSubmit={() => actions.onSubmit(category)}
45+
onSubmit={(event) => actions.onSubmit(category, event)}
4646
provided={provided}
4747
snapshot={snapshot}
4848
setEvent={setters.setDraft}

packages/web/src/views/Forms/SomedayEventForm/SomedayEventForm.tsx

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ import "react-toastify/dist/ReactToastify.css";
66
import { Key } from "ts-key-enum";
77
import { ID_SOMEDAY_EVENT_FORM } from "@web/common/constants/web.constants";
88
import { colorByPriority } from "@web/common/styles/theme.util";
9+
import {
10+
setEventStartEndDatesToCurrentMonth,
11+
setEventStartEndDatesToCurrentWeek,
12+
} from "@web/common/utils/web.date.util";
913
import { getSomedayEventsSlice } from "@web/ducks/events/slices/someday.slice";
1014
import { useAppDispatch } from "@web/store/store.hooks";
1115
import { useDraftContext } from "@web/views/Calendar/components/Draft/context/useDraftContext";
@@ -125,6 +129,28 @@ export const SomedayEventForm: React.FC<FormProps> = ({
125129
[_onSubmit],
126130
);
127131

132+
useHotkeys(
133+
"ctrl+meta+up",
134+
(e) => {
135+
e.preventDefault();
136+
const updatedEvent = setEventStartEndDatesToCurrentWeek(event);
137+
onSubmit(updatedEvent);
138+
},
139+
hotkeysOptions,
140+
[event],
141+
);
142+
143+
useHotkeys(
144+
"ctrl+meta+down",
145+
async (e) => {
146+
e.preventDefault();
147+
const updatedEvent = setEventStartEndDatesToCurrentMonth(event);
148+
onSubmit(updatedEvent);
149+
},
150+
hotkeysOptions,
151+
[event],
152+
);
153+
128154
const onSetEventField: SetEventFormField = (field) => {
129155
const newEvent = { ...event, ...field };
130156

0 commit comments

Comments
 (0)