Skip to content

Commit d012117

Browse files
committed
#1328 fixed reactHookEditable
1 parent e6dc814 commit d012117

2 files changed

Lines changed: 41 additions & 36 deletions

File tree

src/frontend/src/components/ReactHookEditableList.tsx

Lines changed: 36 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,61 @@
1-
import { Grid, Button, IconButton, TextField, Typography } from '@mui/material';
2-
import DeleteIcon from '@mui/icons-material/Delete';
1+
import { Grid, Button, IconButton, TextField, InputLabel } from '@mui/material';
2+
import DeleteForeverOutlinedIcon from '@mui/icons-material/DeleteForeverOutlined';
33
import { FieldArrayWithId, UseFieldArrayRemove, UseFormRegister, UseFieldArrayAppend } from 'react-hook-form';
4+
import { Box } from '@mui/system';
45

56
interface ReactHookEditableListProps {
67
name: string;
78
ls: FieldArrayWithId[];
89
register: UseFormRegister<any>;
910
append: UseFieldArrayAppend<any, any>;
1011
remove: UseFieldArrayRemove;
11-
title: string;
12+
bulletName?: string;
1213
}
1314

14-
const ReactHookEditableList: React.FC<ReactHookEditableListProps> = ({ name, ls, title, register, append, remove }) => {
15+
const ReactHookEditableList: React.FC<ReactHookEditableListProps> = ({ name, ls, bulletName, register, append, remove }) => {
1516
return (
1617
<>
17-
<Typography variant="h5">{title}</Typography>
18-
<Grid item sx={{ my: 1, display: 'flex', flexDirection: 'row', flexWrap: 'wrap' }}>
18+
<Grid container columnSpacing={{ xs: 1, sm: 2, md: 3 }}>
1919
{ls.map((_element, i) => {
20+
const formattedName = name
21+
.split(/(?=[A-Z])/)
22+
.map((name) => name.charAt(0).toUpperCase() + name.slice(1))
23+
.join(' ');
24+
2025
return (
21-
<>
22-
<Grid item sx={{ display: 'flex', flexDirection: 'column', marginRight: '20px' }}>
23-
<Typography variant="body1" sx={{ color: 'Grey', marginBottom: '5px' }}>
24-
{title} {i + 1}
25-
</Typography>
26-
<Grid item sx={{ display: 'flex', alignItems: 'flex-start', marginBottom: '20px' }}>
27-
<TextField
28-
required
29-
autoComplete="off"
30-
placeholder={'Enter ' + title + ' . . .'}
31-
sx={{ width: '340px' }}
32-
multiline
33-
maxRows={4}
34-
{...register(`${name}.${i}.detail`)}
35-
/>
36-
<IconButton
37-
type="button"
38-
onClick={() => remove(i)}
39-
sx={{ mx: 1, my: 0, color: 'red', marginLeft: '15px', borderRadius: '4px', outline: 'solid' }}
40-
>
41-
<DeleteIcon />
42-
</IconButton>
43-
</Grid>
44-
</Grid>
45-
</>
26+
<Grid item xs={12} md={6} lg={4}>
27+
<InputLabel sx={{ marginBottom: '5px' }}>
28+
{bulletName ? `${bulletName}` : formattedName} {i + 1}
29+
</InputLabel>
30+
<Box sx={{ display: 'flex', alignItems: 'start', marginBottom: '20px' }}>
31+
<TextField
32+
required
33+
autoComplete="off"
34+
placeholder={'Enter ' + formattedName + ' . . .'}
35+
sx={{ width: 12 / 12 }}
36+
multiline
37+
maxRows={4}
38+
{...register(`${name}.${i}.detail`)}
39+
/>
40+
<IconButton
41+
type="button"
42+
onClick={() => remove(i)}
43+
sx={{ mx: 1, color: 'red', marginLeft: '15px', borderRadius: '4px', outline: 'solid' }}
44+
>
45+
<DeleteForeverOutlinedIcon />
46+
</IconButton>
47+
</Box>
48+
</Grid>
4649
);
4750
})}
4851
</Grid>
4952
<Button
5053
variant="contained"
5154
color="primary"
5255
onClick={() => append({ bulletId: -1, detail: '' })}
53-
sx={{ width: 'max-content', marginBottom: '20px' }}
56+
sx={{ width: 'max-content', marginBottom: '40px' }}
5457
>
55-
+ Add {title}
58+
{bulletName ? `+ Add ${bulletName}` : '+ Add new bullet'}
5659
</Button>
5760
</>
5861
);

src/frontend/src/pages/WorkPackageDetailPage/WorkPackageEditContainer/WorkPackageEditContainer.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { useQuery } from '../../../hooks/utils.hooks';
1414
import { Controller, useFieldArray, useForm } from 'react-hook-form';
1515
import { yupResolver } from '@hookform/resolvers/yup';
1616
import * as yup from 'yup';
17-
import { Box, TextField, Autocomplete, FormControl } from '@mui/material';
17+
import { Box, TextField, Autocomplete, FormControl, Typography } from '@mui/material';
1818
import ReactHookEditableList from '../../../components/ReactHookEditableList';
1919
import { useEditWorkPackage } from '../../../hooks/work-packages.hooks';
2020
import WorkPackageEditDetails from './WorkPackageEditDetails';
@@ -216,21 +216,23 @@ const WorkPackageEditContainer: React.FC<WorkPackageEditContainerProps> = ({ wor
216216
/>
217217
</FormControl>
218218
</PageBlock>
219+
<Typography variant="h5">Expected Activities</Typography>
219220
<ReactHookEditableList
220221
name="expectedActivities"
221222
register={register}
222223
ls={expectedActivities}
223224
append={appendExpectedActivity}
224225
remove={removeExpectedActivity}
225-
title="Expected Activities"
226+
bulletName="Expected Activities"
226227
/>
228+
<Typography variant="h5">Deliverables</Typography>
227229
<ReactHookEditableList
228230
name="deliverables"
229231
register={register}
230232
ls={deliverables}
231233
append={appendDeliverable}
232234
remove={removeDeliverable}
233-
title="Deliverables"
235+
bulletName="Deliverables"
234236
/>
235237
<Box textAlign="right" sx={{ my: 2 }}>
236238
<NERFailButton variant="contained" onClick={exitEditMode} sx={{ mx: 1 }}>

0 commit comments

Comments
 (0)