-
Notifications
You must be signed in to change notification settings - Fork 36
/
Copy pathBulkAssignmentModal.jsx
104 lines (94 loc) · 3.24 KB
/
BulkAssignmentModal.jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import React, { useCallback, useEffect, useState } from 'react';
import PropTypes from 'prop-types';
import { Button } from '@trussworks/react-uswds';
import styles from './BulkAssignmentModal.module.scss';
import Modal, { ModalTitle, ModalClose, ModalActions, connectModal } from 'components/Modal/Modal';
import { getBulkAssignmentData } from 'services/ghcApi';
import { milmoveLogger } from 'utils/milmoveLog';
import { userName } from 'utils/formatters';
export const BulkAssignmentModal = ({ onClose, onSubmit, title, submitText, closeText, queueType }) => {
const [bulkAssignmentData, setBulkAssignmentData] = useState(null);
const [isDisabled, setIsDisabled] = useState(false);
const [numberOfMoves, setNumberOfMoves] = useState(0);
const fetchData = useCallback(async () => {
try {
const data = await getBulkAssignmentData(queueType);
setBulkAssignmentData(data);
if (!data.bulkAssignmentMoveIDs) {
setIsDisabled(true);
setNumberOfMoves(0);
} else {
setNumberOfMoves(data.bulkAssignmentMoveIDs.length);
}
} catch (err) {
milmoveLogger.error('Error fetching bulk assignment data:', err);
}
}, [queueType]);
useEffect(() => {
fetchData();
}, [fetchData]);
return (
<div>
<Modal className={styles.BulkModal}>
<ModalClose handleClick={onClose} />
<ModalTitle>
<h3>
{title} ({numberOfMoves})
</h3>
</ModalTitle>
<div className={styles.BulkAssignmentTable}>
<table>
<tr>
<th>User</th>
<th>Workload</th>
<th>Assignment</th>
</tr>
{bulkAssignmentData?.availableOfficeUsers?.map((user) => {
return (
<tr key={user}>
<td>
<p data-testid="bulkAssignmentUser">{userName(user)}</p>
</td>
<td className={styles.BulkAssignmentDataCenter}>
<p data-testid="bulkAssignmentUserWorkload">{user.workload || 0}</p>
</td>
<td className={styles.BulkAssignmentDataCenter}>
<input className={styles.BulkAssignmentAssignment} type="number" min="0" />
</td>
</tr>
);
})}
</table>
</div>
<ModalActions autofocus="true">
<Button
disabled={isDisabled}
data-focus="true"
type="submit"
data-testid="modalSubmitButton"
onClick={() => onSubmit()}
>
{submitText}
</Button>
<Button type="button" className={styles.button} unstyled onClick={onClose} data-testid="modalCancelButton">
{closeText}
</Button>
</ModalActions>
</Modal>
</div>
);
};
BulkAssignmentModal.propTypes = {
onClose: PropTypes.func.isRequired,
onSubmit: PropTypes.func.isRequired,
title: PropTypes.string,
submitText: PropTypes.string,
closeText: PropTypes.string,
};
BulkAssignmentModal.defaultProps = {
title: 'Bulk Assignment',
submitText: 'Save',
closeText: 'Cancel',
};
BulkAssignmentModal.displayName = 'BulkAssignmentModal';
export default connectModal(BulkAssignmentModal);