このコミットが含まれているのは:
守矢諏訪子 2022-01-17 14:37:03 +09:00
コミット 6c11b4a886
67個のファイルの変更10941行の追加181694行の削除

20254
backend/package-lock.json generated

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

ファイルの表示

@ -38,12 +38,12 @@
"@mui/material": "^5.2.7",
"@react-pdf-viewer/core": "^3.0.0",
"@react-pdf-viewer/default-layout": "^3.0.0",
"clipboard-copy": "^4.0.1",
"copy-to-clipboard": "^3.3.1",
"date-fns": "^2.28.0",
"es7-shim": "^6.0.0",
"history": "^5.0.0",
"moment": "^2.29.1",
"pdfjs-dist": "^2.12.313",
"pdfjs-dist": "^2.10.377",
"prop-types": "^15.7.2",
"react": "^17.0.2",
"react-cookie": "^4.1.1",
@ -52,7 +52,8 @@
"react-infinite-scroll-component": "^6.1.0",
"react-pdf": "^5.4.0",
"react-router-dom": "^6.2.1",
"react-scripts": "^5.0.0"
"react-scripts": "^5.0.0",
"save": "^2.4.0"
},
"devDependencies": {
"@babel/core": "^7.16.7",

ファイルの表示

@ -12884,7 +12884,7 @@ categories: [project]
@font-face {
font-family: "iconfont";
src: url(/fonts/iconfont.eot?9bd2f8e21fb68f3cb69f306c7a5a07d2);
src: url(/fonts/iconfont.eot?9bd2f8e21fb68f3cb69f306c7a5a07d2) format("eot"), url(/fonts/iconfont.woff?72290a51f520574be856b3621acc29a1) format("woff"), url(/fonts/iconfont.ttf?e240ce427caf7549e576c77b39a1d3f1) format("truetype"), url(/fonts/iconfont.svg?9e48c54f8bbb472c1c286234fdd6636f) format("svg");
src: url(/fonts/iconfont.eot?9bd2f8e21fb68f3cb69f306c7a5a07d2) format("eot"), url(/fonts/iconfont.woff?72290a51f520574be856b3621acc29a1) format("woff"), url(/fonts/iconfont.ttf?e240ce427caf7549e576c77b39a1d3f1) format("truetype"), url(/fonts/iconfont.svg?d812f238f7ec32f5cb5ebd322f320a02) format("svg");
font-weight: normal;
font-style: normal;
}

ファイルの表示

@ -1,143 +0,0 @@
/*
object-assign
(c) Sindre Sorhus
@license MIT
*/
/*!
Copyright (c) 2018 Jed Watson.
Licensed under the MIT License (MIT), see
http://jedwatson.github.io/classnames
*/
/*!
* The buffer module from node.js, for the browser.
*
* @author Feross Aboukhadijeh <http://feross.org>
* @license MIT
*/
/*!
* cookie
* Copyright(c) 2012-2014 Roman Shtylman
* Copyright(c) 2015 Douglas Christopher Wilson
* MIT Licensed
*/
/*! clipboard-copy. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
/**
* @license
* Lodash <https://lodash.com/>
* Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
* Released under MIT license <https://lodash.com/license>
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
*/
/**
* @licstart The following is the entire license notice for the
* Javascript code in this page
*
* Copyright 2021 Mozilla Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* @licend The above is the entire license notice for the
* Javascript code in this page
*/
/**
* React Router DOM v6.2.1
*
* Copyright (c) Remix Software Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE.md file in the root directory of this source tree.
*
* @license MIT
*/
/**
* React Router v6.2.1
*
* Copyright (c) Remix Software Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE.md file in the root directory of this source tree.
*
* @license MIT
*/
/** @license MUI v5.2.6
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/** @license Material-UI v5.0.0-beta.4
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/** @license React v0.20.2
* scheduler.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/** @license React v16.13.1
* react-is.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/** @license React v17.0.2
* react-dom.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/** @license React v17.0.2
* react-jsx-runtime.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/** @license React v17.0.2
* react.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
//! moment.js
//! moment.js locale configuration

22
backend/public/js/components/pdf-worker.js vendored ノーマルファイル

長すぎる行があるためファイル差分は表示されません

長すぎる行があるためファイル差分は表示されません

長すぎる行があるためファイル差分は表示されません

ファイルの表示

@ -1,4 +1,4 @@
{
"/js/app.js": "/js/app.js",
"/js/index.js": "/js/index.js",
"/css/app.css": "/css/app.css"
}

ファイルの表示

@ -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;
}
})
return function cleanup() {
mounted = false
case 400: set400Error('失敗しました。'); break;
}
})
return () => {
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("失敗しました。");
}
})
return function cleanup() {
mounted = false
}
else {
set400Error("失敗しました。");
}
})
return () => {
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("失敗しました。");
}
});
return function cleanup() {
mounted = false
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 () => {
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("失敗しました。");
}
});
return function cleanup() {
mounted = false
}
setMeeting({...list, denominator:total, numerator:num});
if(list.meeting_image.length > 0) setThumbnail(list.meeting_image[0].image);
}
else {
set400Error("失敗しました。");
}
});
return () => {
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("失敗しました。");
}
});
return function cleanup() {
mounted = false
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 () => {
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;
return function cleanup() {
mounted = false
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 () => {
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,3 +1,25 @@
require('./bootstrap');
import ReactDOM from 'react-dom';
import { BrowserRouter, useRoutes } from 'react-router-dom';
import { CookiesProvider } from "react-cookie";
import routes from './routes';
import ScrollToTop from './component/scroll_top';
const KIKIAPP = () => {
const routing = useRoutes(routes);
return routing;
};
if(document.getElementById('root')){
ReactDOM.render((
<CookiesProvider>
<BrowserRouter>
<ScrollToTop />
<KIKIAPP />
</BrowserRouter>
</CookiesProvider>
), document.getElementById('root'));
}
require('./index')

ファイルの表示

@ -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('');
}
})
}
@ -215,7 +215,7 @@ const ChildSignUp = () => {
checked={check_terms}
/>
<span className='lbl padding-16'>
<Link to="/terms" className='term-link' rel="noopener noreferrer">規約</Link>
<Link to="/terms" target="_blank" className='term-link' rel="noopener noreferrer">規約</Link>
に同意する
</span>
</label>

ファイルの表示

@ -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';

ファイルの表示

@ -9,8 +9,10 @@ export default function AlertStateMessage() {
const [_success, setSuccess] = useState('');
useEffect(() => {
if(state) setSuccess(state);
navigator(pathname)
if(state){
setSuccess(state);
navigator(pathname);
}
}, [pathname]);
return (

ファイルの表示

@ -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 }})
.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 }})
.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;
}
})
}

ファイルの表示

@ -15,8 +15,6 @@ import ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos';
import ArrowBackIosIcon from '@mui/icons-material/ArrowBackIos';
import Container from '@mui/material/Container';
import pdfjsWorker from "pdfjs-dist/build/pdf.worker.entry";
const Transition = React.forwardRef(function Transition(props, ref) {
return <Slide direction="up" ref={ref} {...props} />;
});

ファイルの表示

@ -30,7 +30,10 @@ const PreviewPDF = ({pdf_url}) => {
}}>
{
pdf_url &&
<Document file={pdf_url} loading={<></>}>
<Document
file={pdf_url}
loading={<></>}
>
<Page
pageNumber={1}
loading={<></>}

ファイルの表示

@ -1,25 +1,3 @@
import ReactDOM from 'react-dom';
import { BrowserRouter, useRoutes } from 'react-router-dom';
import { CookiesProvider } from "react-cookie";
import routes from './routes';
import ScrollToTop from './component/scroll_top';
const KIKIAPP = () => {
const routing = useRoutes(routes);
return routing;
};
if(document.getElementById('root')){
ReactDOM.render((
<CookiesProvider>
<BrowserRouter>
<ScrollToTop />
<KIKIAPP />
</BrowserRouter>
</CookiesProvider>
), document.getElementById('root'));
}
require('./bootstrap');
require('./app');

ファイルの表示

@ -1,7 +1,7 @@
import React, { useState } from 'react';
import { Button } from '@material-ui/core';
import Alert from '../../component/alert';
import copy from 'clipboard-copy';
import copy from 'copy-to-clipboard';
const ContactComplete = () => {
@ -11,19 +11,11 @@ const ContactComplete = () => {
const [_error, setError] = useState('');
const saveStorage = () => {
copy(contactEmail)
.then(()=>{
setSuccess('メールアドレスのコビーに成功しました');
})
.catch(()=>{
navigator.clipboard.writeText(contactEmail)
.then(()=>{
setSuccess('メールアドレスのコビーに成功しました');
})
.catch(()=>{
setError('コピー失敗しました。');
})
})
if(copy(contactEmail)){
setSuccess('メールアドレスのコビーに成功しました')
} else {
setError('コピー失敗しました。')
}
}
return (

ファイルの表示

@ -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('');
}
})
}
@ -188,7 +188,7 @@ const ParentSignUp = () => {
checked={check_terms}
/>
<span className='lbl padding-16'>
<Link to="/terms" className='term-link' rel="noopener noreferrer">規約</Link>
<Link to="/terms" className='term-link' target="_blank" rel="noopener noreferrer">規約</Link>
に同意する
</span>
</label>

ファイルの表示

@ -1,25 +1,35 @@
import React, { useState } from 'react';
import React, { useRef, useState, useEffect } from 'react';
import { LoadingButton } from '@material-ui/lab';
import Alert from '../../component/alert';
import Notification from '../../component/notification';
import PageLoader from '../../component/page_loader';
import copy from 'clipboard-copy';
import copy from 'copy-to-clipboard';
const ParentChildAdd = () => {
const [notice, setNotice] = useState(localStorage.getItem('notice'));
const father_id = localStorage.getItem('kiki_acc_id');
const [identity, setIdentity] = useState('');
const [loaded, setLoaded] = useState(true);
const [identity, setIdentity] = useState('');
const [_success, setSuccess] = useState('');
const [_400error, set400Error] = useState('');
const [_401error, set401Error] = useState('');
const [_422errors, set422Errors] = useState({identity: ''});
const [submit, setSubmit] = useState(false);
const [is_check_relation, setIsCheckRelation] = useState(false);
const handleSubmit = async (e) => {
const [_copyFlag, setCopyFlag] = useState(false);
const isMountedRef = useRef(true);
useEffect(() => {
isMountedRef.current = false;
return()=>{
isMountedRef.current = true;
}
}, [])
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({identity: ''});
set401Error('');
@ -28,76 +38,91 @@ const ParentChildAdd = () => {
formdata.append('father_id', father_id);
setSubmit(true);
await axios.post('/api/fathers/relations/register', formdata)
.then(response => {
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 = async () => {
setIsCheckRelation(true);
const handleCheckRelations = (type) => {
set401Error('');
const inviteText = document.getElementById('inviteurl').value;
await axios.get('/api/fathers/relations/check')
setLoaded(false);
if(type == 'invite'){
let inviteurl = document.getElementById('inviteurl').value;
let sentence = '「KIKI」の招待が届いています。' + '\n' +
'まずは以下より仮登録を行ってください。' + '\n' +
'※スマホ本体を最新の状態にアップデートしてからURLをクリックしてください。' + '\n\n' +
inviteurl + '\n\n' +
'▼公式サイトはこちら' + '\n' +
'https://kikikan.jp';
if(!copy(sentence, {debug: true})){
set400Error('コピー失敗しました。');
return;
}
}
axios.get('/api/fathers/relations/check')
.then(response=>{
setNotice(response.data.notice);
setIsCheckRelation(false);
if(isMountedRef.current) return;
switch(response.data.status_code){
case 200: {
navigator.clipboard.writeText(inviteText)
.then(()=>{
setSuccess('招待用URLをコピーしました。');
})
.catch(()=>{
copy(inviteText)
.then(()=>{
setSuccess('招待用URLをコピーしました。');
})
.catch(()=>{
set400Error('コピー失敗しました。')
})
})
if(type == "invite") setSuccess('招待用URLをコピーしました。');
else if(type=='line') sendLineMsg();
break;
}
case 400: set400Error(response.data.error_messages); break;
case 401: set401Error(response.data.error_messages); set400Error(response.data.error_messages); break;
}
setNotice(response.data.notice);
setLoaded(true);
})
.catch(err=>console.log(err));
}
const copyLineText = async () => {
const copyInviteURL = () => {
let inviteurl = document.getElementById('inviteurl').value;
let sentence = '「KIKI」の招待が届いています。' + '\n' +
'まずは以下より仮登録を行ってください。' + '\n' +
'※スマホ本体を最新の状態にアップデートしてからURLをクリックしてください。' + '\n\n' +
inviteurl + '\n\n' +
'▼公式サイトはこちら' + '\n' +
'https://kikikan.jp' + '\n\n' +
'idの箇所は親のidを引っ張るようお願い致します。';
if(copy(sentence, {debug: true}))
{
setSuccess('招待用URLをコピーしました。');
} else {
set400Error('コピー失敗しました。');
}
}
const sendLineMsg = () => {
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}`;
setIsCheckRelation(true);
set401Error('');
await axios.get('/api/fathers/relations/check')
.then(response=>{
setNotice(response.data.notice);
setIsCheckRelation(false);
switch(response.data.status_code){
case 200: {
window.location.href = 'http://line.me/R/msg/text/?'+lineText;
break;
}
case 400: set400Error(response.data.error_messages); break;
case 401: set401Error(response.data.error_messages); set400Error(response.data.error_messages); break;
}
})
window.location.href = 'http://line.naver.jp/R/msg/text/?'+lineText;
}
const contactMailText = 'mailto:56@zotman.jp?subject=KIKIメンバー追加について&body='+
'名前%3A%0A電話番号%3A%0AログインID%3A%0Aログインパスワード%3A%0A追加したいメンバー数%3A%0A「その他お問合せ内容」'
return (
<div className="l-content">
<div className="l-content-w560">
@ -107,11 +132,9 @@ const ParentChildAdd = () => {
</div>
<Notification notice={notice}/>
</div>
{
is_check_relation && <PageLoader/>
!loaded && <PageLoader/>
}
<div className="l-content-wrap">
<section className="edit-container">
<div className="edit-wrap">
@ -147,10 +170,10 @@ const ParentChildAdd = () => {
</LoadingButton>
</form>
<div style={{color:"#49A3FC",display:"flex", justifyContent:"center", alignItems:"center", paddingTop:40}} >
<a onClick={copyInviteURL}>招待用URLをコピーする</a>
<a onClick={()=>handleCheckRelations('invite')}>招待用URLをコピーする</a>
</div>
<div style={{color:"#49A3FC",display:"flex", justifyContent:"center", alignItems:"center", paddingTop:20}}>
<a onClick={copyLineText}>招待用URLをLINEで送信</a>
<a onClick={()=>handleCheckRelations('line')}>招待用URLをLINEで送信</a>
</div>
</div>
</div>

ファイルの表示

@ -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;
}
});
}

ファイルの表示

@ -1,7 +1,7 @@
import React, { useRef, useEffect, useState } from 'react';
import moment from 'moment';
import { useNavigate, Link, useParams } from 'react-router-dom';
import copy from 'clipboard-copy';
import copy from 'copy-to-clipboard';
import ModalEditMemo from '../../component/modal_edit_memo';
import ModalConfirm from '../../component/modal_confirm';
@ -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}})
.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)
}
@ -173,19 +176,11 @@ const ParentMeetingDetail = () => {
const saveStorage = () => {
let txt = `${meeting.father.company}さんより\n業務連絡のお知らせ\n新規業務連絡のご確認はこちら\n\nhttps://kikikan.xyz/c-account/meeting/detail/${params?.meeting_id}`;
copy(txt)
.then(()=>{
setSuccess('コピーしました。');
})
.catch(()=>{
navigator.clipboard.writeText(txt)
.then(()=>{
setSuccess('コピーしました。');
})
.catch(()=>{
set400Error('コピー失敗しました。');
})
})
if(copy(txt)){
setSuccess('コピーしました。')
} else {
set400Error('コピー失敗しました。')
}
}
const cloneMeeting = (meeting) => {

ファイルの表示

@ -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';

ファイルの表示

@ -45,14 +45,11 @@
</body>
<script src="{{ asset('js/components/es5-shim.min.js') }}"></script>
<script src="{{ asset('js/components/es5-sham.min.js') }}"></script>
<script src="{{ asset('js/components/json3.min.js') }}"></script>
<script src="{{ asset('js/components/es6-shim.min.js') }}"></script>
<script src="{{ asset('js/components/es6-sham.min.js') }}"></script>
<script src="{{ asset('js/components/html5shiv-printshiv.min.js') }}"></script>
<script src="{{ asset('js/components/html5shiv.min.js') }}"></script>
<script src="{{ asset('js/components/es6-promise.js') }}"></script>
<script src="{{ asset('js/app.js') }}"></script>
<!-- V1, 2022/1/13 -->
<script src="{{ asset('js/components/pdf-worker.js') }}"></script> <!-- v2.9.359 -->
<script src="{{ asset('js/index.js') }}"></script>
<!-- V1, 2022/1/15 -->
</html>

ファイルの表示

@ -11,6 +11,6 @@ const mix = require('laravel-mix');
|
*/
mix.js('resources/js/app.js', 'public/js')
mix.js('resources/js/index.js', 'public/js')
.react()
.sass('resources/sass/app.scss', 'public/css');