diff --git a/sites/partners/__tests__/components/listings/PaperListingForm/sections/ListingIntro.test.tsx b/sites/partners/__tests__/components/listings/PaperListingForm/sections/ListingIntro.test.tsx index 945fdeb311..5aa92963d4 100644 --- a/sites/partners/__tests__/components/listings/PaperListingForm/sections/ListingIntro.test.tsx +++ b/sites/partners/__tests__/components/listings/PaperListingForm/sections/ListingIntro.test.tsx @@ -1,10 +1,10 @@ import React from "react" import "@testing-library/jest-dom" import { setupServer } from "msw/node" -import userEvent from "@testing-library/user-event" -import { screen, within } from "@testing-library/react" +import { screen } from "@testing-library/react" import { FormProviderWrapper, mockNextRouter, render } from "../../../../testUtils" import ListingIntro from "../../../../../src/components/listings/PaperListingForm/sections/ListingIntro" +import { EnumListingListingType } from "@bloom-housing/shared-helpers/src/types/backend-swagger" const server = setupServer() @@ -112,16 +112,14 @@ describe("ListingIntro", () => { ) - expect( - screen.queryByRole("group", { name: "What kind of listing is this?" }) - ).not.toBeInTheDocument() + expect(screen.queryAllByText("What kind of listing is this?")).toHaveLength(0) expect(screen.getByRole("textbox", { name: /^housing developer$/i })).toBeInTheDocument() expect( screen.queryByRole("textbox", { name: /^property management account$/i }) ).not.toBeInTheDocument() }) - it("should not render the ListingIntro section with regulated fields when feature flag is on", async () => { + it("should render the ListingIntro section with regulated fields when feature flag is on and listing is not non-regulated", () => { render( { expect(screen.getByRole("heading", { level: 2, name: "Listing intro" })).toBeInTheDocument() + expect(screen.getByText("What kind of listing is this?")).toBeInTheDocument() + expect(screen.getByText("Regulated")).toBeInTheDocument() + + expect(screen.getByRole("textbox", { name: /^housing developer$/i })).toBeInTheDocument() expect( - await screen.findByRole("group", { name: "What kind of listing is this?" }) - ).toBeInTheDocument() - const requlatedListingOption = screen.getByRole("radio", { name: /^regulated$/i }) - const nonRequlatedListingOption = screen.getByRole("radio", { name: /^non-regulated$/i }) - expect(requlatedListingOption).toBeInTheDocument() - expect(requlatedListingOption).toBeChecked() - expect(nonRequlatedListingOption).toBeInTheDocument() - expect(nonRequlatedListingOption).not.toBeChecked() + screen.queryByRole("textbox", { name: /^property management account$/i }) + ).not.toBeInTheDocument() - let ebllQuestionLabel = screen.queryByRole("group", { - name: "Has this property received HUD EBLL clearance?", - }) + expect( + screen.queryAllByRole("group", { + name: "Has this property received HUD EBLL clearance?", + }) + ).toHaveLength(0) + }) - ebllQuestionLabel = screen.queryByRole("group", { - name: "Has this property received HUD EBLL clearance?", - }) - expect(ebllQuestionLabel).not.toBeInTheDocument() + it("should render the ListingIntro section with non-regulated fields when feature flag is on and listing is non-regulated", () => { + render( + + + + ) + + expect(screen.getByRole("heading", { level: 2, name: "Listing intro" })).toBeInTheDocument() - await userEvent.click(nonRequlatedListingOption) + expect(screen.getByText("What kind of listing is this?")).toBeInTheDocument() + expect(screen.getByText("Non-regulated")).toBeInTheDocument() expect( screen.getByRole("textbox", { name: /^property management account$/i }) ).toBeInTheDocument() - expect(screen.queryByRole("textbox", { name: /^housing developer$/i })).not.toBeInTheDocument() - - ebllQuestionLabel = screen.queryByRole("group", { - name: "Has this property received HUD EBLL clearance?", - }) - expect(ebllQuestionLabel).toBeInTheDocument() - const ebllQuestionContainer = ebllQuestionLabel.parentElement - const ebllYesOption = within(ebllQuestionContainer).getByRole("radio", { name: /^yes$/i }) - const ebllNoOption = within(ebllQuestionContainer).getByRole("radio", { name: /^no$/i }) - expect(ebllYesOption).toBeInTheDocument() - expect(ebllYesOption).not.toBeChecked() - expect(ebllNoOption).toBeInTheDocument() - expect(ebllNoOption).toBeChecked() + + expect( + screen.getByRole("group", { + name: "Has this property received HUD EBLL clearance?", + }) + ).toBeInTheDocument() }) }) diff --git a/sites/partners/__tests__/pages/listings/index.test.tsx b/sites/partners/__tests__/pages/listings/index.test.tsx index 051c4fdfe2..f703665ae3 100644 --- a/sites/partners/__tests__/pages/listings/index.test.tsx +++ b/sites/partners/__tests__/pages/listings/index.test.tsx @@ -1,6 +1,6 @@ import React from "react" import { AuthContext, MessageProvider } from "@bloom-housing/shared-helpers" -import { fireEvent, screen, waitFor } from "@testing-library/react" +import { fireEvent, screen, waitFor, within } from "@testing-library/react" import userEvent from "@testing-library/user-event" import { act } from "react-dom/test-utils" import { rest } from "msw" @@ -520,22 +520,7 @@ describe("listings", () => { return res( ctx.json({ id: "user1", - roles: { id: "user1", isAdmin: true, isPartner: false }, - }) - ) - }), - rest.post("http://localhost:3100/auth/token", (_req, res, ctx) => { - return res(ctx.json("")) - }) - ) - - render( - { featureFlags: [], } as Jurisdiction, ], - }, - doJurisdictionsHaveFeatureFlagOn: (featureFlag) => - mockJurisdictionsHaveFeatureFlagOn(featureFlag, false, false), - }} - > - - + }) + ) + }), + rest.post("http://localhost:3100/auth/token", (_req, res, ctx) => { + return res(ctx.json("")) + }) ) + render() + const addListingButton = await screen.findByRole("button", { name: "Add listing" }) expect(addListingButton).toBeInTheDocument() await userEvent.click(addListingButton) @@ -565,7 +551,7 @@ describe("listings", () => { screen.getByRole("heading", { level: 1, name: "Select jurisdiction" }) ).toBeInTheDocument() expect( - screen.getByText("Once you create this listing, the jurisdiction cannot be changed.") + screen.getByText("Once you create this listing, this selection cannot be changed.") ).toBeInTheDocument() expect(screen.getByRole("option", { name: "JurisdictionA" })).toBeInTheDocument() @@ -582,7 +568,7 @@ describe("listings", () => { }) }) - it("should not open add listing modal if user has access to only one jurisdiction", async () => { + it("should open add listing modal if user has access to one jurisdiction and enableNonRegulatedListings", async () => { window.URL.createObjectURL = jest.fn() document.cookie = "access-token-available=True" const { pushMock } = mockNextRouter() @@ -597,7 +583,20 @@ describe("listings", () => { return res( ctx.json({ id: "user1", - roles: { id: "user1", isAdmin: true, isPartner: false }, + userRoles: { id: "user1", isAdmin: true, isPartner: false }, + jurisdictions: [ + { + id: "id1", + name: "JurisdictionA", + featureFlags: [ + { + id: "id_1", + name: FeatureFlagEnum.enableNonRegulatedListings, + active: true, + }, + ], + } as Jurisdiction, + ], }) ) }), @@ -606,29 +605,166 @@ describe("listings", () => { }) ) - render( - ) + + const addListingButton = await screen.findByRole("button", { name: "Add listing" }) + expect(addListingButton).toBeInTheDocument() + await userEvent.click(addListingButton) + + expect( + screen.getByRole("heading", { level: 1, name: "Select Listing Type" }) + ).toBeInTheDocument() + expect( + screen.getByText("Once you create this listing, this selection cannot be changed.") + ).toBeInTheDocument() + + const listingTypeRadioGroup = screen.getByRole("group", { + name: "What kind of listing is this?", + }) + expect(listingTypeRadioGroup).toBeInTheDocument() + expect( + within(listingTypeRadioGroup).getByRole("radio", { name: "Regulated" }) + ).toBeInTheDocument() + expect( + within(listingTypeRadioGroup).getByRole("radio", { name: "Non-regulated" }) + ).toBeInTheDocument() + + await userEvent.click(screen.getByRole("radio", { name: "Non-regulated" })) + + await userEvent.click(screen.getByRole("button", { name: "Get started" })) + await waitFor(() => { + expect(pushMock).toHaveBeenCalledWith({ + pathname: "/listings/add", + query: { jurisdictionId: "id1", nonRegulated: true }, + }) + }) + }) + + it("should open add listing modal if user has access to multiple jurisdictions and enableNonRegulatedListings", async () => { + window.URL.createObjectURL = jest.fn() + document.cookie = "access-token-available=True" + const { pushMock } = mockNextRouter() + server.use( + rest.get("http://localhost:3100/listings", (_req, res, ctx) => { + return res(ctx.json({ items: [listing], meta: { totalItems: 1, totalPages: 1 } })) + }), + rest.get("http://localhost/api/adapter/listings", (_req, res, ctx) => { + return res(ctx.json({ items: [listing], meta: { totalItems: 1, totalPages: 1 } })) + }), + rest.get("http://localhost/api/adapter/user", (_req, res, ctx) => { + return res( + ctx.json({ + id: "user1", + userRoles: { id: "user1", isAdmin: true, isPartner: false }, jurisdictions: [ { id: "id1", name: "JurisdictionA", featureFlags: [], } as Jurisdiction, + { + id: "id2", + name: "JurisdictionB", + featureFlags: [ + { + id: "id_1", + name: FeatureFlagEnum.enableNonRegulatedListings, + active: true, + }, + ], + } as Jurisdiction, ], - }, - doJurisdictionsHaveFeatureFlagOn: (featureFlag) => - mockJurisdictionsHaveFeatureFlagOn(featureFlag, false, false), - }} - > - - + }) + ) + }), + rest.post("http://localhost:3100/auth/token", (_req, res, ctx) => { + return res(ctx.json("")) + }) ) + render() + + const addListingButton = await screen.findByRole("button", { name: "Add listing" }) + expect(addListingButton).toBeInTheDocument() + await userEvent.click(addListingButton) + + expect( + screen.getByRole("heading", { level: 1, name: "Select jurisdiction" }) + ).toBeInTheDocument() + expect( + screen.getByText("Once you create this listing, this selection cannot be changed.") + ).toBeInTheDocument() + + // Listing type question not there without a jurisdiction selected + expect( + screen.queryAllByRole("group", { + name: "What kind of listing is this?", + }) + ).toHaveLength(0) + + // select the jurisdiction without the enableNonRegulatedListings and question shouldn't exist + await userEvent.selectOptions(screen.getByLabelText("Jurisdiction"), "JurisdictionA") + expect( + screen.queryAllByRole("group", { + name: "What kind of listing is this?", + }) + ).toHaveLength(0) + + // select the jurisdiction with the enableNonRegulatedListings and question should exist + await userEvent.selectOptions(screen.getByLabelText("Jurisdiction"), "JurisdictionB") + const listingTypeRadioGroup = screen.getByRole("group", { + name: "What kind of listing is this?", + }) + expect( + within(listingTypeRadioGroup).getByRole("radio", { name: "Regulated" }) + ).toBeInTheDocument() + expect( + within(listingTypeRadioGroup).getByRole("radio", { name: "Non-regulated" }) + ).toBeInTheDocument() + + await userEvent.click(screen.getByRole("button", { name: "Get started" })) + // Since Regulated is selected by default the nonRegulated flag is not passed to the next page + await waitFor(() => { + expect(pushMock).toHaveBeenCalledWith({ + pathname: "/listings/add", + query: { jurisdictionId: "id2" }, + }) + }) + }) + + it("should not open add listing modal if user has access to only one jurisdiction and no enableNonRegulatedListings", async () => { + window.URL.createObjectURL = jest.fn() + document.cookie = "access-token-available=True" + const { pushMock } = mockNextRouter() + server.use( + rest.get("http://localhost:3100/listings", (_req, res, ctx) => { + return res(ctx.json({ items: [listing], meta: { totalItems: 1, totalPages: 1 } })) + }), + rest.get("http://localhost/api/adapter/listings", (_req, res, ctx) => { + return res(ctx.json({ items: [listing], meta: { totalItems: 1, totalPages: 1 } })) + }), + rest.get("http://localhost/api/adapter/user", (_req, res, ctx) => { + return res( + ctx.json({ + id: "user1", + userRoles: { id: "user1", isAdmin: true, isPartner: false }, + jurisdictions: [ + { + id: "id1", + name: "JurisdictionA", + featureFlags: [], + } as Jurisdiction, + ], + }) + ) + }), + rest.post("http://localhost:3100/auth/token", (_req, res, ctx) => { + return res(ctx.json("")) + }) + ) + + render() + const addListingButton = await screen.findByRole("button", { name: "Add listing" }) expect(addListingButton).toBeInTheDocument() await userEvent.click(addListingButton) diff --git a/sites/partners/page_content/locale_overrides/general.json b/sites/partners/page_content/locale_overrides/general.json index 0baaf96e68..1604caa661 100644 --- a/sites/partners/page_content/locale_overrides/general.json +++ b/sites/partners/page_content/locale_overrides/general.json @@ -273,7 +273,7 @@ "listings.leasingAgentAddress": "Leasing agent address", "listings.listingAvailabilityQuestion": "What is the listing availability?", "listings.listingIsAlreadyLive": "This listing is already live. Updates will affect the applicant experience on the housing portal.", - "listings.listingTypeTile": "What kind of listing is this?", + "listings.listingTypeTitle": "What kind of listing is this?", "listings.hasEbllClearanceTitle": "Has this property received HUD EBLL clearance?", "listings.regulated": "Regulated", "listings.nonRegulated": "Non-regulated", @@ -288,6 +288,8 @@ "listings.listingStatusText": "Listing status", "listings.listingSubmitted": "Listing submitted", "listings.listingType": "Listing Type", + "listings.listingType.regulated.description": "Covered by an ordinance or funding source that requires tenants to income-qualify to live in these units, e.g. inclusionary units, LIHTC, or other deed-restricted properties", + "listings.listingType.nonRegulated.description": "Tenants do not not need to income qualify to live here, and there is no funding source or ordinance that regulates rent levels or other tenant qualifications.", "listings.longitude": "Longitude", "listings.lottery.dataExpiryDescription": "Lottery data has expired for this listing and is no longer available for export.", "listings.lottery.dataExpiryMessage": "Lottery data for this listing will expire on %{date}. Please export data prior to this date.", @@ -451,7 +453,8 @@ "listings.selectCommunityTypes": "Select community types", "listings.selectJurisdiction": "You must first select a jurisdiction", "listings.selectJurisdictionTitle": "Select jurisdiction", - "listings.selectJurisdictionContent": "Once you create this listing, the jurisdiction cannot be changed.", + "listings.selectJurisdictionContent": "Once you create this listing, this selection cannot be changed.", + "listings.selectListingType": "Select Listing Type", "listings.selectPreferences": "Select preferences", "listings.selectPrograms": "Select programs", "listings.smokingPolicyOptions.noSmokingAllowed": "No smoking allowed", diff --git a/sites/partners/src/components/listings/PaperListingDetails/sections/DetailListingIntro.tsx b/sites/partners/src/components/listings/PaperListingDetails/sections/DetailListingIntro.tsx index 21f3a9df21..07ffd5557a 100644 --- a/sites/partners/src/components/listings/PaperListingDetails/sections/DetailListingIntro.tsx +++ b/sites/partners/src/components/listings/PaperListingDetails/sections/DetailListingIntro.tsx @@ -51,6 +51,17 @@ const DetailListingIntro = () => { )} + {enableNonRegulatedListings && ( + + + + {listing.listingType === EnumListingListingType.regulated + ? t("listings.regulated") + : t("listings.nonRegulated")} + + + + )} @@ -65,24 +76,16 @@ const DetailListingIntro = () => { - {enableNonRegulatedListings && ( - - - - {listing.listingType === EnumListingListingType.regulated - ? t("listings.regulated") - : t("listings.nonRegulated")} - - - {listing.listingType === EnumListingListingType.nonRegulated && ( + {enableNonRegulatedListings && + listing.listingType === EnumListingListingType.nonRegulated && ( + {listing.hasHudEbllClearance ? t("t.yes") : t("t.no")} - )} - - )} + + )} ) } diff --git a/sites/partners/src/components/listings/PaperListingForm/index.tsx b/sites/partners/src/components/listings/PaperListingForm/index.tsx index f84f14a7cf..6e7b58a005 100644 --- a/sites/partners/src/components/listings/PaperListingForm/index.tsx +++ b/sites/partners/src/components/listings/PaperListingForm/index.tsx @@ -19,6 +19,7 @@ import { Listing, ListingCreate, ListingEventsTypeEnum, + ListingTypeEnum, ListingUpdate, ListingsStatusEnum, MarketingTypeEnum, @@ -75,6 +76,7 @@ type ListingFormProps = { jurisdictionId: string listing?: FormListing editMode?: boolean + isNonRegulated?: boolean setListingName?: React.Dispatch> updateListing?: (updatedListing: Listing) => void } @@ -113,6 +115,7 @@ const ListingForm = ({ editMode, setListingName, updateListing, + isNonRegulated, }: ListingFormProps) => { const rawDefaultValues = editMode ? listing : formDefaults @@ -130,7 +133,7 @@ const ListingForm = ({ const router = useRouter() // eslint-disable-next-line @typescript-eslint/unbound-method - const { getValues, setError, clearErrors, reset, watch } = formMethods + const { getValues, setError, clearErrors, reset, watch, setValue } = formMethods const marketingTypeChoice = watch("marketingType") @@ -259,6 +262,12 @@ const ListingForm = ({ jurisdictionId ) + useEffect(() => { + if (enableNonRegulatedListings && isNonRegulated) { + setValue("listingType", ListingTypeEnum.nonRegulated) + } + }, [enableNonRegulatedListings, isNonRegulated, setValue]) + useEffect(() => { if (listing?.units) { const tempUnits = listing.units.map((unit, i) => ({ diff --git a/sites/partners/src/components/listings/PaperListingForm/sections/ListingIntro.tsx b/sites/partners/src/components/listings/PaperListingForm/sections/ListingIntro.tsx index 309da3e38f..dcd6b85a71 100644 --- a/sites/partners/src/components/listings/PaperListingForm/sections/ListingIntro.tsx +++ b/sites/partners/src/components/listings/PaperListingForm/sections/ListingIntro.tsx @@ -1,7 +1,7 @@ import React from "react" import { useFormContext } from "react-hook-form" import { t, Field, FieldGroup } from "@bloom-housing/ui-components" -import { Grid } from "@bloom-housing/ui-seeds" +import { FieldValue, Grid } from "@bloom-housing/ui-seeds" import { EnumListingListingType, YesNoEnum, @@ -20,16 +20,14 @@ interface ListingIntroProps { const getDeveloperLabel = ( listingType: EnumListingListingType, - enableHousingDeveloperOwner: boolean, - enableNonRegulatedListings: boolean + enableHousingDeveloperOwner: boolean ) => { if (enableHousingDeveloperOwner) { return t("listings.housingDeveloperOwner") - } else if (listingType === EnumListingListingType.regulated || !enableNonRegulatedListings) { - return t("listings.developer") - } else { + } else if (listingType === EnumListingListingType.nonRegulated) { return t("listings.propertyManager") } + return t("listings.developer") } const ListingIntro = (props: ListingIntroProps) => { @@ -54,27 +52,11 @@ const ListingIntro = (props: ListingIntroProps) => { {props.enableNonRegulatedListings && ( - + + {listing.listingType === EnumListingListingType.nonRegulated + ? t("listings.nonRegulated") + : t("listings.regulated")} + )} @@ -114,11 +96,7 @@ const ListingIntro = (props: ListingIntroProps) => { register={register} {...defaultFieldProps( "developer", - getDeveloperLabel( - listingType, - props.enableHousingDeveloperOwner, - props.enableNonRegulatedListings - ), + getDeveloperLabel(listingType, props.enableHousingDeveloperOwner), props.requiredFields, errors, clearErrors diff --git a/sites/partners/src/pages/index.tsx b/sites/partners/src/pages/index.tsx index dc911f70ac..9967ddb24b 100644 --- a/sites/partners/src/pages/index.tsx +++ b/sites/partners/src/pages/index.tsx @@ -1,14 +1,27 @@ -import React, { useMemo, useContext, useState } from "react" +import React, { useMemo, useContext, useState, useEffect } from "react" import Head from "next/head" import DocumentArrowDownIcon from "@heroicons/react/24/solid/DocumentArrowDownIcon" import { useRouter } from "next/router" import { useForm } from "react-hook-form" import dayjs from "dayjs" import { ColDef, ColGroupDef } from "ag-grid-community" -import { Button, Dialog, Grid, Icon } from "@bloom-housing/ui-seeds" -import { t, AgTable, useAgTable, Select, Form, SelectOption } from "@bloom-housing/ui-components" +import { Button, Dialog, FieldValue, Grid, Heading, Icon } from "@bloom-housing/ui-seeds" +import { + t, + AgTable, + useAgTable, + Select, + Form, + SelectOption, + FieldGroup, + Field, +} from "@bloom-housing/ui-components" import { AuthContext } from "@bloom-housing/shared-helpers" -import { FeatureFlagEnum } from "@bloom-housing/shared-helpers/src/types/backend-swagger" +import { + EnumListingListingType, + FeatureFlagEnum, + ListingTypeEnum, +} from "@bloom-housing/shared-helpers/src/types/backend-swagger" import { useListingExport, useListingsData } from "../lib/hooks" import Layout from "../layouts" import { MetaTags } from "../components/shared/MetaTags" @@ -92,6 +105,7 @@ export const getFlagInAllJurisdictions = ( type CreateListingFormFields = { jurisdiction: string + listingType: ListingTypeEnum } export default function ListingsList() { @@ -111,6 +125,7 @@ export default function ListingsList() { const { register, errors, handleSubmit, clearErrors } = useForm() const [listingSelectModal, setListingSelectModal] = useState(false) + const [isNonRegulatedEnabled, setIsNonRegulatedEnabled] = useState(false) const defaultJurisdiction = profile?.jurisdictions?.length === 1 ? profile.jurisdictions[0].id : null @@ -134,9 +149,24 @@ export default function ListingsList() { } const showForNonRegulated = doJurisdictionsHaveFeatureFlagOn( - FeatureFlagEnum.enableNonRegulatedListings + FeatureFlagEnum.enableNonRegulatedListings, + undefined, + true ) + useEffect(() => { + if (defaultJurisdiction) { + setIsNonRegulatedEnabled( + doJurisdictionsHaveFeatureFlagOn(FeatureFlagEnum.enableNonRegulatedListings) + ) + } + }, [defaultJurisdiction, doJurisdictionsHaveFeatureFlagOn]) + + const onModalClose = () => { + setListingSelectModal(false) + setIsNonRegulatedEnabled(showForNonRegulated) + } + const columnDefs = useMemo(() => { const columns: (ColDef | ColGroupDef)[] = [ { @@ -295,9 +325,15 @@ export default function ListingsList() { }) const onSubmit = (data: CreateListingFormFields) => { + const query = { + jurisdictionId: data.jurisdiction, + } + if (data.listingType === ListingTypeEnum.nonRegulated) { + query["nonRegulated"] = true + } void router.push({ pathname: "/listings/add", - query: { jurisdictionId: data.jurisdiction }, + query: query, }) } @@ -343,7 +379,7 @@ export default function ListingsList() { size="sm" variant="primary" onClick={() => { - if (defaultJurisdiction) { + if (defaultJurisdiction && !isNonRegulatedEnabled) { void router.push({ pathname: "/listings/add", query: { jurisdictionId: defaultJurisdiction }, @@ -384,11 +420,13 @@ export default function ListingsList() { isOpen={listingSelectModal} ariaLabelledBy="listing-select-dialog-header" ariaDescribedBy="listing-select-dialog-content" - onClose={() => setListingSelectModal(false)} + onClose={() => onModalClose()} >
- {t("listings.selectJurisdictionTitle")} + {defaultJurisdiction + ? t("listings.selectListingType") + : t("listings.selectJurisdictionTitle")} @@ -410,7 +448,14 @@ export default function ListingsList() { options={jurisdictionOptions} validation={{ required: !defaultJurisdiction }} inputProps={{ - onChange: () => { + onChange: (e: React.ChangeEvent) => { + setIsNonRegulatedEnabled( + e.target?.value && + doJurisdictionsHaveFeatureFlagOn( + FeatureFlagEnum.enableNonRegulatedListings, + e.target?.value + ) + ) clearErrors("jurisdiction") }, "aria-required": true, @@ -420,6 +465,49 @@ export default function ListingsList() { + {isNonRegulatedEnabled && ( +
+
+ + {t("listings.listingTypeTitle")} + + + +
+ +
+
+ +
+ +
+
+
+
+
+ )}
diff --git a/sites/partners/src/pages/listings/add.tsx b/sites/partners/src/pages/listings/add.tsx index 72c14b3d0d..c71a5f7171 100644 --- a/sites/partners/src/pages/listings/add.tsx +++ b/sites/partners/src/pages/listings/add.tsx @@ -14,6 +14,7 @@ const NewListing = () => { const router = useRouter() const selectedJurisdiction = router.query.jurisdictionId as string + const isNonRegulated = !!router.query.nonRegulated useEffect(() => { if (!selectedJurisdiction) { @@ -44,7 +45,7 @@ const NewListing = () => { } /> - + )