TimeTable.tsx (4061B)
1 import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'; 2 import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs'; 3 import { TimePicker } from '@mui/x-date-pickers/TimePicker'; 4 import { FormControl, InputLabel, MenuItem, Select, Table, TableBody, TableCell, TableHead, TableRow } from '@mui/material'; 5 import dayjs from "dayjs"; 6 import React from 'react'; 7 import TimeTablePresets from "./TimetablePresets.json"; 8 9 function timeTableType( 10 period: number, 11 start: Date, 12 end: Date, 13 ) { 14 return {period, start, end}; 15 } 16 17 var selectedPresetName:string; 18 selectedPresetName = "島根大学"; 19 20 function setTimeTableData(presetName: string) { 21 const timetableDate = []; 22 const presetNumber = presetNames.indexOf(presetName); 23 const periodQuantity = TimeTablePresets.presets[presetNumber].timetable.length; 24 for (let i = 0; i < periodQuantity; i++){ 25 const startHour = TimeTablePresets.presets[presetNumber].timetable[i].start[0]; 26 const startMin = TimeTablePresets.presets[presetNumber].timetable[i].start[1]; 27 28 const endHour = TimeTablePresets.presets[presetNumber].timetable[i].end[0]; 29 const endMin = TimeTablePresets.presets[presetNumber].timetable[i].end[1]; 30 31 timetableDate.push(timeTableType(TimeTablePresets.presets[presetNumber].timetable[i].period,new Date(2022,1,1,startHour,startMin),new Date(2022,1,1,endHour,endMin))) 32 } 33 return timetableDate 34 } 35 36 const presetNames = setPresetName(); 37 38 function setPresetName() { 39 const presetNames = []; 40 var presetQuantity = TimeTablePresets.presets.length 41 for (let i = 0; i < presetQuantity;i++){ 42 presetNames.push(TimeTablePresets.presets[i].PresetName); 43 } 44 return presetNames; 45 } 46 47 48 export default function TimeTable() { 49 50 const [preset, setpreset] = React.useState<string | number>(''); 51 const [open, setOpen] = React.useState(false); 52 53 const handleChange = (event: any) => { 54 setpreset(event.target.value); 55 selectedPresetName = event.target.value; 56 }; 57 58 const handleClose = () => { 59 setOpen(false); 60 }; 61 62 const handleOpen = () => { 63 setOpen(true); 64 }; 65 66 return( 67 <LocalizationProvider dateAdapter={AdapterDayjs}> 68 <FormControl sx={{ m: 0, minWidth: 120 }}> 69 <InputLabel id="demo-controlled-open-select-label">preset</InputLabel> 70 <Select 71 labelId="TimeTablePreset" 72 id="TimeTablePreset" 73 open={open} 74 onClose={handleClose} 75 onOpen={handleOpen} 76 value={preset} 77 label="Preset" 78 onChange={handleChange} 79 fullWidth 80 > 81 {presetNames.map((preset) => ( 82 <MenuItem key={preset} value={preset}> 83 {preset} 84 </MenuItem> 85 ))} 86 </Select> 87 </FormControl> 88 <Table> 89 <TableHead> 90 <TableCell>Period</TableCell> 91 <TableCell>Start</TableCell> 92 <TableCell>End</TableCell> 93 </TableHead> 94 <TableBody> 95 { 96 setTimeTableData(selectedPresetName).map((timeTableData) => ( 97 <TableRow key={timeTableData.period}> 98 <TableCell>{timeTableData.period}</TableCell> 99 <TableCell> 100 <TimePicker label="START" defaultValue={dayjs(timeTableData.start)}/> 101 </TableCell> 102 <TableCell> 103 <TimePicker label="END" defaultValue={dayjs(timeTableData.end)}/> 104 </TableCell> 105 </TableRow> 106 )) 107 } 108 </TableBody> 109 </Table> 110 </LocalizationProvider> 111 ); 112 }