Skip to content
Snippets Groups Projects
Commit fca6dbfd authored by Planoetscher Daniel (Student Com20)'s avatar Planoetscher Daniel (Student Com20)
Browse files

add and delete requirements

parent f66b34b9
No related branches found
No related tags found
No related merge requests found
import { TaskRequirement } from 'adapters/task'; import { TaskRequirement } from 'adapters/task';
import { TeamRole } from 'adapters/team'; import { FormEvent, useCallback, useEffect, useState } from 'react';
import { useState } from 'react';
import { possibleRole } from '../TaskForm'; import { possibleRole } from '../TaskForm';
import Popup from 'components/ui/Popup';
import Button from 'components/ui/Button';
interface Props { interface Props {
roles: possibleRole[], roles: possibleRole[],
...@@ -13,46 +13,71 @@ interface Props { ...@@ -13,46 +13,71 @@ interface Props {
export default function RequirementsChoice({ roles, requirements, setRequirements }: Props) { export default function RequirementsChoice({ roles, requirements, setRequirements }: Props) {
const [possibleRoles, setPossibleRoles] = useState<possibleRole[]>(roles const [possibleRoles, setPossibleRoles] = useState<possibleRole[]>([]);
.filter(role => !requirements.find(r => r.role === role.id)) const [addNew, setAddNew] = useState(false);
); const [selectedRole, setSelectedRole] = useState<string>('');
const [selectedTime, setSelectedTime] = useState<string>('');
useEffect(() => {
setPossibleRoles(roles.filter(role => !requirements.find(r => r.role === role.id)));
}, [roles, requirements, setSelectedRole])
const addRequirement = useCallback(() => {
if (selectedTime && selectedRole) {
setRequirements((state: any) => [...state, { role: selectedRole, time: selectedTime }]);
setAddNew(false);
setSelectedRole('');
setSelectedTime('');
}
}, [selectedRole, selectedTime, setRequirements])
const removeRequirement = useCallback((role: string) => {
setRequirements((state: any) => state.filter((r: any) => r.id === role));
}, [setRequirements])
return ( return (
<div className="requirements-field"> <>
<div className="requirements-field">
{
requirements.map((requirement) => (
<div className="requirement" key={requirement.role}>
<h2>{roles.find(role => role.id === requirement.role)?.label}</h2>
<div>{requirement.time}</div>
<div onClick={() => removeRequirement(requirement.role)}>delete</div>
</div>
))
}
{
possibleRoles.length > 0 && (
<div className="add-btn" onClick={() => setAddNew(true)}>
new
</div>
)
}
</div>
{ {
requirements.map((requirement) => ( addNew && (
<div className="requirement" key={requirement.role + '/' + requirement.time}> <Popup onClose={() => setAddNew(false)}>
<select> <select onChange={(e) => setSelectedRole(e.target.value)}>
<option value={requirement.role}>{roles.find(r => r.id === requirement.role)}</option> <option value="">Please select a role</option>
{ {
possibleRoles.map(role => ( possibleRoles.map((role) => (
<option value={role.id} key={role.id}>{role.label}</option> <option value={role.id} key={role.id}>{role.label}</option>
)) ))
} }
</select> </select>
<input type="number" value={requirement.time} min={0} <input type="number" min={1} onChange={(e) => setSelectedTime(e.target.value)} />
/> <Button type="submit" onClick={addRequirement}>
</div> Create new requirement
)) </Button>
} </Popup>
{
possibleRoles.length > 0 && (
<div className="add-btn" onClick={() => setRequirements(
(state: any) => {
setPossibleRoles(state => {
return state.slice(1);
})
return [...state, {
role: possibleRoles[0].id,
time: 0
}];
}
)}>
new
</div>
) )
} }
</div> </>
) )
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment