add expire time func

このコミットが含まれているのは:
dragon1211 2022-02-02 11:39:18 -08:00
コミット a1fb15c17a
39個のファイルの変更6330行の追加5921行の削除

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

ファイルの表示

@ -1,9 +1,10 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import { useNavigate, Link, useParams } from 'react-router-dom';
import IconButton from "@material-ui/core/IconButton";
import PhotoCameraOutlinedIcon from '@mui/icons-material/PhotoCameraOutlined';
import { HeaderContext } from '../../context';
import Alert from '../../component/alert';
import PageLoader from '../../component/page_loader';
import ModalConfirm from '../../component/modal_confirm';
@ -12,9 +13,12 @@ import ModalConfirm from '../../component/modal_confirm';
const AdminChildDetail = () => {
const navigator = useNavigate();
const params = useParams();
const { isAuthenticate } = useContext(HeaderContext);
const [image, setImage] = useState('');
const [loaded, setLoaded] = useState(false);
const [submit, setSubmit] = useState(false);
@ -30,22 +34,23 @@ const AdminChildDetail = () => {
useEffect(() => {
isMountedRef.current = false;
setLoaded(false);
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;
if(isAuthenticate()){
setLoaded(false);
axios.get(`/api/admin/children/detail/${params?.child_id}`)
.then(response => {
if(isMountedRef.current) return;
setLoaded(true);
switch(response.data.status_code){
case 200:{
setChild(response.data.params);
setImage(response.data.params.image);
break;
}
case 400: set400Error('失敗しました。'); break;
}
case 400: set400Error('失敗しました。'); break;
}
})
})
}
return () => {
isMountedRef.current = true;
}
@ -54,46 +59,50 @@ const AdminChildDetail = () => {
const handleImageChange = (e) => {
e.preventDefault();
let reader = new FileReader();
let _file = e.target.files[0];
reader.readAsDataURL(_file);
reader.onloadend = () => {
set422Errors({image: ''});
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: {
setImage(reader.result);
setSuccess(response.data.success_messages);
break;
if(isAuthenticate()){
let reader = new FileReader();
let _file = e.target.files[0];
reader.readAsDataURL(_file);
reader.onloadend = () => {
set422Errors({image: ''});
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: {
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;
}
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
});
};
});
};
}
};
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){
case 200:{
navigator("/admin/child", {state: "削除に成功しました!"});
break;
if(isAuthenticate()){
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){
case 200:{
navigator("/admin/child", {state: "削除に成功しました!"});
break;
}
case 400: set400Error("削除に失敗しました。"); break;
}
case 400: set400Error("削除に失敗しました。"); break;
}
});
});
}
};

ファイルの表示

@ -1,13 +1,15 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import { useNavigate, useParams } from 'react-router-dom';
import { LoadingButton } from '@material-ui/lab';
import { HeaderContext } from '../../context';
import Alert from '../../component/alert';
import PageLoader from '../../component/page_loader';
const AdminChildEdit = () => {
const { isAuthenticate } = useContext(HeaderContext);
const navigator = useNavigate();
const params = useParams();
@ -37,29 +39,31 @@ const AdminChildEdit = () => {
useEffect(() => {
isMountedRef.current = false;
setLoaded(false);
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);
if(isAuthenticate()){
setLoaded(false);
axios.get(`/api/admin/children/detail/${params?.child_id}`)
.then(response => {
if(isMountedRef.current) return;
setLoaded(true);
if(response.data.status_code==200)
{
var child = response.data.params;
setChild(child);
if(child){
setFirstName(child.first_name);
setLastName(child.last_name);
setIdentity(child.identity);
setEmail(child.email);
setTelephone(child.tel);
setCompany(child.company);
}
}
}
else {
set400Error("失敗しました。");
}
})
else {
set400Error("失敗しました。");
}
})
}
return () => {
isMountedRef.current = true;
}
@ -68,41 +72,42 @@ const AdminChildEdit = () => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({
first_name:'',
last_name:'',
identity:'',
email:'',
tel:'',
company:''
});
setSubmit(true);
var request = {
first_name: first_name,
last_name: last_name,
identity: identity,
email: email,
tel: tel,
company: company
};
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: {
navigator(`/admin/child/detail/${params?.child_id}`,
{state: response.data.success_messages});
break;
if(isAuthenticate()){
set422Errors({
first_name:'',
last_name:'',
identity:'',
email:'',
tel:'',
company:''
});
setSubmit(true);
var request = {
first_name: first_name,
last_name: last_name,
identity: identity,
email: email,
tel: tel,
company: company
};
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: {
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;
}
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
})
})
}
}
return (
<div className="l-content">
<div className="l-content-w560">

ファイルの表示

@ -1,9 +1,10 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import { Link } from 'react-router-dom';
import IconButton from '@mui/material/IconButton';
import SearchIcon from '@mui/icons-material/Search';
import InfiniteScroll from "react-infinite-scroll-component";
import { HeaderContext } from '../../context';
import Alert from '../../component/alert';
import PageLoader from '../../component/page_loader';
@ -12,6 +13,7 @@ const SCROLL_DELAY_TIME = 1500;
const AdminChilds = () => {
const { isAuthenticate } = useContext(HeaderContext);
const [keyword, setKeyword] = useState('')
const [loaded, setLoaded] = useState(false);
const [children_list, setChildrenList ] = useState([]);
@ -25,23 +27,25 @@ const AdminChilds = () => {
useEffect(() => {
isMountedRef.current = false;
setLoaded(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("失敗しました。");
}
});
if(isAuthenticate()){
setLoaded(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;
}
@ -61,26 +65,28 @@ const AdminChilds = () => {
const handleSearch = (e) => {
e.preventDefault();
if(keyword == '')
{
document.getElementById('keyword').focus();
return;
}
setLoaded(false);
set422errors({keyword:''});
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);
var len = response.data.params.length;
if(len > INFINITE)
setFetchChildrenList(response.data.params.slice(0, INFINITE));
else setFetchChildrenList(response.data.params.slice(0, len));
if(isAuthenticate()){
if(keyword == '')
{
document.getElementById('keyword').focus();
return;
}
});
setLoaded(false);
set422errors({keyword:''});
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);
var len = response.data.params.length;
if(len > INFINITE)
setFetchChildrenList(response.data.params.slice(0, INFINITE));
else setFetchChildrenList(response.data.params.slice(0, len));
}
});
}
}

ファイルの表示

@ -1,7 +1,8 @@
import React, { useState, useRef, useEffect } from 'react';
import React, { useState, useRef, useEffect, useContext } from 'react';
import { useNavigate, useParams } from 'react-router-dom';
import { LoadingButton } from '@material-ui/lab';
import { HeaderContext } from '../../context';
import Alert from '../../component/alert';
@ -9,6 +10,7 @@ const AdminChildPasswordEdit = () => {
const navigator = useNavigate();
const params = useParams();
const { isAuthenticate } = useContext(HeaderContext);
const [password, setPassword] = useState('');
const [password_confirmation, setConfirmPassword] = useState('');
@ -32,30 +34,33 @@ const AdminChildPasswordEdit = () => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({
password:'',
password_confirmation:''
});
setSubmit(true);
const request = {
password: password,
password_confirmation: password_confirmation
}
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;
if(isAuthenticate()){
set422Errors({
password:'',
password_confirmation:''
});
setSubmit(true);
const request = {
password: password,
password_confirmation: password_confirmation
}
})
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,7 +1,8 @@
import { useRef, useEffect, useState } from 'react';
import { useRef, useEffect, useState, useContext } from 'react';
import { useNavigate, Link, useParams } from 'react-router-dom';
import moment from 'moment';
import { HeaderContext } from '../../context';
import Alert from '../../component/alert';
import ModalPdf from '../../component/pdf/modal_pdf';
import ModalMemo from '../../component/modal_memo';
@ -13,6 +14,7 @@ const AdminMeetingDetail = () => {
const navigator = useNavigate();
const params = useParams();
const { isAuthenticate } = useContext(HeaderContext);
const [loaded, setLoaded] = useState(false);
const [submit, setSubmit] = useState(false);
@ -30,29 +32,31 @@ const AdminMeetingDetail = () => {
useEffect( () => {
isMountedRef.current = false;
setLoaded(false);
axios.get(`/api/admin/meetings/detail/${params?.meeting_id}`)
.then((response) => {
if(isMountedRef.current) return;
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(isAuthenticate()){
setLoaded(false);
axios.get(`/api/admin/meetings/detail/${params?.meeting_id}`)
.then((response) => {
if(isMountedRef.current) return;
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 ++;
}
}
}
setMeeting({...list, denominator:total, numerator:num});
if(list.meeting_image.length > 0) setThumbnail(list.meeting_image[0].image);
}
else {
set400Error("失敗しました。");
}
});
setMeeting({...list, denominator:total, numerator:num});
if(list.meeting_image.length > 0) setThumbnail(list.meeting_image[0].image);
}
else {
set400Error("失敗しました。");
}
});
}
return () => {
isMountedRef.current = true;
}
@ -60,20 +64,22 @@ const AdminMeetingDetail = () => {
function handleAcceptDelete() {
setSubmit(true);
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;
}
});
if(isAuthenticate()){
setSubmit(true);
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;
}
});
}
};
@ -84,7 +90,6 @@ const AdminMeetingDetail = () => {
}
return (
<div className="l-content">
<div className="l-content-w560">

ファイルの表示

@ -1,8 +1,10 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import { useNavigate, useParams } from 'react-router-dom';
import { LoadingButton } from '@material-ui/lab';
import IconButton from '@mui/material/IconButton';
import RemoveIcon from '@mui/icons-material/Remove';
import { HeaderContext } from '../../context';
import Alert from '../../component/alert';
import PreviewPDF from '../../component/preview_pdf';
import PageLoader from '../../component/page_loader';
@ -13,6 +15,7 @@ const AdminMeetingEdit = () => {
const navigator = useNavigate();
const params = useParams();
const { isAuthenticate } = useContext(HeaderContext);
const meeting_id = params?.meeting_id;
@ -59,41 +62,44 @@ const AdminMeetingEdit = () => {
useEffect(() => {
isMountedRef.current = false;
setLoaded(false);
if(isAuthenticate()){
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});
setLoaded(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("失敗しました。");
}
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;
@ -102,102 +108,113 @@ const AdminMeetingEdit = () => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({title:'',memo:'',text:'',pdf:'',image:''});
e.preventDefault();
var approval_registerIndexes = [];
var approval_deleteIndexes = [];
for(let i=0; i<children_list.length; i++){
if(children_list[i].checked){
if(approval_list.findIndex(ele=>ele.child_id == children_list[i].id) < 0)
approval_registerIndexes.push(children_list[i].id);
}
}
for(let i=0; i<approval_list.length; i++){
if(children_list.findIndex(ele=> ele.checked && ele.id == approval_list[i].child_id) < 0)
approval_deleteIndexes.push(approval_list[i].child_id);
}
if(isAuthenticate()){
const formdata = new FormData();
formdata.append('children', JSON.stringify(approval_registerIndexes));
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);
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;
set422Errors({title:'',memo:'',text:'',pdf:'',image:''});
var approval_registerIndexes = [];
var approval_deleteIndexes = [];
for(let i=0; i<children_list.length; i++){
if(children_list[i].checked){
if(approval_list.findIndex(ele=>ele.child_id == children_list[i].id) < 0)
approval_registerIndexes.push(children_list[i].id);
}
case 400: set400Error("更新失敗しました。"); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
});
for(let i=0; i<approval_list.length; i++){
if(children_list.findIndex(ele=> ele.checked && ele.id == approval_list[i].child_id) < 0)
approval_deleteIndexes.push(approval_list[i].child_id);
}
const formdata = new FormData();
formdata.append('children', JSON.stringify(approval_registerIndexes));
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);
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 = (e) => {
e.preventDefault();
const files = Array.from(e.target.files);
if(e.target.files.length + meeting_image.length > 10)
{
set400Error("画像は最大10個までです。");
return;
}
const promises = files.map(_file => {
return (new Promise((resolve, reject) => {
const reader = new FileReader();
reader.addEventListener('load', (ev) => {
resolve(ev.target.result);
});
reader.addEventListener('error', reject);
reader.readAsDataURL(_file);
}))
});
if(isAuthenticate()){
Promise.all(promises).then((images) => {
set422Errors({image:''});
const formdata = new FormData();
formdata.append('image', JSON.stringify(images));
setImageSending(true);
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;
}
const files = Array.from(e.target.files);
if(e.target.files.length + meeting_image.length > 10)
{
set400Error("画像は最大10個までです。");
return;
}
const promises = files.map(_file => {
return (new Promise((resolve, reject) => {
const reader = new FileReader();
reader.addEventListener('load', (ev) => {
resolve(ev.target.result);
});
reader.addEventListener('error', reject);
reader.readAsDataURL(_file);
}))
});
},
error => { console.error(error); });
Promise.all(promises).then((images) => {
set422Errors({image:''});
const formdata = new FormData();
formdata.append('image', JSON.stringify(images));
setImageSending(true);
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 = (index, image_id) => {
let list = [...meeting_image];
list.splice(index, 1);
setMeetingImages(list);
if(isAuthenticate()){
let list = [...meeting_image];
list.splice(index, 1);
setMeetingImages(list);
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("画像の削除に失敗しました。");
}
})
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("画像の削除に失敗しました。");
}
})
}
}
@ -219,6 +236,7 @@ const AdminMeetingEdit = () => {
}
}
return (
<div className="l-content">
<div className="l-content-w560">

ファイルの表示

@ -1,9 +1,11 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import moment from 'moment';
import { Link } from 'react-router-dom';
import IconButton from '@mui/material/IconButton';
import SearchIcon from '@mui/icons-material/Search';
import InfiniteScroll from "react-infinite-scroll-component";
import { HeaderContext } from '../../context';
import Alert from '../../component/alert';
import PageLoader from '../../component/page_loader';
@ -12,7 +14,7 @@ const SCROLL_DELAY_TIME = 1500;
const AdminMeetings = () => {
const { isAuthenticate } = useContext(HeaderContext);
const [keyword, setKeyword] = useState('')
const [loaded, setLoaded] = useState(false);
const [meeting_list, setMeetingList ] = useState([]);
@ -27,36 +29,40 @@ const AdminMeetings = () => {
useEffect(() => {
isMountedRef.current = false;
if(isAuthenticate()){
setLoaded(false);
axios.get('/api/admin/meetings/list')
.then(response => {
if(isMountedRef.current) return;
setLoaded(false);
axios.get('/api/admin/meetings/list')
.then(response => {
if(isMountedRef.current) return;
setLoaded(true);
if(response.data.status_code==200){
//------------Calculate Numerator & Denominator--------------
var list = response.data.params;
var arr = [];
for(var i in list){
var total=0, num=0;
for(var j in list[i].approval)
{
if(list[i].approval[j].approval_at) num ++;
total ++;
}
arr.push({...list[i], denominator:total, numerator:num})
}
setMeetingList(arr);
var len = arr.length;
if(len > INFINITE)
setFetchMeetingList(arr.slice(0, INFINITE));
else setFetchMeetingList(arr.slice(0, len));
}
else {
set400Error("失敗しました。");
}
});
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;
@ -79,39 +85,44 @@ const AdminMeetings = () => {
const handleSearch = (e) => {
e.preventDefault();
if(keyword == '')
{
document.getElementById('keyword').focus();
return;
}
set422errors({keyword:''});
setLoaded(false);
setMeetingList([]);
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));
if(isAuthenticate()){
if(keyword == '')
{
document.getElementById('keyword').focus();
return;
}
});
set422errors({keyword:''});
setLoaded(false);
setMeetingList([]);
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,11 +1,13 @@
import React, { useState, useRef, useEffect } from 'react';
import React, { useState, useRef, useEffect, useContext } from 'react';
import { LoadingButton } from '@material-ui/lab';
import { HeaderContext } from '../../context';
import Alert from '../../component/alert';
const AdminParentAdd = () => {
const { isAuthenticate } = useContext(HeaderContext);
const [email, setEmail] = useState('');
const [limit, setLimit] = useState('');
const [_422errors, set422Errors] = useState({ email: '', relation_limit: '' });
@ -26,23 +28,27 @@ const AdminParentAdd = () => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({ email: '' })
setSubmit(true);
const formdata = new FormData();
formdata.append('email', email);
formdata.append('relation_limit', limit);
axios.post('/api/admin/fathers/registerTemporary', formdata)
.then(response => {
if(isMountedRef.current) return;
if(isAuthenticate()){
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))
set422Errors({ email: '' })
setSubmit(true);
const formdata = new FormData();
formdata.append('email', email);
formdata.append('relation_limit', limit);
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))
}
}

ファイルの表示

@ -1,9 +1,10 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import { useNavigate, Link, useParams } from 'react-router-dom';
import IconButton from "@material-ui/core/IconButton";
import PhotoCameraOutlinedIcon from '@mui/icons-material/PhotoCameraOutlined';
import { HeaderContext } from '../../context';
import Alert from '../../component/alert';
import PageLoader from '../../component/page_loader';
import ModalConfirm from '../../component/modal_confirm';
@ -17,6 +18,7 @@ const Transition = React.forwardRef(function Transition(props, ref) {
const AdminParentDetail = () => {
const { isAuthenticate } = useContext(HeaderContext);
const navigator = useNavigate();
const params = useParams();
@ -36,21 +38,25 @@ const AdminParentDetail = () => {
useEffect(() => {
isMountedRef.current = false;
if(isAuthenticate()){
setLoaded(false);
axios.get(`/api/admin/fathers/detail/${params?.father_id}`)
.then(response => {
if(isMountedRef.current) return;
setLoaded(false);
axios.get(`/api/admin/fathers/detail/${params?.father_id}`)
.then(response => {
if(isMountedRef.current) return;
setLoaded(true);
if(response.data.status_code==200){
setParent(response.data.params);
setImage(response.data.params.image);
}
else{
set400Error("失敗しました。");
}
})
}
setLoaded(true);
if(response.data.status_code==200){
setParent(response.data.params);
setImage(response.data.params.image);
}
else{
set400Error("失敗しました。");
}
})
return () => {
isMountedRef.current = true
}
@ -59,45 +65,50 @@ const AdminParentDetail = () => {
const handleImageChange = (e) => {
e.preventDefault();
let reader = new FileReader();
let _file = e.target.files[0];
reader.readAsDataURL(_file);
reader.onloadend = () => {
set422Errors({image: ''});
setSubmitImage(true);
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;
if(isAuthenticate()){
let reader = new FileReader();
let _file = e.target.files[0];
reader.readAsDataURL(_file);
reader.onloadend = () => {
set422Errors({image: ''});
setSubmitImage(true);
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;
}
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
});
};
});
};
}
};
function handleAcceptDelete() {
setSubmit(true);
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("削除に失敗しました。");
}
});
if(isAuthenticate()){
setSubmit(true);
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("削除に失敗しました。");
}
});
}
};

ファイルの表示

@ -1,6 +1,8 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import { useNavigate, useParams } from 'react-router-dom';
import { LoadingButton } from '@material-ui/lab';
import { HeaderContext } from '../../context';
import Alert from '../../component/alert';
import PageLoader from '../../component/page_loader';
@ -8,6 +10,7 @@ const AdminParentEdit = () => {
const navigator = useNavigate();
const params = useParams();
const { isAuthenticate } = useContext(HeaderContext);
const [company, setCompany] = useState('');
const [email, setEmail] = useState('');
@ -34,28 +37,30 @@ const AdminParentEdit = () => {
useEffect(() => {
isMountedRef.current = false;
setLoaded(false);
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);
if(isAuthenticate()){
setLoaded(false);
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("失敗しました。");
}
})
else{
set400Error("失敗しました。");
}
})
}
return () => {
isMountedRef.current = true;
}
@ -64,41 +69,45 @@ const AdminParentEdit = () => {
const handleSubmit = (e) => {
e.preventDefault();
set401Error('');
set422Errors({
company:'',
email:'',
tel:'',
profile:'',
relation_limit:''
});
setSubmit(true);
var request = {
relation_limit: limit,
company: company,
email: email,
tel: tel,
profile: profile,
};
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;
if(isAuthenticate()){
set401Error('');
set422Errors({
company:'',
email:'',
tel:'',
profile:'',
relation_limit:''
});
setSubmit(true);
var request = {
relation_limit: limit,
company: company,
email: email,
tel: tel,
profile: profile,
};
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;
}
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 (
<div className="l-content">
<div className="l-content-w560">

ファイルの表示

@ -1,8 +1,10 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import { Link } from 'react-router-dom';
import IconButton from '@mui/material/IconButton';
import SearchIcon from '@mui/icons-material/Search';
import InfiniteScroll from "react-infinite-scroll-component";
import { HeaderContext } from '../../context';
import Alert from '../../component/alert';
import PageLoader from '../../component/page_loader';
@ -12,6 +14,8 @@ const SCROLL_DELAY_TIME = 1500;
const AdminParents = () => {
const { isAuthenticate } = useContext(HeaderContext);
const [keyword, setKeyword] = useState('')
const [loaded, setLoaded] = useState(false);
const [father_list, setFatherList ] = useState([]);
@ -24,24 +28,28 @@ const AdminParents = () => {
useEffect(() => {
isMountedRef.current = false;
setLoaded(false);
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("失敗しました。");
}
});
if(isAuthenticate()){
setLoaded(false);
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 () => {
isMountedRef.current = true
}
@ -61,29 +69,33 @@ const AdminParents = () => {
const handleSearch = (e) => {
e.preventDefault();
if(keyword == '')
{
document.getElementById('keyword').focus();
return;
if(isAuthenticate()){
if(keyword == '')
{
document.getElementById('keyword').focus();
return;
}
set422errors({keyword:''});
setLoaded(false);
setFatherList([]);
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));
}
});
}
set422errors({keyword:''});
setLoaded(false);
setFatherList([]);
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 (
<div className="l-content">
<div className="l-content__ttl">

ファイルの表示

@ -1,12 +1,14 @@
import React, { useState, useRef, useEffect } from 'react';
import React, { useState, useRef, useEffect, useContext } from 'react';
import { useNavigate, useParams } from 'react-router-dom';
import { LoadingButton } from '@material-ui/lab';
import { HeaderContext } from '../../context';
import Alert from '../../component/alert';
const AdminParentPasswordEdit = () => {
const { isAuthenticate } = useContext(HeaderContext);
const navigator = useNavigate();
const params = useParams();
@ -32,33 +34,37 @@ const AdminParentPasswordEdit = () => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({
password:'',
password_confirmation:''
});
setSubmit(true);
const request = {
password: password,
password_confirmation: password_confirmation
}
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;
if(isAuthenticate()){
set422Errors({
password:'',
password_confirmation:''
});
setSubmit(true);
const request = {
password: password,
password_confirmation: password_confirmation
}
})
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 (
<div className="l-content">
<div className="l-content-w560">

ファイルの表示

@ -1,8 +1,9 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import { Link, useNavigate, useParams} from 'react-router-dom';
import Notification from '../../component/notification';
import moment from 'moment';
import { HeaderContext } from '../../context';
import Notification from '../../component/notification';
import Alert from '../../component/alert';
import ModalPdf from '../../component/pdf/modal_pdf';
import ModalMemo from '../../component/modal_memo';
@ -12,6 +13,7 @@ import PageLoader from '../../component/page_loader';
const ChildMeetingDetail = () => {
const { isAuthenticate } = useContext(HeaderContext);
const navigator = useNavigate();
const params = useParams(); //meeting/detail/:meeting_id
@ -36,35 +38,38 @@ const ChildMeetingDetail = () => {
useEffect(() => {
isMountedRef.current = false;
setLoaded(false);
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);
if(isAuthenticate()){
setLoaded(false);
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(isMountedRef.current) 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 () => {
isMountedRef.current = true
@ -73,27 +78,29 @@ const ChildMeetingDetail = () => {
const handleApprovalRegister = () => {
setSubmit(true);
const formdata = new FormData();
formdata.append('child_id', child_id);
formdata.append('meeting_id', params.meeting_id);
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;
if(isAuthenticate()){
setSubmit(true);
const formdata = new FormData();
formdata.append('child_id', child_id);
formdata.append('meeting_id', params.meeting_id);
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;
}
case 400: set400Error(response.data.error_messages); break;
}
})
})
}
}
const handlePDFOpen = (pdf) => {

ファイルの表示

@ -1,7 +1,8 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import { Link } from 'react-router-dom';
import moment from 'moment';
import { HeaderContext } from '../../context';
import Notification from '../../component/notification';
import Alert from '../../component/alert';
import PageLoader from '../../component/page_loader';
@ -26,6 +27,7 @@ const ChildMeetings = () => {
const [_400error, set400Error] = useState('');
const isMountedRef = useRef(true);
const { isAuthenticate } = useContext(HeaderContext);
useEffect(()=>{
@ -35,43 +37,45 @@ const ChildMeetings = () => {
useEffect(() => {
isMountedRef.current = false;
setLoaded(false);
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("失敗しました。");
}
})
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("失敗しました。");
}
})
if(isAuthenticate()){
setLoaded(false);
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("失敗しました。");
}
})
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 () => {
isMountedRef.current = true

ファイルの表示

@ -1,12 +1,14 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import { useNavigate, useParams } from 'react-router-dom';
import { HeaderContext } from '../../context';
import Notification from '../../component/notification';
import Alert from '../../component/alert';
import PageLoader from '../../component/page_loader';
const ChildParentDetail = () => {
const { isAuthenticate } = useContext(HeaderContext);
const navigator = useNavigate();
const params = useParams();
@ -22,30 +24,33 @@ const ChildParentDetail = () => {
useEffect(() => {
isMountedRef.current = false;
setLoaded(false);
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;
setLoaded(true);
setNotice(err.response.data.notice);
if(err.response.status==404){
set404Error(err.response.data.message);
}
})
if(isAuthenticate){
setLoaded(false);
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;
setLoaded(true);
setNotice(err.response.data.notice);
if(err.response.status==404){
set404Error(err.response.data.message);
}
})
}
return () => {
isMountedRef.current = true;

ファイルの表示

@ -1,6 +1,7 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import { Link } from 'react-router-dom';
import { HeaderContext } from '../../context';
import Notification from '../../component/notification';
import Alert from '../../component/alert';
import PageLoader from '../../component/page_loader';
@ -21,28 +22,31 @@ const ChildParents = () => {
const [_success, setSuccess] = useState('');
const isMountedRef = useRef(true);
const { isAuthenticate } = useContext(HeaderContext);
useEffect( () => {
isMountedRef.current = false;
setLoaded(false);
axios.get('/api/children/fathers/listOfChild', {params: {child_id: child_id}})
.then(response => {
if(isMountedRef.current) 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("失敗しました。");
}
})
if(isAuthenticate()){
setLoaded(false);
axios.get('/api/children/fathers/listOfChild', {params: {child_id: child_id}})
.then(response => {
if(isMountedRef.current) 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("失敗しました。");
}
})
}
return () => {
isMountedRef.current = true;

ファイルの表示

@ -1,7 +1,8 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import { useNavigate } from 'react-router-dom';
import { LoadingButton } from '@material-ui/lab';
import { HeaderContext } from '../../context';
import Notification from '../../component/notification';
import Alert from '../../component/alert';
import PageLoader from '../../component/page_loader';
@ -9,6 +10,7 @@ import PageLoader from '../../component/page_loader';
const ChildProfileEdit = () => {
const { isAuthenticate } = useContext(HeaderContext);
const navigator = useNavigate();
const child_id = localStorage.getItem('child_id');
@ -41,36 +43,39 @@ const ChildProfileEdit = () => {
useEffect(() => {
isMountedRef.current = false;
setLoaded(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);
}
})
if(isAuthenticate()){
setLoaded(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
@ -80,48 +85,51 @@ const ChildProfileEdit = () => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({
first_name:'',
last_name:'',
identity:'',
email:'',
tel:'',
company:''
});
const formdata = new FormData();
formdata.append('first_name', first_name);
formdata.append('last_name', last_name);
formdata.append('identity', identity);
formdata.append('email', email);
formdata.append('tel', tel);
formdata.append('company', company);
const post = {
first_name: first_name,
last_name: last_name,
identity: identity,
email: email,
tel: tel,
company: company
}
setSubmit(true);
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;
if(isAuthenticate()){
set422Errors({
first_name:'',
last_name:'',
identity:'',
email:'',
tel:'',
company:''
});
const formdata = new FormData();
formdata.append('first_name', first_name);
formdata.append('last_name', last_name);
formdata.append('identity', identity);
formdata.append('email', email);
formdata.append('tel', tel);
formdata.append('company', company);
const post = {
first_name: first_name,
last_name: last_name,
identity: identity,
email: email,
tel: tel,
company: company
}
})
setSubmit(true);
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;
}
})
}
}

ファイルの表示

@ -1,8 +1,9 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import { Link, useNavigate } from 'react-router-dom';
import IconButton from "@material-ui/core/IconButton";
import PhotoCameraOutlinedIcon from '@mui/icons-material/PhotoCameraOutlined';
import { HeaderContext } from '../../context';
import Alert from '../../component/alert';
import PageLoader from '../../component/page_loader';
import Notification from '../../component/notification';
@ -10,6 +11,7 @@ import Notification from '../../component/notification';
const ChildProfileDetail = () => {
const { isAuthenticate, handleLogout } = useContext(HeaderContext);
const navigator = useNavigate();
const child_id = localStorage.getItem('child_id');
@ -28,36 +30,39 @@ const ChildProfileDetail = () => {
useEffect(() => {
isMountedRef.current = false;
setLoaded(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){
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);
}
})
if(isAuthenticate()){
setLoaded(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){
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;
}
},[]);
useEffect(() => {
if(localStorage.getItem('image_upload_success')){
setSuccess(localStorage.getItem('image_upload_success'));
@ -65,40 +70,36 @@ const ChildProfileDetail = () => {
}
})
const handleLogout = () => {
axios.get('/c-account/logout')
.then(() => {
localStorage.removeItem('c-account_token');
window.location.href = '/c-account/login';
})
}
const handleImageChange = (e) => {
e.preventDefault();
set422Errors({image: ''});
let reader = new FileReader();
let _file = e.target.files[0];
reader.readAsDataURL(_file);
reader.onloadend = () => {
set422Errors({image: ''});
setSubmitImage(true);
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;
if(isAuthenticate()){
set422Errors({image: ''});
let reader = new FileReader();
let _file = e.target.files[0];
reader.readAsDataURL(_file);
reader.onloadend = () => {
set422Errors({image: ''});
setSubmitImage(true);
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;
}
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
});
};
});
};
}
};

ファイルの表示

@ -1,7 +1,8 @@
import React, { useState, useRef, useEffect } from 'react';
import React, { useState, useRef, useEffect, useContext } from 'react';
import { useNavigate } from 'react-router-dom';
import { LoadingButton } from '@material-ui/lab';
import { HeaderContext } from '../../context';
import Notification from '../../component/notification';
import Alert from '../../component/alert';
@ -9,6 +10,7 @@ import Alert from '../../component/alert';
const ChildProfilePasswordEdit = () => {
const navigator = useNavigate();
const { isAuthenticate } = useContext(HeaderContext);
const child_id = localStorage.getItem('child_id');
const [notice, setNotice] = useState(-1);
@ -36,31 +38,34 @@ const ChildProfilePasswordEdit = () => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({
password:'',
password_confirmation:''
});
setSubmit(true);
const post = {
password: password,
password_confirmation: password_confirmation
}
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;
if(isAuthenticate()){
set422Errors({
password:'',
password_confirmation:''
});
setSubmit(true);
const post = {
password: password,
password_confirmation: password_confirmation
}
})
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,6 +1,7 @@
import React, { useState, useRef, useEffect } from 'react';
import React, { useState, useRef, useEffect, useContext } from 'react';
import { LoadingButton } from '@material-ui/lab';
import { HeaderContext } from '../../context';
import Notification from '../../component/notification';
import Alert from '../../component/alert';
@ -12,6 +13,7 @@ const ChildProfileWithdrawal = () => {
const [_400error, set400Error] = useState('');
const { isAuthenticate } = useContext(HeaderContext);
const isMountedRef = useRef(true);
useEffect(() => {
isMountedRef.current = false;
@ -23,18 +25,20 @@ const ChildProfileWithdrawal = () => {
const handleSubmit = (e) => {
e.preventDefault();
setSubmit(true);
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;
}
})
if(isAuthenticate()){
setSubmit(true);
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,7 +1,8 @@
import React, { useEffect, useState, useRef } from 'react';
import React, { useEffect, useState, useRef, useContext } from 'react';
import { Link } from 'react-router-dom';
import moment from 'moment';
import { HeaderContext } from '../../context';
import Notification from '../../component/notification';
import PageLoader from '../../component/page_loader';
import IconButton from '@mui/material/IconButton';
@ -30,6 +31,7 @@ const ChildSearch = () => {
const [notice, setNotice] = useState(-1);
const { isAuthenticate } = useContext(HeaderContext);
const isMountedRef = useRef(true);
useEffect(() => {
isMountedRef.current = false;
@ -41,43 +43,46 @@ const ChildSearch = () => {
const handleSearch = (e) => {
e.preventDefault();
if(keyword == ''){
document.getElementById('keyword').focus();
return;
if(isAuthenticate()){
if(keyword == ''){
document.getElementById('keyword').focus();
return;
}
setLoaded1(false);
setLoaded2(false);
setInitPage(false);
axios.get('/api/children/meetings/searchOfNonApprovalOfChild', {params:{keyword: keyword, 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));
}
});
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));
}
});
}
setLoaded1(false);
setLoaded2(false);
setInitPage(false);
axios.get('/api/children/meetings/searchOfNonApprovalOfChild', {params:{keyword: keyword, 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));
}
});
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(()=>{

ファイルの表示

@ -1,4 +1,4 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import { Link } from 'react-router-dom';
import Dialog from '@mui/material/Dialog';
import DialogContent from '@mui/material/DialogContent';
@ -6,6 +6,7 @@ import DialogTitle from '@mui/material/DialogTitle';
import Slide from '@mui/material/Slide';
import { CircularProgress } from '@material-ui/core';
import { HeaderContext } from '../context';
import Alert from '../component/alert';
@ -26,31 +27,34 @@ export default function ModalSettingNotify({show, handleClose, meetingId, handle
const [loaded, setLoaded] = useState(false);
const isMountedRef = useRef(true);
const { isAuthenticate } = useContext(HeaderContext);
useEffect(() => {
isMountedRef.current = false;
setLoaded1(false);
axios.get('/api/fathers/meeting/approvals/listChildrenOfApprovel', {params: { meeting_id: meetingId }})
.then((response) => {
if(isMountedRef.current) return;
setLoaded1(true);
if(response.data.status_code==200){
setApproval(response.data.params);
}
});
setLoaded2(false);
axios.get('/api/fathers/meeting/approvals/listChildrenOfUnapprovel', {params: { meeting_id: meetingId }})
.then((response) => {
if(isMountedRef.current) return;
setLoaded2(true);
if(response.data.status_code==200){
setUnapproval(response.data.params);
}
});
if(isAuthenticate()){
setLoaded1(false);
axios.get('/api/fathers/meeting/approvals/listChildrenOfApprovel', {params: { meeting_id: meetingId }})
.then((response) => {
if(isMountedRef.current) return;
setLoaded1(true);
if(response.data.status_code==200){
setApproval(response.data.params);
}
});
setLoaded2(false);
axios.get('/api/fathers/meeting/approvals/listChildrenOfUnapprovel', {params: { meeting_id: meetingId }})
.then((response) => {
if(isMountedRef.current) return;
setLoaded2(true);
if(response.data.status_code==200){
setUnapproval(response.data.params);
}
});
}
return () => {
isMountedRef.current = true;
@ -65,18 +69,20 @@ export default function ModalSettingNotify({show, handleClose, meetingId, handle
const settingNotify = (email) => {
const formdata = new FormData();
formdata.append('email', JSON.stringify(new Array(email)));
formdata.append('meeting_id', meetingId);
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;
}
})
if(isAuthenticate){
const formdata = new FormData();
formdata.append('email', JSON.stringify(new Array(email)));
formdata.append('meeting_id', meetingId);
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;
}
})
}
}

ファイルの表示

@ -8,11 +8,7 @@ const PasswordResetComplete = () => {
const { pathname } = useLocation();
const gotoLogin = () => {
var url;
if(pathname.includes('c-account')) url = '/c-account/login';
else if(pathname.includes('p-account')) url = '/p-account/login';
navigator(url, { state: '' });
navigator(`/${pathname.split('/')[1]}/login`);
}
return (

ファイルの表示

@ -23,14 +23,18 @@ export const HeaderContextProvider = ({ children }) => {
let token = localStorage.getItem(`${acc_type}_token`);
if(!token){
navigator(`/${acc_type}/login`);
return false;
}
else{
token = JSON.parse(token);
expires = token.expires;
if(new Date().getTime() >= expires){
handleLogout();
}
token = JSON.parse(token);
console.log(token, new Date().getTime());
let expires = token.expires;
// if(new Date().getTime() >= expires){
// handleLogout();
// return false;
// }
}
return true;
}

ファイルの表示

@ -1,81 +1,11 @@
import React, { useRef, useState, useEffect } from 'react';
import React, { useRef, useState, useEffect, useContext } from 'react';
import { LoadingButton } from '@material-ui/lab';
import { HeaderContext } from '../../context';
import Alert from '../../component/alert';
import Notification from '../../component/notification';
import PageLoader from '../../component/page_loader';
import copy from 'copy-to-clipboard';
import {
Box,
Dialog,
DialogTitle,
Slide,
Typography
} from '@mui/material';
const Transition = React.forwardRef(function Transition(props, ref) {
return <Slide direction="up" ref={ref} {...props} />;
});
const LineModal = ({ show, handleClose }) => {
const inviteurl = '「KIKI」の招待が届いています。' + '\n' +
'まずは以下より仮登録を行ってください。' + '\n' +
'※スマホ本体を最新の状態にアップデートしてからURLをクリックしてください。' + '\n\n' +
document.getElementById('inviteurl').value + '\n\n' +
'▼公式サイトはこちら' + '\n' +
'https://kikikan.jp';
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}`;
const [_success, setSuccess] = useState('');
const [_400error, set400Error] = useState('');
const copyInviteURL = () => {
if(copy(inviteurl, {debug: true}))
{
setSuccess('招待用URLをコピーしました。');
} else {
set400Error('コピー失敗しました。');
}
}
return (
<Dialog
open={show}
TransitionComponent={Transition}
keepMounted
aria-describedby="alert-dialog-slide-description"
onClose={()=>{
setSuccess('');
set400Error('');
handleClose();
}}
>
<DialogTitle sx={{padding:'20px 10px',textAlign:'center', borderBottom:'1px solid rgb(239 236 236)'}}>
<span className="ft-16 text-center font-weight-bold">招待用URL</span>
</DialogTitle>
<Box sx={{ p:'10px', pb:'10px'}}>
<Typography component='p' sx={{ minHeight:'175px', whiteSpace:'pre-wrap', bgcolor:'#F0F0F0', p:'10px' }} className="ft-14 text-black">
{inviteurl}
</Typography>
</Box>
<Box sx={{ p:'10px', pt:'0px' }}>
<ul className="invite-btn__wrapper">
<li><a className="copy-btn" onClick={copyInviteURL}>コピー</a></li>
<li><a className="line-btn" href={`http://line.naver.jp/R/msg/text/?${lineText}`}>送信</a></li>
</ul>
</Box>
{ _success && <Alert type="success" hide={()=>setSuccess('')}>{_success}</Alert> }
{ _400error && <Alert type="fail" hide={()=>set400Error('')}>{_400error}</Alert> }
</Dialog>
)
}
const ParentChildAdd = () => {
@ -92,6 +22,7 @@ const ParentChildAdd = () => {
const [submit, setSubmit] = useState(false);
const isMountedRef = useRef(true);
const { isAuthenticate } = useContext(HeaderContext);
const inviteurl = '「KIKI」の招待が届いています。' + '\n' +
'まずは以下より仮登録を行ってください。' + '\n' +
@ -114,64 +45,71 @@ const ParentChildAdd = () => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({identity: ''});
set401Error('');
const formdata = new FormData();
formdata.append('identity', identity);
formdata.append('father_id', father_id);
setSubmit(true);
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;
}
});
if(isAuthenticate()){
set422Errors({identity: ''});
set401Error('');
const formdata = new FormData();
formdata.append('identity', identity);
formdata.append('father_id', father_id);
setSubmit(true);
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 handleCheckRelations = (type) => {
set401Error('');
setLoaded(false);
if(type == 'invite'){
if(!copy(inviteurl, {debug: true})){
set400Error('コピー失敗しました。');
return;
}
}
axios.get('/api/fathers/relations/check', {params:{father_id: father_id}})
.then(response=>{
if(isMountedRef.current) return;
switch(response.data.status_code){
case 200: {
if(type == 'invite') setSuccess('コピー成功しました。');
else if(type == 'line')
window.location.href = `http://line.naver.jp/R/msg/text/?${lineText}`;
break;
if(isAuthenticate()){
set401Error('');
setLoaded(false);
if(type == 'invite'){
if(!copy(inviteurl, {debug: true})){
set400Error('コピー失敗しました。');
return;
}
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));
axios.get('/api/fathers/relations/check', {params:{father_id: father_id}})
.then(response=>{
if(isMountedRef.current) return;
switch(response.data.status_code){
case 200: {
if(type == 'invite') setSuccess('コピー成功しました。');
else if(type == 'line')
window.location.href = `http://line.naver.jp/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;
}
setNotice(response.data.notice);
setLoaded(true);
})
.catch(err=>console.log(err));
}
}
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">

ファイルの表示

@ -1,7 +1,8 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import { Link, useNavigate, useParams } from 'react-router-dom';
import moment from 'moment';
import { HeaderContext } from '../../context';
import Notification from '../../component/notification';
import ModalConfirm from '../../component/modal_confirm';
import Alert from '../../component/alert';
@ -11,6 +12,8 @@ const ParentChildDetail = () => {
const navigator = useNavigate();
const params = useParams();
const { isAuthenticate } = useContext(HeaderContext);
const [notice, setNotice] = useState(-1);
const [loaded, setLoaded] = useState(false);
@ -27,30 +30,33 @@ const ParentChildDetail = () => {
useEffect(() => {
isMountedRef.current = false;
setLoaded(false);
axios.get('/api/fathers/children/detail/'+child_id, {params:{father_id: father_id}})
.then(response => {
if(isMountedRef.current) return;
setLoaded(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
setChild(response.data.params);
}
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);
}
})
if(isAuthenticate()){
setLoaded(false);
axios.get('/api/fathers/children/detail/'+child_id, {params:{father_id: father_id}})
.then(response => {
if(isMountedRef.current) return;
setLoaded(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
setChild(response.data.params);
}
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
@ -60,22 +66,25 @@ const ParentChildDetail = () => {
//-------------------------------------------------------------
const handleAcceptDelete = () => {
setSubmit(true);
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;
if(isAuthenticate()){
setSubmit(true);
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;
}
case 400: set400Error('子の削除に失敗しました。'); break;
}
});
});
}
};
return (

ファイルの表示

@ -1,10 +1,12 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import ja from "date-fns/locale/ja";
import DatePicker, { registerLocale } from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
registerLocale("ja", ja);
import moment from 'moment';
import { LoadingButton } from '@material-ui/lab';
import { HeaderContext } from '../../context';
import Notification from '../../component/notification';
import Alert from '../../component/alert';
import PageLoader from '../../component/page_loader';
@ -14,6 +16,7 @@ const ParentChildEdit = () => {
const navigator = useNavigate();
const params = useParams();
const { isAuthenticate } = useContext(HeaderContext);
const [notice, setNotice] = useState(-1);
const [_success, setSuccess] = useState('');
@ -32,59 +35,67 @@ const ParentChildEdit = () => {
useEffect(() => {
isMountedRef.current = false;
setLoaded(false);
axios.get('/api/fathers/children/detail/' + child_id, {params:{father_id: father_id}})
.then(response => {
if(isMountedRef.current) return;
setNotice(response.data.notice);
if(isAuthenticate()){
setLoaded(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);
if(response.data.status_code==200){
let hire_at = moment(response.data.params.father_relations?.hire_at).toDate();
setHireAt(hire_at);
} else {
set400Error("失敗しました。");
setNotice(err.response.data.notice);
if(err.response.status==404){
set404Error(err.response.data.message);
}
})
.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 = (e) => {
e.preventDefault();
set422Errors({hire_at: ''});
const request = {
father_id: father_id,
hire_at: hire_at
}
setSubmit(true);
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;
if(isAuthenticate()){
set422Errors({hire_at: ''});
const request = {
father_id: father_id,
hire_at: hire_at
}
});
setSubmit(true);
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 (

ファイルの表示

@ -1,6 +1,7 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import { Link } from 'react-router-dom';
import { HeaderContext } from '../../context';
import Notification from '../../component/notification';
import Alert from '../../component/alert';
import PageLoader from '../../component/page_loader';
@ -21,28 +22,33 @@ const ParentChilds = () => {
const [_400error, set400Error] = useState('');
const isMountedRef = useRef(true);
const { isAuthenticate } = useContext(HeaderContext);
useEffect(() => {
isMountedRef.current = false;
setLoaded(false);
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){
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("失敗しました。");
}
})
if(isAuthenticate()){
setLoaded(false);
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){
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;

ファイルの表示

@ -1,17 +1,17 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import { Link } from 'react-router-dom';
import moment from 'moment';
import { HeaderContext } from '../../context';
import Notification from '../../component/notification';
import Alert from '../../component/alert';
import PageLoader from '../../component/page_loader';
import InfiniteScroll from "react-infinite-scroll-component";
const INFINITE = 10;
const SCROLL_DELAY_TIME = 1500;
const ParentFavorite = () => {
const [notice, setNotice] = useState(-1);
@ -29,6 +29,8 @@ const ParentFavorite = () => {
const [_400error, set400Error] = useState('');
const isMountedRef = useRef(true);
const { isAuthenticate } = useContext(HeaderContext);
useEffect(()=>{
setLoaded(loaded1 && loaded2);
@ -37,13 +39,44 @@ const ParentFavorite = () => {
useEffect(() => {
isMountedRef.current = false;
setLoaded(false);
axios.get('/api/fathers/meetings/listOfNonFavoriteOfFather', {params:{father_id: father_id}})
.then(response => {
if(isAuthenticate()){
setLoaded(false);
axios.get('/api/fathers/meetings/listOfNonFavoriteOfFather', {params:{father_id: father_id}})
.then(response => {
if(isMountedRef.current) 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})
}
setMeetingListOfNonFavorite(arr);
var len = arr.length;
if(len > INFINITE)
setFetchMeetingListOfNonFavorite(arr.slice(0, INFINITE));
else setFetchMeetingListOfNonFavorite(arr.slice(0, len));
}
else {
set400Error("失敗しました。");
}
})
axios.get('/api/fathers/meetings/listOfFavoriteOfFather', {params:{father_id: father_id}})
.then(response => {
if(isMountedRef.current) return;
setLoaded1(true);
setLoaded2(true);
setNotice(response.data.notice);
if(response.data.status_code==200){
var list = response.data.params;
@ -57,45 +90,17 @@ const ParentFavorite = () => {
}
arr.push({...list[i], denominator:total, numerator:num})
}
setMeetingListOfNonFavorite(arr);
setMeetingListOfFavorite(arr);
var len = arr.length;
if(len > INFINITE)
setFetchMeetingListOfNonFavorite(arr.slice(0, INFINITE));
else setFetchMeetingListOfNonFavorite(arr.slice(0, len));
setFetchMeetingListOfFavorite(arr.slice(0, INFINITE));
else setFetchMeetingListOfFavorite(arr.slice(0, len));
}
else {
set400Error("失敗しました。");
}
})
axios.get('/api/fathers/meetings/listOfFavoriteOfFather', {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})
}
setMeetingListOfFavorite(arr);
var len = arr.length;
if(len > INFINITE)
setFetchMeetingListOfFavorite(arr.slice(0, INFINITE));
else setFetchMeetingListOfFavorite(arr.slice(0, len));
}
else {
set400Error("失敗しました。");
}
})
})
}
return () => {
isMountedRef.current = true;
@ -125,38 +130,42 @@ const ParentFavorite = () => {
};
function handleFavorite(meetingId, currentFavorite, stateName) {
const formdata = new FormData();
formdata.append('meeting_id', meetingId);
formdata.append('is_favorite', currentFavorite == 1 ? 0 : 1);
axios.post('/api/fathers/meetings/registerFavorite', formdata)
if(stateName == "nonFavoriteOfFather") {
const newList = meeting_list_non_favorite.map((item) => {
if (item.id === meetingId) {
const updatedItem = {
...item,
is_favorite: item.is_favorite == 1 ? 0 : 1,
};
return updatedItem;
}
return item;
});
setMeetingListOfNonFavorite(newList);
setFetchMeetingListOfNonFavorite(newList.slice(0, fetch_meeting_list_non_favorite.length));
} else {
const newList = meeting_list_favorite.map((item) => {
if (item.id === meetingId) {
const updatedItem = {
...item,
is_favorite: item.is_favorite == 1 ? 0 : 1,
};
return updatedItem;
}
return item;
});
setMeetingListOfFavorite(newList);
setFetchMeetingListOfFavorite(newList.slice(0, fetch_meeting_list_favorite.length));
}
if(isAuthenticate()){
const formdata = new FormData();
formdata.append('meeting_id', meetingId);
formdata.append('is_favorite', currentFavorite == 1 ? 0 : 1);
axios.post('/api/fathers/meetings/registerFavorite', formdata)
if(stateName == "nonFavoriteOfFather") {
const newList = meeting_list_non_favorite.map((item) => {
if (item.id === meetingId) {
const updatedItem = {
...item,
is_favorite: item.is_favorite == 1 ? 0 : 1,
};
return updatedItem;
}
return item;
});
setMeetingListOfNonFavorite(newList);
setFetchMeetingListOfNonFavorite(newList.slice(0, fetch_meeting_list_non_favorite.length));
} else {
const newList = meeting_list_favorite.map((item) => {
if (item.id === meetingId) {
const updatedItem = {
...item,
is_favorite: item.is_favorite == 1 ? 0 : 1,
};
return updatedItem;
}
return item;
});
setMeetingListOfFavorite(newList);
setFetchMeetingListOfFavorite(newList.slice(0, fetch_meeting_list_favorite.length));
}
}
};

ファイルの表示

@ -1,8 +1,10 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import { useNavigate, useLocation } from 'react-router-dom';
import { LoadingButton } from '@material-ui/lab';
import IconButton from '@mui/material/IconButton';
import RemoveIcon from '@mui/icons-material/Remove';
import { HeaderContext } from '../../context';
import Alert from '../../component/alert';
import Notification from '../../component/notification';
import PreviewPDF from '../../component/preview_pdf';
@ -14,6 +16,7 @@ const ParentMeetingAdd = () => {
const navigator = useNavigate();
const location = useLocation();
const { isAuthenticate } = useContext(HeaderContext);
const father_id = localStorage.getItem('father_id');
@ -40,57 +43,59 @@ const ParentMeetingAdd = () => {
useEffect(() => {
isMountedRef.current = false;
setLoaded(false);
let clone = localStorage.getItem('cloneMeeting');
if(clone){
clone = JSON.parse(clone);
setLoaded(true);
setTitle(clone?.title);
setMemo(clone.memo ? clone.memo: '');
setText(clone?.text);
setPdf(clone?.pdf);
setPDFURL(clone?.pdf);
let images = [];
for(let i in clone.meeting_image){
images.push(clone.meeting_image[i].image);
}
setMeetingImages(images);
setApprovalList(clone.approval);
var arr = [];
for(let i in clone.children){
arr.push({...clone.children[i], checked: false})
}
setChildrenList(arr);
if((clone.children.length == clone.approval.length) && clone.approval.length > 0 )
setCheckRadio('all_send');
else if((clone.children.length != clone.approval.length) && clone.approval.length > 0)
setCheckRadio('pickup_send');
else setCheckRadio('');
localStorage.removeItem('cloneMeeting');
}
else{
axios.get('/api/fathers/children/listOfFather', {params:{father_id: father_id}})
.then(response=>{
if(isMountedRef.current) return;
if(isAuthenticate()){
setLoaded(false);
let clone = localStorage.getItem('cloneMeeting');
if(clone){
clone = JSON.parse(clone);
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('');
setTitle(clone?.title);
setMemo(clone.memo ? clone.memo: '');
setText(clone?.text);
setPdf(clone?.pdf);
setPDFURL(clone?.pdf);
let images = [];
for(let i in clone.meeting_image){
images.push(clone.meeting_image[i].image);
}
else {
set400Error("失敗しました。");
setMeetingImages(images);
setApprovalList(clone.approval);
var arr = [];
for(let i in clone.children){
arr.push({...clone.children[i], checked: false})
}
})
setChildrenList(arr);
if((clone.children.length == clone.approval.length) && clone.approval.length > 0 )
setCheckRadio('all_send');
else if((clone.children.length != clone.approval.length) && clone.approval.length > 0)
setCheckRadio('pickup_send');
else setCheckRadio('');
localStorage.removeItem('cloneMeeting');
}
else{
axios.get('/api/fathers/children/listOfFather', {params:{father_id: father_id}})
.then(response=>{
if(isMountedRef.current) return;
setLoaded(true);
setNotice(response.data.notice);
if(response.data.status_code == 200){
var list = response.data.params;
var arr = [];
for(var i in list)
arr.push({...list[i], checked: false})
setChildrenList(arr);
if(list.length > 0)
setCheckRadio("all_send");
else setCheckRadio('');
}
else {
set400Error("失敗しました。");
}
})
}
}
return () => {
@ -98,13 +103,6 @@ const ParentMeetingAdd = () => {
}
},[])
//-------------------------------------------------------------
useEffect(()=>{
var navbar_list = document.getElementsByClassName("mypage-nav-list__item");
for(let i=0; i<navbar_list.length; i++)
navbar_list[i].classList.remove('nav-active');
document.getElementsByClassName("-meeting")[0].classList.add('nav-active');
},[]);
//--------------------------------------------------------
useEffect(()=>{
@ -127,65 +125,71 @@ const ParentMeetingAdd = () => {
//----------------------------------------------------------------------
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({title:'',memo:'',text:'',pdf:'',image:''});
const formdata = new FormData();
formdata.append('father_id', father_id);
formdata.append('title', title);
formdata.append('text', text);
formdata.append('memo', memo);
formdata.append('pdf', pdf);
formdata.append('image', JSON.stringify(meeting_image));
let c_arr = [];
for(let i in children_list){
if(children_list[i].checked) c_arr.push(children_list[i].id);
}
formdata.append('children', JSON.stringify(c_arr));
setSubmit(true);
axios.post('/api/fathers/meetings/register', formdata)
.then(response => {
if(isMountedRef.current) return;
setNotice(response.data.notice);
setSubmit(false);
switch(response.data.status_code){
case 200: {
const meeting_id = response.data.params.meeting_id;
navigator(`/p-account/meeting/detail/${meeting_id}`, { state: "登録成功しました" });
break;
}
case 400: set400Error("登録失敗しました。"); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
if(isAuthenticate()){
set422Errors({title:'',memo:'',text:'',pdf:'',image:''});
const formdata = new FormData();
formdata.append('father_id', father_id);
formdata.append('title', title);
formdata.append('text', text);
formdata.append('memo', memo);
formdata.append('pdf', pdf);
formdata.append('image', JSON.stringify(meeting_image));
let c_arr = [];
for(let i in children_list){
if(children_list[i].checked) c_arr.push(children_list[i].id);
}
});
formdata.append('children', JSON.stringify(c_arr));
setSubmit(true);
axios.post('/api/fathers/meetings/register', formdata)
.then(response => {
if(isMountedRef.current) return;
setNotice(response.data.notice);
setSubmit(false);
switch(response.data.status_code){
case 200: {
const meeting_id = response.data.params.meeting_id;
navigator(`/p-account/meeting/detail/${meeting_id}`, { state: "登録成功しました" });
break;
}
case 400: set400Error("登録失敗しました。"); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
});
}
}
const handleImageChange = (e) => {
e.preventDefault();
const files = Array.from(e.target.files);
if(e.target.files.length + meeting_image.length > 10)
{
set400Error("画像は最大10個までです。");
return;
if(isAuthenticate()){
const files = Array.from(e.target.files);
if(e.target.files.length + meeting_image.length > 10)
{
set400Error("画像は最大10個までです。");
return;
}
const promises = files.map(_file => {
return (new Promise((resolve, reject) => {
const reader = new FileReader();
reader.addEventListener('load', (ev) => {
resolve(ev.target.result);
});
reader.addEventListener('error', reject);
reader.readAsDataURL(_file);
}))
});
Promise.all(promises).then(images => {
setMeetingImages([...meeting_image, ...images]);
},
error => { console.error(error); });
}
const promises = files.map(_file => {
return (new Promise((resolve, reject) => {
const reader = new FileReader();
reader.addEventListener('load', (ev) => {
resolve(ev.target.result);
});
reader.addEventListener('error', reject);
reader.readAsDataURL(_file);
}))
});
Promise.all(promises).then(images => {
setMeetingImages([...meeting_image, ...images]);
},
error => { console.error(error); });
};
const handlePDFChange = (e) => {

ファイルの表示

@ -1,8 +1,9 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import moment from 'moment';
import { useNavigate, Link, useParams } from 'react-router-dom';
import copy from 'copy-to-clipboard';
import { HeaderContext } from '../../context';
import ModalEditMemo from '../../component/modal_edit_memo';
import ModalConfirm from '../../component/modal_confirm';
import ModalPdf from '../../component/pdf/modal_pdf';
@ -16,6 +17,7 @@ const ParentMeetingDetail = () => {
const navigator = useNavigate();
const params = useParams();
const { isAuthenticate } = useContext(HeaderContext);
const [notice, setNotice] = useState(-1);
const father_id = localStorage.getItem('father_id');
@ -41,8 +43,10 @@ const ParentMeetingDetail = () => {
useEffect(() => {
isMountedRef.current = false;
setLoaded(false);
if(isAuthenticate()){
setLoaded(false);
axios.get(`/api/fathers/meetings/detail/${params?.meeting_id}`, {params: { father_id: father_id}})
.then((response) => {
if(isMountedRef.current) return;
@ -73,94 +77,95 @@ const ParentMeetingDetail = () => {
set404Error(err.response.data.message);
}
})
}
return () => {
isMountedRef.current = true;
}
}, []);
//-------------------------------------------------------------
useEffect(()=>{
var navbar_list = document.getElementsByClassName("mypage-nav-list__item");
for(let i=0; i<navbar_list.length; i++)
navbar_list[i].classList.remove('nav-active');
document.getElementsByClassName("-meeting")[0].classList.add('nav-active');
},[]);
const handleAcceptDelete = () => {
setSubmitDelete(true);
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;
if(isAuthenticate()){
setSubmitDelete(true);
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;
}
case 400: set400Error('ミーティングの削除に失敗しました。'); break;
}
});
});
}
};
function handleFavorite(meetingId, currentFavorite) {
const formdata = new FormData();
formdata.append('meeting_id', meetingId);
formdata.append('is_favorite', currentFavorite == 1 ? 0 : 1);
axios.post('/api/fathers/meetings/registerFavorite', formdata)
const updatedItem = {
...meeting,
is_favorite: currentFavorite == 1 ? 0 : 1,
};
setMeeting(updatedItem);
if(isAuthenticate()){
const formdata = new FormData();
formdata.append('meeting_id', meetingId);
formdata.append('is_favorite', currentFavorite == 1 ? 0 : 1);
axios.post('/api/fathers/meetings/registerFavorite', formdata)
const updatedItem = {
...meeting,
is_favorite: currentFavorite == 1 ? 0 : 1,
};
setMeeting(updatedItem);
}
};
const handleNotifyAllChild = () => {
if(isAuthenticate()){
setSubmitNotify(true);
axios.get('/api/fathers/meeting/approvals/listChildrenOfUnapprovel', {params:{meeting_id: params?.meeting_id}})
.then(response => {
if(isMountedRef.current) return;
.then(response => {
if(isMountedRef.current) return;
setNotice(response.data.notice);
if(response.data.status_code == 200){
var list = response.data.params;
const email_list = [];
for(var i in list){
email_list.push(list[i].child.email);
}
const formdata = new FormData();
formdata.append('email', JSON.stringify(email_list));
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){
case 200: setSuccess('通知に成功しました!'); break;
case 400: set400Error('通知に失敗しました。'); break;
}
})
setNotice(response.data.notice);
if(response.data.status_code == 200){
var list = response.data.params;
const email_list = [];
for(var i in list){
email_list.push(list[i].child.email);
}
});
const formdata = new FormData();
formdata.append('email', JSON.stringify(email_list));
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){
case 200: setSuccess('通知に成功しました!'); break;
case 400: set400Error('通知に失敗しました。'); break;
}
})
}
});
}
}
const handleUpdateMemo = (modal_memo) => {
let _tmp = meeting;
_tmp.memo = modal_memo;
setMeeting(_tmp);
const post = {
meeting_id: meeting.id,
memo: modal_memo
if(isAuthenticate()){
let _tmp = meeting;
_tmp.memo = modal_memo;
setMeeting(_tmp);
const post = {
meeting_id: meeting.id,
memo: modal_memo
}
axios.put('/api/fathers/meetings/updateMemo', post)
}
axios.put('/api/fathers/meetings/updateMemo', post)
}

ファイルの表示

@ -1,9 +1,10 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import { useNavigate, useParams } from 'react-router-dom';
import { LoadingButton } from '@material-ui/lab';
import IconButton from '@mui/material/IconButton';
import RemoveIcon from '@mui/icons-material/Remove';
import { HeaderContext } from '../../context';
import Alert from '../../component/alert';
import Notification from '../../component/notification';
import PreviewPDF from '../../component/preview_pdf';
@ -17,6 +18,7 @@ const ParentMeetingEdit = () => {
const navigator = useNavigate();
const params = useParams();
const { isAuthenticate } = useContext(HeaderContext);
const father_id = localStorage.getItem('father_id');
const meeting_id = params?.meeting_id;
@ -47,66 +49,60 @@ const ParentMeetingEdit = () => {
useEffect(() => {
isMountedRef.current = false;
setLoaded(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});
if(isAuthenticate()){
setLoaded(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('');
}
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);
}
})
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;
}
}, []);
//-------------------------------------------------------------
useEffect(()=>{
var navbar_list = document.getElementsByClassName("mypage-nav-list__item");
for(let i=0; i<navbar_list.length; i++)
navbar_list[i].classList.remove('nav-active');
document.getElementsByClassName("-meeting")[0].classList.add('nav-active');
},[]);
//--------------------------------------------------------
@ -130,103 +126,111 @@ useEffect(()=>{
//----------------------------------------------------------------------
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({title:'',memo:'',text:'',pdf:'',image:''});
var approval_registerIndexes = [];
var approval_deleteIndexes = [];
for(let i in children_list){
if(children_list[i].checked){
if(approval_list.findIndex(ele=>ele.child_id == children_list[i].id) < 0)
approval_registerIndexes.push(children_list[i].id);
}
}
for(let i in approval_list){
if(children_list.findIndex(ele=> ele.checked && ele.id == approval_list[i].child_id) < 0)
approval_deleteIndexes.push(approval_list[i].child_id);
}
const formdata = new FormData();
formdata.append('children', JSON.stringify(approval_registerIndexes));
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);
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;
if(isAuthenticate()){
set422Errors({title:'',memo:'',text:'',pdf:'',image:''});
var approval_registerIndexes = [];
var approval_deleteIndexes = [];
for(let i in children_list){
if(children_list[i].checked){
if(approval_list.findIndex(ele=>ele.child_id == children_list[i].id) < 0)
approval_registerIndexes.push(children_list[i].id);
}
case 400: set400Error("編集が失敗しました。"); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
});
for(let i in approval_list){
if(children_list.findIndex(ele=> ele.checked && ele.id == approval_list[i].child_id) < 0)
approval_deleteIndexes.push(approval_list[i].child_id);
}
const formdata = new FormData();
formdata.append('children', JSON.stringify(approval_registerIndexes));
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);
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;
}
});
}
}
const handleImageChange = (e) => {
e.preventDefault();
const files = Array.from(e.target.files);
if(e.target.files.length + meeting_image.length > 10)
{
set400Error("画像は最大10個までです。");
return;
if(isAuthenticate()){
const files = Array.from(e.target.files);
if(e.target.files.length + meeting_image.length > 10)
{
set400Error("画像は最大10個までです。");
return;
}
const promises = files.map(_file => {
return (new Promise((resolve, reject) => {
const reader = new FileReader();
reader.addEventListener('load', (ev) => {
resolve(ev.target.result);
});
reader.addEventListener('error', reject);
reader.readAsDataURL(_file);
}))
});
Promise.all(promises).then( images => {
set422Errors({image:''});
const formdata = new FormData();
formdata.append('image', JSON.stringify(images));
setImageSending(true);
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 promises = files.map(_file => {
return (new Promise((resolve, reject) => {
const reader = new FileReader();
reader.addEventListener('load', (ev) => {
resolve(ev.target.result);
});
reader.addEventListener('error', reject);
reader.readAsDataURL(_file);
}))
});
Promise.all(promises).then( images => {
set422Errors({image:''});
const formdata = new FormData();
formdata.append('image', JSON.stringify(images));
setImageSending(true);
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 = (index, image_id) => {
let list = [...meeting_image];
list.splice(index, 1);
setMeetingImages(list);
axios.delete(`/api/fathers/meeting/images/delete/${meeting_id}`, {params:{image_id: image_id}})
.then(response=>{
if(isMountedRef.current) return;
if(isAuthenticate()){
let list = [...meeting_image];
list.splice(index, 1);
setMeetingImages(list);
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) => {

ファイルの表示

@ -1,7 +1,8 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import { Link } from 'react-router-dom';
import moment from 'moment';
import { HeaderContext } from '../../context';
import Notification from '../../component/notification';
import Alert from '../../component/alert';
import PageLoader from '../../component/page_loader';
@ -13,6 +14,7 @@ const SCROLL_DELAY_TIME = 1500;
const ParentMeetings = () => {
const { isAuthenticate } = useContext(HeaderContext);
const [notice, setNotice] = useState(-1);
const father_id = localStorage.getItem('father_id');
@ -37,13 +39,41 @@ const ParentMeetings = () => {
useEffect(() => {
isMountedRef.current = false;
setLoaded(false);
axios.get('/api/fathers/meetings/listOfIncompleteOfFather', {params:{father_id: father_id}})
.then(response => {
if(isMountedRef.current) return;
setLoaded1(true);
if(isAuthenticate()){
setLoaded(false);
axios.get('/api/fathers/meetings/listOfIncompleteOfFather', {params:{father_id: father_id}})
.then(response => {
if(isMountedRef.current) 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/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;
@ -57,41 +87,15 @@ const ParentMeetings = () => {
}
arr.push({...list[i], denominator:total, numerator:num})
}
setMeetingListOfIncomplete(arr);
setMeetingListOfComplete(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/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})
setFetchMeetingListOfComplete(arr.slice(0, INFINITE));
else setFetchMeetingListOfComplete(arr.slice(0, len));
}
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));
})
.catch(err=>console.log(err));
}
return () => {
isMountedRef.current = true;
@ -121,38 +125,40 @@ const ParentMeetings = () => {
};
const handleFavorite = (meetingId, currentFavorite, stateName) => {
const formdata = new FormData();
formdata.append('meeting_id', meetingId);
formdata.append('is_favorite', currentFavorite == 1 ? 0 : 1);
axios.post('/api/fathers/meetings/registerFavorite', formdata)
if(stateName == "inCompleteOfFather") {
const newList1 = meeting_list_incomplete.map((item) => {
if (item.id === meetingId) {
const updatedItem = {
...item,
is_favorite: item.is_favorite == 1 ? 0 : 1,
};
return updatedItem;
}
return item;
});
setMeetingListOfIncomplete(newList1);
setFetchMeetingListOfIncomplete(newList1.slice(0, fetch_meeting_list_incomplete.length));
} else {
const newList2 = meeting_list_complete.map((item) => {
if (item.id === meetingId) {
const updatedItem = {
...item,
is_favorite: item.is_favorite == 1 ? 0 : 1,
};
return updatedItem;
}
return item;
});
setMeetingListOfComplete(newList2);
setFetchMeetingListOfComplete(newList2.slice(0, fetch_meeting_list_complete.length));
}
if(isAuthenticate()){
const formdata = new FormData();
formdata.append('meeting_id', meetingId);
formdata.append('is_favorite', currentFavorite == 1 ? 0 : 1);
axios.post('/api/fathers/meetings/registerFavorite', formdata)
if(stateName == "inCompleteOfFather") {
const newList1 = meeting_list_incomplete.map((item) => {
if (item.id === meetingId) {
const updatedItem = {
...item,
is_favorite: item.is_favorite == 1 ? 0 : 1,
};
return updatedItem;
}
return item;
});
setMeetingListOfIncomplete(newList1);
setFetchMeetingListOfIncomplete(newList1.slice(0, fetch_meeting_list_incomplete.length));
} else {
const newList2 = meeting_list_complete.map((item) => {
if (item.id === meetingId) {
const updatedItem = {
...item,
is_favorite: item.is_favorite == 1 ? 0 : 1,
};
return updatedItem;
}
return item;
});
setMeetingListOfComplete(newList2);
setFetchMeetingListOfComplete(newList2.slice(0, fetch_meeting_list_complete.length));
}
}
};

ファイルの表示

@ -1,5 +1,7 @@
import { useRef, useEffect, useState } from 'react';
import { useRef, useEffect, useState, useContext } from 'react';
import { LoadingButton } from '@material-ui/lab';
import { HeaderContext } from '../../context';
import Notification from '../../component/notification';
import Alert from '../../component/alert';
import PageLoader from '../../component/page_loader';
@ -8,6 +10,7 @@ import { useNavigate } from 'react-router-dom';
const ParentProfileEdit = () => {
const navigator = useNavigate();
const { isAuthenticate } = useContext(HeaderContext);
const father_id = localStorage.getItem('father_id');
const [notice, setNotice] = useState(-1);
@ -34,65 +37,68 @@ const ParentProfileEdit = () => {
useEffect(() => {
isMountedRef.current = false;
setLoaded(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) {
setParams(response.data.params);
setCompany(response.data.params?.company);
setEmail(response.data.params?.email);
setTel(response.data.params?.tel);
setProfile(response.data.params.profile ? response.data.params.profile: '');
}
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);
}
})
if(isAuthenticate()){
setLoaded(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) {
setParams(response.data.params);
setCompany(response.data.params?.company);
setEmail(response.data.params?.email);
setTel(response.data.params?.tel);
setProfile(response.data.params.profile ? response.data.params.profile: '');
}
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 = (e) => {
e.preventDefault();
set422Errors({ company:'', email: '', tel: '', profile:'' });
const request = {
company: company,
email: email,
tel: tel,
profile: profile
}
setSubmit(true);
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;
if(isAuthenticate()){
set422Errors({ company:'', email: '', tel: '', profile:'' });
const request = {
company: company,
email: email,
tel: tel,
profile: profile
}
});
setSubmit(true);
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;
}
});
}
}

ファイルの表示

@ -1,8 +1,9 @@
import React, { useRef, useEffect, useState } from 'react';
import React, { useRef, useEffect, useState, useContext } from 'react';
import { useNavigate, Link } from 'react-router-dom';
import IconButton from "@material-ui/core/IconButton";
import PhotoCameraOutlinedIcon from '@mui/icons-material/PhotoCameraOutlined';
import { HeaderContext } from '../../context';
import Alert from '../../component/alert';
import PageLoader from '../../component/page_loader';
import Notification from '../../component/notification';
@ -10,6 +11,7 @@ import Notification from '../../component/notification';
const ParentProfileDetail = () => {
const navigator = useNavigate();
const { isAuthenticate, handleLogout } = useContext(HeaderContext);
const father_id = localStorage.getItem('father_id');
const [notice, setNotice] = useState(-1);
@ -27,36 +29,37 @@ const ParentProfileDetail = () => {
useEffect(() => {
isMountedRef.current = false;
setLoaded(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);
}
})
if(isAuthenticate()){
setLoaded(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;
}
},[]);
useEffect(() => {
if(localStorage.getItem('image_upload_success')){
setSuccess(localStorage.getItem('image_upload_success'));
@ -64,40 +67,35 @@ const ParentProfileDetail = () => {
}
})
const handleLogout = () => {
axios.get('/p-account/logout')
.then(() => {
localStorage.removeItem('p-account_token');
window.location.href = '/p-account/login';
})
}
const handleImageChange = (e) => {
e.preventDefault();
set422Errors({image: ''});
let reader = new FileReader();
let _file = e.target.files[0];
reader.readAsDataURL(_file);
reader.onloadend = () => {
if(isAuthenticate()){
set422Errors({image: ''});
setSubmitImage(true);
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;
let reader = new FileReader();
let _file = e.target.files[0];
reader.readAsDataURL(_file);
reader.onloadend = () => {
set422Errors({image: ''});
setSubmitImage(true);
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;
}
case 400: set400Error(response.data.error_messages); break;
case 422: window.scrollTo(0, 0); set422Errors(response.data.error_messages); break;
}
});
};
});
};
}
};

ファイルの表示

@ -1,6 +1,8 @@
import React, { useState, useRef, useEffect } from 'react';
import React, { useState, useRef, useEffect, useContext } from 'react';
import { useNavigate } from 'react-router-dom';
import { LoadingButton } from '@material-ui/lab';
import { HeaderContext } from '../../context';
import Notification from '../../component/notification';
import Alert from '../../component/alert';
@ -8,6 +10,7 @@ import Alert from '../../component/alert';
const ParentProfilePasswordEdit = () => {
const navigator = useNavigate();
const { isAuthenticate } = useContext(HeaderContext);
const father_id = localStorage.getItem('father_id');
const [notice, setNotice] = useState(-1);
@ -35,30 +38,33 @@ const ParentProfilePasswordEdit = () => {
const handleSubmit = (e) => {
e.preventDefault();
set422Errors({
password:'',
password_confirmation:''
});
setSubmit(true);
const post = {
password: password,
password_confirmation: password_confirmation
}
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;
if(isAuthenticate()){
set422Errors({
password:'',
password_confirmation:''
});
setSubmit(true);
const post = {
password: password,
password_confirmation: password_confirmation
}
})
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,10 +1,14 @@
import React, { useState, useEffect, useRef } from 'react';
import React, { useState, useEffect, useRef, useContext } from 'react';
import { LoadingButton } from '@material-ui/lab';
import { HeaderContext } from '../../context';
import Notification from '../../component/notification';
import Alert from '../../component/alert';
const ParentProfileWithdrawal = () => {
const { isAuthenticate } = useContext(HeaderContext);
const father_id = localStorage.getItem('father_id');
const [notice, setNotice] = useState(-1);
@ -23,19 +27,21 @@ const ParentProfileWithdrawal = () => {
const handleSubmit = (e) => {
e.preventDefault();
setSubmit(true);
axios.delete('/api/fathers/withdrawal', {params:{father_id: father_id}})
.then(response => {
if(isMountedRef.current) return;
if(isAuthenticate()){
setSubmit(true);
setSubmit(false);
setNotice(response.data.notice);
switch(response.data.status_code){
case 200: window.location.href = "/p-account/withdrawal/complete"; break;
case 400: set400Error("失敗しました。"); break;
}
})
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){
case 200: window.location.href = "/p-account/withdrawal/complete"; break;
case 400: set400Error("失敗しました。"); break;
}
})
}
}
return (

ファイルの表示

@ -1,9 +1,10 @@
import React, { useEffect, useState, useRef } from 'react';
import React, { useEffect, useState, useRef, useContext } from 'react';
import { Link } from 'react-router-dom';
import moment from 'moment';
import IconButton from '@mui/material/IconButton';
import SearchIcon from '@mui/icons-material/Search';
import { HeaderContext } from '../../context';
import Notification from '../../component/notification';
import Alert from '../../component/alert';
import PageLoader from '../../component/page_loader';
@ -14,126 +15,131 @@ const SCROLL_DELAY_TIME = 1500;
const ParentSearch = () => {
const father_id = localStorage.getItem('father_id');
const [notice, setNotice] = useState(-1);
const { isAuthenticate } = useContext(HeaderContext);
const [keyword, setKeyword] = useState('');
const [tab_status, setTabStatus] = useState(false);
const father_id = localStorage.getItem('father_id');
const [notice, setNotice] = useState(-1);
const [keyword, setKeyword] = useState('');
const [tab_status, setTabStatus] = useState(false);
const [meeting_list_incomplete, setMeetingListOfIncomplete] = useState([]);
const [meeting_list_complete, setMeetingListOfComplete] = useState([]);
const [fetch_meeting_list_incomplete, setFetchMeetingListOfIncomplete] = useState([]);
const [fetch_meeting_list_complete, setFetchMeetingListOfComplete] = useState([]);
const [meeting_list_incomplete, setMeetingListOfIncomplete] = useState([]);
const [meeting_list_complete, setMeetingListOfComplete] = useState([]);
const [fetch_meeting_list_incomplete, setFetchMeetingListOfIncomplete] = useState([]);
const [fetch_meeting_list_complete, setFetchMeetingListOfComplete] = useState([]);
const [_success, setSuccess] = useState('');
const [_400error, set400Error] = useState('');
const [loaded1, setLoaded1] = useState(true);
const [loaded2, setLoaded2] = useState(true);
const [loaded, setLoaded] = useState(true);
const [initPage, setInitPage] = useState(true);
const [_success, setSuccess] = useState('');
const [_400error, set400Error] = useState('');
const [loaded1, setLoaded1] = useState(true);
const [loaded2, setLoaded2] = useState(true);
const [loaded, setLoaded] = useState(true);
const [initPage, setInitPage] = useState(true);
const isMountedRef = useRef(true);
useEffect(() => {
isMountedRef.current = false;
return () => {
isMountedRef.current = true;
}
}, [])
const isMountedRef = useRef(true);
useEffect(() => {
isMountedRef.current = false;
return () => {
isMountedRef.current = true;
}
}, [])
useEffect(()=>{
setLoaded(loaded1 && loaded2);
},[loaded1, loaded2])
useEffect(()=>{
setLoaded(loaded1 && loaded2);
},[loaded1, loaded2])
const handleSearch = (e) => {
e.preventDefault();
if(keyword == ''){
document.getElementById('keyword').focus();
return;
}
setLoaded1(false);
setLoaded2(false);
setInitPage(false);
axios.get('/api/fathers/meetings/searchOfIncompleteOfFather', {params:{father_id: father_id, keyword: keyword,}})
.then(response => {
if(isMountedRef.current) return;
const handleSearch = (e) => {
e.preventDefault();
if(isAuthenticate){
if(keyword == ''){
document.getElementById('keyword').focus();
return;
}
setLoaded1(false);
setLoaded2(false);
setInitPage(false);
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;
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})
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 ++;
}
setMeetingListOfIncomplete(arr);
var len = arr.length;
if(len > INFINITE)
setFetchMeetingListOfIncomplete(arr.slice(0, INFINITE));
else setFetchMeetingListOfIncomplete(arr.slice(0, len));
arr.push({...list[i], denominator:total, numerator:num})
}
})
axios.get('/api/fathers/meetings/searchOfCompleteOfFather', {params:{father_id: father_id, keyword: keyword,}})
.then(response => {
if(isMountedRef.current) return;
setMeetingListOfIncomplete(arr);
var len = arr.length;
if(len > INFINITE)
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));
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));
}
})
}
}
const fetchMoreListNonApproval = () => {
setTimeout(() => {
var x = fetch_meeting_list_incomplete.length;
var y = meeting_list_incomplete.length;
var c = 0;
if(x+INFINITE < y) c = INFINITE;
else c = y - x;
setFetchMeetingListOfIncomplete(meeting_list_incomplete.slice(0, x+c));
}, SCROLL_DELAY_TIME);
};
const fetchMoreListNonApproval = () => {
setTimeout(() => {
var x = fetch_meeting_list_incomplete.length;
var y = meeting_list_incomplete.length;
var c = 0;
if(x+INFINITE < y) c = INFINITE;
else c = y - x;
setFetchMeetingListOfIncomplete(meeting_list_incomplete.slice(0, x+c));
}, SCROLL_DELAY_TIME);
};
const fetchMoreListApproval = () => {
setTimeout(() => {
var x = fetch_meeting_list_complete.length;
var y = meeting_list_complete.length;
var c = 0;
if(x+INFINITE < y) c = INFINITE;
else c = y - x;
setFetchMeetingListOfComplete(meeting_list_complete.slice(0, x+c));
}, SCROLL_DELAY_TIME);
};
const fetchMoreListApproval = () => {
setTimeout(() => {
var x = fetch_meeting_list_complete.length;
var y = meeting_list_complete.length;
var c = 0;
if(x+INFINITE < y) c = INFINITE;
else c = y - x;
setFetchMeetingListOfComplete(meeting_list_complete.slice(0, x+c));
}, SCROLL_DELAY_TIME);
};
function handleFavorite(meetingId, currentFavorite, stateName) {
function handleFavorite(meetingId, currentFavorite, stateName) {
if(isAuthenticate()){
const formdata = new FormData();
formdata.append('meeting_id', meetingId);
formdata.append('is_favorite', currentFavorite == 1 ? 0 : 1);
@ -166,147 +172,82 @@ const ParentSearch = () => {
setMeetingListOfComplete(newList);
setFetchMeetingListOfComplete(newList.slice(0, fetch_meeting_list_complete.length));
}
};
}
};
return (
<div className="l-content">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>ミーティング検索</h2>
</div>
<Notification notice={notice}/>
</div>
<div className="l-content">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>ミーティング検索</h2>
</div>
<Notification notice={notice}/>
</div>
<div className="l-content-wrap">
<section className="meeting-tab-container meeting-search">
<div className="meeting-tab-wrap">
<div className="meeting-head">
<form className="meeting-form" onSubmit={handleSearch}>
<label className="control-label" htmlFor="keyword">キーワード</label>
<input type="search" name="keyword" className="input-default input-keyword" id="keyword" value={keyword} onChange={e=> setKeyword(e.target.value)}/>
<IconButton size="large" style={{position:'absolute', bottom:'3px', right:'5px', padding:'5px'}} type="submit">
<SearchIcon fontSize="large" style={{color:'#d0d0d0', width:'40px', height:'40px'}}/>
</IconButton>
</form>
<input className="tab-switch" id="tab-01" type="radio" name="tab_btn"/>
<input className="tab-switch" id="tab-02" type="radio" name="tab_btn"/>
<div className="meeting-tab">
<label className={`tab-label ${!tab_status && 'is-active'} `} htmlFor="tab-01" onClick={()=>setTabStatus(false)}><span>未完了</span></label>
<label className={`tab-label ${tab_status && 'is-active'} `} htmlFor="tab-02" onClick={()=>setTabStatus(true)}><span>完了済み</span></label>
</div>
</div>
</div>
{
!loaded && <PageLoader/>
}
{
loaded && !initPage &&
<div className="meeting-content">
{
!tab_status &&
<div className="meeting-content-wrap is-active" id="item01">
<InfiniteScroll
dataLength={fetch_meeting_list_incomplete.length}
next={fetchMoreListNonApproval}
hasMore={fetch_meeting_list_incomplete.length != meeting_list_incomplete.length}
loader={
<div id="dots3">
<span></span>
<span></span>
<span></span>
<span></span>
</div>
}
style={{overflow:'none', position:'relative'}}
>
{
fetch_meeting_list_incomplete.length > 0 ?
fetch_meeting_list_incomplete?.map((item, id) =>
<div className="meeting-item parent" key={id}>
<Link to={`/p-account/meeting/detail/${item.id}`} className="meeting-link">
<h3 className="meeting-ttl">{ item.title }</h3>
<p className="meeting-txt">{ item.text }</p>
<time dateTime="2021-07-30" className="meeting-time">
<span className="meeting-date">{ moment(item.updated_at).format('YYYY/MM/DD') }</span>
</time>
<div className="meeting-member">
<div className="meeting-member-wrap">
<div data-url="login.html" className="meeting-member-link">
<ul className="meeting-member-count">
<li className="numerator">{item.numerator}</li>
<li className="denominator">{item.denominator}</li>
</ul>
<ul className="meeting-member-list" role="list">
{
item.approvals?.map((v, inx1) =>
{
if(v.approval_at)
return(
<li className="meeting-member__item" role="listitem" key={inx1}>
<div className="avatar">
<img alt="name" className="avatar-img" src={v?.child.image} />
</div>
</li>)
})
}
</ul>
</div>
</div>
</div>
</Link>
<button aria-label="お気に入り" data-tooltip="お気に入り"
onClick={e => {
e.preventDefault();
handleFavorite(item.id, item.is_favorite, 'inCompleteOfFather');
}}
className={`icon a-icon like-icon ${item.is_favorite == 1 ? "icon-starFill" : "icon-star"} a-icon-size_medium`}>
</button>
</div>
)
: <p className="text-center py-5 ft-xs-17">データはありません</p>
}
</InfiniteScroll>
</div>
}
{
tab_status &&
<div className="meeting-content-wrap is-active" id="item02">
<InfiniteScroll
dataLength={fetch_meeting_list_complete.length}
next={fetchMoreListApproval}
hasMore={fetch_meeting_list_complete.length != meeting_list_complete.length}
loader={
<div id="dots3">
<span></span>
<span></span>
<span></span>
<span></span>
</div>
}
style={{overflow:'none', position:'relative'}}
>
{
fetch_meeting_list_complete.length > 0 ?
fetch_meeting_list_complete?.map((item, id) =>
<div className="meeting-item parent" key={id}>
<Link to={`/p-account/meeting/detail/${item.id}`} className="meeting-link">
<h3 className="meeting-ttl">{ item.title }</h3>
<p className="meeting-txt">{ item.text }</p>
<time dateTime="2021-07-30" className="meeting-time">
<span className="meeting-date">{ moment(item.updated_at).format('YYYY/MM/DD') }</span>
</time>
<div className="meeting-member">
<div className="meeting-member-wrap">
<div data-url="login.html" className="meeting-member-link">
<div className="l-content-wrap">
<section className="meeting-tab-container meeting-search">
<div className="meeting-tab-wrap">
<div className="meeting-head">
<form className="meeting-form" onSubmit={handleSearch}>
<label className="control-label" htmlFor="keyword">キーワード</label>
<input type="search" name="keyword" className="input-default input-keyword" id="keyword" value={keyword} onChange={e=> setKeyword(e.target.value)}/>
<IconButton size="large" style={{position:'absolute', bottom:'3px', right:'5px', padding:'5px'}} type="submit">
<SearchIcon fontSize="large" style={{color:'#d0d0d0', width:'40px', height:'40px'}}/>
</IconButton>
</form>
<input className="tab-switch" id="tab-01" type="radio" name="tab_btn"/>
<input className="tab-switch" id="tab-02" type="radio" name="tab_btn"/>
<div className="meeting-tab">
<label className={`tab-label ${!tab_status && 'is-active'} `} htmlFor="tab-01" onClick={()=>setTabStatus(false)}><span>未完了</span></label>
<label className={`tab-label ${tab_status && 'is-active'} `} htmlFor="tab-02" onClick={()=>setTabStatus(true)}><span>完了済み</span></label>
</div>
</div>
</div>
{
!loaded && <PageLoader/>
}
{
loaded && !initPage &&
<div className="meeting-content">
{
!tab_status &&
<div className="meeting-content-wrap is-active" id="item01">
<InfiniteScroll
dataLength={fetch_meeting_list_incomplete.length}
next={fetchMoreListNonApproval}
hasMore={fetch_meeting_list_incomplete.length != meeting_list_incomplete.length}
loader={
<div id="dots3">
<span></span>
<span></span>
<span></span>
<span></span>
</div>
}
style={{overflow:'none', position:'relative'}}
>
{
fetch_meeting_list_incomplete.length > 0 ?
fetch_meeting_list_incomplete?.map((item, id) =>
<div className="meeting-item parent" key={id}>
<Link to={`/p-account/meeting/detail/${item.id}`} className="meeting-link">
<h3 className="meeting-ttl">{ item.title }</h3>
<p className="meeting-txt">{ item.text }</p>
<time dateTime="2021-07-30" className="meeting-time">
<span className="meeting-date">{ moment(item.updated_at).format('YYYY/MM/DD') }</span>
</time>
<div className="meeting-member">
<div className="meeting-member-wrap">
<div data-url="login.html" className="meeting-member-link">
<ul className="meeting-member-count">
<li className="numerator">{item.numerator}</li>
<li className="denominator">{item.denominator}</li>
</ul>
<ul className="meeting-member-list" role="list">
{
item.approvals?.map((v, inx1) =>
@ -321,35 +262,98 @@ const ParentSearch = () => {
})
}
</ul>
</div>
</div>
</div>
</Link>
<button aria-label="お気に入り" data-tooltip="お気に入り"
onClick={e => {
e.preventDefault();
handleFavorite(item.id, item.is_favorite, 'completeOfFather');
}}
className={`icon a-icon like-icon ${item.is_favorite == 1 ? "icon-starFill" : "icon-star"} a-icon-size_medium`}>
</button>
</div>
)
: <p className="text-center py-5 ft-xs-17">データはありません</p>
}
</InfiniteScroll>
</div>
}
</div>
}
</section>
</div>
{ _400error && <Alert type="fail" hide={()=>set400Error('')}>{_400error}</Alert> }
{ _success && <Alert type="success" hide={()=>setSuccess('') }>{_success}</Alert> }
</div>
)
</div>
</div>
</Link>
<button aria-label="お気に入り" data-tooltip="お気に入り"
onClick={e => {
e.preventDefault();
handleFavorite(item.id, item.is_favorite, 'inCompleteOfFather');
}}
className={`icon a-icon like-icon ${item.is_favorite == 1 ? "icon-starFill" : "icon-star"} a-icon-size_medium`}>
</button>
</div>
)
: <p className="text-center py-5 ft-xs-17">データはありません</p>
}
</InfiniteScroll>
</div>
}
{
tab_status &&
<div className="meeting-content-wrap is-active" id="item02">
<InfiniteScroll
dataLength={fetch_meeting_list_complete.length}
next={fetchMoreListApproval}
hasMore={fetch_meeting_list_complete.length != meeting_list_complete.length}
loader={
<div id="dots3">
<span></span>
<span></span>
<span></span>
<span></span>
</div>
}
style={{overflow:'none', position:'relative'}}
>
{
fetch_meeting_list_complete.length > 0 ?
fetch_meeting_list_complete?.map((item, id) =>
<div className="meeting-item parent" key={id}>
<Link to={`/p-account/meeting/detail/${item.id}`} className="meeting-link">
<h3 className="meeting-ttl">{ item.title }</h3>
<p className="meeting-txt">{ item.text }</p>
<time dateTime="2021-07-30" className="meeting-time">
<span className="meeting-date">{ moment(item.updated_at).format('YYYY/MM/DD') }</span>
</time>
<div className="meeting-member">
<div className="meeting-member-wrap">
<div data-url="login.html" className="meeting-member-link">
<ul className="meeting-member-count">
<li className="numerator">{item.numerator}</li>
<li className="denominator">{item.denominator}</li>
</ul>
<ul className="meeting-member-list" role="list">
{
item.approvals?.map((v, inx1) =>
{
if(v.approval_at)
return(
<li className="meeting-member__item" role="listitem" key={inx1}>
<div className="avatar">
<img alt="name" className="avatar-img" src={v?.child.image} />
</div>
</li>)
})
}
</ul>
</div>
</div>
</div>
</Link>
<button aria-label="お気に入り" data-tooltip="お気に入り"
onClick={e => {
e.preventDefault();
handleFavorite(item.id, item.is_favorite, 'completeOfFather');
}}
className={`icon a-icon like-icon ${item.is_favorite == 1 ? "icon-starFill" : "icon-star"} a-icon-size_medium`}>
</button>
</div>
)
: <p className="text-center py-5 ft-xs-17">データはありません</p>
}
</InfiniteScroll>
</div>
}
</div>
}
</section>
</div>
{ _400error && <Alert type="fail" hide={()=>set400Error('')}>{_400error}</Alert> }
{ _success && <Alert type="success" hide={()=>setSuccess('') }>{_success}</Alert> }
</div>
)
}
export default ParentSearch;