2020-07-22 22:25:03 +02:00
|
|
|
import React, { useState, ChangeEvent, useEffect } from 'react';
|
|
|
|
import { Workgroup } from '../../types/workgroup';
|
2020-09-04 11:19:24 +02:00
|
|
|
import { useIsAuthorized } from '../../gql/queries/authorization';
|
2020-10-02 16:37:24 +02:00
|
|
|
import { formatDate } from '../../util/date';
|
2020-07-22 22:25:03 +02:00
|
|
|
|
|
|
|
export interface InfoFormProps {
|
|
|
|
workgroup: Workgroup
|
|
|
|
onChange?: (workgroup: Workgroup) => void
|
|
|
|
}
|
|
|
|
|
2020-09-04 11:19:24 +02:00
|
|
|
export function InfoForm({ workgroup, onChange }: InfoFormProps) {
|
2020-07-22 22:25:03 +02:00
|
|
|
const [ state, setState ] = useState({
|
|
|
|
changed: false,
|
|
|
|
workgroup: {
|
|
|
|
id: workgroup && workgroup.id ? workgroup.id : '',
|
|
|
|
name: workgroup && workgroup.name ? workgroup.name : '',
|
|
|
|
createdAt: workgroup && workgroup.createdAt ? workgroup.createdAt : null,
|
|
|
|
closedAt: workgroup && workgroup.closedAt ? workgroup.closedAt : null,
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2020-09-04 11:19:24 +02:00
|
|
|
const { isAuthorized } = useIsAuthorized({
|
|
|
|
variables: {
|
|
|
|
action: 'update',
|
|
|
|
object: {
|
|
|
|
workgroupId: state.workgroup.id,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}, state.workgroup.id === '' ? true : false);
|
|
|
|
|
2020-07-22 22:25:03 +02:00
|
|
|
useEffect(() => {
|
|
|
|
setState({
|
|
|
|
changed: false,
|
|
|
|
workgroup: {
|
|
|
|
id: workgroup && workgroup.id ? workgroup.id : '',
|
|
|
|
name: workgroup && workgroup.name ? workgroup.name : '',
|
|
|
|
createdAt: workgroup && workgroup.createdAt ? workgroup.createdAt : null,
|
|
|
|
closedAt: workgroup && workgroup.closedAt ? workgroup.closedAt : null,
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [workgroup]);
|
|
|
|
|
|
|
|
const onSaveClick = () => {
|
|
|
|
if (!state.changed) return;
|
|
|
|
if (typeof onChange !== 'function') return;
|
|
|
|
onChange(state.workgroup as Workgroup);
|
|
|
|
setState(state => {
|
|
|
|
return {
|
|
|
|
...state,
|
|
|
|
changed: false,
|
|
|
|
};
|
|
|
|
})
|
|
|
|
};
|
|
|
|
|
|
|
|
const onWorkgroupAttrChange = function(attrName: string, evt: ChangeEvent<HTMLInputElement>) {
|
|
|
|
const value = evt.currentTarget.value;
|
|
|
|
setState(state => {
|
|
|
|
return {
|
|
|
|
...state,
|
|
|
|
changed: true,
|
|
|
|
workgroup: {
|
|
|
|
...state.workgroup,
|
|
|
|
[attrName]: value,
|
|
|
|
}
|
|
|
|
};
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
return (
|
|
|
|
<div className="form" style={{width: '100%'}}>
|
|
|
|
<div className="field">
|
|
|
|
<label className="label">Nom du groupe</label>
|
|
|
|
<div className="control">
|
2020-09-04 11:19:24 +02:00
|
|
|
<input type="text" className="input" value={state.workgroup.name}
|
|
|
|
disabled={!isAuthorized}
|
2020-07-22 22:25:03 +02:00
|
|
|
onChange={onWorkgroupAttrChange.bind(null, "name")} />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
{
|
|
|
|
state.workgroup.createdAt ?
|
|
|
|
<div className="field">
|
|
|
|
<label className="label">Date de création</label>
|
|
|
|
<div className="control">
|
2020-10-02 16:37:24 +02:00
|
|
|
<p className="input is-static">{formatDate(state.workgroup.createdAt)}</p>
|
2020-07-22 22:25:03 +02:00
|
|
|
</div>
|
|
|
|
</div>:
|
|
|
|
null
|
|
|
|
}
|
|
|
|
{
|
|
|
|
state.workgroup.closedAt ?
|
|
|
|
<div className="field">
|
|
|
|
<label className="label">Date de clôture</label>
|
|
|
|
<div className="control">
|
2020-10-02 16:37:24 +02:00
|
|
|
<p className="input is-static">{formatDate(state.workgroup.closedAt)}</p>
|
2020-07-22 22:25:03 +02:00
|
|
|
</div>
|
|
|
|
</div>:
|
|
|
|
null
|
|
|
|
}
|
|
|
|
<div className="buttons is-right">
|
2020-09-04 11:19:24 +02:00
|
|
|
<button disabled={!state.changed || !isAuthorized}
|
2020-07-22 22:25:03 +02:00
|
|
|
className="button is-success" onClick={onSaveClick}>
|
|
|
|
<span>Enregistrer</span>
|
|
|
|
<span className="icon"><i className="fa fa-save"></i></span>
|
|
|
|
</button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|