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

150 行
5.3 KiB
React
Raw 通常表示 履歴

2021-12-18 16:05:52 +09:00
import React, { useRef, useEffect, useState } from 'react';
2021-10-05 00:35:47 +09:00
import ja from "date-fns/locale/ja";
import DatePicker, { registerLocale } from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
registerLocale("ja", ja);
import axios from 'axios';
import moment from 'moment';
2021-11-17 19:32:05 +09:00
import { LoadingButton } from '@material-ui/lab';
import Notification from '../notification';
import Alert from '../../component/alert';
2021-11-17 23:56:11 +09:00
import { useHistory } from 'react-router';
import { CircularProgress } from '@material-ui/core';
2021-10-01 17:45:39 +09:00
2021-10-05 00:35:47 +09:00
const ChildEdit = (props) => {
2021-11-17 19:32:05 +09:00
2021-11-17 23:56:11 +09:00
const history = useHistory();
2021-11-17 19:32:05 +09:00
const [notice, setNotice] = useState(localStorage.getItem('notice'));
2021-11-16 02:31:44 +09:00
const [_success, setSuccess] = useState('');
2021-11-17 19:32:05 +09:00
const [_400error, set400Error] = useState('');
const [_404error, set404Error] = useState('');
2021-11-17 19:47:05 +09:00
const [_422errors, set422Errors] = useState({hire_at: ''});
2021-11-17 19:32:05 +09:00
const [hire_at, setHireAt] = useState(null);
const [submit, setSubmit] = useState(false);
2021-11-17 23:56:11 +09:00
const [loaded, setLoaded] = useState(false);
2021-11-17 19:32:05 +09:00
const father_id = document.getElementById('father_id').value;
const child_id = props.match.params.child_id;
2021-10-05 00:35:47 +09:00
2021-12-18 16:05:52 +09:00
const isMountedRef = useRef(true);
useEffect(() => {
2021-12-18 16:05:52 +09:00
isMountedRef.current = false;
2021-11-17 23:56:11 +09:00
setLoaded(false);
2021-11-17 19:32:05 +09:00
axios.get('/api/fathers/children/detail/'+child_id, {params:{father_id: father_id}})
.then(response => {
setNotice(response.data.notice);
2021-11-17 23:56:11 +09:00
setLoaded(true);
2021-11-17 19:32:05 +09:00
if(response.data.status_code==200){
let hire_at = moment(response.data.params.father_relations?.hire_at).toDate();
setHireAt(hire_at);
} else {
2021-11-18 17:33:59 +09:00
set400Error("失敗しました。");
2021-11-18 12:34:24 +09:00
}
2021-11-17 19:32:05 +09:00
})
.catch(err=>{
setLoaded(true);
setNotice(err.response.data.notice);
if(err.response.status==404){
set404Error(err.response.data.message);
}
})
2021-11-17 19:32:05 +09:00
},[]);
2021-10-05 00:35:47 +09:00
2021-11-17 19:32:05 +09:00
const handleSubmit = (e) => {
e.preventDefault();
2021-11-17 19:47:05 +09:00
set422Errors({hire_at: ''});
2021-11-17 19:32:05 +09:00
const request = {
father_id: father_id,
hire_at: hire_at
}
setSubmit(true);
axios.put(`/api/fathers/relations/updateHireDate/${child_id}`, request)
.then(response => {
setSubmit(false);
setNotice(response.data.notice);
switch(response.data.status_code){
2021-11-17 23:56:11 +09:00
case 200:{
history.push({
pathname: '/p-account/child/detail/'+child_id,
state: response.data.success_messages
});
break;
}
2021-11-17 19:32:05 +09:00
case 400: set400Error(response.data.error_messages); break;
case 422: set422Errors(response.data.error_messages); break;
}
});
2021-10-05 00:35:47 +09:00
}
2021-10-01 17:45:39 +09:00
return (
<div className="l-content">
<div className="l-content-w560">
<div className="l-content__ttl">
<div className="l-content__ttl__left">
<h2>入社日を変更</h2>
</div>
2021-11-17 19:32:05 +09:00
<Notification notice={notice}/>
</div>
<div className="l-content-wrap">
<section className="edit-container">
2021-11-17 23:56:11 +09:00
{ !loaded &&
<CircularProgress className="css-loader"/> }
{
2021-11-18 18:44:21 +09:00
loaded && hire_at &&
2021-11-17 23:56:11 +09:00
<div className="edit-wrap">
<div className="edit-content">
<form className="edit-form" onSubmit={handleSubmit}>
<div className="edit-set">
<label className="control-label" htmlFor="hire_at">入社日</label>
<div>
<label htmlFor="hire_at"><i className="icon icon-calendar"></i></label>
<DatePicker
id="hire_at"
selected={hire_at}
className={`input-default input-hire_at input-h60 input-w480 ${ _422errors.hire_at && 'is-invalid c-input__target'} `}
onChange={date => setHireAt(date)}
dateFormat="yyyy/MM/dd"
locale="ja"
/>
{
_422errors.hire_at &&
<span className="l-alert__text--error ft-16 ft-md-14">
{_422errors.hire_at}
</span>
}
</div>
2021-10-05 00:35:47 +09:00
</div>
2021-11-17 23:56:11 +09:00
<LoadingButton
type="submit" fullWidth
loading={submit}
className="btn-edit btn-default btn-h75 bg-yellow rounded-20"
style={{marginTop:'50px'}}>
2021-11-25 21:29:01 +09:00
<span className={`ft-18 ft-xs-16 font-weight-bold ${!submit && 'text-black'}`}>変更内容を保存する</span>
2021-11-17 23:56:11 +09:00
</LoadingButton>
</form>
</div>
2021-10-01 17:45:39 +09:00
</div>
2021-11-17 23:56:11 +09:00
}
</section>
2021-10-01 17:45:39 +09:00
</div>
</div>
2021-11-17 19:32:05 +09:00
{ _success && <Alert type="success" hide={()=>setSuccess('')}>{_success}</Alert> }
{ _400error && <Alert type="fail" hide={()=>set400Error('')}>{_400error}</Alert> }
{ _404error &&
<Alert type="fail" hide={()=>{
set404Error('');
history.push({
pathname: "/p-account/child"
});
}}>
{_404error}
</Alert>
}
</div>
2021-10-01 17:45:39 +09:00
)
}
export default ChildEdit;