add expire time func
このコミットが含まれているのは:
コミット
a1fb15c17a
ファイル差分が大きすぎるため省略します
差分を読み込み
|
@ -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;
|
新しいイシューから参照