このリポジトリは2023-09-09にアーカイブされています。 ファイルの閲覧とクローンは可能ですが、プッシュ、イシューの作成、プルリクエストはできません。
kikikan/backend/resources/js/component/modal_setting_notify.jsx

162 行
5.9 KiB
React
Raw 通常表示 履歴

2021-12-18 16:05:52 +09:00
import React, { useRef, useEffect, useState } from 'react';
2021-12-30 13:57:05 +09:00
import { Link } from 'react-router-dom';
2021-11-16 02:31:44 +09:00
import Dialog from '@mui/material/Dialog';
import DialogContent from '@mui/material/DialogContent';
import DialogTitle from '@mui/material/DialogTitle';
import Slide from '@mui/material/Slide';
2021-11-16 14:36:47 +09:00
import { CircularProgress } from '@material-ui/core';
2021-11-16 10:29:32 +09:00
import Alert from '../component/alert';
2021-11-16 02:31:44 +09:00
const Transition = React.forwardRef(function Transition(props, ref) {
return <Slide direction="up" ref={ref} {...props} />;
});
2022-01-05 19:38:20 +09:00
export default function ModalSettingNotify({show, handleClose, meetingId, handleLoadedChildren}){
2021-11-16 02:31:44 +09:00
const [unapproval, setUnapproval ] = useState([]);
const [approval, setApproval ] = useState([]);
const [isApproval, setIsApproval ] = useState(false);
2021-11-16 10:29:32 +09:00
const [_success, setSuccess] = useState('');
2021-11-16 11:59:25 +09:00
const [_400error, set400Error] = useState('');
2021-11-16 14:36:47 +09:00
const [loaded1, setLoaded1] = useState(false);
const [loaded2, setLoaded2] = useState(false);
const [loaded, setLoaded] = useState(false);
2022-01-14 16:33:26 +09:00
const isMountedRef = useRef(true);
2022-01-14 16:33:26 +09:00
useEffect(() => {
isMountedRef.current = false;
2021-12-30 13:57:05 +09:00
2021-11-16 14:36:47 +09:00
setLoaded1(false);
2022-01-14 16:54:51 +09:00
axios.get('/api/fathers/meeting/approvals/listChildrenOfApprovel', {params: { meeting_id: meetingId }})
2021-12-30 13:57:05 +09:00
.then((response) => {
2022-01-14 16:33:26 +09:00
if(isMountedRef.current) return;
setLoaded1(true);
if(response.data.status_code==200){
setApproval(response.data.params);
}
2021-12-30 13:57:05 +09:00
});
2021-11-16 14:36:47 +09:00
setLoaded2(false);
2022-01-14 16:54:51 +09:00
axios.get('/api/fathers/meeting/approvals/listChildrenOfUnapprovel', {params: { meeting_id: meetingId }})
2021-12-30 13:57:05 +09:00
.then((response) => {
2022-01-14 16:33:26 +09:00
if(isMountedRef.current) return;
setLoaded2(true);
if(response.data.status_code==200){
setUnapproval(response.data.params);
2021-12-30 13:57:05 +09:00
}
});
2022-01-05 05:12:34 +09:00
return () => {
2022-01-14 16:33:26 +09:00
isMountedRef.current = true;
2022-01-05 05:12:34 +09:00
}
}, []);
2021-11-16 11:59:25 +09:00
2021-12-18 16:05:52 +09:00
2021-11-16 14:36:47 +09:00
useEffect(()=>{
setLoaded(loaded1 && loaded2);
2022-01-05 19:38:20 +09:00
handleLoadedChildren(loaded1 && loaded2);
2021-11-16 14:36:47 +09:00
},[loaded1, loaded2]);
2022-01-14 16:33:26 +09:00
const settingNotify = (email) => {
2021-11-16 11:59:25 +09:00
const formdata = new FormData();
2021-12-16 09:40:24 +09:00
formdata.append('email', JSON.stringify(new Array(email)));
2021-11-16 11:59:25 +09:00
formdata.append('meeting_id', meetingId);
2022-01-14 16:33:26 +09:00
axios.post('/api/fathers/meetingEditNotification', formdata)
.then(response=>{
if(isMountedRef.current) return;
switch(response.data.status_code){
case 200: setSuccess('通知に成功しました!'); break;
case 400: set400Error('通知に失敗しました。'); break;
}
})
2021-11-16 11:59:25 +09:00
}
return (
2021-11-16 02:31:44 +09:00
<Dialog
open={show}
TransitionComponent={Transition}
keepMounted
aria-describedby="alert-dialog-slide-description"
onClose={handleClose}
id="SettingNotifyModal"
>
<DialogTitle className="px-0 pt-3">
<div className="modal-tab-area ft-16">
<div onClick={e => {setIsApproval(false); }} className={`modal-tab-label ${isApproval ? "" : "is-active"}`}><span>未承知</span></div>
<div onClick={e => {setIsApproval(true); }} className={`modal-tab-label ${!isApproval ? "" : "is-active"}`}><span>承知済み</span></div>
</div>
</DialogTitle>
2021-11-16 14:36:47 +09:00
<DialogContent className="position-relative">
{
!loaded &&
<CircularProgress
2021-12-22 06:50:39 +09:00
className="modal-css-loader"
sx={{
2021-12-22 06:53:42 +09:00
animationDuration: '600ms',
2021-12-22 06:50:39 +09:00
}}
thickness={2}
/>
2021-11-16 14:36:47 +09:00
}
{
loaded &&
<>
<div className={ `modal-content border-0 ${!isApproval ? "is-active" : ""}` } id="item01">
{
2021-11-16 14:36:47 +09:00
unapproval.length > 0 ?
unapproval.map((item, ki) =>
<div className="modal-content-item" key={ki}>
<div className="user-wrap">
<Link to={`/p-account/child/detail/${item.child.id}`} >
<div className="user-avatar">
<img alt="name" className="avatar-img" src={item.child.image} />
</div>
<p className="user-name">{item.child.last_name} {item.child.first_name}</p>
2021-11-16 14:36:47 +09:00
</Link>
</div>
<div className="p-notification-btn">
2021-12-16 09:40:24 +09:00
<a onClick={e => settingNotify(item.child.email)} className="btn-default btn-yellow btn-notification btn-r3 btn-h30 btn-w100p btn-fz14">
2022-01-02 15:49:03 +09:00
<span>再通知</span>
2021-11-16 14:36:47 +09:00
</a>
</div>
</div>
2021-11-16 14:36:47 +09:00
)
: <p className="text-center py-2 ft-xs-15">データはありません</p>
}
</div>
2021-11-16 14:36:47 +09:00
<div className={ `modal-content border-0 ${isApproval ? "is-active" : ""}` } id="item02">
{
2021-11-16 14:36:47 +09:00
approval.length > 0 ?
approval?.map((item, kj) =>
2021-11-16 14:36:47 +09:00
<div className="modal-content-item" key={kj}>
<div className="user-wrap">
<Link to={`/p-account/child/detail/${item.child.id}`} >
<div className="user-avatar">
<img alt="name" className="avatar-img" src={item.child.image} />
</div>
<p className="user-name">{item.child.first_name} {item.child.last_name}</p>
</Link>
</div>
</div>
2021-11-16 14:36:47 +09:00
)
: <p className="text-center py-2 ft-xs-15">データはありません</p>
}
</div>
2021-11-16 20:08:46 +09:00
{ _400error && <Alert type="fail" hide={()=>set400Error('')}>{_400error}</Alert> }
{ _success && <Alert type="success" hide={()=>setSuccess('')}>{_success}</Alert>}
2021-11-16 14:36:47 +09:00
</>
}
2021-11-16 02:31:44 +09:00
</DialogContent>
</Dialog>
)
}