FullCalendar の続きです
今日は React の FullCalendar で、カレンダーに予定を登録できるようにしていきます
カレンダーの日付を選択する方法
FullCalendar の Props に select
というものがあるので、そこにイベントハンドラーを登録すれば良いのかと思いきや、やることが3個ありました。
- interaction プラグインを設定する
selectable
Props を true にするselect
Props でイベントをハンドリングする
1. interaction プラグインを設定する
interaction プラグインを有効にするには、追加のモジュールが必要になります。
$ yarn add @fullcalendar/interaction
+ import interactionPlugin from '@fullcalendar/interaction' export const Calendar = () => { return ( <Box sx={{ width: '100%' }}> <FullCalendar - plugins={[dayGridPlugin]} + plugins={[dayGridPlugin, interactionPlugin]}
2. selectable
Props を true にする
import interactionPlugin from '@fullcalendar/interaction'
export const Calendar = () => {
return (
<Box sx={{ width: '100%' }}>
<FullCalendar
plugins={[dayGridPlugin, interactionPlugin]}
+ selectable={true}
3. select
Props でイベントをハンドリングする
import interactionPlugin from '@fullcalendar/interaction' export const Calendar = () => { + const handleDateSelect = (args: DateSelectArg) => { + alert(`START: ${args.start}\nEND: ${args.end}`) + } return ( <Box sx={{ width: '100%' }}> <FullCalendar plugins={[dayGridPlugin, interactionPlugin]} selectable={true} + select={handleDateSelect}
イベントを登録する
handleDateSelect
のメソッドを改造していきます。
const handleDateSelect = (args: DateSelectArg) => { - alert(`START: ${args.start}\nEND: ${args.end}`) + const title = prompt('予定のタイトルを入力してください') + const calendarInstance= args.view.calendar + + calendarInstance.unselect() + if (title) { + calendarInstance.addEvent({ + title, + start: args.startStr, + end: args.endStr, + allDay: args.allDay, + }) + } }
凄く簡易的ですが、window.prompt() を利用し、ユーザー入力値を得ます。
FullCalendar の calendar instance を用いてイベントの追加を行います。内容は「ユーザー入力値」に加え「選択した日付情報」を使います。
現時点での問題点を発見
これはこれで良いのかもしれませんが、なんとなく カレンダーの日付1枠は 4:3 などの綺麗な四角を保っていてほしい です。
まとめ
選択をハンドリングできてしまえばこっちのもんですね!独自のダイアログを出したりなんでもできそうです。明日は登録したイベントを消したり編集したりしたいですね。