Skip to content

Commit b98a441

Browse files
authored
Merge pull request #1453 from Northeastern-Electric-Racing/#1310-enforce-secure-settings-on-create-RR-form
#1310 enforce secure settings on create rr form
2 parents 0ad7d3d + 3ad99eb commit b98a441

2 files changed

Lines changed: 32 additions & 4 deletions

File tree

src/frontend/src/pages/FinancePage/ReimbursementRequestForm/ReimbursementFormView.tsx

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@ import {
44
FormHelperText,
55
FormLabel,
66
Grid,
7+
Link,
78
IconButton,
89
MenuItem,
910
Select,
1011
TextField,
11-
Typography
12+
Typography,
13+
Snackbar,
14+
Alert
1215
} from '@mui/material';
1316
import { Box, Stack } from '@mui/system';
1417
import { Control, Controller, FieldErrors, UseFormHandleSubmit, UseFormSetValue, UseFormWatch } from 'react-hook-form';
@@ -29,6 +32,8 @@ import NERSuccessButton from '../../../components/NERSuccessButton';
2932
import { ReimbursementRequestFormInput } from './ReimbursementRequestForm';
3033
import { useState } from 'react';
3134
import { useToast } from '../../../hooks/toasts.hooks';
35+
import { Link as RouterLink } from 'react-router-dom';
36+
import { routes } from '../../../utils/routes';
3237
import { codeAndRefundSourceName, expenseTypePipe } from '../../../utils/pipes';
3338

3439
interface ReimbursementRequestFormViewProps {
@@ -52,6 +57,7 @@ interface ReimbursementRequestFormViewProps {
5257
submitText: string;
5358
previousPage: string;
5459
setValue: UseFormSetValue<ReimbursementRequestFormInput>;
60+
hasSecureSettingsSet: boolean;
5561
}
5662

5763
const ReimbursementRequestFormView: React.FC<ReimbursementRequestFormViewProps> = ({
@@ -71,7 +77,8 @@ const ReimbursementRequestFormView: React.FC<ReimbursementRequestFormViewProps>
7177
watch,
7278
submitText,
7379
previousPage,
74-
setValue
80+
setValue,
81+
hasSecureSettingsSet
7582
}) => {
7683
const [datePickerOpen, setDatePickerOpen] = useState(false);
7784
const toast = useToast();
@@ -108,6 +115,18 @@ const ReimbursementRequestFormView: React.FC<ReimbursementRequestFormViewProps>
108115
handleSubmit(onSubmit)(e);
109116
}}
110117
>
118+
{!hasSecureSettingsSet && (
119+
<Snackbar anchorOrigin={{ vertical: 'top', horizontal: 'center' }} open={true}>
120+
<Alert variant="filled" severity="warning">
121+
Your secure settings must be set to create a reimbursement request, you can set them
122+
<Link style={{ color: 'blue' }} component={RouterLink} to={routes.SETTINGS}>
123+
{' '}
124+
here
125+
</Link>
126+
.
127+
</Alert>
128+
</Snackbar>
129+
)}
111130
<Grid container spacing={2}>
112131
<Grid item container spacing={2} md={6} xs={12}>
113132
<Grid item xs={12}>
@@ -259,7 +278,7 @@ const ReimbursementRequestFormView: React.FC<ReimbursementRequestFormViewProps>
259278
<NERFailButton variant="contained" href={previousPage} sx={{ mx: 1 }}>
260279
Cancel
261280
</NERFailButton>
262-
<NERSuccessButton variant="contained" type="submit">
281+
<NERSuccessButton variant="contained" type="submit" disabled={!hasSecureSettingsSet}>
263282
{submitText}
264283
</NERSuccessButton>
265284
</Box>

src/frontend/src/pages/FinancePage/ReimbursementRequestForm/ReimbursementRequestForm.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { useAllProjects } from '../../../hooks/projects.hooks';
1515
import { useHistory } from 'react-router-dom';
1616
import { routes } from '../../../utils/routes';
1717
import { getAllWbsElements } from '../../../utils/reimbursement-request.utils';
18+
import { useCurrentUserSecureSettings } from '../../../hooks/users.hooks';
1819

1920
export interface ReimbursementRequestFormInput {
2021
vendorId: string;
@@ -120,6 +121,12 @@ const ReimbursementRequestForm: React.FC<ReimbursementRequestFormProps> = ({
120121
data: allProjects
121122
} = useAllProjects();
122123

124+
// checking the data here instead of using isError since function doesn't ever return an error
125+
const { data: userSecureSettings, isLoading: checkSecureSettingsIsLoading } = useCurrentUserSecureSettings();
126+
127+
// checks to make sure none of the secure settings fields are empty, indicating not properly set
128+
const hasSecureSettingsSet = Object.values(userSecureSettings ?? {}).every((x) => x !== '') ? true : false;
129+
123130
const toast = useToast();
124131
const history = useHistory();
125132

@@ -133,7 +140,8 @@ const ReimbursementRequestForm: React.FC<ReimbursementRequestFormProps> = ({
133140
allProjectsIsLoading ||
134141
!allVendors ||
135142
!allExpenseTypes ||
136-
!allProjects
143+
!allProjects ||
144+
checkSecureSettingsIsLoading
137145
)
138146
return <LoadingIndicator />;
139147

@@ -181,6 +189,7 @@ const ReimbursementRequestForm: React.FC<ReimbursementRequestFormProps> = ({
181189
submitText={submitText}
182190
previousPage={previousPage}
183191
setValue={setValue}
192+
hasSecureSettingsSet={hasSecureSettingsSet}
184193
/>
185194
);
186195
};

0 commit comments

Comments
 (0)