diff --git a/frontend/src/components/Navigator/__tests__/index.js b/frontend/src/components/Navigator/__tests__/index.js
index a11f34e5f7..8c6d6066b8 100644
--- a/frontend/src/components/Navigator/__tests__/index.js
+++ b/frontend/src/components/Navigator/__tests__/index.js
@@ -5,22 +5,31 @@ import {
render, screen, waitFor, within,
} from '@testing-library/react';
+import { useFormContext } from 'react-hook-form';
import Navigator from '../index';
import { NOT_STARTED } from '../constants';
+// eslint-disable-next-line react/prop-types
+const Input = ({ name }) => {
+ const { register } = useFormContext();
+ return (
+
+ );
+};
+
const pages = [
{
position: 1,
path: 'first',
label: 'first page',
review: false,
- render: (hookForm) => (
-
+ render: () => (
+
),
},
{
@@ -28,13 +37,8 @@ const pages = [
path: 'second',
label: 'second page',
review: false,
- render: (hookForm) => (
-
+ render: () => (
+
),
},
{
@@ -42,7 +46,7 @@ const pages = [
label: 'review page',
path: 'review',
review: true,
- render: (hookForm, allComplete, formData, onSubmit) => (
+ render: (allComplete, formData, onSubmit) => (
Continue
diff --git a/frontend/src/components/Navigator/index.js b/frontend/src/components/Navigator/index.js
index 004a177cfe..67ac22cd75 100644
--- a/frontend/src/components/Navigator/index.js
+++ b/frontend/src/components/Navigator/index.js
@@ -1,3 +1,4 @@
+/* eslint-disable react/jsx-props-no-spreading */
/*
The navigator is a component used to show multiple form pages. It displays a stickied nav window
on the left hand side with each page of the form listed. Clicking on an item in the nav list will
@@ -6,7 +7,7 @@
import React, { useState } from 'react';
import PropTypes from 'prop-types';
import _ from 'lodash';
-import { useForm } from 'react-hook-form';
+import { FormProvider, useForm } from 'react-hook-form';
import { Form, Button, Grid } from '@trussworks/react-uswds';
import useDeepCompareEffect from 'use-deep-compare-effect';
import useInterval from '@use-it/interval';
@@ -125,10 +126,10 @@ function Navigator({
/>
-
+
);
diff --git a/frontend/src/pages/ActivityReport/Pages/ReviewSubmit.js b/frontend/src/pages/ActivityReport/Pages/ReviewSubmit.js
index 68a9974ff8..d0e7fd6d7e 100644
--- a/frontend/src/pages/ActivityReport/Pages/ReviewSubmit.js
+++ b/frontend/src/pages/ActivityReport/Pages/ReviewSubmit.js
@@ -4,6 +4,7 @@ import {
Alert, Accordion,
} from '@trussworks/react-uswds';
import { Helmet } from 'react-helmet';
+import { useFormContext } from 'react-hook-form';
import Container from '../../../components/Container';
import SubmitterReviewPage from './SubmitterReviewPage';
@@ -11,7 +12,6 @@ import ApproverReviewPage from './ApproverReviewPage';
import './ReviewSubmit.css';
const ReviewSubmit = ({
- hookForm,
allComplete,
onSubmit,
onReview,
@@ -20,7 +20,7 @@ const ReviewSubmit = ({
approvingManager,
initialData,
}) => {
- const { handleSubmit, register, formState } = hookForm;
+ const { handleSubmit, register, formState } = useFormContext();
const { additionalNotes } = initialData;
const { isValid } = formState;
const valid = allComplete && isValid;
@@ -108,7 +108,6 @@ ReviewSubmit.propTypes = {
additionalNotes: PropTypes.string,
}).isRequired,
// eslint-disable-next-line react/forbid-prop-types
- hookForm: PropTypes.object.isRequired,
reviewItems: PropTypes.arrayOf(
PropTypes.shape({
id: PropTypes.string.isRequired,
diff --git a/frontend/src/pages/ActivityReport/Pages/__tests__/ReviewSubmit.js b/frontend/src/pages/ActivityReport/Pages/__tests__/ReviewSubmit.js
index 5e0a31baaf..2ca6eb2dd6 100644
--- a/frontend/src/pages/ActivityReport/Pages/__tests__/ReviewSubmit.js
+++ b/frontend/src/pages/ActivityReport/Pages/__tests__/ReviewSubmit.js
@@ -1,8 +1,9 @@
+/* eslint-disable react/jsx-props-no-spreading */
import '@testing-library/jest-dom';
import { render, screen, waitFor } from '@testing-library/react';
import React from 'react';
import userEvent from '@testing-library/user-event';
-import { useForm } from 'react-hook-form';
+import { FormProvider, useForm } from 'react-hook-form';
import ReviewSubmit from '../ReviewSubmit';
@@ -20,16 +21,17 @@ const RenderReview = ({
defaultValues: { ...initialData, approvingManagerId },
});
return (
-
+
+
+
);
};
diff --git a/frontend/src/pages/ActivityReport/Pages/__tests__/goalsObjectives.js b/frontend/src/pages/ActivityReport/Pages/__tests__/goalsObjectives.js
index 6b615b6e53..d7cce51120 100644
--- a/frontend/src/pages/ActivityReport/Pages/__tests__/goalsObjectives.js
+++ b/frontend/src/pages/ActivityReport/Pages/__tests__/goalsObjectives.js
@@ -1,8 +1,9 @@
+/* eslint-disable react/jsx-props-no-spreading */
import '@testing-library/jest-dom';
import { render, screen } from '@testing-library/react';
import fetchMock from 'fetch-mock';
import React from 'react';
-import { useForm } from 'react-hook-form';
+import { FormProvider, useForm } from 'react-hook-form';
import join from 'url-join';
import goalsObjectives from '../goalsObjectives';
@@ -21,9 +22,9 @@ const RenderGoalsObjectives = ({
const activityRecipients = grantIds.map((id) => ({ activityRecipientId: id }));
const data = { ...initialData, activityRecipientType, activityRecipients };
return (
- <>
- {goalsObjectives.render(hookForm, {}, data)}
- >
+
+ {goalsObjectives.render({}, data)}
+
);
};
diff --git a/frontend/src/pages/ActivityReport/Pages/activitySummary.js b/frontend/src/pages/ActivityReport/Pages/activitySummary.js
index 3dccf181e4..8189f24828 100644
--- a/frontend/src/pages/ActivityReport/Pages/activitySummary.js
+++ b/frontend/src/pages/ActivityReport/Pages/activitySummary.js
@@ -1,6 +1,7 @@
import React, { useEffect, useRef } from 'react';
import PropTypes from 'prop-types';
import { Helmet } from 'react-helmet';
+import { useFormContext } from 'react-hook-form';
import {
Fieldset, Radio, Label, Grid, TextInput, Checkbox,
@@ -17,14 +18,16 @@ import {
} from '../constants';
const ActivitySummary = ({
- register,
- watch,
- setValue,
- control,
- getValues,
recipients,
collaborators,
}) => {
+ const {
+ register,
+ watch,
+ setValue,
+ control,
+ getValues,
+ } = useFormContext();
const activityRecipientType = watch('activityRecipientType');
const startDate = watch('startDate');
const endDate = watch('endDate');
@@ -274,10 +277,6 @@ const ActivitySummary = ({
};
ActivitySummary.propTypes = {
- register: PropTypes.func.isRequired,
- watch: PropTypes.func.isRequired,
- setValue: PropTypes.func.isRequired,
- getValues: PropTypes.func.isRequired,
collaborators: PropTypes.arrayOf(
PropTypes.shape({
name: PropTypes.string.isRequired,
@@ -303,8 +302,6 @@ ActivitySummary.propTypes = {
}),
),
}).isRequired,
- // eslint-disable-next-line react/forbid-prop-types
- control: PropTypes.object.isRequired,
};
const sections = [
@@ -361,19 +358,11 @@ export default {
path: 'activity-summary',
sections,
review: false,
- render: (hookForm, additionalData) => {
- const {
- register, watch, setValue, getValues, control,
- } = hookForm;
+ render: (additionalData) => {
const { recipients, collaborators } = additionalData;
return (
);
diff --git a/frontend/src/pages/ActivityReport/Pages/goalsObjectives.js b/frontend/src/pages/ActivityReport/Pages/goalsObjectives.js
index bd213fd797..a1fec8776a 100644
--- a/frontend/src/pages/ActivityReport/Pages/goalsObjectives.js
+++ b/frontend/src/pages/ActivityReport/Pages/goalsObjectives.js
@@ -5,13 +5,20 @@ import {
Fieldset, Label, Textarea,
} from '@trussworks/react-uswds';
import useDeepCompareEffect from 'use-deep-compare-effect';
+import { useFormContext } from 'react-hook-form';
import GoalPicker from './components/GoalPicker';
import { getGoals } from '../../../fetchers/activityReports';
const GoalsObjectives = ({
- control, grantIds, register, watch, setValue, activityRecipientType,
+ grantIds, activityRecipientType,
}) => {
+ const {
+ control,
+ register,
+ watch,
+ setValue,
+ } = useFormContext();
const [availableGoals, updateAvailableGoals] = useState([]);
const [loading, updateLoading] = useState(true);
const goals = watch('goals');
@@ -62,12 +69,7 @@ const GoalsObjectives = ({
};
GoalsObjectives.propTypes = {
- register: PropTypes.func.isRequired,
- setValue: PropTypes.func.isRequired,
grantIds: PropTypes.arrayOf(PropTypes.number).isRequired,
- watch: PropTypes.func.isRequired,
- // eslint-disable-next-line react/forbid-prop-types
- control: PropTypes.object.isRequired,
activityRecipientType: PropTypes.string.isRequired,
};
@@ -94,10 +96,7 @@ export default {
path: 'goals-objectives',
review: false,
sections,
- render: (hookForm, additionalData, formData) => {
- const {
- register, watch, control, setValue,
- } = hookForm;
+ render: (additionalData, formData) => {
const recipients = formData.activityRecipients || [];
const { activityRecipientType } = formData;
const grantIds = recipients.map((r) => r.activityRecipientId);
@@ -105,11 +104,6 @@ export default {
);
},
diff --git a/frontend/src/pages/ActivityReport/Pages/index.js b/frontend/src/pages/ActivityReport/Pages/index.js
index b8907e27c6..6f75e0d6ce 100644
--- a/frontend/src/pages/ActivityReport/Pages/index.js
+++ b/frontend/src/pages/ActivityReport/Pages/index.js
@@ -28,7 +28,6 @@ const reviewPage = {
path: 'review',
render:
(
- hookForm,
allComplete,
formData,
onSubmit,
@@ -41,7 +40,6 @@ const reviewPage = {
allComplete={allComplete}
onSubmit={onSubmit}
onReview={onReview}
- hookForm={hookForm}
approvingManager={approvingManager}
reviewItems={
pages.map((p) => reviewItem(p.path, p.label, p.sections, formData))
diff --git a/frontend/src/pages/ActivityReport/Pages/topicsResources.js b/frontend/src/pages/ActivityReport/Pages/topicsResources.js
index cb555a8edf..9b657d2d75 100644
--- a/frontend/src/pages/ActivityReport/Pages/topicsResources.js
+++ b/frontend/src/pages/ActivityReport/Pages/topicsResources.js
@@ -1,7 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { Controller } from 'react-hook-form';
+import { Controller, useFormContext } from 'react-hook-form';
import { Helmet } from 'react-helmet';
import {
@@ -13,74 +13,72 @@ import FileUploader from '../../../components/FileUploader';
import { topics } from '../constants';
const TopicsResources = ({
- register,
- control,
reportId,
-}) => (
- <>
-
- Topics and resources
-
-
-
-
- ({ value: topic, label: topic }))
- }
- />
-
-
-
-
-
-
- Resources from OHS / ECLKC
-
- Enter the URL for OHS resource(s) used. https://eclkc.ohs.acf.hhs.gov/
-
-
-
-
-
Upload any resources used that are not available through ECLKC
+}) => {
+ const { register, control } = useFormContext();
+ return (
+ <>
+
+ Topics and resources
+
+
+
+
+ ({ value: topic, label: topic }))
+ }
+ />
+
+
+
+
+
+
+ Resources from OHS / ECLKC
+
+ Enter the URL for OHS resource(s) used. https://eclkc.ohs.acf.hhs.gov/
+
+
+
+
+ Upload any resources used that are not available through ECLKC
+ (
+
+ )}
+ />
+
+
+
+
+ Upload any resources used that are not available through ECLKC
(
-
+
)}
/>
-
-
-
-
- Upload any resources used that are not available through ECLKC
- (
-
- )}
- />
-
- >
-);
+
+ >
+ );
+};
TopicsResources.propTypes = {
- register: PropTypes.func.isRequired,
- // eslint-disable-next-line react/forbid-prop-types
- control: PropTypes.object.isRequired,
reportId: PropTypes.node.isRequired,
};
@@ -115,14 +113,9 @@ export default {
path: 'topics-resources',
sections,
review: false,
- render: (hookForm, additionalData, formData, reportId) => {
- const { control, register } = hookForm;
- return (
-
- );
- },
+ render: (additionalData, formData, reportId) => (
+
+ ),
};