diff --git a/shared-helpers/package.json b/shared-helpers/package.json index 59e93c018a6..4d93741b858 100644 --- a/shared-helpers/package.json +++ b/shared-helpers/package.json @@ -17,7 +17,7 @@ "prettier": "prettier --write \"**/*.ts\"" }, "dependencies": { - "@bloom-housing/ui-components": "13.0.3", + "@bloom-housing/ui-components": "13.0.6", "@bloom-housing/ui-seeds": "3.3.1", "@heroicons/react": "^2.1.1", "axios-cookiejar-support": "^5.0.5", diff --git a/sites/partners/package.json b/sites/partners/package.json index 7fd32372781..b0bfe4594a0 100644 --- a/sites/partners/package.json +++ b/sites/partners/package.json @@ -30,7 +30,7 @@ }, "dependencies": { "@bloom-housing/shared-helpers": "^7.7.1", - "@bloom-housing/ui-components": "13.0.3", + "@bloom-housing/ui-components": "13.0.6", "@bloom-housing/ui-seeds": "3.3.1", "@heroicons/react": "^2.2.0", "@mapbox/mapbox-sdk": "^0.13.0", diff --git a/sites/public/package.json b/sites/public/package.json index d7d8f966198..2bd4d2bf794 100644 --- a/sites/public/package.json +++ b/sites/public/package.json @@ -30,7 +30,7 @@ }, "dependencies": { "@bloom-housing/shared-helpers": "^7.7.1", - "@bloom-housing/ui-components": "13.0.3", + "@bloom-housing/ui-components": "13.0.6", "@bloom-housing/ui-seeds": "3.3.1", "@heroicons/react": "^2.1.1", "@mapbox/mapbox-sdk": "^0.13.0", diff --git a/sites/public/src/components/applications/ApplicationMultiselectQuestionStep.tsx b/sites/public/src/components/applications/ApplicationMultiselectQuestionStep.tsx index d08def9eb90..5e9c5abce6f 100644 --- a/sites/public/src/components/applications/ApplicationMultiselectQuestionStep.tsx +++ b/sites/public/src/components/applications/ApplicationMultiselectQuestionStep.tsx @@ -24,8 +24,11 @@ import { import FormsLayout from "../../layouts/forms" import { useFormConductor } from "../../lib/hooks" import { UserStatus } from "../../lib/constants" +import ApplicationFormLayout, { + ApplicationAlertBox, + onFormError, +} from "../../layouts/application-form" import { AddressValidationSelection, findValidatedAddress, FoundAddress } from "./ValidateAddress" -import ApplicationFormLayout from "../../layouts/application-form" export interface ApplicationMultiselectQuestionStepProps { applicationSection: MultiselectQuestionsApplicationSectionEnum @@ -168,6 +171,10 @@ const ApplicationMultiselectQuestionStep = ({ conductor.routeToNextOrReturnUrl() } + const onError = () => { + onFormError() + } + const watchQuestions = watch(allOptionNames) if (!clientLoaded || !allOptionNames) { @@ -237,7 +244,7 @@ const ApplicationMultiselectQuestionStep = ({ swapCommunityTypeWithPrograms )} - ${t("listings.apply.applyOnline")} - ${listing?.name}`} > -
+ - {!!Object.keys(errors).length && ( - - {t("errors.errorsToResolve")} - - )} +
diff --git a/sites/public/src/layouts/application-form.tsx b/sites/public/src/layouts/application-form.tsx index f288da924d7..fafa4526dd9 100644 --- a/sites/public/src/layouts/application-form.tsx +++ b/sites/public/src/layouts/application-form.tsx @@ -1,7 +1,8 @@ import React from "react" import Markdown from "markdown-to-jsx" +import { UseFormMethods } from "react-hook-form" import { BloomCard, CustomIconMap } from "@bloom-housing/shared-helpers" -import { Button, Heading, Icon, Message } from "@bloom-housing/ui-seeds" +import { Alert, Button, Heading, Icon, Message } from "@bloom-housing/ui-seeds" import { CardSection } from "@bloom-housing/ui-seeds/src/blocks/Card" import { t, ProgressNav, StepHeader } from "@bloom-housing/ui-components" import ApplicationConductor from "../lib/applications/ApplicationConductor" @@ -37,6 +38,32 @@ export const LockIcon = ({ locked }: { locked: boolean }) => { ) } +interface ApplicationAlertBoxProps { + errors: UseFormMethods["errors"] +} + +export const onFormError = (errorBoxId?: string) => { + window.scrollTo(0, 0) + document.getElementById(errorBoxId ?? "application-alert-box-wrapper")?.focus() +} + +export const ApplicationAlertBox = (props: ApplicationAlertBoxProps) => { + return ( +
+ {Object.entries(props.errors).length > 0 && ( + + {t("errors.errorsToResolve")} + + )} +
+ ) +} + const ApplicationFormLayout = (props: ApplicationFormLayoutProps) => { const getBackLink = (url?: string, onClickFxn?: () => void) => { return ( diff --git a/sites/public/src/pages/applications/contact/address.tsx b/sites/public/src/pages/applications/contact/address.tsx index 242e8e4c47e..bbb9e918e8a 100644 --- a/sites/public/src/pages/applications/contact/address.tsx +++ b/sites/public/src/pages/applications/contact/address.tsx @@ -24,8 +24,10 @@ import { AddressValidationSelection, } from "../../../components/applications/ValidateAddress" import { UserStatus } from "../../../lib/constants" -import ApplicationFormLayout from "../../../layouts/application-form" -import styles from "../../../layouts/application-form.module.scss" +import ApplicationFormLayout, { + ApplicationAlertBox, + onFormError, +} from "../../../layouts/application-form" const ApplicationAddress = () => { const { profile } = useContext(AuthContext) @@ -103,7 +105,7 @@ const ApplicationAddress = () => { conductor.routeToNextOrReturnUrl() } const onError = () => { - window.scrollTo(0, 0) + onFormError() } const noPhone: boolean = watch("applicant.noPhone") @@ -167,16 +169,7 @@ const ApplicationAddress = () => { }} conductor={conductor} > - {Object.entries(errors).length > 0 && ( - - {t("errors.errorsToResolve")} - - )} +
diff --git a/sites/public/src/pages/applications/contact/alternate-contact-contact.tsx b/sites/public/src/pages/applications/contact/alternate-contact-contact.tsx index 096bd3ca5dc..2456fbf5bdb 100644 --- a/sites/public/src/pages/applications/contact/alternate-contact-contact.tsx +++ b/sites/public/src/pages/applications/contact/alternate-contact-contact.tsx @@ -2,7 +2,6 @@ import React, { useContext, useEffect } from "react" import { useForm } from "react-hook-form" import { Field, Form, PhoneField, Select, t } from "@bloom-housing/ui-components" import { CardSection } from "@bloom-housing/ui-seeds/src/blocks/Card" -import { Alert } from "@bloom-housing/ui-seeds" import { OnClientSide, PageView, @@ -13,9 +12,12 @@ import { } from "@bloom-housing/shared-helpers" import { useFormConductor } from "../../../lib/hooks" import { UserStatus } from "../../../lib/constants" -import ApplicationFormLayout, { LockIcon } from "../../../layouts/application-form" +import ApplicationFormLayout, { + ApplicationAlertBox, + LockIcon, + onFormError, +} from "../../../layouts/application-form" import FormsLayout from "../../../layouts/forms" -import styles from "../../../layouts/application-form.module.scss" const ApplicationAlternateContactContact = () => { const { profile } = useContext(AuthContext) @@ -45,7 +47,7 @@ const ApplicationAlternateContactContact = () => { conductor.routeToNextOrReturnUrl() } const onError = () => { - window.scrollTo(0, 0) + onFormError() } useEffect(() => { @@ -106,17 +108,7 @@ const ApplicationAlternateContactContact = () => { }} conductor={conductor} > - {Object.entries(errors).length > 0 && ( - - {t("errors.errorsToResolve")} - - )} - +