import React, { useRef, useEffect, useState, useContext } from 'react'; import { useNavigate, useLocation } from 'react-router-dom'; import { LoadingButton } from '@material-ui/lab'; import IconButton from '@mui/material/IconButton'; import RemoveIcon from '@mui/icons-material/Remove'; import { HeaderContext } from '../../context'; import Alert from '../../component/alert'; import Notification from '../../component/notification'; import PreviewPDF from '../../component/preview_pdf'; import PageLoader from '../../component/page_loader'; import UploadingProgress from '../../component/modal_uploading'; const ParentMeetingAdd = () => { const navigator = useNavigate(); const location = useLocation(); const { isAuthenticate } = useContext(HeaderContext); const father_id = localStorage.getItem('father_id'); const [notice, setNotice] = useState(-1); const [title, setTitle] = useState(''); const [memo, setMemo] = useState(''); const [text, setText] = useState(''); const [pdf, setPdf] = useState(''); const [pdf_url, setPDFURL] = useState(''); const [meeting_image, setMeetingImages] = useState([]); const [approval_list, setApprovalList] = useState([]); const [children_list, setChildrenList] = useState([]); const [_422errors, set422Errors] = useState({title:'', text:'', memo:'', pdf:'', image:''}) const [_400error, set400Error] = useState(''); const [loaded, setLoaded] = useState(false); const [submit, setSubmit] = useState(false); const [check_radio, setCheckRadio] = useState(''); const state = location.state; const isMountedRef = useRef(true); useEffect(() => { isMountedRef.current = false; if(isAuthenticate()){ setLoaded(false); let clone = localStorage.getItem('cloneMeeting'); if(clone){ clone = JSON.parse(clone); setLoaded(true); setTitle(clone?.title); setMemo(clone.memo ? clone.memo: ''); setText(clone?.text); setPdf(clone?.pdf); setPDFURL(clone?.pdf); let images = []; for(let i in clone.meeting_image){ images.push(clone.meeting_image[i].image); } setMeetingImages(images); setApprovalList(clone.approval); var arr = []; for(let i in clone.children){ arr.push({...clone.children[i], checked: false}) } setChildrenList(arr); if((clone.children.length == clone.approval.length) && clone.approval.length > 0 ) setCheckRadio('all_send'); else if((clone.children.length != clone.approval.length) && clone.approval.length > 0) setCheckRadio('pickup_send'); else setCheckRadio(''); localStorage.removeItem('cloneMeeting'); } else{ axios.get('/api/fathers/children/listOfFather', {params:{father_id: father_id}}) .then(response=>{ if(isMountedRef.current) return; setLoaded(true); setNotice(response.data.notice); if(response.data.status_code == 200){ var list = response.data.params; var arr = []; for(var i in list) arr.push({...list[i], checked: false}) setChildrenList(arr); if(list.length > 0) setCheckRadio("all_send"); else setCheckRadio(''); } else { set400Error("失敗しました。"); } }) } } return () => { isMountedRef.current = true; } },[]) //-------------------------------------------------------- useEffect(()=>{ if(!loaded) return; //if dont load data var list = [...children_list]; if(check_radio=="all_send"){ //send all children for(var i=0; iele.child_id == list[i].id) >= 0) list[i].checked = true; else list[i].checked = false; } } setChildrenList(list); },[check_radio]) //---------------------------------------------------------------------- const handleSubmit = (e) => { e.preventDefault(); if(isAuthenticate()){ set422Errors({title:'',memo:'',text:'',pdf:'',image:''}); const formdata = new FormData(); formdata.append('father_id', father_id); formdata.append('title', title); formdata.append('text', text); formdata.append('memo', memo); formdata.append('pdf', pdf); formdata.append('image', JSON.stringify(meeting_image)); let c_arr = []; for(let i in children_list){ if(children_list[i].checked) c_arr.push(children_list[i].id); } formdata.append('children', JSON.stringify(c_arr)); setSubmit(true); axios.post('/api/fathers/meetings/register', formdata) .then(response => { if(isMountedRef.current) return; setNotice(response.data.notice); setSubmit(false); switch(response.data.status_code){ case 200: { const meeting_id = response.data.params.meeting_id; navigator(`/p-account/meeting/detail/${meeting_id}`, { state: "登録成功しました" }); break; } case 400: set400Error("登録失敗しました。"); break; case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break; } }); } } const handleImageChange = (e) => { e.preventDefault(); if(isAuthenticate()){ const files = Array.from(e.target.files); if(e.target.files.length + meeting_image.length > 10) { set400Error("画像は最大10個までです。"); return; } const promises = files.map(_file => { return (new Promise((resolve, reject) => { const reader = new FileReader(); reader.addEventListener('load', (ev) => { resolve(ev.target.result); }); reader.addEventListener('error', reject); reader.readAsDataURL(_file); })) }); Promise.all(promises).then(images => { setMeetingImages([...meeting_image, ...images]); }, error => { console.error(error); }); } }; const handlePDFChange = (e) => { e.preventDefault(); let reader = new FileReader(); let _file = e.target.files[0]; if(!_file) return; setPDFURL(URL.createObjectURL(_file)) reader.readAsDataURL(_file); reader.onloadend = () => { setPdf(reader.result); } } const handleRemoveImage = (image_id) => { let list = [...meeting_image]; list.splice(image_id, 1); setMeetingImages(list); } const handleCheck = (e, index) => { var list = [...children_list]; list[index].checked = e.target.checked; setChildrenList(list); } return (

ミーティング作成

{ !loaded && } { loaded &&
setTitle(e.target.value)} className={`input-default input-title input-h60 input-w480 ${ _422errors.title && 'is-invalid c-input__target'} `} id="title" /> { _422errors.title && {_422errors.title} }