【備忘録】MUI DatePickerの非活性/表示オプションについて

# 前置き
今日は10月31日。
世間では、ハロウィンで騒いでいたりいなかったり…
そんな日は早く違う日に変更したい方も居ることだと思います。
そんなあなたは**MUI DatePicker**を使って変更しましょう！

# 前提
ライブラリはDayjsを使用
他のライブラリの場合は適宜変更して下さい。

# 基礎
```js
'use client';

import { LocalizationProvider, DatePicker } from '@mui/x-date-pickers';
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
import React from 'react';


return (
    <LocalizationProvider 
        dateAdapter={AdapterDayjs}
        <DatePicker />
    </LocalizationProvider>
);
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519082/da0bcd97-1aec-2c24-5e70-6ba4deed4acd.png)

カレンダーを出すとこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519082/e98aa868-7623-5b1b-d755-cff9fbb67c30.png)

## 日本圏表示にする
```js
'use client';

import { LocalizationProvider, DatePicker } from '@mui/x-date-pickers';
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
import React from 'react';
import 'dayjs/locale/ja';

return (
    <LocalizationProvider 
        dateAdapter={AdapterDayjs}
        adapterLocale={'ja'}>
        <DatePicker />
    </LocalizationProvider>
);
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519082/95f5a51f-990f-c5f3-26cf-383888d267f0.png)

これだけだと、カレンダー側はちぐはぐになる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519082/428ea111-375f-5ad1-3c03-66b32efb598c.png)

---
直すためにカレンダー側に、フォーマットを設定する。
```js
'use client';

import { LocalizationProvider, DatePicker } from '@mui/x-date-pickers';
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
import React from 'react';
import 'dayjs/locale/ja';

return (
    <LocalizationProvider 
        dateAdapter={AdapterDayjs}
        dateFormats={{ monthAndYear: 'YYYY年M月' }}
        adapterLocale={'ja'}>
        <DatePicker />
    </LocalizationProvider>
);
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519082/d52f6ceb-0e79-964b-0afc-71d1a2a45d18.png)

# 色々変えてみる
## 初期値に今日の日付を入れる
```js
return (
    <LocalizationProvider 
        dateAdapter={AdapterDayjs}
        dateFormats={{ monthAndYear: 'YYYY年M月' }}
        adapterLocale={'ja'}>
        <DatePicker value={dayjs()}/>
    </LocalizationProvider>
);
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519082/38b99275-d816-5a61-21b9-e90afce3381d.png)

## 読み取り専用
```js
return (
    <LocalizationProvider 
        dateAdapter={AdapterDayjs}
        dateFormats={{ monthAndYear: 'YYYY年M月' }}
        adapterLocale={'ja'}>
        <DatePicker
            value={dayjs()}
            readOnly/>
    </LocalizationProvider>
);
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519082/0550bbbd-b615-5335-fa2b-03532437d09f.png)

## 無効
```js
return (
    <LocalizationProvider 
        dateAdapter={AdapterDayjs}
        dateFormats={{ monthAndYear: 'YYYY年M月' }}
        adapterLocale={'ja'}>
        <DatePicker
            value={dayjs()}
            disabled/>
    </LocalizationProvider>
);
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519082/9cef5bf9-6ebf-0b86-7f14-f9d41b2a038c.png)

## アイコンの非表示
```js
return (
    <LocalizationProvider 
        dateAdapter={AdapterDayjs}
        dateFormats={{ monthAndYear: 'YYYY年M月' }}
        adapterLocale={'ja'}>
        <DatePicker
            value={dayjs()}
            disableOpenPicker/>
    </LocalizationProvider>
);
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519082/1a20fb8b-9bd7-e11f-16c2-dbafb3cff427.png)

## カレンダーでの日付の選択不可
```js
return (
    <LocalizationProvider 
        dateAdapter={AdapterDayjs}
        dateFormats={{ monthAndYear: 'YYYY年M月' }}
        adapterLocale={'ja'}>
        <DatePicker
            value={dayjs()}
            disablePast/>
    </LocalizationProvider>
);
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519082/8a4a439d-fcf4-fe35-0e4f-06e14ddba2e2.png)

## テキストのみ読み取り専用

```js
return (
    <LocalizationProvider 
        dateAdapter={AdapterDayjs}
        dateFormats={{ monthAndYear: 'YYYY年M月' }}
        adapterLocale={'ja'}>
        <DatePicker
            value={dayjs()}
            slotProps={{
                textField: {
                    readOnly: 'readOnly',
                }, 
            }}/>
    </LocalizationProvider>
);
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519082/aa2e20ac-4da1-0bcc-4472-e5a18e9d1ec8.png)


## 最後に
今回は、テキストのみ読み取り専用を実装するのに調べたので、
備忘録したわけで決してハロウィンになにかあるわけではありません。