8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

グロースエクスパートナーズAdvent Calendar 2021

Day 17

React + FullCalendarでデフォルト状態から各種プロパティを使ってカスタマイズしていく

Last updated at Posted at 2021-12-16

はじめまして。GxPのよこがわ(@riki_ykgw)と申します。
この記事は、グロースエクスパートナーズ Advent Calendar 2021 17日目の記事です。

私が所属している部では個人の成長を目的とした「GrowthUs」という活動があります。
そこで私が所属しているチームではReactとカレンダーライブラリであるfullCalendarを使って1週間の予定を確認できるビューアーを作っています。
image.png

今回は活動を通じて学んだFullCalendarをReactで使用する場合の各種プロパティの設定方法を紹介していこうと思います。

【追記】FullCalendarに関する新しい記事を公開しました。
こちらも併せて読んでいただけるととてもうれしいです。

環境

  • fullCalendar v5.8.0
  • React v17.0.1

デフォルトの状態

デフォルトの状態だと以下の状態になります。
英語表記でまっさらな感じですね
image.png

コード上ではこんな感じ

App.js
<FullCalendar
  plugins={[timeGridPlugin]}
/>

プロパティについて

ここから様々なプロパティについてご紹介していこうと思います。プロパティを追加で設定することで表示のカスタマイズを行うことができます。
今回は以下について触れていきます

locale

まずは言語の設定。locale="XX"と指定します。
日本語の場合は以下。もし韓国語にしたい場合はlocale="ko"としてください。

App.js
<FullCalendar
  plugins={[timeGridPlugin]}
  locale="ja" // 日本語 
/>

image.png

allDayText

上記では終日予定を表示する「all-day」という項目が英語のままですよね。
ここのテキストを変更したい場合は以下。

App.js
<FullCalendar
  plugins={[timeGridPlugin]}
  locale="ja" // 日本語
  allDayText="終日" //ここに表示させたいテキストを記載する
/>

image.png

「all-day」が「終日」に変わりましたね。

allDaySlot

もし終日予定の表示自体いらない場合は以下
allDaySlot={false} と指定します。

App.js
<FullCalendar
  plugins={[timeGridPlugin]}
  locale="ja" // 日本語
  allDaySlot={false} // alldayの表示設定。trueとすれば表示される
/>

image.png
終日予定の項目がなくなりましたね。

businessHours

次に例えば土日や朝早くの時間はグレーアウトさせたいというときです。
そんな時はbusinessHoursを使います。businessHoursでは指定した日時以外がグレーアウトで表示されます。

App.js
<FullCalendar
  plugins={[timeGridPlugin]}
  locale="ja" // 日本語
  allDaySlot={false} // alldayの表示設定。trueとすれば表示される
  businessHours={{
   daysOfWeek: [1, 2, 3, 4, 5],
   startTime: "07:00",
   endTime: "22:00",
  }} 
/>

image.png
指定した日時以外がグレーアウトされました。

businessHoursの中の設定を簡単に説明します。
まずは日にちの指定をdaysOfWeekで行います。
daysOfWeek: [1, 2, 3, 4, 5]
表示されている左端の日付が0となっているため、平日を指定したい場合は上記のようになります。

時間の指定は以下のようにstartTimeendTimeで設定します。
startTime: "07:00", endTime: "22:00"
上記で指定した時間以外がグレーアウトされます。

slotMinTimeとslotMaxTime

businessHoursの設定をしたら、もはやグレーアウトにしている時間は表示する必要ないのでは?と思った方へ。

そんな時はslotMinTimeslotMaxTimeを使います。
slotMinTimeには表示範囲の開始時間を、slotMaxTimeには終了時間を設定します。

App.js
<FullCalendar
  plugins={[timeGridPlugin]}
  locale="ja" // 日本語
  allDaySlot={false} // alldayの表示設定。trueとすれば表示される
  businessHours={{
   daysOfWeek: [1, 2, 3, 4, 5],
   startTime: "07:00",
   endTime: "22:00",
  }}
  slotMinTime="06:00:00" //時間の表示範囲start
  slotMaxTime="23:00:00" //時間の表示範囲end
/>

image.png
表示が6時から23時までになりましたね。
しかし画面の大きさによっては私のように表示下部が大きく余ってしまいます。

contentHeight

そんな時はcontentHeight={'auto'}を設定します。こうすることでカレンダーの高さをいい感じで調整してくれます。

App.js
<FullCalendar
  plugins={[timeGridPlugin]}
  locale="ja" // 日本語
  allDaySlot={false} // alldayの表示設定。trueとすれば表示される
  businessHours={{
   daysOfWeek: [1, 2, 3, 4, 5],
   startTime: "07:00",
   endTime: "22:00",
  }}
  slotMinTime="06:00:00" //時間の表示範囲start
  slotMaxTime="23:00:00" //時間の表示範囲end
  contentHeight={'auto'} //カレンダーの高さ指定、下部の余りがなくなる
/>

image.png
下部の表示が余っていた部分がなくなりました。

高さを任意の値で指定した場合は以下のように指定します。
800pxの場合
contentHeight={'800px'}

App.js
<FullCalendar
  plugins={[timeGridPlugin]}
  locale="ja" // 日本語
  allDaySlot={false} // alldayの表示設定。trueとすれば表示される
  businessHours={{
   daysOfWeek: [1, 2, 3, 4, 5],
   startTime: "07:00",
   endTime: "22:00",
  }}
  slotMinTime="06:00:00" //時間の表示範囲start
  slotMaxTime="23:00:00" //時間の表示範囲end
  contentHeight={'800px'} //任意の高さに設定
/>

image.png

800pxにすると高さが低くなりスクロールバーが表示されるようになりました。

さいごに

今回はカレンダーの土台となる部分の表示についてご紹介しました。今回紹介した設定だけでもだいぶカレンダーらしい感じになったと個人的には感じます。
ほかにも様々なカスタマイズが可能ですので、今後は今回の続き+イベントの登録やイベントをクリックしたときの処理などに関する記事が書ければと思っております。

参考資料

公式ドキュメント

8
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?