fixed memory leak

このコミットが含まれているのは:
dragon1211 2022-01-13 23:33:26 -08:00
コミット ececb1f169
52個のファイルの変更9368行の追加11758行の削除

18357
backend/public/js/app.js vendored

ファイル差分が大きすぎるため省略します 差分を読み込み

ファイルの表示

@ -28,27 +28,26 @@ const AdminChildDetail = () => {
const isMountedRef = useRef(true);
useEffect(async () => {
let mounted = true;
useEffect(() => {
isMountedRef.current = false;
setLoaded(false);
await axios.get(`/api/admin/children/detail/${params?.child_id}`)
.then(response => {
if(!mounted) return;
setLoaded(true);
switch(response.data.status_code){
case 200:{
setChild(response.data.params);
setImage(response.data.params.image);
break;
}
case 400: set400Error('失敗しました。'); break;
axios.get(`/api/admin/children/detail/${params?.child_id}`)
.then(response => {
if(isMountedRef.current) return;
setLoaded(true);
switch(response.data.status_code){
case 200:{
setChild(response.data.params);
setImage(response.data.params.image);
break;
}
})
case 400: set400Error('失敗しました。'); break;
}
})
return () => {
mounted = false
isMountedRef.current = true;
}
},[]);
@ -63,6 +62,7 @@ const AdminChildDetail = () => {
setSubmitImage(true);
axios.put(`/api/admin/children/updateImage/${params?.child_id}`, {image: reader.result})
.then(response => {
if(isMountedRef.current) return;
setSubmitImage(false);
switch(response.data.status_code){
case 200: {
@ -78,10 +78,12 @@ const AdminChildDetail = () => {
};
async function handleAcceptDelete() {
function handleAcceptDelete() {
setSubmit(true);
axios.delete(`/api/admin/children/delete/${params?.child_id}`)
.then(response => {
if(isMountedRef.current) return;
setShowConfirmModal(false);
setSubmit(false);
switch(response.data.status_code){

ファイルの表示

@ -35,35 +35,33 @@ const AdminChildEdit = () => {
const isMountedRef = useRef(true);
useEffect(async () => {
let mounted = true;
useEffect(() => {
isMountedRef.current = false;
setLoaded(false);
await axios.get(`/api/admin/children/detail/${params?.child_id}`)
.then(response => {
if(!mounted) return;
setLoaded(true);
if(response.data.status_code==200)
{
var child = response.data.params;
setChild(child);
if(child){
setFirstName(child.first_name);
setLastName(child.last_name);
setIdentity(child.identity);
setEmail(child.email);
setTelephone(child.tel);
setCompany(child.company);
}
axios.get(`/api/admin/children/detail/${params?.child_id}`)
.then(response => {
if(isMountedRef.current) return;
setLoaded(true);
if(response.data.status_code==200)
{
var child = response.data.params;
setChild(child);
if(child){
setFirstName(child.first_name);
setLastName(child.last_name);
setIdentity(child.identity);
setEmail(child.email);
setTelephone(child.tel);
setCompany(child.company);
}
else {
set400Error("失敗しました。");
}
})
}
else {
set400Error("失敗しました。");
}
})
return () => {
mounted = false
isMountedRef.current = true;
}
},[]);
@ -89,6 +87,7 @@ const AdminChildEdit = () => {
};
axios.put(`/api/admin/children/updateProfile/${params?.child_id}`, request)
.then(response => {
if(isMountedRef.current) return;
setSubmit(false);
switch(response.data.status_code){
case 200: {

ファイルの表示

@ -23,29 +23,27 @@ const AdminChilds = () => {
const isMountedRef = useRef(true);
useEffect( async () => {
useEffect(() => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
await axios.get('/api/admin/children/list')
.then((response) => {
if(!mounted) return;
setLoaded(true);
if(response.data.status_code==200){
setChildrenList(response.data.params);
var len = response.data.params.length;
if(len > INFINITE)
setFetchChildrenList(response.data.params.slice(0, INFINITE));
else setFetchChildrenList(response.data.params.slice(0, len));
}
else {
set400Error("失敗しました。");
}
});
axios.get('/api/admin/children/list')
.then((response) => {
if(isMountedRef.current) return;
setLoaded(true);
if(response.data.status_code==200){
setChildrenList(response.data.params);
var len = response.data.params.length;
if(len > INFINITE)
setFetchChildrenList(response.data.params.slice(0, INFINITE));
else setFetchChildrenList(response.data.params.slice(0, len));
}
else {
set400Error("失敗しました。");
}
});
return () => {
mounted = false
isMountedRef.current = true;
}
}, []);
@ -73,6 +71,7 @@ const AdminChilds = () => {
setChildrenList([]);
axios.get('/api/admin/children/search', {params:{keyword: keyword}})
.then((response) => {
if(isMountedRef.current) return;
setLoaded(true);
if(response.data.status_code==200){
setChildrenList(response.data.params);

ファイルの表示

@ -1,4 +1,4 @@
import React, { useState } from 'react';
import React, { useState, useRef, useEffect } from 'react';
import { useNavigate, useParams } from 'react-router-dom';
import { LoadingButton } from '@material-ui/lab';
@ -19,12 +19,18 @@ const AdminChildPasswordEdit = () => {
});
const [_400error, set400Error] = useState('');
const [_success, setSuccess] = useState('');
const [submit, setSubmit] = useState(false)
const isMountedRef = useRef(true);
const handleSubmit = async (e) => {
useEffect(() => {
isMountedRef.current = false;
return () => {
isMountedRef.current = true;
}
}, [])
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({
password:'',
@ -36,19 +42,20 @@ const AdminChildPasswordEdit = () => {
password_confirmation: password_confirmation
}
await axios.put(`/api/admin/children/updatePassword/${params?.child_id}`, request)
.then(response => {
setSubmit(false);
switch(response.data.status_code){
case 200: {
navigator(`/admin/child/detail/${params?.child_id}`,
{state: response.data.success_messages});
break;
}
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
axios.put(`/api/admin/children/updatePassword/${params?.child_id}`, request)
.then(response => {
if(isMountedRef.current) return;
setSubmit(false);
switch(response.data.status_code){
case 200: {
navigator(`/admin/child/detail/${params?.child_id}`,
{state: response.data.success_messages});
break;
}
})
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
})
}

ファイルの表示

@ -1,4 +1,4 @@
import React, { useState } from 'react';
import React, { useState, useRef, useEffect } from 'react';
import { useLocation } from 'react-router-dom';
import { LoadingButton } from '@material-ui/lab';
import { useCookies } from 'react-cookie';
@ -18,13 +18,22 @@ const AdminLogin = () => {
const [_400error, set400Error] = useState(null);
const [_success, setSuccess] = useState(null);
const isMountedRef = useRef(true);
useEffect(() => {
isMountedRef.current = false;
return () => {
isMountedRef.current = true;
}
}, [])
const init_error = () => {
set422Errors({ email:null, password:null });
set400Error(null);
}
const handleSubmit = async (e) => {
const handleSubmit = (e) => {
e.preventDefault();
setSubmit(true); //show progressbar
const formdata = new FormData();
@ -33,36 +42,37 @@ const AdminLogin = () => {
init_error();
await axios.post('/api/admin/login', formdata)
.then(response => {
setSubmit(false)
switch(response.data.status_code){
case 200: {
localStorage.setItem('kiki_login_flag', true);
localStorage.setItem('kiki_acc_type', 'admin');
setCookie('logged', 'success');
if(location.search == '')
window.location.href = "/admin/meeting";
else
window.location.href = location.search.replace('?redirect_to=', '');
break;
}
case 422: {
window.scrollTo(0, 0);
set422Errors(response.data.error_messages);
break;
}
case 400: {
set400Error(response.data.error_message);
break;
}
axios.post('/api/admin/login', formdata)
.then(response => {
if(isMountedRef.current) return;
setSubmit(false)
switch(response.data.status_code){
case 200: {
localStorage.setItem('kiki_login_flag', true);
localStorage.setItem('kiki_acc_type', 'admin');
setCookie('logged', 'success');
if(location.search == '')
window.location.href = "/admin/meeting";
else
window.location.href = location.search.replace('?redirect_to=', '');
break;
}
if(response.data.status_code != 200){
setPassword('');
}
})
.catch(err=>console.log(err))
case 422: {
window.scrollTo(0, 0);
set422Errors(response.data.error_messages);
break;
}
case 400: {
set400Error(response.data.error_message);
break;
}
}
if(response.data.status_code != 200){
setPassword('');
}
})
.catch(err=>console.log(err))
}

ファイルの表示

@ -28,52 +28,52 @@ const AdminMeetingDetail = () => {
const isMountedRef = useRef(true);
useEffect( async () => {
useEffect( () => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
await axios.get(`/api/admin/meetings/detail/${params?.meeting_id}`)
.then((response) => {
if(!mounted) return;
axios.get(`/api/admin/meetings/detail/${params?.meeting_id}`)
.then((response) => {
if(isMountedRef.current) return;
setLoaded(true);
setLoaded(true);
if(response.data.status_code==200){
var list = response.data.params;
var total=0, num=0;
if(list.approval){
for(var i in list.approval)
{
if(list.approval[i].approval_at) num ++;
total ++;
}
if(response.data.status_code==200){
var list = response.data.params;
var total=0, num=0;
if(list.approval){
for(var i in list.approval)
{
if(list.approval[i].approval_at) num ++;
total ++;
}
setMeeting({...list, denominator:total, numerator:num});
if(list.meeting_image.length > 0) setThumbnail(list.meeting_image[0].image);
}
else {
set400Error("失敗しました。");
}
});
}
setMeeting({...list, denominator:total, numerator:num});
if(list.meeting_image.length > 0) setThumbnail(list.meeting_image[0].image);
}
else {
set400Error("失敗しました。");
}
});
return () => {
mounted = false
isMountedRef.current = true;
}
}, []);
async function handleAcceptDelete() {
function handleAcceptDelete() {
setSubmit(true);
await axios.delete(`/api/admin/meetings/delete/${params?.meeting_id}`)
.then(response => {
setShowConfirmModal(false);
setSubmit(false);
switch(response.data.status_code){
case 200:{
navigator('/admin/meeting', {state: '削除に成功しました!'});
break;
}
case 400: set400Error("削除に失敗しました。"); break;
}
});
axios.delete(`/api/admin/meetings/delete/${params?.meeting_id}`)
.then(response => {
if(isMountedRef.current) return;
setShowConfirmModal(false);
setSubmit(false);
switch(response.data.status_code){
case 200:{
navigator('/admin/meeting', {state: '削除に成功しました!'});
break;
}
case 400: set400Error("削除に失敗しました。"); break;
}
});
};

ファイルの表示

@ -57,51 +57,51 @@ const AdminMeetingEdit = () => {
},[check_radio])
useEffect( async () => {
useEffect(() => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
await axios.get(`/api/admin/meetings/detail/${meeting_id}`)
.then(response => {
if(!mounted) return;
setLoaded(true);
if(response.data.status_code==200){
setMeeting(response.data.params); //Success
setTitle(response.data.params?.title);
setMemo(response.data.params.memo ? response.data.params.memo: '');
setText(response.data.params.text ? response.data.params.text: '');
setMeetingImages(response.data.params?.meeting_image);
setApproval(response.data.params?.approval);
setPdf(response.data.params?.pdf);
setPDFURL(response.data.params?.pdf);
var list = [...response.data.params?.children];
var approval = [...response.data.params?.approval];
var arr = [];
for(var i in list){
if(approval.findIndex(ele=>ele.child_id == list[i].id) >= 0)
arr.push({...list[i], checked: true});
else arr.push({...list[i], checked: false});
}
setChildrenList(arr);
if((approval.length == list.length) && (approval.length > 0))
setCheckRadio('all_send');
else if((approval.length != list.length) && (approval.length > 0))
setCheckRadio('pickup_send');
else setCheckRadio('');
}
else {
set400Error("失敗しました。");
axios.get(`/api/admin/meetings/detail/${meeting_id}`)
.then(response => {
if(isMountedRef.current) return;
setLoaded(true);
if(response.data.status_code==200){
setMeeting(response.data.params); //Success
setTitle(response.data.params?.title);
setMemo(response.data.params.memo ? response.data.params.memo: '');
setText(response.data.params.text ? response.data.params.text: '');
setMeetingImages(response.data.params?.meeting_image);
setApproval(response.data.params?.approval);
setPdf(response.data.params?.pdf);
setPDFURL(response.data.params?.pdf);
var list = [...response.data.params?.children];
var approval = [...response.data.params?.approval];
var arr = [];
for(var i in list){
if(approval.findIndex(ele=>ele.child_id == list[i].id) >= 0)
arr.push({...list[i], checked: true});
else arr.push({...list[i], checked: false});
}
});
setChildrenList(arr);
if((approval.length == list.length) && (approval.length > 0))
setCheckRadio('all_send');
else if((approval.length != list.length) && (approval.length > 0))
setCheckRadio('pickup_send');
else setCheckRadio('');
}
else {
set400Error("失敗しました。");
}
});
return () => {
mounted = false
isMountedRef.current = true;
}
}, []);
const handleSubmit = async (e) => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({title:'',memo:'',text:'',pdf:'',image:''});
@ -120,29 +120,31 @@ const AdminMeetingEdit = () => {
const formdata = new FormData();
formdata.append('children', JSON.stringify(approval_registerIndexes));
await axios.post('/api/admin/meeting/approvals/register',formdata, {params:{meeting_id: meeting_id}})
await axios.delete('/api/admin/meeting/approvals/delete',{params:{children: approval_deleteIndexes, meeting_id: meeting_id}})
axios.post('/api/admin/meeting/approvals/register',formdata, {params:{meeting_id: meeting_id}})
axios.delete('/api/admin/meeting/approvals/delete',{params:{children: approval_deleteIndexes, meeting_id: meeting_id}})
const request = { title: title, text: text, memo: memo, pdf: pdf };
setSubmit(true);
await axios.put(`/api/admin/meetings/update/${meeting_id}`, request)
.then(response => {
setSubmit(false);
switch(response.data.status_code){
case 200: {
navigator(`/admin/meeting/detail/${meeting_id}`,
{state: "更新成功しました!"});
break;
}
case 400: set400Error("更新失敗しました。"); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
axios.put(`/api/admin/meetings/update/${meeting_id}`, request)
.then(response => {
if(isMountedRef.current) return;
setSubmit(false);
switch(response.data.status_code){
case 200: {
navigator(`/admin/meeting/detail/${meeting_id}`,
{state: "更新成功しました!"});
break;
}
});
case 400: set400Error("更新失敗しました。"); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
});
}
const handleImageChange = async (e) => {
const handleImageChange = (e) => {
e.preventDefault();
const files = Array.from(e.target.files);
if(e.target.files.length + meeting_image.length > 10)
@ -161,38 +163,41 @@ const AdminMeetingEdit = () => {
}))
});
Promise.all(promises).then( async (images) => {
Promise.all(promises).then((images) => {
set422Errors({image:''});
const formdata = new FormData();
formdata.append('image', JSON.stringify(images));
setImageSending(true);
await axios.post(`/api/admin/meeting/images/register`, formdata, {params:{meeting_id: meeting_id}})
.then(response => {
setImageSending(false);
switch(response.data.status_code){
case 200: setMeetingImages(response.data.params); break;
case 400: set400Error("画像の登録に失敗しました。"); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
});
axios.post(`/api/admin/meeting/images/register`, formdata, {params:{meeting_id: meeting_id}})
.then(response => {
if(isMountedRef.current) return;
setImageSending(false);
switch(response.data.status_code){
case 200: setMeetingImages(response.data.params); break;
case 400: set400Error("画像の登録に失敗しました。"); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
});
},
error => { console.error(error); });
};
const handleDeleteImage = async (index, image_id) => {
const handleDeleteImage = (index, image_id) => {
let list = [...meeting_image];
list.splice(index, 1);
setMeetingImages(list);
await axios.delete(`/api/admin/meeting/images/delete/${meeting_id}`, {params:{image_id: image_id}})
.then(response=>{
switch(response.data.status_code){
case 400: set400Error("画像の削除に失敗しました。");
}
})
axios.delete(`/api/admin/meeting/images/delete/${meeting_id}`, {params:{image_id: image_id}})
.then(response=>{
if(isMountedRef.current) return;
switch(response.data.status_code){
case 400: set400Error("画像の削除に失敗しました。");
}
})
}

ファイルの表示

@ -25,42 +25,41 @@ const AdminMeetings = () => {
const isMountedRef = useRef(true);
useEffect( async () => {
useEffect(() => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
await axios.get('/api/admin/meetings/list')
.then(response => {
if(!mounted) return;
setLoaded(true);
if(response.data.status_code==200){
//------------Calculate Numerator & Denominator--------------
var list = response.data.params;
var arr = [];
for(var i in list){
var total=0, num=0;
for(var j in list[i].approval)
{
if(list[i].approval[j].approval_at) num ++;
total ++;
}
arr.push({...list[i], denominator:total, numerator:num})
}
setMeetingList(arr);
var len = arr.length;
if(len > INFINITE)
setFetchMeetingList(arr.slice(0, INFINITE));
else setFetchMeetingList(arr.slice(0, len));
}
else {
set400Error("失敗しました。");
}
});
axios.get('/api/admin/meetings/list')
.then(response => {
if(isMountedRef.current) return;
setLoaded(true);
if(response.data.status_code==200){
//------------Calculate Numerator & Denominator--------------
var list = response.data.params;
var arr = [];
for(var i in list){
var total=0, num=0;
for(var j in list[i].approval)
{
if(list[i].approval[j].approval_at) num ++;
total ++;
}
arr.push({...list[i], denominator:total, numerator:num})
}
setMeetingList(arr);
var len = arr.length;
if(len > INFINITE)
setFetchMeetingList(arr.slice(0, INFINITE));
else setFetchMeetingList(arr.slice(0, len));
}
else {
set400Error("失敗しました。");
}
});
return () => {
mounted = false
isMountedRef.current = true;
}
}, []);
@ -78,7 +77,7 @@ const AdminMeetings = () => {
};
const handleSearch = async (e) => {
const handleSearch = (e) => {
e.preventDefault();
if(keyword == '')
{
@ -88,29 +87,31 @@ const AdminMeetings = () => {
set422errors({keyword:''});
setLoaded(false);
setMeetingList([]);
await axios.get('/api/admin/meetings/search',{params:{keyword: keyword}})
.then((response) => {
setLoaded(true);
if(response.data.status_code==200){
//------------Calculate Numerator & Denominator--------------
var list = response.data.params;
var arr = [];
for(var i in list){
var total=0, num=0;
for(var j in list[i].approval)
{
if(list[i].approval[j].approval_at) num ++;
total ++;
}
arr.push({...list[i], denominator:total, numerator:num})
}
setMeetingList(arr);
var len = arr.length;
if(len > INFINITE)
setFetchMeetingList(arr.slice(0, INFINITE));
else setFetchMeetingList(arr.slice(0, len));
}
});
axios.get('/api/admin/meetings/search',{params:{keyword: keyword}})
.then((response) => {
if(isMountedRef.current) return;
setLoaded(true);
if(response.data.status_code==200){
//------------Calculate Numerator & Denominator--------------
var list = response.data.params;
var arr = [];
for(var i in list){
var total=0, num=0;
for(var j in list[i].approval)
{
if(list[i].approval[j].approval_at) num ++;
total ++;
}
arr.push({...list[i], denominator:total, numerator:num})
}
setMeetingList(arr);
var len = arr.length;
if(len > INFINITE)
setFetchMeetingList(arr.slice(0, INFINITE));
else setFetchMeetingList(arr.slice(0, len));
}
});
}

ファイルの表示

@ -1,4 +1,4 @@
import React, { useState } from 'react';
import React, { useState, useRef, useEffect } from 'react';
import { LoadingButton } from '@material-ui/lab';
import Alert from '../../component/alert';
@ -14,23 +14,35 @@ const AdminParentAdd = () => {
const [submit, setSubmit] = useState(false);
const handleSubmit = async (e) => {
const isMountedRef = useRef(true);
useEffect(() => {
isMountedRef.current = false;
return () => {
isMountedRef.current = true;
}
}, [])
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({ email: '' })
setSubmit(true);
const formdata = new FormData();
formdata.append('email', email);
formdata.append('relation_limit', limit);
await axios.post('/api/admin/fathers/registerTemporary', formdata)
.then(response => {
setSubmit(false);
switch(response.data.status_code){
case 200: setSuccess(response.data.success_messages); break;
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
})
.catch(err=>console.log(err))
axios.post('/api/admin/fathers/registerTemporary', formdata)
.then(response => {
if(isMountedRef.current) return;
setSubmit(false);
switch(response.data.status_code){
case 200: setSuccess(response.data.success_messages); break;
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
})
.catch(err=>console.log(err))
}

ファイルの表示

@ -36,11 +36,11 @@ const AdminParentDetail = () => {
useEffect(() => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
axios.get(`/api/admin/fathers/detail/${params?.father_id}`)
.then(response => {
if(!mounted) return;
if(isMountedRef.current) return;
setLoaded(true);
if(response.data.status_code==200){
@ -52,7 +52,7 @@ const AdminParentDetail = () => {
}
})
return function cleanup() {
mounted = false
isMountedRef.current = true;
}
},[]);
@ -62,38 +62,42 @@ const AdminParentDetail = () => {
let reader = new FileReader();
let _file = e.target.files[0];
reader.readAsDataURL(_file);
reader.onloadend = async () => {
reader.onloadend = () => {
set422Errors({image: ''});
setSubmitImage(true);
await axios.put(`/api/admin/fathers/updateImage/${params?.father_id}`, {image: reader.result})
.then(response => {
setSubmitImage(false);
switch(response.data.status_code){
case 200: {
setImage(reader.result);
setSuccess(response.data.success_messages);
break;
}
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
axios.put(`/api/admin/fathers/updateImage/${params?.father_id}`, {image: reader.result})
.then(response => {
if(isMountedRef.current) return;
setSubmitImage(false);
switch(response.data.status_code){
case 200: {
setImage(reader.result);
setSuccess(response.data.success_messages);
break;
}
});
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
});
};
};
async function handleAcceptDelete() {
function handleAcceptDelete() {
setSubmit(true);
await axios.delete(`/api/admin/fathers/delete/${params?.father_id}`)
.then(response => {
setShowConfirmModal(false);
setSubmit(false);
if(response.data.status_code == 200){
navigator('/admin/parent', { state: '削除に成功しました!' });
} else {
set400Error("削除に失敗しました。");
}
});
axios.delete(`/api/admin/fathers/delete/${params?.father_id}`)
.then(response => {
if(isMountedRef.current) return;
setShowConfirmModal(false);
setSubmit(false);
if(response.data.status_code == 200){
navigator('/admin/parent', { state: '削除に成功しました!' });
} else {
set400Error("削除に失敗しました。");
}
});
};

ファイルの表示

@ -32,38 +32,37 @@ const AdminParentEdit = () => {
const isMountedRef = useRef(true);
useEffect( async () => {
useEffect(() => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
await axios.get(`/api/admin/fathers/detail/${params?.father_id}`)
.then(response => {
if(!mounted) return;
setLoaded(true);
if(response.data.status_code==200){
var parent = response.data.params;
setParent(parent);
if(parent){
setCompany(parent?.company);
setEmail(parent.email);
setTelephone(parent.tel);
setProfile(parent.profile ? parent.profile: '');
setLimit(parent.limit);
}
axios.get(`/api/admin/fathers/detail/${params?.father_id}`)
.then(response => {
if(isMountedRef.current) return;
setLoaded(true);
if(response.data.status_code==200){
var parent = response.data.params;
setParent(parent);
if(parent){
setCompany(parent?.company);
setEmail(parent.email);
setTelephone(parent.tel);
setProfile(parent.profile ? parent.profile: '');
setLimit(parent.limit);
}
else{
set400Error("失敗しました。");
}
})
return function cleanup() {
mounted = false
}
else{
set400Error("失敗しました。");
}
})
return () => {
isMountedRef.current = true;
}
},[]);
const handleSubmit = async (e) => {
const handleSubmit = (e) => {
e.preventDefault();
set401Error('');
set422Errors({
@ -82,20 +81,22 @@ const AdminParentEdit = () => {
profile: profile,
};
await axios.put(`/api/admin/fathers/updateProfile/${params?.father_id}`, request)
.then(response => {
setSubmit(false);
switch(response.data.status_code){
case 200: {
navigator(`/admin/parent/detail/${params?.father_id}`,
{ state: response.data.success_messages });
break;
}
case 400: set400Error(response.data.error_messages); break;
case 401: set401Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
axios.put(`/api/admin/fathers/updateProfile/${params?.father_id}`, request)
.then(response => {
if(isMountedRef.current) return;
setSubmit(false);
switch(response.data.status_code){
case 200: {
navigator(`/admin/parent/detail/${params?.father_id}`,
{ state: response.data.success_messages });
break;
}
})
case 400: set400Error(response.data.error_messages); break;
case 401: set401Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
})
}
return (

ファイルの表示

@ -22,29 +22,28 @@ const AdminParents = () => {
const isMountedRef = useRef(true);
useEffect( async () => {
useEffect(() => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
await axios.get('/api/admin/fathers/list')
.then((response) => {
if(!mounted) return;
setLoaded(true);
if(response.data.status_code==200){
setFatherList(response.data.params);
var len = response.data.params.length;
if(len > INFINITE)
setFetchFatherList(response.data.params.slice(0, INFINITE));
else setFetchFatherList(response.data.params.slice(0, len));
}
else {
set400Error("失敗しました。");
}
});
axios.get('/api/admin/fathers/list')
.then((response) => {
if(isMountedRef.current) return;
setLoaded(true);
if(response.data.status_code==200){
setFatherList(response.data.params);
var len = response.data.params.length;
if(len > INFINITE)
setFetchFatherList(response.data.params.slice(0, INFINITE));
else setFetchFatherList(response.data.params.slice(0, len));
}
else {
set400Error("失敗しました。");
}
});
return function cleanup() {
mounted = false
isMountedRef.current = true
}
}, []);
@ -60,7 +59,7 @@ const AdminParents = () => {
};
const handleSearch = async (e) => {
const handleSearch = (e) => {
e.preventDefault();
if(keyword == '')
{
@ -70,17 +69,19 @@ const AdminParents = () => {
set422errors({keyword:''});
setLoaded(false);
setFatherList([]);
await axios.get('/api/admin/fathers/search',{params: {keyword: keyword}})
.then((response) => {
setLoaded(true);
if(response.data.status_code==200){
setFatherList(response.data.params);
var len = response.data.params.length;
if(len > INFINITE)
setFetchFatherList(response.data.params.slice(0, INFINITE));
else setFetchFatherList(response.data.params.slice(0, len));
}
});
axios.get('/api/admin/fathers/search',{params: {keyword: keyword}})
.then((response) => {
if(isMountedRef.current) return;
setLoaded(true);
if(response.data.status_code==200){
setFatherList(response.data.params);
var len = response.data.params.length;
if(len > INFINITE)
setFetchFatherList(response.data.params.slice(0, INFINITE));
else setFetchFatherList(response.data.params.slice(0, len));
}
});
}
return (

ファイルの表示

@ -1,4 +1,4 @@
import React, { useState } from 'react';
import React, { useState, useRef, useEffect } from 'react';
import { useNavigate, useParams } from 'react-router-dom';
import { LoadingButton } from '@material-ui/lab';
@ -19,11 +19,18 @@ const AdminParentPasswordEdit = () => {
});
const [_400error, set400Error] = useState('');
const [_success, setSuccess] = useState('');
const [submit, setSubmit] = useState(false);
const [submit, setSubmit] = useState(false)
const isMountedRef = useRef(true);
useEffect(() => {
isMountedRef.current = false;
return () => {
isMountedRef.current = true;
}
}, [])
const handleSubmit = async (e) => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({
password:'',
@ -35,19 +42,21 @@ const AdminParentPasswordEdit = () => {
password_confirmation: password_confirmation
}
await axios.put(`/api/admin/fathers/updatePassword/${params?.father_id}`, request)
.then(response => {
setSubmit(false);
switch(response.data.status_code){
case 200: {
navigator(`/admin/parent/detail/${params?.father_id}`,
{state: response.data.success_messages});
break;
}
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
axios.put(`/api/admin/fathers/updatePassword/${params?.father_id}`, request)
.then(response => {
if(isMountedRef.current) return;
setSubmit(false);
switch(response.data.status_code){
case 200: {
navigator(`/admin/parent/detail/${params?.father_id}`,
{state: response.data.success_messages});
break;
}
})
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
})
}
return (

ファイルの表示

@ -6,8 +6,8 @@ export default function AdminSide() {
const [selected, setSelected] = useState('');
const [cookies, setCookie] = useCookies(['user']);
const handleLogout = async () => {
await axios.get('/admin/logout')
const handleLogout = () => {
axios.get('/admin/logout')
.then(() => {
setCookie('logged', null);
window.location.href = '/admin/login';

ファイルの表示

@ -1,4 +1,4 @@
import React, { useState } from 'react';
import React, { useState, useRef, useEffect } from 'react';
import { LoadingButton } from '@material-ui/lab';
import Alert from '../../../component/alert';
@ -11,24 +11,35 @@ const ChildForgotPassword = () => {
const [_400error, set400Error] = useState('')
const [_success, setSuccess] = useState('')
const handleSubmit = async (e) => {
const isMountedRef = useRef(true);
useEffect(() => {
isMountedRef.current = false;
return () => {
isMountedRef.current = true;
}
}, [])
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({tel: ''});
setSubmit(true);
const formdata = new FormData();
formdata.append('tel', tel);
await axios.post('/api/children/requestPassword', formdata)
.then(response => {
setSubmit(false)
switch(response.data.status_code){
case 200: setSuccess(response.data.success_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
case 400: set400Error(response.data.error_messages); break;
case 401: set400Error(response.data.error_messages); break;
case 402: set400Error(response.data.error_messages); break;
}
})
axios.post('/api/children/requestPassword', formdata)
.then(response => {
if(isMountedRef.current) return;
setSubmit(false)
switch(response.data.status_code){
case 200: setSuccess(response.data.success_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
case 400: set400Error(response.data.error_messages); break;
case 401: set400Error(response.data.error_messages); break;
case 402: set400Error(response.data.error_messages); break;
}
})
}

ファイルの表示

@ -1,4 +1,4 @@
import React, { useState } from 'react';
import React, { useState, useRef, useEffect } from 'react';
import { useNavigate, useParams } from 'react-router-dom';
import { LoadingButton } from '@material-ui/lab';
@ -18,7 +18,16 @@ const ChildForgotPasswordReset = () => {
const [_400error, set400Error] = useState('')
const handleSubmit = async (e) => {
const isMountedRef = useRef(true);
useEffect(() => {
isMountedRef.current = false;
return () => {
isMountedRef.current = true;
}
}, [])
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({password:'', password_confirmation:''});
setSubmit(true);
@ -28,18 +37,20 @@ const ChildForgotPasswordReset = () => {
token: params?.token
}
await axios.put('/api/children/updatePassword', req)
.then(response => {
setSubmit(false);
switch(response.data.status_code){
case 200: {
navigator('/c-account/forgot-password/complete', {state: response.data.success_messages});
break;
}
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
axios.put('/api/children/updatePassword', req)
.then(response => {
if(isMountedRef.current) return;
setSubmit(false);
switch(response.data.status_code){
case 200: {
navigator('/c-account/forgot-password/complete', {state: response.data.success_messages});
break;
}
})
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
})
}

ファイルの表示

@ -1,4 +1,4 @@
import React, { useState } from 'react';
import React, { useState, useRef, useEffect } from 'react';
import { Link, useLocation } from 'react-router-dom';
import { LoadingButton } from '@material-ui/lab';
import { useCookies } from 'react-cookie';
@ -18,8 +18,16 @@ const ChildLogin = () => {
const [_422errors, set422Errors] = useState({tel: '', password: ''});
const [_400error, set400Error] = useState('');
const isMountedRef = useRef(true);
useEffect(() => {
isMountedRef.current = false;
return () => {
isMountedRef.current = true;
}
}, [])
const handleSubmit = async (e) => {
const handleSubmit = (e) => {
e.preventDefault();
setSubmit(true);
set422Errors({tel:'', password:''});
@ -28,32 +36,33 @@ const ChildLogin = () => {
formdata.append('tel', tel);
formdata.append('password', password);
await axios.post('/api/children/login/', formdata)
.then(response => {
setSubmit(false)
switch(response.data.status_code){
case 200:{
localStorage.setItem("kiki_login_flag", true);
localStorage.setItem('kiki_acc_type', 'c-account');
localStorage.setItem('kiki_acc_id', response.data.params.id);
setCookie('logged', 'success');
if(location.search == '')
window.location.href = "/c-account/meeting";
else
window.location.href = location.search.replace('?redirect_to=', '');
break;
}
case 400: set400Error(response.data.error_message); break;
case 422: {
window.scrollTo(0, 0);
set422Errors(response.data.error_messages);
break;
}
axios.post('/api/children/login/', formdata)
.then(response => {
if(isMountedRef.current) return;
setSubmit(false)
switch(response.data.status_code){
case 200:{
localStorage.setItem("kiki_login_flag", true);
localStorage.setItem('kiki_acc_type', 'c-account');
localStorage.setItem('kiki_acc_id', response.data.params.id);
setCookie('logged', 'success');
if(location.search == '')
window.location.href = "/c-account/meeting";
else
window.location.href = location.search.replace('?redirect_to=', '');
break;
}
if(response.data.status_code != 200){
setPassword('');
case 400: set400Error(response.data.error_message); break;
case 422: {
window.scrollTo(0, 0);
set422Errors(response.data.error_messages);
break;
}
})
}
if(response.data.status_code != 200){
setPassword('');
}
})
}
return (

ファイルの表示

@ -36,18 +36,18 @@ const ChildSignUp = () => {
});
useEffect( async ()=>{
await axios.get('/api/children/checkRegisterMain', {params:{token: params?.token}})
.then(response=>{
switch(response.data.status_code){
case 200: setLoaded(true); setIdentity(response.data.params.tel); break;
case 400: navigator('/c-account/login', {state: ''}); break;
};
})
useEffect(()=>{
axios.get('/api/children/checkRegisterMain', {params:{token: params?.token}})
.then(response=>{
switch(response.data.status_code){
case 200: setLoaded(true); setIdentity(response.data.params.tel); break;
case 400: navigator('/c-account/login', {state: ''}); break;
};
})
},[])
const handleSubmit = async (e) => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({
first_name:'',
@ -74,23 +74,23 @@ const ChildSignUp = () => {
formdata.append('token', params?.token);
await axios.post('/api/children/registerMain', formdata)
.then(response => {
setSubmit(false);
switch(response.data.status_code){
case 200: navigator('/c-account/register/complete/'+ params?.token, {state: response.data.success_messages}); break;
case 400: navigator('/c-account/register/error/' + params?.token, {state: response.data.error_messages}); break;
case 422: {
window.scrollTo(0, 0);
set422Errors(response.data.error_messages);
break;
}
};
if(response.data.status_code != 200){
setPassword('');
setPasswordConfirmation('');
axios.post('/api/children/registerMain', formdata)
.then(response => {
setSubmit(false);
switch(response.data.status_code){
case 200: navigator('/c-account/register/complete/'+ params?.token, {state: response.data.success_messages}); break;
case 400: navigator('/c-account/register/error/' + params?.token, {state: response.data.error_messages}); break;
case 422: {
window.scrollTo(0, 0);
set422Errors(response.data.error_messages);
break;
}
})
};
if(response.data.status_code != 200){
setPassword('');
setPasswordConfirmation('');
}
})
}

ファイルの表示

@ -1,4 +1,4 @@
import React, { useState, useEffect } from 'react';
import React, { useState, useEffect, useRef } from 'react';
import { useNavigate } from 'react-router-dom';
import { LoadingButton } from '@material-ui/lab';
import Alert from '../../../component/alert';
@ -15,36 +15,35 @@ const ChildSignUpTemporary = () => {
const [_422errors, set422Errors] = useState({tel:''});
const [_success, setSuccess] = useState('');
const isMountedRef = useRef(true);
useEffect(() => {
let mounted = true;
isMountedRef.current = false;
setLoaded(false);
if(document.getElementById('father_token')){
let father_id = document.getElementById('father_token').value;
axios.get('/api/children/father/relations/check', {params:{father_id: father_id}})
.then(response=>{
if(mounted){
if(response.data.status_code == 200){
setLoaded(true);
}
else{
navigator('/c-account/login');
}
if(isMountedRef.current) return;
if(response.data.status_code == 200){
setLoaded(true);
}
else{
navigator('/c-account/login');
}
})
}
else{
setLoaded(true);
}
return () => {
mounted = false;
isMountedRef.current = true;
}
}, [])
const handleSubmit = async (e) => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({tel:''});
@ -57,15 +56,17 @@ const ChildSignUpTemporary = () => {
}
setSubmit(true);
await axios.post('/api/children/registerTemporary', formdata)
.then(response => {
setSubmit(false);
switch(response.data.status_code){
case 200: setSuccess("SMSに本登録案内のメッセージを送信しました。本登録を行ってください。"); break;
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
};
})
axios.post('/api/children/registerTemporary', formdata)
.then(response => {
if(isMountedRef.current) return;
setSubmit(false);
switch(response.data.status_code){
case 200: setSuccess("SMSに本登録案内のメッセージを送信しました。本登録を行ってください。"); break;
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
};
})
}

ファイルの表示

@ -34,64 +34,66 @@ const ChildMeetingDetail = () => {
const isMountedRef = useRef(true);
useEffect( async () => {
useEffect(() => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
await axios.get(`/api/children/meetings/detail/${params.meeting_id}`, {params:{child_id: child_id}})
.then(response => {
if(!mounted) return;
setLoaded(true);
setNotice(response.data.notice);
if(response.data.status_code == 200)
{
var meeting = response.data.params;
setMeeting(meeting);
if(meeting.meeting_image.length > 0) setThumbnail(meeting.meeting_image[0].image);
if(meeting.approval.approval_at != null){
setApprovalRegister(true);
}
axios.get(`/api/children/meetings/detail/${params.meeting_id}`, {params:{child_id: child_id}})
.then(response => {
if(isMountedRef.current) return;
setLoaded(true);
setNotice(response.data.notice);
if(response.data.status_code == 200)
{
var meeting = response.data.params;
setMeeting(meeting);
if(meeting.meeting_image.length > 0) setThumbnail(meeting.meeting_image[0].image);
if(meeting.approval.approval_at != null){
setApprovalRegister(true);
}
else {
set400Error("失敗しました。");
}
})
.catch(err=>{
if(!mounted) return;
setLoaded(true);
setNotice(err.response.data.notice);
if(err.response.status==404){
set404Error(err.response.data.message);
}
})
}
else {
set400Error("失敗しました。");
}
})
.catch(err=>{
if(isMountedRef.current) return;
setLoaded(true);
setNotice(err.response.data.notice);
if(err.response.status==404){
set404Error(err.response.data.message);
}
})
return function cleanup() {
mounted = false
isMountedRef.current = true
}
},[]);
const handleApprovalRegister = async () => {
const handleApprovalRegister = () => {
setSubmit(true);
const formdata = new FormData();
formdata.append('child_id', child_id);
formdata.append('meeting_id', params.meeting_id);
await axios.post('/api/children/meeting/approvals/registerApproval', formdata)
.then(response => {
setSubmit(false);
setShowConfirmMoal(false);
setNotice(response.data.notice);
switch(response.data.status_code){
case 200: {
setSuccess(response.data.success_messages);
setApprovalRegister(true);
break;
}
case 400: set400Error(response.data.error_messages); break;
axios.post('/api/children/meeting/approvals/registerApproval', formdata)
.then(response => {
if(isMountedRef.current) return;
setSubmit(false);
setShowConfirmMoal(false);
setNotice(response.data.notice);
switch(response.data.status_code){
case 200: {
setSuccess(response.data.success_messages);
setApprovalRegister(true);
break;
}
})
case 400: set400Error(response.data.error_messages); break;
}
})
}
const handlePDFOpen = (pdf) => {

ファイルの表示

@ -33,47 +33,48 @@ const ChildMeetings = () => {
},[loaded1, loaded2])
useEffect( async () => {
useEffect(() => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
await axios.get('/api/children/meetings/listOfNonApprovalOfChild', {params:{child_id: child_id}})
.then(response => {
if(!mounted) return;
setLoaded1(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
setMettingListNonApproval(response.data.params);
var len = response.data.params.length;
if(len > INFINITE)
setFetchMettingListNonApproval(response.data.params.slice(0, INFINITE));
else setFetchMettingListNonApproval(response.data.params.slice(0, len));
}
else {
set400Error("失敗しました。");
}
})
axios.get('/api/children/meetings/listOfNonApprovalOfChild', {params:{child_id: child_id}})
.then(response => {
if(isMountedRef.current) return;
setLoaded1(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
setMettingListNonApproval(response.data.params);
var len = response.data.params.length;
if(len > INFINITE)
setFetchMettingListNonApproval(response.data.params.slice(0, INFINITE));
else setFetchMettingListNonApproval(response.data.params.slice(0, len));
}
else {
set400Error("失敗しました。");
}
})
await axios.get('/api/children/meetings/listOfApprovalOfChild', {params:{child_id: child_id}})
.then(response => {
if(!mounted) return;
setLoaded2(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
setMettingListApproval(response.data.params);
var len = response.data.params.length;
if(len > INFINITE)
setFetchMettingListApproval(response.data.params.slice(0, INFINITE));
else setFetchMettingListApproval(response.data.params.slice(0, len));
}
else {
set400Error("失敗しました。");
}
})
axios.get('/api/children/meetings/listOfApprovalOfChild', {params:{child_id: child_id}})
.then(response => {
if(isMountedRef.current) return;
setLoaded2(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
setMettingListApproval(response.data.params);
var len = response.data.params.length;
if(len > INFINITE)
setFetchMettingListApproval(response.data.params.slice(0, INFINITE));
else setFetchMettingListApproval(response.data.params.slice(0, len));
}
else {
set400Error("失敗しました。");
}
})
return function cleanup() {
mounted = false
isMountedRef.current = true;
}
},[]);

ファイルの表示

@ -20,33 +20,35 @@ const ChildParentDetail = () => {
const isMountedRef = useRef(true);
useEffect( async () => {
useEffect(() => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
await axios.get('/api/children/fathers/detail/'+ params?.father_id)
.then(response => {
if(!mounted) return;
setLoaded(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
setParent(response.data.params);
}
else {
set400Error("失敗しました。");
}
})
.catch(err=>{
setLoaded(true);
setNotice(err.response.data.notice);
if(err.response.status==404){
set404Error(err.response.data.message);
}
})
axios.get('/api/children/fathers/detail/'+ params?.father_id)
.then(response => {
if(isMountedRef.current) return;
setLoaded(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
setParent(response.data.params);
}
else {
set400Error("失敗しました。");
}
})
.catch(err=>{
if(isMountedRef.current) return;
return function cleanup() {
mounted = false
setLoaded(true);
setNotice(err.response.data.notice);
if(err.response.status==404){
set404Error(err.response.data.message);
}
})
return () => {
isMountedRef.current = true;
}
},[]);

ファイルの表示

@ -22,30 +22,30 @@ const ChildParents = () => {
const isMountedRef = useRef(true);
useEffect( async () => {
useEffect( () => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
await axios.get('/api/children/fathers/listOfChild', {params: {child_id: child_id}})
.then(response => {
if(!mounted) return;
setLoaded(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
setParentList(response.data.params);
var len = response.data.params.length;
if(len > INFINITE)
setFetchParentList(response.data.params.slice(0, INFINITE));
else setFetchParentList(response.data.params.slice(0, len));
}
else {
set400Error("失敗しました。");
}
})
axios.get('/api/children/fathers/listOfChild', {params: {child_id: child_id}})
.then(response => {
if(isMountedRef.current) return;
return function cleanup() {
mounted = false
setLoaded(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
setParentList(response.data.params);
var len = response.data.params.length;
if(len > INFINITE)
setFetchParentList(response.data.params.slice(0, INFINITE));
else setFetchParentList(response.data.params.slice(0, len));
}
else {
set400Error("失敗しました。");
}
})
return () => {
isMountedRef.current = true;
}
}, []);

ファイルの表示

@ -39,43 +39,46 @@ const ChildProfileEdit = () => {
const isMountedRef = useRef(true);
useEffect( async () => {
useEffect(() => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
await axios.get('/api/children/detail/'+child_id)
.then(response => {
if(!mounted) return;
setLoaded(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
let params = response.data.params;
setProfile(params);
setFirstName(params.first_name);
setLastName(params.last_name);
setEmail(params.email);
setTel(params.tel);
setIdentity(params.identity);
setCompany(params.company? params.company: '');
}else {
set400Error("失敗しました。");
}
})
.catch(err=>{
setLoaded(true);
setNotice(err.response.data.notice);
if(err.response.status==404){
set404Error(err.response.data.message);
}
})
return function cleanup() {
mounted = false
axios.get('/api/children/detail/'+child_id)
.then(response => {
if(isMountedRef.current) return;
setLoaded(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
let params = response.data.params;
setProfile(params);
setFirstName(params.first_name);
setLastName(params.last_name);
setEmail(params.email);
setTel(params.tel);
setIdentity(params.identity);
setCompany(params.company? params.company: '');
}else {
set400Error("失敗しました。");
}
})
.catch(err=>{
if(isMountedRef.current) return;
setLoaded(true);
setNotice(err.response.data.notice);
if(err.response.status==404){
set404Error(err.response.data.message);
}
})
return () => {
isMountedRef.current = true
}
},[]);
const handleSubmit = async (e) => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({
first_name:'',
@ -104,19 +107,21 @@ const ChildProfileEdit = () => {
}
setSubmit(true);
await axios.put('/api/children/updateProfile/'+ child_id, post)
.then(response => {
setSubmit(false);
setNotice(response.data.notice);
switch(response.data.status_code){
case 200: {
navigator('/c-account/profile', { state: response.data.success_messages});
break;
}
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
axios.put('/api/children/updateProfile/'+ child_id, post)
.then(response => {
if(isMountedRef.current) return;
setSubmit(false);
setNotice(response.data.notice);
switch(response.data.status_code){
case 200: {
navigator('/c-account/profile', { state: response.data.success_messages});
break;
}
})
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
})
}

ファイルの表示

@ -27,33 +27,35 @@ const ChildProfileDetail = () => {
const isMountedRef = useRef(true);
useEffect( async () => {
useEffect(() => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
await axios.get('/api/children/detail/'+ child_id)
.then(response => {
if(!mounted) return;
setLoaded(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
setProfile(response.data.params);
setImage(response.data.params.image);
} else {
set400Error("失敗しました。");
}
})
.catch(err=>{
if(!mounted) return;
setLoaded(true);
setNotice(err.response.data.notice);
if(err.response.status==404){
set404Error(err.response.data.message);
}
})
axios.get('/api/children/detail/'+ child_id)
.then(response => {
if(isMountedRef.current) return;
setLoaded(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
setProfile(response.data.params);
setImage(response.data.params.image);
} else {
set400Error("失敗しました。");
}
})
.catch(err=>{
if(isMountedRef.current) return;
setLoaded(true);
setNotice(err.response.data.notice);
if(err.response.status==404){
set404Error(err.response.data.message);
}
})
return function cleanup() {
mounted = false
return () => {
isMountedRef.current = true;
}
},[]);
@ -64,8 +66,8 @@ const ChildProfileDetail = () => {
}
})
const handleLogout = async () => {
await axios.get('/c-account/logout')
const handleLogout = () => {
axios.get('/c-account/logout')
.then(() => {
setCookie('logged', null);
window.location.href = '/c-account/login';
@ -78,23 +80,25 @@ const ChildProfileDetail = () => {
let reader = new FileReader();
let _file = e.target.files[0];
reader.readAsDataURL(_file);
reader.onloadend = async () => {
reader.onloadend = () => {
set422Errors({image: ''});
setSubmitImage(true);
await axios.put(`/api/children/updateImage/${child_id}`, {image: reader.result})
.then(response => {
setNotice(response.data.notice);
setSubmitImage(false);
switch(response.data.status_code){
case 200: {
localStorage.setItem('image_upload_success', response.data.success_messages);
window.location.reload(true);
break;
}
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
axios.put(`/api/children/updateImage/${child_id}`, {image: reader.result})
.then(response => {
if(isMountedRef.current) return;
setNotice(response.data.notice);
setSubmitImage(false);
switch(response.data.status_code){
case 200: {
localStorage.setItem('image_upload_success', response.data.success_messages);
window.location.reload(true);
break;
}
});
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
});
};
};

ファイルの表示

@ -1,4 +1,4 @@
import React, { useState } from 'react';
import React, { useState, useRef, useEffect } from 'react';
import { useNavigate } from 'react-router-dom';
import { LoadingButton } from '@material-ui/lab';
@ -25,7 +25,16 @@ const ChildProfilePasswordEdit = () => {
const [submit, setSubmit] = useState(false);
const handleSubmit = async (e) => {
const isMountedRef = useRef(true);
useEffect(() => {
isMountedRef.current = false;
return () => {
isMountedRef.current = true;
}
}, [])
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({
password:'',
@ -37,19 +46,21 @@ const ChildProfilePasswordEdit = () => {
password_confirmation: password_confirmation
}
await axios.put(`/api/children/updatePassword/${child_id}`, post)
.then(response => {
setSubmit(false);
setNotice(response.data.notice);
switch(response.data.status_code){
case 200: {
navigator('/c-account/profile', { state: response.data.success_messages });
break;
}
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
axios.put(`/api/children/updatePassword/${child_id}`, post)
.then(response => {
if(isMountedRef.current) return;
setSubmit(false);
setNotice(response.data.notice);
switch(response.data.status_code){
case 200: {
navigator('/c-account/profile', { state: response.data.success_messages });
break;
}
})
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
})
}

ファイルの表示

@ -1,4 +1,4 @@
import React, { useState } from 'react';
import React, { useState, useRef, useEffect } from 'react';
import { LoadingButton } from '@material-ui/lab';
import Notification from '../../component/notification';
@ -12,18 +12,29 @@ const ChildProfileWithdrawal = () => {
const [_400error, set400Error] = useState('');
const handleSubmit = async (e) => {
const isMountedRef = useRef(true);
useEffect(() => {
isMountedRef.current = false;
return () => {
isMountedRef.current = true;
}
}, [])
const handleSubmit = (e) => {
e.preventDefault();
setSubmit(true);
await axios.delete('/api/children/withdrawal', {params:{child_id: child_id}})
.then(response => {
setSubmit(false);
setNotice(response.data.notice);
switch(response.data.status_code){
case 200: window.location.href = "/c-account/withdrawal/complete"; break;
case 400: set400Error("失敗しました。"); break;
}
})
axios.delete('/api/children/withdrawal', {params:{child_id: child_id}})
.then(response => {
if(isMountedRef.current) return;
setSubmit(false);
setNotice(response.data.notice);
switch(response.data.status_code){
case 200: window.location.href = "/c-account/withdrawal/complete"; break;
case 400: set400Error("失敗しました。"); break;
}
})
}
return (

ファイルの表示

@ -1,4 +1,4 @@
import React, { useEffect, useState } from 'react';
import React, { useEffect, useState, useRef } from 'react';
import { Link } from 'react-router-dom';
import moment from 'moment';
@ -30,7 +30,16 @@ const ChildSearch = () => {
const [notice, setNotice] = useState(localStorage.getItem('notice'));
const handleSearch = async (e) => {
const isMountedRef = useRef(true);
useEffect(() => {
isMountedRef.current = false;
return () => {
isMountedRef.current = true;
}
}, [])
const handleSearch = (e) => {
e.preventDefault();
if(keyword == ''){
document.getElementById('keyword').focus();
@ -40,31 +49,35 @@ const ChildSearch = () => {
setLoaded2(false);
setInitPage(false);
await axios.get('/api/children/meetings/searchOfNonApprovalOfChild', {params:{keyword: keyword, child_id: child_id}})
.then(response => {
setLoaded1(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
setMettingListNonApproval(response.data.params);
var len = response.data.params.length;
if(len > INFINITE)
setFetchMettingListNonApproval(response.data.params.slice(0, INFINITE));
else setFetchMettingListNonApproval(response.data.params.slice(0, len));
}
});
axios.get('/api/children/meetings/searchOfNonApprovalOfChild', {params:{keyword: keyword, child_id: child_id}})
.then(response => {
if(isMountedRef.current) return;
await axios.get('/api/children/meetings/searchOfApprovalOfChild', {params:{keyword: keyword, child_id: child_id}})
.then((response) => {
setLoaded2(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
setMettingListApproval(response.data.params);
var len = response.data.params.length;
if(len > INFINITE)
setFetchMettingListApproval(response.data.params.slice(0, INFINITE));
else setFetchMettingListApproval(response.data.params.slice(0, len));
}
});
setLoaded1(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
setMettingListNonApproval(response.data.params);
var len = response.data.params.length;
if(len > INFINITE)
setFetchMettingListNonApproval(response.data.params.slice(0, INFINITE));
else setFetchMettingListNonApproval(response.data.params.slice(0, len));
}
});
axios.get('/api/children/meetings/searchOfApprovalOfChild', {params:{keyword: keyword, child_id: child_id}})
.then((response) => {
if(isMountedRef.current) return;
setLoaded2(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
setMettingListApproval(response.data.params);
var len = response.data.params.length;
if(len > INFINITE)
setFetchMettingListApproval(response.data.params.slice(0, INFINITE));
else setFetchMettingListApproval(response.data.params.slice(0, len));
}
});
}
useEffect(()=>{

ファイルの表示

@ -8,8 +8,8 @@ export default function ChildSide() {
const child_img = document.getElementById('child_image').value;
const handleLogout = async () => {
await axios.get('/c-account/logout')
const handleLogout = () => {
axios.get('/c-account/logout')
.then(() => {
setCookie('logged', null);
window.location.href = '/c-account/login';

ファイルの表示

@ -25,41 +25,35 @@ export default function ModalSettingNotify({show, handleClose, meetingId, handle
const [loaded2, setLoaded2] = useState(false);
const [loaded, setLoaded] = useState(false);
const isMountedRef = useRef(false);
const isMountedRef = useRef(true);
useEffect( async () => {
isMountedRef.current = true;
let mounted = true;
const source = axios.CancelToken.source()
const controller = new AbortController();
const signal = controller.signal;
useEffect(() => {
isMountedRef.current = false;
setLoaded1(false);
await axios.get('/api/fathers/meeting/approvals/listChildrenOfApprovel', {params: { meeting_id: meetingId }}, {cancelToken: source.token}, { signal: signal })
axios.get('/api/fathers/meeting/approvals/listChildrenOfApprovel', {params: { meeting_id: meetingId }}, {cancelToken: source.token}, { signal: signal })
.then((response) => {
if(mounted){
setLoaded1(true);
if(response.data.status_code==200){
setApproval(response.data.params);
}
if(isMountedRef.current) return;
setLoaded1(true);
if(response.data.status_code==200){
setApproval(response.data.params);
}
});
setLoaded2(false);
await axios.get('/api/fathers/meeting/approvals/listChildrenOfUnapprovel', {params: { meeting_id: meetingId }}, {cancelToken: source.token}, { signal: signal })
axios.get('/api/fathers/meeting/approvals/listChildrenOfUnapprovel', {params: { meeting_id: meetingId }}, {cancelToken: source.token}, { signal: signal })
.then((response) => {
if(mounted){
setLoaded2(true);
if(response.data.status_code==200){
setUnapproval(response.data.params);
}
if(isMountedRef.current) return;
setLoaded2(true);
if(response.data.status_code==200){
setUnapproval(response.data.params);
}
});
return () => {
mounted = false;
source.cancel()
controller.abort();
isMountedRef.current = true;
}
}, []);
@ -70,17 +64,19 @@ export default function ModalSettingNotify({show, handleClose, meetingId, handle
},[loaded1, loaded2]);
const settingNotify = async (email) => {
const settingNotify = (email) => {
const formdata = new FormData();
formdata.append('email', JSON.stringify(new Array(email)));
formdata.append('meeting_id', meetingId);
await axios.post('/api/fathers/meetingEditNotification', formdata)
.then(response=>{
switch(response.data.status_code){
case 200: setSuccess('通知に成功しました!'); break;
case 400: set400Error('通知に失敗しました。'); break;
}
})
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;
}
})
}

ファイルの表示

@ -16,14 +16,14 @@ const Contact = () => {
const [_400error, set400Error] = useState('');
const handleSubmit = async (e) => {
const handleSubmit = (e) => {
e.preventDefault();
setSubmit(true); //show progressbar
set422Errors({ email:'', message:'' });
const formdata = new FormData();
formdata.append('email', email);
formdata.append('message', message);
await axios.post('/api/contacts/register', formdata)
axios.post('/api/contacts/register', formdata)
.then(response => {
setSubmit(false);
switch(response.data.status_code){

ファイルの表示

@ -15,7 +15,7 @@ const UnknownError = () => {
const [_400error, set400Error] = useState('');
const handleSubmit = async (e) => {
const handleSubmit = (e) => {
e.preventDefault();
setSubmit(true); //show progressbar
set422Errors({ email:'', message:'' });
@ -23,16 +23,16 @@ const UnknownError = () => {
formdata.append('email', email);
formdata.append('message', message);
await axios.post('/api/contacts/register/', formdata)
.then(response => {
setSubmit(false);
switch(response.data.status_code){
case 200: navigator('/contact-us/complete', {state: ''}); break;
case 422: set422Errors(response.data.error_messages); break;
case 400: set400Error(response.data.error_messages); break;
};
})
.catch(err=>console.log(err))
axios.post('/api/contacts/register/', formdata)
.then(response => {
setSubmit(false);
switch(response.data.status_code){
case 200: navigator('/contact-us/complete', {state: ''}); break;
case 422: set422Errors(response.data.error_messages); break;
case 400: set400Error(response.data.error_messages); break;
};
})
.catch(err=>console.log(err))
}

ファイルの表示

@ -11,7 +11,7 @@ const ParentForgotPassword = () => {
const [_400error, set400Error] = useState('')
const [_success, setSuccess] = useState('')
const handleSubmit = async (e) => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({email: ''});
setSubmit(true);
@ -19,15 +19,15 @@ const ParentForgotPassword = () => {
const formdata = new FormData();
formdata.append('email', email);
await axios.post('/api/fathers/requestPassword', formdata)
.then(response => {
setSubmit(false)
switch(response.data.status_code){
case 200: setSuccess(response.data.success_messages); break;
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
})
axios.post('/api/fathers/requestPassword', formdata)
.then(response => {
setSubmit(false)
switch(response.data.status_code){
case 200: setSuccess(response.data.success_messages); break;
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
})
}

ファイルの表示

@ -18,7 +18,7 @@ const ParentForgotPasswordReset = () => {
const [_400error, set400Error] = useState('')
const handleSubmit = async (e) => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({password:'', password_confirmation:''});
setSubmit(true);
@ -28,18 +28,18 @@ const ParentForgotPasswordReset = () => {
token: params?.token
}
await axios.put('/api/fathers/updatePassword', req)
.then(response => {
setSubmit(false);
switch(response.data.status_code){
case 200: {
navigator('/p-account/forgot-password/complete', {state: response.data.success_messages});
break;
}
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
axios.put('/api/fathers/updatePassword', req)
.then(response => {
setSubmit(false);
switch(response.data.status_code){
case 200: {
navigator('/p-account/forgot-password/complete', {state: response.data.success_messages});
break;
}
})
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
})
}

ファイルの表示

@ -1,4 +1,4 @@
import React, { useState } from 'react';
import React, { useState, useRef, useEffect } from 'react';
import { Link, useLocation } from 'react-router-dom';
import { LoadingButton } from '@material-ui/lab';
import { useCookies } from 'react-cookie';
@ -20,7 +20,16 @@ const ParentLogin = () => {
const [_400error, set400Error] = useState('');
const handleSubmit = async (e) => {
const isMountedRef = useRef(true);
useEffect(() => {
isMountedRef.current = false;
return () => {
isMountedRef.current = true;
}
}, [])
const handleSubmit = (e) => {
e.preventDefault();
setSubmit(true);
set422Errors({email:'', password:''});
@ -29,32 +38,34 @@ const ParentLogin = () => {
formdata.append('email', email);
formdata.append('password', password);
await axios.post('/api/fathers/login/', formdata)
.then(response => {
setSubmit(false)
switch(response.data.status_code){
case 200:{
localStorage.setItem('kiki_login_flag', true);
localStorage.setItem('kiki_acc_type', 'p-account');
localStorage.setItem('kiki_acc_id', response.data.params.id);
setCookie('logged', 'success');
if(location.search == '')
window.location.href = "/p-account/meeting";
else
window.location.href = location.search.replace('?redirect_to=', '');
break;
}
case 400: set400Error(response.data.error_message); break;
case 422: {
window.scrollTo(0, 0);
set422Errors(response.data.error_messages);
break;
}
axios.post('/api/fathers/login/', formdata)
.then(response => {
if(isMountedRef.current) return;
setSubmit(false)
switch(response.data.status_code){
case 200:{
localStorage.setItem('kiki_login_flag', true);
localStorage.setItem('kiki_acc_type', 'p-account');
localStorage.setItem('kiki_acc_id', response.data.params.id);
setCookie('logged', 'success');
if(location.search == '')
window.location.href = "/p-account/meeting";
else
window.location.href = location.search.replace('?redirect_to=', '');
break;
}
if(response.data.status_code != 200){
setPassword('');
case 400: set400Error(response.data.error_message); break;
case 422: {
window.scrollTo(0, 0);
set422Errors(response.data.error_messages);
break;
}
})
}
if(response.data.status_code != 200){
setPassword('');
}
})
}
return (

ファイルの表示

@ -35,18 +35,18 @@ const ParentSignUp = () => {
const [_400error, set400Error] = useState('');
useEffect( async ()=>{
await axios.get('/api/fathers/checkRegisterMain', {params:{token: params?.token}})
.then(response=>{
switch(response.data.status_code){
case 200: setLoaded(true); break;
case 400: navigator('/p-account/login', { state: '' }); break;
};
})
useEffect(()=>{
axios.get('/api/fathers/checkRegisterMain', {params:{token: params?.token}})
.then(response=>{
switch(response.data.status_code){
case 200: setLoaded(true); break;
case 400: navigator('/p-account/login', { state: '' }); break;
};
})
},[])
const handleSubmit = async (e) => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({
image:'',
@ -68,24 +68,24 @@ const ParentSignUp = () => {
formdata.append('terms', check_terms);
formdata.append('token', params?.token);
await axios.post('/api/fathers/registerMain', formdata)
.then(response => {
setSubmit(false);
switch(response.data.status_code){
case 200: navigator('/p-account/register/complete/'+ params?.token, {state: response.data.success_messages}); break;
case 400: set400Error(response.data.error_messages); break;
case 401: navigator('/p-account/register/error/'+ params?.token, {state: response.data.error_messages}); break;
case 422: {
window.scrollTo(0, 0);
set422Errors(response.data.error_messages);
break;
}
};
if(response.data.status_code != 200){
setPassword('');
setPasswordConfirmation('');
axios.post('/api/fathers/registerMain', formdata)
.then(response => {
setSubmit(false);
switch(response.data.status_code){
case 200: navigator('/p-account/register/complete/'+ params?.token, {state: response.data.success_messages}); break;
case 400: set400Error(response.data.error_messages); break;
case 401: navigator('/p-account/register/error/'+ params?.token, {state: response.data.error_messages}); break;
case 422: {
window.scrollTo(0, 0);
set422Errors(response.data.error_messages);
break;
}
})
};
if(response.data.status_code != 200){
setPassword('');
setPasswordConfirmation('');
}
})
}

ファイルの表示

@ -22,26 +22,26 @@ const ParentChildAdd = () => {
const [response, setResponse] = useState(null);
const isMountedRef = useRef(true);
useEffect( async () => {
useEffect(() => {
//check relation onload
isMountedRef.current = false;
setLoaded(false);
await axios.get('/api/fathers/relations/check')
axios.get('/api/fathers/relations/check')
.then(response=>{
if(!isMountedRef.current){
setNotice(response.data.notice);
setLoaded(true);
setResponse(response);
}
if(isMountedRef.current) return;
setNotice(response.data.notice);
setLoaded(true);
setResponse(response);
})
.catch(err=>console.log(err));
return () => {
console.log('mounted');
return()=>{
isMountedRef.current = true;
}
}, [])
const handleSubmit = async (e) => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({identity: ''});
set401Error('');
@ -50,19 +50,18 @@ const ParentChildAdd = () => {
formdata.append('father_id', father_id);
setSubmit(true);
await axios.post('/api/fathers/relations/register', formdata)
.then(response => {
if(!isMountedRef.current){
setSubmit(false);
setNotice(response.data.notice);
switch(response.data.status_code){
case 200: setSuccess(response.data.success_messages); break;
case 400: set400Error(response.data.error_messages); break;
case 401: set401Error(response.data.error_messages); set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
}
});
axios.post('/api/fathers/relations/register', formdata)
.then(response => {
if(isMountedRef.current) return;
setSubmit(false);
setNotice(response.data.notice);
switch(response.data.status_code){
case 200: setSuccess(response.data.success_messages); break;
case 400: set400Error(response.data.error_messages); break;
case 401: set401Error(response.data.error_messages); set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
});
}
const copyInviteURL = () => {
@ -79,7 +78,7 @@ const ParentChildAdd = () => {
}
}
const copyLineText = async () => {
const copyLineText = () => {
const inviteUrl = document.getElementById('inviteurl_html').value;
const siteUrl = document.getElementById('siteurl').value;
const lineText = `「KIKI」の招待が届いています。%0Aまずは以下より仮登録を行ってください。%0A%0A※スマホ本体を最新の状態にアップデートしてからURLをクリックしてください。%0A%0A${inviteUrl}%0A%0A▼公式サイトはこちら%0A${siteUrl}`;

ファイルの表示

@ -25,13 +25,13 @@ const ParentChildDetail = () => {
const child_id = params?.child_id;
const isMountedRef = useRef(true);
useEffect( async () => {
useEffect(() => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
await axios.get('/api/fathers/children/detail/'+child_id, {params:{father_id: father_id}})
axios.get('/api/fathers/children/detail/'+child_id, {params:{father_id: father_id}})
.then(response => {
if(!mounted) return;
if(isMountedRef.current) return;
setLoaded(true);
setNotice(response.data.notice);
@ -43,7 +43,8 @@ const ParentChildDetail = () => {
}
})
.catch(err=>{
if(!mounted) return;
if(isMountedRef.current) return;
setLoaded(true);
setNotice(err.response.data.notice);
if(err.response.status==404){
@ -51,8 +52,8 @@ const ParentChildDetail = () => {
}
})
return function cleanup() {
mounted = false
return () => {
isMountedRef.current = true
}
},[]);
@ -65,21 +66,23 @@ const ParentChildDetail = () => {
},[]);
//---------------------------------------------------------------
const handleAcceptDelete = async () => {
const handleAcceptDelete = () => {
setSubmit(true);
await axios.delete(`/api/fathers/relations/deleteRelationChild/${child_id}`)
.then(response => {
setSubmit(false);
setShowDelete(false);
setNotice(response.data.notice);
switch(response.data.status_code){
case 200: {
navigator('/p-account/child', { state: "子の削除に成功しました。" });
break;
}
case 400: set400Error('子の削除に失敗しました。'); break;
axios.delete(`/api/fathers/relations/deleteRelationChild/${child_id}`)
.then(response => {
if(isMountedRef.current) return;
setSubmit(false);
setShowDelete(false);
setNotice(response.data.notice);
switch(response.data.status_code){
case 200: {
navigator('/p-account/child', { state: "子の削除に成功しました。" });
break;
}
});
case 400: set400Error('子の削除に失敗しました。'); break;
}
});
};
return (

ファイルの表示

@ -30,37 +30,39 @@ const ParentChildEdit = () => {
const isMountedRef = useRef(true);
useEffect( async () => {
useEffect(() => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
await axios.get('/api/fathers/children/detail/'+child_id, {params:{father_id: father_id}})
.then(response => {
if(!mounted) return;
setNotice(response.data.notice);
setLoaded(true);
if(response.data.status_code==200){
let hire_at = moment(response.data.params.father_relations?.hire_at).toDate();
setHireAt(hire_at);
} else {
set400Error("失敗しました。");
}
})
.catch(err=>{
if(!mounted) return;
setLoaded(true);
setNotice(err.response.data.notice);
if(err.response.status==404){
set404Error(err.response.data.message);
}
})
return function cleanup() {
mounted = false
axios.get('/api/fathers/children/detail/' + child_id, {params:{father_id: father_id}})
.then(response => {
if(isMountedRef.current) return;
setNotice(response.data.notice);
setLoaded(true);
if(response.data.status_code==200){
let hire_at = moment(response.data.params.father_relations?.hire_at).toDate();
setHireAt(hire_at);
} else {
set400Error("失敗しました。");
}
})
.catch(err=>{
if(isMountedRef.current) return;
setLoaded(true);
setNotice(err.response.data.notice);
if(err.response.status==404){
set404Error(err.response.data.message);
}
})
return () => {
isMountedRef.current = true
}
},[]);
const handleSubmit = async (e) => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({hire_at: ''});
const request = {
@ -68,19 +70,21 @@ const ParentChildEdit = () => {
hire_at: hire_at
}
setSubmit(true);
await axios.put(`/api/fathers/relations/updateHireDate/${child_id}`, request)
.then(response => {
setSubmit(false);
setNotice(response.data.notice);
switch(response.data.status_code){
case 200:{
navigator('/p-account/child/detail/'+child_id, { state: response.data.success_messages });
break;
}
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
});
axios.put(`/api/fathers/relations/updateHireDate/${child_id}`, request)
.then(response => {
if(isMountedRef.current) return;
setSubmit(false);
setNotice(response.data.notice);
switch(response.data.status_code){
case 200:{
navigator('/p-account/child/detail/'+child_id, { state: response.data.success_messages });
break;
}
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
});
}
return (

ファイルの表示

@ -22,14 +22,14 @@ const ParentChilds = () => {
const isMountedRef = useRef(true);
useEffect( async () => {
useEffect(() => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
await axios.get('/api/fathers/children/listOfFather', {params: {father_id: father_id}})
axios.get('/api/fathers/children/listOfFather', {params: {father_id: father_id}})
.then(response => {
if(!mounted) return;
if(isMountedRef.current) return;
setLoaded(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
@ -44,8 +44,8 @@ const ParentChilds = () => {
}
})
return function cleanup() {
mounted = false
return () => {
isMountedRef.current = true;
}
}, []);

ファイルの表示

@ -35,15 +35,13 @@ const ParentFavorite = () => {
},[loaded1, loaded2])
useEffect(async () => {
useEffect(() => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
await axios.get('/api/fathers/meetings/listOfNonFavoriteOfFather', {params:{father_id: father_id}})
axios.get('/api/fathers/meetings/listOfNonFavoriteOfFather', {params:{father_id: father_id}})
.then(response => {
if(!mounted) return;
if(isMountedRef.current) return;
setLoaded1(true);
setNotice(response.data.notice);
@ -70,10 +68,9 @@ const ParentFavorite = () => {
}
})
await axios.get('/api/fathers/meetings/listOfFavoriteOfFather', {params:{father_id: father_id}})
axios.get('/api/fathers/meetings/listOfFavoriteOfFather', {params:{father_id: father_id}})
.then(response => {
if(!mounted) return;
if(isMountedRef.current) return;
setLoaded2(true);
setNotice(response.data.notice);
@ -100,8 +97,8 @@ const ParentFavorite = () => {
}
})
return function cleanup() {
mounted = false
return () => {
isMountedRef.current = true;
}
},[]);
@ -127,7 +124,7 @@ const ParentFavorite = () => {
}, SCROLL_DELAY_TIME);
};
async function handleFavorite(meetingId, currentFavorite, stateName) {
function handleFavorite(meetingId, currentFavorite, stateName) {
const formdata = new FormData();
formdata.append('meeting_id', meetingId);
formdata.append('is_favorite', currentFavorite == 1 ? 0 : 1);

ファイルの表示

@ -38,10 +38,10 @@ const ParentMeetingAdd = () => {
const state = location.state;
const isMountedRef = useRef(true);
useEffect( async () => {
useEffect(() => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
let clone = localStorage.getItem('cloneMeeting');
if(clone){
clone = JSON.parse(clone);
@ -71,29 +71,30 @@ const ParentMeetingAdd = () => {
localStorage.removeItem('cloneMeeting');
}
else{
await axios.get('/api/fathers/children/listOfFather', {params:{father_id: father_id}})
.then(response=>{
if(!mounted) 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("失敗しました。");
}
})
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 function cleanup() {
mounted = false;
return () => {
isMountedRef.current = true;
}
},[])
@ -124,7 +125,7 @@ const ParentMeetingAdd = () => {
},[check_radio])
//----------------------------------------------------------------------
const handleSubmit = async (e) => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({title:'',memo:'',text:'',pdf:'',image:''});
@ -143,20 +144,22 @@ const ParentMeetingAdd = () => {
setSubmit(true);
await axios.post('/api/fathers/meetings/register', formdata)
.then(response => {
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;
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;
}
});
}

ファイルの表示

@ -36,49 +36,46 @@ const ParentMeetingDetail = () => {
const [meeting, setMeeting] = useState(null);
const [thumbnail, setThumbnail] = useState(null);
const isMountedRef = useRef(false);
useEffect( async () => {
let mounted = true;
const source = axios.CancelToken.source()
isMountedRef.current = true;
const isMountedRef = useRef(true);
useEffect(() => {
isMountedRef.current = false;
setLoaded(false);
await axios.get(`/api/fathers/meetings/detail/${params?.meeting_id}`, {params: { father_id: father_id}}, {cancelToken: source.token})
axios.get(`/api/fathers/meetings/detail/${params?.meeting_id}`, {params: { father_id: father_id}}, {cancelToken: source.token})
.then((response) => {
if(mounted){
setLoaded(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
var list = response.data.params;
var total=0, num=0;
for(var i in list.approval)
{
if(list.approval[i].approval_at) num ++;
total ++;
}
setMeeting({...list, denominator:total, numerator:num});
setThumbnail(response.data.params.meeting_image[0]?.image);
}
else {
set400Error("失敗しました。");
if(isMountedRef.current) return;
setLoaded(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
var list = response.data.params;
var total=0, num=0;
for(var i in list.approval)
{
if(list.approval[i].approval_at) num ++;
total ++;
}
setMeeting({...list, denominator:total, numerator:num});
setThumbnail(response.data.params.meeting_image[0]?.image);
}
else {
set400Error("失敗しました。");
}
})
.catch(err=>{
if(mounted){
setLoaded(true);
setNotice(err.response.data.notice);
if(err.response.status==404){
set404Error(err.response.data.message);
}
if(isMountedRef.current) return;
setLoaded(true);
setNotice(err.response.data.notice);
if(err.response.status==404){
set404Error(err.response.data.message);
}
})
return(()=>{
mounted = false
isMountedRef.current = false;
source.cancel();
})
return () => {
isMountedRef.current = true;
}
}, []);
//-------------------------------------------------------------
@ -90,25 +87,27 @@ const ParentMeetingDetail = () => {
},[]);
const handleAcceptDelete = async () => {
const handleAcceptDelete = () => {
setSubmitDelete(true);
await axios.delete(`/api/fathers/meetings/delete/${params?.meeting_id}`)
.then(response => {
setNotice(response.data.notice);
setSubmitDelete(false);
setShowDeleteModal(false);
switch(response.data.status_code){
case 200: {
navigator('/p-account/meeting', {state: "ミーティングの削除に成功しました!" });
break;
}
case 400: set400Error('ミーティングの削除に失敗しました。'); break;
axios.delete(`/api/fathers/meetings/delete/${params?.meeting_id}`)
.then(response => {
if(isMountedRef.current) return;
setNotice(response.data.notice);
setSubmitDelete(false);
setShowDeleteModal(false);
switch(response.data.status_code){
case 200: {
navigator('/p-account/meeting', {state: "ミーティングの削除に成功しました!" });
break;
}
});
case 400: set400Error('ミーティングの削除に失敗しました。'); break;
}
});
};
async function handleFavorite(meetingId, currentFavorite) {
function handleFavorite(meetingId, currentFavorite) {
const formdata = new FormData();
formdata.append('meeting_id', meetingId);
formdata.append('is_favorite', currentFavorite == 1 ? 0 : 1);
@ -121,10 +120,12 @@ const ParentMeetingDetail = () => {
setMeeting(updatedItem);
};
const handleNotifyAllChild = async () => {
const handleNotifyAllChild = () => {
setSubmitNotify(true);
await axios.get('/api/fathers/meeting/approvals/listChildrenOfUnapprovel', {params:{meeting_id: params?.meeting_id}})
axios.get('/api/fathers/meeting/approvals/listChildrenOfUnapprovel', {params:{meeting_id: params?.meeting_id}})
.then(response => {
if(isMountedRef.current) return;
setNotice(response.data.notice);
if(response.data.status_code == 200){
var list = response.data.params;
@ -137,6 +138,8 @@ const ParentMeetingDetail = () => {
formdata.append('meeting_id', params?.meeting_id);
axios.post('/api/fathers/meetingEditNotification', formdata)
.then(response=>{
if(isMountedRef.current) return;
setSubmitNotify(false);
setShowNotifySelectModal(false);
switch(response.data.status_code){
@ -149,7 +152,7 @@ const ParentMeetingDetail = () => {
}
const handleUpdateMemo = async (modal_memo) => {
const handleUpdateMemo = (modal_memo) => {
let _tmp = meeting;
_tmp.memo = modal_memo;
setMeeting(_tmp);
@ -157,7 +160,7 @@ const ParentMeetingDetail = () => {
meeting_id: meeting.id,
memo: modal_memo
}
await axios.put('/api/fathers/meetings/updateMemo', post)
axios.put('/api/fathers/meetings/updateMemo', post)
}

ファイルの表示

@ -45,55 +45,57 @@ const ParentMeetingEdit = () => {
const isMountedRef = useRef(true);
useEffect(async () => {
useEffect(() => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
await axios.get(`/api/fathers/meetings/detail/${meeting_id}`, {params: { father_id: father_id}})
.then(response => {
if(!mounted) return;
setLoaded(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
setMeeting(response.data.params);
setTitle(response.data.params?.title);
setMemo(response.data.params.memo ? response.data.params.memo: '');
setText(response.data.params.text ? response.data.params.text: '');
setMeetingImages(response.data.params?.meeting_image);
setApproval(response.data.params?.approval);
setPdf(response.data.params?.pdf);
setPDFURL(response.data.params?.pdf);
var list = [...response.data.params?.children];
var approval = [...response.data.params?.approval];
var arr = [];
for(var i in list){
if(approval.findIndex(ele=>ele.child_id == list[i].id) >= 0)
arr.push({...list[i], checked: true});
else arr.push({...list[i], checked: false});
}
setChildrenList(arr);
if((approval.length==list.length) && approval.length > 0)
setCheckRadio('all_send');
else if((approval.length != list.length) && approval.length > 0)
setCheckRadio('pickup_send');
else setCheckRadio('');
}
else{
set400Error("失敗しました。");
}
})
.catch(err=>{
if(!mounted) return;
setLoaded(true);
setNotice(err.response.data.notice);
if(err.response.status==404){
set404Error(err.response.data.message);
}
})
return function cleanup() {
mounted = false
axios.get(`/api/fathers/meetings/detail/${meeting_id}`, {params: { father_id: father_id}})
.then(response => {
if(isMountedRef.current) return;
setLoaded(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
setMeeting(response.data.params);
setTitle(response.data.params?.title);
setMemo(response.data.params.memo ? response.data.params.memo: '');
setText(response.data.params.text ? response.data.params.text: '');
setMeetingImages(response.data.params?.meeting_image);
setApproval(response.data.params?.approval);
setPdf(response.data.params?.pdf);
setPDFURL(response.data.params?.pdf);
var list = [...response.data.params?.children];
var approval = [...response.data.params?.approval];
var arr = [];
for(var i in list){
if(approval.findIndex(ele=>ele.child_id == list[i].id) >= 0)
arr.push({...list[i], checked: true});
else arr.push({...list[i], checked: false});
}
setChildrenList(arr);
if((approval.length==list.length) && approval.length > 0)
setCheckRadio('all_send');
else if((approval.length != list.length) && approval.length > 0)
setCheckRadio('pickup_send');
else setCheckRadio('');
}
else{
set400Error("失敗しました。");
}
})
.catch(err=>{
if(isMountedRef.current) return;
setLoaded(true);
setNotice(err.response.data.notice);
if(err.response.status==404){
set404Error(err.response.data.message);
}
})
return () => {
isMountedRef.current = true;
}
}, []);
@ -126,7 +128,7 @@ useEffect(()=>{
},[check_radio])
//----------------------------------------------------------------------
const handleSubmit = async (e) => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({title:'',memo:'',text:'',pdf:'',image:''});
@ -146,25 +148,27 @@ useEffect(()=>{
const formdata = new FormData();
formdata.append('children', JSON.stringify(approval_registerIndexes));
await axios.post('/api/fathers/meeting/approvals/register', formdata, {params:{meeting_id: meeting_id}})
await axios.delete('/api/fathers/meeting/approvals/delete', {params:{children: approval_deleteIndexes, meeting_id: meeting_id}})
axios.post('/api/fathers/meeting/approvals/register', formdata, {params:{meeting_id: meeting_id}})
axios.delete('/api/fathers/meeting/approvals/delete', {params:{children: approval_deleteIndexes, meeting_id: meeting_id}})
const request = { title: title, text: text, memo: memo, pdf: pdf };
setSubmit(true);
await axios.put(`/api/fathers/meetings/update/${meeting_id}`, request)
.then(response => {
setNotice(response.data.notice);
setSubmit(false);
switch(response.data.status_code){
case 200: {
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;
axios.put(`/api/fathers/meetings/update/${meeting_id}`, request)
.then(response => {
if(isMountedRef.current) return;
setNotice(response.data.notice);
setSubmit(false);
switch(response.data.status_code){
case 200: {
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;
}
});
}
@ -187,38 +191,42 @@ useEffect(()=>{
}))
});
Promise.all(promises).then( async images => {
Promise.all(promises).then( images => {
set422Errors({image:''});
const formdata = new FormData();
formdata.append('image', JSON.stringify(images));
setImageSending(true);
await axios.post(`/api/fathers/meeting/images/register`, formdata, {params:{meeting_id: meeting_id}})
.then(response=>{
setImageSending(false);
setNotice(response.data.notice);
switch(response.data.status_code){
case 200: setMeetingImages(response.data.params); break;
case 400: set400Error("画像の登録に失敗しました。"); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
})
axios.post(`/api/fathers/meeting/images/register`, formdata, {params:{meeting_id: meeting_id}})
.then(response=>{
if(isMountedRef.current) return;
setImageSending(false);
setNotice(response.data.notice);
switch(response.data.status_code){
case 200: setMeetingImages(response.data.params); break;
case 400: set400Error("画像の登録に失敗しました。"); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
})
},
error => { console.error(error); });
};
const handleDeleteImage = async (index, image_id) => {
const handleDeleteImage = (index, image_id) => {
let list = [...meeting_image];
list.splice(index, 1);
setMeetingImages(list);
await axios.delete(`/api/fathers/meeting/images/delete/${meeting_id}`, {params:{image_id: image_id}})
.then(response=>{
setNotice(response.data.notice);
switch(response.data.status_code){
case 400: set400Error("画像の削除に失敗しました。");
}
})
axios.delete(`/api/fathers/meeting/images/delete/${meeting_id}`, {params:{image_id: image_id}})
.then(response=>{
if(isMountedRef.current) return;
setNotice(response.data.notice);
switch(response.data.status_code){
case 400: set400Error("画像の削除に失敗しました。");
}
})
}
const handlePDFChange = (e) => {

ファイルの表示

@ -42,41 +42,15 @@ const ParentMeetings = () => {
},[loaded1, loaded2])
useEffect( async () => {
useEffect(() => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
await axios.get('/api/fathers/meetings/listOfIncompleteOfFather', {params:{father_id: father_id}})
.then(response => {
if(!mounted) return;
setLoaded1(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
var list = response.data.params;
var arr = [];
for(var i in list){
var total=0, num=0;
for(var j in list[i].approvals)
{
if(list[i].approvals[j].approval_at) num ++;
total ++;
}
arr.push({...list[i], denominator:total, numerator:num})
}
setMeetingListOfIncomplete(arr);
var len = arr.length;
if(len > INFINITE)
setFetchMeetingListOfIncomplete(arr.slice(0, INFINITE));
else setFetchMeetingListOfIncomplete(arr.slice(0, len));
}
})
.catch(err=>console.log(err));
axios.get('/api/fathers/meetings/listOfIncompleteOfFather', {params:{father_id: father_id}})
.then(response => {
if(isMountedRef.current) return;
await axios.get('/api/fathers/meetings/listOfCompleteOfFather', {params:{father_id: father_id}})
.then(response => {
if(!mounted) return;
setLoaded2(true);
setLoaded1(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
var list = response.data.params;
@ -90,17 +64,44 @@ const ParentMeetings = () => {
}
arr.push({...list[i], denominator:total, numerator:num})
}
setMeetingListOfComplete(arr);
setMeetingListOfIncomplete(arr);
var len = arr.length;
if(len > INFINITE)
setFetchMeetingListOfComplete(arr.slice(0, INFINITE));
else setFetchMeetingListOfComplete(arr.slice(0, len));
}
})
.catch(err=>console.log(err));
setFetchMeetingListOfIncomplete(arr.slice(0, INFINITE));
else setFetchMeetingListOfIncomplete(arr.slice(0, len));
}
})
.catch(err=>console.log(err));
return function cleanup() {
mounted = false
axios.get('/api/fathers/meetings/listOfCompleteOfFather', {params:{father_id: father_id}})
.then(response => {
if(isMountedRef.current) return;
setLoaded2(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
var list = response.data.params;
var arr = [];
for(var i in list){
var total=0, num=0;
for(var j in list[i].approvals)
{
if(list[i].approvals[j].approval_at) num ++;
total ++;
}
arr.push({...list[i], denominator:total, numerator:num})
}
setMeetingListOfComplete(arr);
var len = arr.length;
if(len > INFINITE)
setFetchMeetingListOfComplete(arr.slice(0, INFINITE));
else setFetchMeetingListOfComplete(arr.slice(0, len));
}
})
.catch(err=>console.log(err));
return () => {
isMountedRef.current = true;
}
},[]);
@ -126,7 +127,7 @@ const ParentMeetings = () => {
}, SCROLL_DELAY_TIME);
};
const handleFavorite = async (meetingId, currentFavorite, stateName) => {
const handleFavorite = (meetingId, currentFavorite, stateName) => {
const formdata = new FormData();
formdata.append('meeting_id', meetingId);
formdata.append('is_favorite', currentFavorite == 1 ? 0 : 1);

ファイルの表示

@ -32,13 +32,14 @@ const ParentProfileEdit = () => {
const isMountedRef = useRef(true);
useEffect( async () => {
useEffect(() => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
await axios.get(`/api/fathers/detail/${father_id}`)
axios.get(`/api/fathers/detail/${father_id}`)
.then(response => {
if(!mounted) return;
if(isMountedRef.current) return;
setLoaded(true);
setNotice(response.data.notice);
if(response.data.status_code==200) {
@ -53,7 +54,8 @@ const ParentProfileEdit = () => {
}
})
.catch(err=>{
if(!mounted) return;
if(isMountedRef.current) return;
setLoaded(true);
setNotice(err.response.data.notice);
if(err.response.status==404){
@ -61,12 +63,12 @@ const ParentProfileEdit = () => {
}
})
return function cleanup() {
mounted = false
return () => {
isMountedRef.current = true;
}
}, []);
const handleSubmit = async (e) => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({ company:'', email: '', tel: '', profile:'' });
const request = {
@ -76,19 +78,21 @@ const ParentProfileEdit = () => {
profile: profile
}
setSubmit(true);
await axios.put(`/api/fathers/updateProfile/${father_id}`, request)
.then(response => {
setNotice(response.data.notice);
setSubmit(false);
switch(response.data.status_code){
case 200:{
navigator('/p-account/profile', { state: response.data.success_messages });
break;
}
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
});
axios.put(`/api/fathers/updateProfile/${father_id}`, request)
.then(response => {
if(isMountedRef.current) return;
setNotice(response.data.notice);
setSubmit(false);
switch(response.data.status_code){
case 200:{
navigator('/p-account/profile', { state: response.data.success_messages });
break;
}
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
});
}

ファイルの表示

@ -27,34 +27,35 @@ const ParentProfileDetail = () => {
const isMountedRef = useRef(true);
useEffect( async () => {
useEffect(() => {
isMountedRef.current = false;
let mounted = true;
setLoaded(false);
await axios.get('/api/fathers/detail/'+father_id)
.then(response => {
if(!mounted) return;
setLoaded(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
setProfile(response.data.params);
setImage(response.data.params.image);
}
else {
set400Error("失敗しました。");
}
})
.catch(err=>{
if(!mounted) return;
setLoaded(true);
setNotice(err.response.data.notice);
if(err.response.status==404){
set404Error(err.response.data.message);
}
})
return function cleanup() {
mounted = false
axios.get('/api/fathers/detail/'+father_id)
.then(response => {
if(isMountedRef.current) return;
setLoaded(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
setProfile(response.data.params);
setImage(response.data.params.image);
}
else {
set400Error("失敗しました。");
}
})
.catch(err=>{
if(isMountedRef.current) return;
setLoaded(true);
setNotice(err.response.data.notice);
if(err.response.status==404){
set404Error(err.response.data.message);
}
})
return () => {
isMountedRef.current = true;
}
},[]);
@ -65,8 +66,8 @@ const ParentProfileDetail = () => {
}
})
const handleLogout = async () => {
await axios.get('/p-account/logout')
const handleLogout = () => {
axios.get('/p-account/logout')
.then(() => {
setCookie('logged', null);
window.location.href = '/p-account/login';
@ -79,23 +80,25 @@ const ParentProfileDetail = () => {
let reader = new FileReader();
let _file = e.target.files[0];
reader.readAsDataURL(_file);
reader.onloadend = async () => {
reader.onloadend = () => {
set422Errors({image: ''});
setSubmitImage(true);
await axios.put(`/api/fathers/updateImage/${father_id}`, {image: reader.result})
.then(response => {
setNotice(response.data.notice);
setSubmitImage(false);
switch(response.data.status_code){
case 200: {
localStorage.setItem('image_upload_success', response.data.success_messages);
window.location.reload(true);
break;
}
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
axios.put(`/api/fathers/updateImage/${father_id}`, {image: reader.result})
.then(response => {
if(isMountedRef.current) return;
setNotice(response.data.notice);
setSubmitImage(false);
switch(response.data.status_code){
case 200: {
localStorage.setItem('image_upload_success', response.data.success_messages);
window.location.reload(true);
break;
}
});
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
});
};
};

ファイルの表示

@ -1,4 +1,4 @@
import { useState } from 'react';
import React, { useState, useRef, useEffect } from 'react';
import { useNavigate } from 'react-router-dom';
import { LoadingButton } from '@material-ui/lab';
import Notification from '../../component/notification';
@ -24,7 +24,16 @@ const ParentProfilePasswordEdit = () => {
const [submit, setSubmit] = useState(false);
const handleSubmit = async (e) => {
const isMountedRef = useRef(true);
useEffect(() => {
isMountedRef.current = false;
return () => {
isMountedRef.current = true;
}
}, [])
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({
password:'',
@ -35,19 +44,21 @@ const ParentProfilePasswordEdit = () => {
password: password,
password_confirmation: password_confirmation
}
await axios.put(`/api/fathers/updatePassword/${father_id}`, post)
.then(response => {
setSubmit(false);
setNotice(response.data.notice);
switch(response.data.status_code){
case 200:{
navigator('/p-account/profile', { state: response.data.success_messages });
break;
}
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
axios.put(`/api/fathers/updatePassword/${father_id}`, post)
.then(response => {
if(isMountedRef.current) return;
setSubmit(false);
setNotice(response.data.notice);
switch(response.data.status_code){
case 200:{
navigator('/p-account/profile', { state: response.data.success_messages });
break;
}
})
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
})
}
return (

ファイルの表示

@ -1,4 +1,4 @@
import React, { useState } from 'react';
import React, { useState, useEffect, useRef } from 'react';
import { LoadingButton } from '@material-ui/lab';
import Notification from '../../component/notification';
import Alert from '../../component/alert';
@ -11,12 +11,24 @@ const ParentProfileWithdrawal = () => {
const [submit, setSubmit] = useState(false);
const [_400error, set400Error] = useState('');
const handleSubmit = async (e) => {
const isMountedRef = useRef(true);
useEffect(() => {
isMountedRef.current = false;
return () => {
isMountedRef.current = true;
}
}, [])
const handleSubmit = (e) => {
e.preventDefault();
setSubmit(true);
await axios.delete('/api/fathers/withdrawal', {params:{father_id: father_id}})
axios.delete('/api/fathers/withdrawal', {params:{father_id: father_id}})
.then(response => {
if(isMountedRef.current) return;
setSubmit(false);
setNotice(response.data.notice);
switch(response.data.status_code){

ファイルの表示

@ -1,4 +1,4 @@
import React, { useEffect, useState } from 'react';
import React, { useEffect, useState, useRef } from 'react';
import { Link } from 'react-router-dom';
import moment from 'moment';
import IconButton from '@mui/material/IconButton';
@ -32,13 +32,22 @@ const ParentSearch = () => {
const [loaded, setLoaded] = useState(true);
const [initPage, setInitPage] = useState(true);
const isMountedRef = useRef(true);
useEffect(() => {
isMountedRef.current = false;
return () => {
isMountedRef.current = true;
}
}, [])
useEffect(()=>{
setLoaded(loaded1 && loaded2);
},[loaded1, loaded2])
const handleSearch = async (e) => {
const handleSearch = (e) => {
e.preventDefault();
if(keyword == ''){
document.getElementById('keyword').focus();
@ -48,33 +57,11 @@ const ParentSearch = () => {
setLoaded2(false);
setInitPage(false);
await axios.get('/api/fathers/meetings/searchOfIncompleteOfFather', {params:{father_id: father_id, keyword: keyword,}})
.then(response => {
setLoaded1(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
var list = response.data.params;
var arr = [];
for(var i in list){
var total=0, num=0;
for(var j in list[i].approvals)
{
if(list[i].approvals[j].approval_at) num ++;
total ++;
}
arr.push({...list[i], denominator:total, numerator:num})
}
setMeetingListOfIncomplete(arr);
var len = arr.length;
if(len > INFINITE)
setFetchMeetingListOfIncomplete(arr.slice(0, INFINITE));
else setFetchMeetingListOfIncomplete(arr.slice(0, len));
}
})
await axios.get('/api/fathers/meetings/searchOfCompleteOfFather', {params:{father_id: father_id, keyword: keyword,}})
.then(response => {
setLoaded2(true);
axios.get('/api/fathers/meetings/searchOfIncompleteOfFather', {params:{father_id: father_id, keyword: keyword,}})
.then(response => {
if(isMountedRef.current) return;
setLoaded1(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
var list = response.data.params;
@ -88,13 +75,39 @@ const ParentSearch = () => {
}
arr.push({...list[i], denominator:total, numerator:num})
}
setMeetingListOfComplete(arr);
setMeetingListOfIncomplete(arr);
var len = arr.length;
if(len > INFINITE)
setFetchMeetingListOfComplete(arr.slice(0, INFINITE));
else setFetchMeetingListOfComplete(arr.slice(0, len));
setFetchMeetingListOfIncomplete(arr.slice(0, INFINITE));
else setFetchMeetingListOfIncomplete(arr.slice(0, len));
}
})
axios.get('/api/fathers/meetings/searchOfCompleteOfFather', {params:{father_id: father_id, keyword: keyword,}})
.then(response => {
if(isMountedRef.current) return;
setLoaded2(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
var list = response.data.params;
var arr = [];
for(var i in list){
var total=0, num=0;
for(var j in list[i].approvals)
{
if(list[i].approvals[j].approval_at) num ++;
total ++;
}
arr.push({...list[i], denominator:total, numerator:num})
}
})
setMeetingListOfComplete(arr);
var len = arr.length;
if(len > INFINITE)
setFetchMeetingListOfComplete(arr.slice(0, INFINITE));
else setFetchMeetingListOfComplete(arr.slice(0, len));
}
})
}
@ -120,7 +133,7 @@ const ParentSearch = () => {
}, SCROLL_DELAY_TIME);
};
async function handleFavorite(meetingId, currentFavorite, stateName) {
function handleFavorite(meetingId, currentFavorite, stateName) {
const formdata = new FormData();
formdata.append('meeting_id', meetingId);
formdata.append('is_favorite', currentFavorite == 1 ? 0 : 1);

ファイルの表示

@ -8,8 +8,8 @@ export default function ParentSide() {
const father_image = document.getElementById('father_image').value;
const handleLogout = async () => {
await axios.get('/p-account/logout')
const handleLogout = () => {
axios.get('/p-account/logout')
.then(() => {
setCookie('logged', null);
window.location.href = '/p-account/login';