tutorbookapp/tutorbook

View on GitHub
components/calendar/state.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { FormEvent, createContext, useContext } from 'react';

import { Callback } from 'lib/model/callback';
import { Meeting } from 'lib/model/meeting';
import { MeetingsQuery } from 'lib/model/query/meetings';

export enum DialogPage {
  Display = 0,
  Edit,
  Create,
}

export interface CalendarState {
  start: Date;
  editing: Meeting;
  setEditing: Callback<Meeting>;
  onEditStop: (evt?: FormEvent) => void;
  editingLeftPercent: number;
  setEditingLeftPercent: Callback<number>;
  editingWidthPercent: number;
  setEditingWidthPercent: Callback<number>;
  rnd: boolean;
  setRnd: Callback<boolean>;
  dialog: boolean;
  setDialog: Callback<boolean>;
  setDialogPage: Callback<DialogPage>;
  dragging: boolean;
  setDragging: Callback<boolean>;
}

export const CalendarStateContext = createContext<CalendarState>({
  start: new MeetingsQuery().from,
  editing: new Meeting(),
  setEditing: () => {},
  onEditStop: () => {},
  editingLeftPercent: 0,
  setEditingLeftPercent: () => {},
  editingWidthPercent: 0,
  setEditingWidthPercent: () => {},
  rnd: false,
  setRnd: () => {},
  dialog: false,
  setDialog: () => {},
  setDialogPage: () => {},
  dragging: false,
  setDragging: () => {},
});

export const useCalendarState = (): CalendarState =>
  useContext<CalendarState>(CalendarStateContext);