diff --git a/api/src/dtos/addresses/address-create.dto.ts b/api/src/dtos/addresses/address-create.dto.ts index e040876165..54e51f6608 100644 --- a/api/src/dtos/addresses/address-create.dto.ts +++ b/api/src/dtos/addresses/address-create.dto.ts @@ -1,8 +1,4 @@ +import { AddressUpdate } from './address-update.dto'; import { OmitType } from '@nestjs/swagger'; -import { Address } from './address.dto'; -export class AddressCreate extends OmitType(Address, [ - 'id', - 'createdAt', - 'updatedAt', -]) {} +export class AddressCreate extends OmitType(AddressUpdate, ['id']) {} diff --git a/api/src/dtos/addresses/address-update.dto.ts b/api/src/dtos/addresses/address-update.dto.ts new file mode 100644 index 0000000000..3a9417d648 --- /dev/null +++ b/api/src/dtos/addresses/address-update.dto.ts @@ -0,0 +1,17 @@ +import { Address } from './address.dto'; +import { ApiPropertyOptional, OmitType } from '@nestjs/swagger'; +import { Expose } from 'class-transformer'; +import { IsString, IsUUID } from 'class-validator'; +import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; + +export class AddressUpdate extends OmitType(Address, [ + 'createdAt', + 'id', + 'updatedAt', +]) { + @Expose() + @IsString({ groups: [ValidationsGroupsEnum.default] }) + @IsUUID(4, { groups: [ValidationsGroupsEnum.default] }) + @ApiPropertyOptional() + id?: string; +} diff --git a/api/src/dtos/application-methods/application-method-create.dto.ts b/api/src/dtos/application-methods/application-method-create.dto.ts index 05f557059e..507692c0f0 100644 --- a/api/src/dtos/application-methods/application-method-create.dto.ts +++ b/api/src/dtos/application-methods/application-method-create.dto.ts @@ -1,14 +1,12 @@ -import { OmitType, ApiPropertyOptional } from '@nestjs/swagger'; +import { ApplicationMethodUpdate } from './application-method-update.dto'; import { Expose, Type } from 'class-transformer'; +import { OmitType, ApiPropertyOptional } from '@nestjs/swagger'; +import { PaperApplicationCreate } from '../paper-applications/paper-application-create.dto'; import { ValidateNested } from 'class-validator'; import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; -import { PaperApplicationCreate } from '../paper-applications/paper-application-create.dto'; -import { ApplicationMethod } from './application-method.dto'; -export class ApplicationMethodCreate extends OmitType(ApplicationMethod, [ +export class ApplicationMethodCreate extends OmitType(ApplicationMethodUpdate, [ 'id', - 'createdAt', - 'updatedAt', 'paperApplications', ]) { @Expose() diff --git a/api/src/dtos/application-methods/application-method-update.dto.ts b/api/src/dtos/application-methods/application-method-update.dto.ts new file mode 100644 index 0000000000..425543fb05 --- /dev/null +++ b/api/src/dtos/application-methods/application-method-update.dto.ts @@ -0,0 +1,25 @@ +import { ApplicationMethod } from './application-method.dto'; +import { Expose, Type } from 'class-transformer'; +import { IsString, IsUUID, ValidateNested } from 'class-validator'; +import { OmitType, ApiPropertyOptional } from '@nestjs/swagger'; +import { PaperApplicationUpdate } from '../paper-applications/paper-application-update.dto'; +import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; + +export class ApplicationMethodUpdate extends OmitType(ApplicationMethod, [ + 'createdAt', + 'id', + 'paperApplications', + 'updatedAt', +]) { + @Expose() + @IsString({ groups: [ValidationsGroupsEnum.default] }) + @IsUUID(4, { groups: [ValidationsGroupsEnum.default] }) + @ApiPropertyOptional() + id?: string; + + @Expose() + @ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true }) + @Type(() => PaperApplicationUpdate) + @ApiPropertyOptional({ type: PaperApplicationUpdate, isArray: true }) + paperApplications?: PaperApplicationUpdate[]; +} diff --git a/api/src/dtos/listings/listing-create.dto.ts b/api/src/dtos/listings/listing-create.dto.ts index 9adbd0ebb2..d85634d519 100644 --- a/api/src/dtos/listings/listing-create.dto.ts +++ b/api/src/dtos/listings/listing-create.dto.ts @@ -1,4 +1,155 @@ -import { OmitType } from '@nestjs/swagger'; +import { AddressCreate } from '../addresses/address-create.dto'; +import { ApiProperty, ApiPropertyOptional, OmitType } from '@nestjs/swagger'; +import { ApplicationMethodCreate } from '../application-methods/application-method-create.dto'; +import { ArrayMaxSize, Validate, ValidateNested } from 'class-validator'; +import { Expose, Type } from 'class-transformer'; +import { ListingEventCreate } from './listing-event-create.dto'; +import { ListingFeaturesCreate } from './listing-feature-create.dto'; +import { ListingNeighborhoodAmenitiesCreate } from './listing-neighborhood-amenities-create.dto'; import { ListingUpdate } from './listing-update.dto'; +import { ListingUtilitiesCreate } from './listing-utiliity-create.dto'; +import { LotteryDateParamValidator } from '../../utilities/lottery-date-validator'; +import { UnitCreate } from '../units/unit-create.dto'; +import { UnitGroupCreate } from '../unit-groups/unit-group-create.dto'; +import { + ValidateAtLeastOneUnit, + ValidateOnlyUnitsOrUnitGroups, +} from '../../decorators/validate-units-required.decorator'; +import { ValidateListingPublish } from '../../decorators/validate-listing-publish.decorator'; +import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; -export class ListingCreate extends OmitType(ListingUpdate, ['id']) {} +export class ListingCreate extends OmitType(ListingUpdate, [ + 'applicationMethods', + 'id', + 'listingEvents', + 'listingNeighborhoodAmenities', + 'listingsApplicationDropOffAddress', + 'listingsApplicationMailingAddress', + 'listingsApplicationPickUpAddress', + 'listingsBuildingAddress', + 'listingsLeasingAgentAddress', + 'listingUtilities', + 'unitGroups', + 'units', +]) { + @Expose() + @ValidateAtLeastOneUnit({ + groups: [ValidationsGroupsEnum.default], + }) + @ValidateOnlyUnitsOrUnitGroups({ + groups: [ValidationsGroupsEnum.default], + }) + @ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true }) + @Type(() => UnitCreate) + @ArrayMaxSize(256, { groups: [ValidationsGroupsEnum.default] }) + @ApiPropertyOptional({ type: UnitCreate, isArray: true }) + units?: UnitCreate[]; + + @Expose() + @ValidateAtLeastOneUnit({ + groups: [ValidationsGroupsEnum.default], + }) + @ValidateOnlyUnitsOrUnitGroups({ + groups: [ValidationsGroupsEnum.default], + }) + @ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true }) + @Type(() => UnitGroupCreate) + @ApiPropertyOptional({ type: UnitGroupCreate, isArray: true }) + unitGroups?: UnitGroupCreate[]; + + @Expose() + @ValidateListingPublish('applicationMethods', { + groups: [ValidationsGroupsEnum.default], + }) + @ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true }) + @Type(() => ApplicationMethodCreate) + @ApiPropertyOptional({ + type: ApplicationMethodCreate, + isArray: true, + }) + applicationMethods?: ApplicationMethodCreate[]; + + @Expose() + @ValidateListingPublish('listingsApplicationPickUpAddress', { + groups: [ValidationsGroupsEnum.default], + }) + @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) + @Type(() => AddressCreate) + @ApiPropertyOptional({ type: AddressCreate }) + listingsApplicationPickUpAddress?: AddressCreate; + + @Expose() + @ValidateListingPublish('listingsApplicationMailingAddress', { + groups: [ValidationsGroupsEnum.default], + }) + @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) + @Type(() => AddressCreate) + @ApiPropertyOptional({ type: AddressCreate }) + listingsApplicationMailingAddress?: AddressCreate; + + @Expose() + @ValidateListingPublish('listingsApplicationDropOffAddress', { + groups: [ValidationsGroupsEnum.default], + }) + @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) + @Type(() => AddressCreate) + @ApiPropertyOptional({ type: AddressCreate }) + listingsApplicationDropOffAddress?: AddressCreate; + + @Expose() + @ValidateListingPublish('listingsLeasingAgentAddress', { + groups: [ValidationsGroupsEnum.default], + }) + @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) + @Type(() => AddressCreate) + @ApiPropertyOptional({ type: AddressCreate }) + listingsLeasingAgentAddress?: AddressCreate; + + @Expose() + @ValidateListingPublish('listingsBuildingAddress', { + groups: [ValidationsGroupsEnum.default], + }) + @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) + @Type(() => AddressCreate) + @ApiPropertyOptional({ type: AddressCreate }) + listingsBuildingAddress?: AddressCreate; + + @Expose() + @ValidateListingPublish('listingEvents', { + groups: [ValidationsGroupsEnum.default], + }) + @Validate(LotteryDateParamValidator, { + groups: [ValidationsGroupsEnum.default], + }) + @ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true }) + @Type(() => ListingEventCreate) + @ApiProperty({ type: ListingEventCreate, isArray: true }) + listingEvents: ListingEventCreate[]; + + @Expose() + @ValidateListingPublish('listingFeatures', { + groups: [ValidationsGroupsEnum.default], + }) + @ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true }) + @Type(() => ListingFeaturesCreate) + @ApiPropertyOptional({ type: ListingFeaturesCreate }) + listingFeatures?: ListingFeaturesCreate; + + @Expose() + @ValidateListingPublish('listingUtilities', { + groups: [ValidationsGroupsEnum.default], + }) + @ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true }) + @Type(() => ListingUtilitiesCreate) + @ApiPropertyOptional({ type: ListingUtilitiesCreate }) + listingUtilities?: ListingUtilitiesCreate; + + @Expose() + @ValidateListingPublish('listingNeighborhoodAmenities', { + groups: [ValidationsGroupsEnum.default], + }) + @ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true }) + @Type(() => ListingNeighborhoodAmenitiesCreate) + @ApiPropertyOptional({ type: ListingNeighborhoodAmenitiesCreate }) + listingNeighborhoodAmenities?: ListingNeighborhoodAmenitiesCreate; +} diff --git a/api/src/dtos/listings/listing-event-create.dto.ts b/api/src/dtos/listings/listing-event-create.dto.ts index 76b61e8777..24acad5f77 100644 --- a/api/src/dtos/listings/listing-event-create.dto.ts +++ b/api/src/dtos/listings/listing-event-create.dto.ts @@ -1,19 +1,4 @@ -import { ApiPropertyOptional, OmitType } from '@nestjs/swagger'; -import { Expose, Type } from 'class-transformer'; -import { ValidateNested } from 'class-validator'; -import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; -import { AssetCreate } from '../assets/asset-create.dto'; -import { ListingEvent } from './listing-event.dto'; +import { ListingEventUpdate } from './listing-event-update.dto'; +import { OmitType } from '@nestjs/swagger'; -export class ListingEventCreate extends OmitType(ListingEvent, [ - 'id', - 'createdAt', - 'updatedAt', - 'assets', -]) { - @Expose() - @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) - @Type(() => AssetCreate) - @ApiPropertyOptional({ type: AssetCreate }) - assets?: AssetCreate; -} +export class ListingEventCreate extends OmitType(ListingEventUpdate, ['id']) {} diff --git a/api/src/dtos/listings/listing-event-update.dto.ts b/api/src/dtos/listings/listing-event-update.dto.ts new file mode 100644 index 0000000000..7bf355f9bc --- /dev/null +++ b/api/src/dtos/listings/listing-event-update.dto.ts @@ -0,0 +1,25 @@ +import { ApiPropertyOptional, OmitType } from '@nestjs/swagger'; +import { AssetCreate } from '../assets/asset-create.dto'; +import { Expose, Type } from 'class-transformer'; +import { IsString, IsUUID, ValidateNested } from 'class-validator'; +import { ListingEvent } from './listing-event.dto'; +import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; + +export class ListingEventUpdate extends OmitType(ListingEvent, [ + 'assets', + 'createdAt', + 'id', + 'updatedAt', +]) { + @Expose() + @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) + @Type(() => AssetCreate) + @ApiPropertyOptional({ type: AssetCreate }) + assets?: AssetCreate; + + @Expose() + @IsString({ groups: [ValidationsGroupsEnum.default] }) + @IsUUID(4, { groups: [ValidationsGroupsEnum.default] }) + @ApiPropertyOptional() + id?: string; +} diff --git a/api/src/dtos/listings/listing-feature-create.dto.ts b/api/src/dtos/listings/listing-feature-create.dto.ts new file mode 100644 index 0000000000..33e5069ca9 --- /dev/null +++ b/api/src/dtos/listings/listing-feature-create.dto.ts @@ -0,0 +1,6 @@ +import { ListingFeaturesUpdate } from './listing-feature-update.dto'; +import { OmitType } from '@nestjs/swagger'; + +export class ListingFeaturesCreate extends OmitType(ListingFeaturesUpdate, [ + 'id', +]) {} diff --git a/api/src/dtos/listings/listing-feature-update.dto.ts b/api/src/dtos/listings/listing-feature-update.dto.ts new file mode 100644 index 0000000000..ce5973bb0e --- /dev/null +++ b/api/src/dtos/listings/listing-feature-update.dto.ts @@ -0,0 +1,17 @@ +import { ApiPropertyOptional, OmitType } from '@nestjs/swagger'; +import { Expose } from 'class-transformer'; +import { IsString, IsUUID } from 'class-validator'; +import { ListingFeatures } from './listing-feature.dto'; +import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; + +export class ListingFeaturesUpdate extends OmitType(ListingFeatures, [ + 'createdAt', + 'id', + 'updatedAt', +]) { + @Expose() + @IsString({ groups: [ValidationsGroupsEnum.default] }) + @IsUUID(4, { groups: [ValidationsGroupsEnum.default] }) + @ApiPropertyOptional() + id?: string; +} diff --git a/api/src/dtos/listings/listing-feature.dto.ts b/api/src/dtos/listings/listing-feature.dto.ts index 05129508d6..aff3915078 100644 --- a/api/src/dtos/listings/listing-feature.dto.ts +++ b/api/src/dtos/listings/listing-feature.dto.ts @@ -1,9 +1,10 @@ +import { AbstractDTO } from '../shared/abstract.dto'; import { ApiPropertyOptional } from '@nestjs/swagger'; import { Expose } from 'class-transformer'; import { IsBoolean } from 'class-validator'; import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; -export class ListingFeatures { +export class ListingFeatures extends AbstractDTO { @Expose() @IsBoolean({ groups: [ValidationsGroupsEnum.default] }) @ApiPropertyOptional() diff --git a/api/src/dtos/listings/listing-neighborhood-amenities-create.dto.ts b/api/src/dtos/listings/listing-neighborhood-amenities-create.dto.ts new file mode 100644 index 0000000000..cebbfa3c2d --- /dev/null +++ b/api/src/dtos/listings/listing-neighborhood-amenities-create.dto.ts @@ -0,0 +1,7 @@ +import { OmitType } from '@nestjs/swagger'; +import { ListingNeighborhoodAmenitiesUpdate } from './listing-neighborhood-amenities-update.dto'; + +export class ListingNeighborhoodAmenitiesCreate extends OmitType( + ListingNeighborhoodAmenitiesUpdate, + ['id'], +) {} diff --git a/api/src/dtos/listings/listing-neighborhood-amenities-update.dto.ts b/api/src/dtos/listings/listing-neighborhood-amenities-update.dto.ts new file mode 100644 index 0000000000..a73fa3dd62 --- /dev/null +++ b/api/src/dtos/listings/listing-neighborhood-amenities-update.dto.ts @@ -0,0 +1,16 @@ +import { ApiPropertyOptional, OmitType } from '@nestjs/swagger'; +import { Expose } from 'class-transformer'; +import { IsString, IsUUID } from 'class-validator'; +import { ListingNeighborhoodAmenities } from './listing-neighborhood-amenities.dto'; +import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; + +export class ListingNeighborhoodAmenitiesUpdate extends OmitType( + ListingNeighborhoodAmenities, + ['createdAt', 'id', 'updatedAt'], +) { + @Expose() + @IsString({ groups: [ValidationsGroupsEnum.default] }) + @IsUUID(4, { groups: [ValidationsGroupsEnum.default] }) + @ApiPropertyOptional() + id?: string; +} diff --git a/api/src/dtos/listings/listing-neighborhood-amenities.dto.ts b/api/src/dtos/listings/listing-neighborhood-amenities.dto.ts index 9d2e70b1ed..8d420e6662 100644 --- a/api/src/dtos/listings/listing-neighborhood-amenities.dto.ts +++ b/api/src/dtos/listings/listing-neighborhood-amenities.dto.ts @@ -1,9 +1,10 @@ +import { AbstractDTO } from '../shared/abstract.dto'; import { ApiPropertyOptional } from '@nestjs/swagger'; import { Expose } from 'class-transformer'; import { IsOptional, IsString } from 'class-validator'; import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; -export class ListingNeighborhoodAmenities { +export class ListingNeighborhoodAmenities extends AbstractDTO { @Expose() @IsOptional({ groups: [ValidationsGroupsEnum.default] }) @IsString({ groups: [ValidationsGroupsEnum.default] }) diff --git a/api/src/dtos/listings/listing-update.dto.ts b/api/src/dtos/listings/listing-update.dto.ts index d54baa5e8b..8067e947b0 100644 --- a/api/src/dtos/listings/listing-update.dto.ts +++ b/api/src/dtos/listings/listing-update.dto.ts @@ -1,64 +1,66 @@ +import { AddressUpdate } from '../addresses/address-update.dto'; +import { ApiProperty } from '@nestjs/swagger'; import { ApiPropertyOptional, OmitType } from '@nestjs/swagger'; -import { Expose, Type } from 'class-transformer'; +import { ApplicationMethodUpdate } from '../application-methods/application-method-update.dto'; import { ArrayMaxSize, Validate, ValidateNested } from 'class-validator'; -import { ApiProperty } from '@nestjs/swagger'; -import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; +import { AssetCreate } from '../assets/asset-create.dto'; +import { Expose, Type } from 'class-transformer'; import { IdDTO } from '../shared/id.dto'; import { Listing } from './listing.dto'; -import { UnitCreate } from '../units/unit-create.dto'; -import { ApplicationMethodCreate } from '../application-methods/application-method-create.dto'; -import { AssetCreate } from '../assets/asset-create.dto'; -import { UnitsSummaryCreate } from '../units/units-summary-create.dto'; +import { ListingEventUpdate } from './listing-event-update.dto'; +import { ListingFeaturesUpdate } from './listing-feature-update.dto'; import { ListingImageCreate } from './listing-image-create.dto'; -import { AddressCreate } from '../addresses/address-create.dto'; -import { ListingEventCreate } from './listing-event-create.dto'; -import { ListingFeatures } from './listing-feature.dto'; -import { ListingUtilities } from './listing-utility.dto'; +import { ListingNeighborhoodAmenitiesUpdate } from './listing-neighborhood-amenities-update.dto'; +import { ListingUtilitiesUpdate } from './listing-utility-update.dto'; import { LotteryDateParamValidator } from '../../utilities/lottery-date-validator'; -import { UnitGroupCreate } from '../unit-groups/unit-group-create.dto'; -import { ValidateListingPublish } from '../../decorators/validate-listing-publish.decorator'; +import { UnitGroupUpdate } from '../unit-groups/unit-group-update.dto'; +import { UnitsSummaryCreate } from '../units/units-summary-create.dto'; +import { UnitUpdate } from '../units/unit-update.dto'; import { ValidateAtLeastOneUnit, ValidateOnlyUnitsOrUnitGroups, } from '../../decorators/validate-units-required.decorator'; import { ValidateListingImages } from '../../decorators/validate-listing-images.decorator'; +import { ValidateListingPublish } from '../../decorators/validate-listing-publish.decorator'; +import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; export class ListingUpdate extends OmitType(Listing, [ // fields get their type changed - 'listingMultiselectQuestions', - 'units', - 'unitGroups', 'applicationMethods', 'assets', - 'unitsSummary', + 'listingEvents', + 'listingFeatures', 'listingImages', - 'listingsResult', - 'listingsApplicationPickUpAddress', - 'listingsApplicationMailingAddress', + 'listingMultiselectQuestions', + 'listingNeighborhoodAmenities', + 'listingsAccessibleMarketingFlyerFile', 'listingsApplicationDropOffAddress', - 'listingsLeasingAgentAddress', + 'listingsApplicationMailingAddress', + 'listingsApplicationPickUpAddress', 'listingsBuildingAddress', 'listingsBuildingSelectionCriteriaFile', + 'listingsLeasingAgentAddress', 'listingsMarketingFlyerFile', - 'listingsAccessibleMarketingFlyerFile', - 'listingEvents', - 'listingFeatures', + 'listingsResult', 'listingUtilities', 'requestedChangesUser', + 'unitGroups', + 'units', + 'unitsSummary', // fields removed entirely + 'afsLastRunAt', + 'applicationConfig', + 'applicationLotteryTotals', + 'closedAt', 'createdAt', - 'updatedAt', - 'referralApplication', 'publishedAt', + 'referralApplication', 'showWaitlist', - 'unitsSummarized', 'unitGroupsSummarized', - 'closedAt', - 'afsLastRunAt', + 'unitsSummarized', + 'updatedAt', 'urlSlug', - 'applicationConfig', - 'applicationLotteryTotals', ]) { @Expose() @ValidateListingPublish('listingMultiselectQuestions', { @@ -77,10 +79,10 @@ export class ListingUpdate extends OmitType(Listing, [ groups: [ValidationsGroupsEnum.default], }) @ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true }) - @Type(() => UnitCreate) + @Type(() => UnitUpdate) @ArrayMaxSize(256, { groups: [ValidationsGroupsEnum.default] }) - @ApiPropertyOptional({ type: UnitCreate, isArray: true }) - units?: UnitCreate[]; + @ApiPropertyOptional({ type: UnitUpdate, isArray: true }) + units?: UnitUpdate[]; @Expose() @ValidateAtLeastOneUnit({ @@ -90,21 +92,21 @@ export class ListingUpdate extends OmitType(Listing, [ groups: [ValidationsGroupsEnum.default], }) @ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true }) - @Type(() => UnitGroupCreate) - @ApiPropertyOptional({ type: UnitGroupCreate, isArray: true }) - unitGroups?: UnitGroupCreate[]; + @Type(() => UnitGroupUpdate) + @ApiPropertyOptional({ type: UnitGroupUpdate, isArray: true }) + unitGroups?: UnitGroupUpdate[]; @Expose() @ValidateListingPublish('applicationMethods', { groups: [ValidationsGroupsEnum.default], }) @ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true }) - @Type(() => ApplicationMethodCreate) + @Type(() => ApplicationMethodUpdate) @ApiPropertyOptional({ - type: ApplicationMethodCreate, + type: ApplicationMethodUpdate, isArray: true, }) - applicationMethods?: ApplicationMethodCreate[]; + applicationMethods?: ApplicationMethodUpdate[]; @Expose() @ValidateListingPublish('assets', { @@ -139,45 +141,45 @@ export class ListingUpdate extends OmitType(Listing, [ groups: [ValidationsGroupsEnum.default], }) @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) - @Type(() => AddressCreate) - @ApiPropertyOptional({ type: AddressCreate }) - listingsApplicationPickUpAddress?: AddressCreate; + @Type(() => AddressUpdate) + @ApiPropertyOptional({ type: AddressUpdate }) + listingsApplicationPickUpAddress?: AddressUpdate; @Expose() @ValidateListingPublish('listingsApplicationMailingAddress', { groups: [ValidationsGroupsEnum.default], }) @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) - @Type(() => AddressCreate) - @ApiPropertyOptional({ type: AddressCreate }) - listingsApplicationMailingAddress?: AddressCreate; + @Type(() => AddressUpdate) + @ApiPropertyOptional({ type: AddressUpdate }) + listingsApplicationMailingAddress?: AddressUpdate; @Expose() @ValidateListingPublish('listingsApplicationDropOffAddress', { groups: [ValidationsGroupsEnum.default], }) @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) - @Type(() => AddressCreate) - @ApiPropertyOptional({ type: AddressCreate }) - listingsApplicationDropOffAddress?: AddressCreate; + @Type(() => AddressUpdate) + @ApiPropertyOptional({ type: AddressUpdate }) + listingsApplicationDropOffAddress?: AddressUpdate; @Expose() @ValidateListingPublish('listingsLeasingAgentAddress', { groups: [ValidationsGroupsEnum.default], }) @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) - @Type(() => AddressCreate) - @ApiPropertyOptional({ type: AddressCreate }) - listingsLeasingAgentAddress?: AddressCreate; + @Type(() => AddressUpdate) + @ApiPropertyOptional({ type: AddressUpdate }) + listingsLeasingAgentAddress?: AddressUpdate; @Expose() @ValidateListingPublish('listingsBuildingAddress', { groups: [ValidationsGroupsEnum.default], }) @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) - @Type(() => AddressCreate) - @ApiPropertyOptional({ type: AddressCreate }) - listingsBuildingAddress?: AddressCreate; + @Type(() => AddressUpdate) + @ApiPropertyOptional({ type: AddressUpdate }) + listingsBuildingAddress?: AddressUpdate; @Expose() @ValidateListingPublish('listingsBuildingSelectionCriteriaFile', { @@ -220,27 +222,27 @@ export class ListingUpdate extends OmitType(Listing, [ groups: [ValidationsGroupsEnum.default], }) @ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true }) - @Type(() => ListingEventCreate) - @ApiProperty({ type: ListingEventCreate, isArray: true }) - listingEvents: ListingEventCreate[]; + @Type(() => ListingEventUpdate) + @ApiProperty({ type: ListingEventUpdate, isArray: true }) + listingEvents: ListingEventUpdate[]; @Expose() @ValidateListingPublish('listingFeatures', { groups: [ValidationsGroupsEnum.default], }) @ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true }) - @Type(() => ListingFeatures) - @ApiPropertyOptional({ type: ListingFeatures }) - listingFeatures?: ListingFeatures; + @Type(() => ListingFeaturesUpdate) + @ApiPropertyOptional({ type: ListingFeaturesUpdate }) + listingFeatures?: ListingFeaturesUpdate; @Expose() @ValidateListingPublish('listingUtilities', { groups: [ValidationsGroupsEnum.default], }) @ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true }) - @Type(() => ListingUtilities) - @ApiPropertyOptional({ type: ListingUtilities }) - listingUtilities?: ListingUtilities; + @Type(() => ListingUtilitiesUpdate) + @ApiPropertyOptional({ type: ListingUtilitiesUpdate }) + listingUtilities?: ListingUtilitiesUpdate; @Expose() @ApiPropertyOptional() @@ -250,4 +252,13 @@ export class ListingUpdate extends OmitType(Listing, [ @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) @Type(() => IdDTO) requestedChangesUser?: IdDTO; + + @Expose() + @ValidateListingPublish('listingNeighborhoodAmenities', { + groups: [ValidationsGroupsEnum.default], + }) + @ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true }) + @Type(() => ListingNeighborhoodAmenitiesUpdate) + @ApiPropertyOptional({ type: ListingNeighborhoodAmenitiesUpdate }) + listingNeighborhoodAmenities?: ListingNeighborhoodAmenitiesUpdate; } diff --git a/api/src/dtos/listings/listing-utiliity-create.dto.ts b/api/src/dtos/listings/listing-utiliity-create.dto.ts new file mode 100644 index 0000000000..72c84e92d6 --- /dev/null +++ b/api/src/dtos/listings/listing-utiliity-create.dto.ts @@ -0,0 +1,6 @@ +import { ListingUtilitiesUpdate } from './listing-utility-update.dto'; +import { OmitType } from '@nestjs/swagger'; + +export class ListingUtilitiesCreate extends OmitType(ListingUtilitiesUpdate, [ + 'id', +]) {} diff --git a/api/src/dtos/listings/listing-utility-update.dto.ts b/api/src/dtos/listings/listing-utility-update.dto.ts new file mode 100644 index 0000000000..bbd36afbfe --- /dev/null +++ b/api/src/dtos/listings/listing-utility-update.dto.ts @@ -0,0 +1,17 @@ +import { ApiPropertyOptional, OmitType } from '@nestjs/swagger'; +import { Expose } from 'class-transformer'; +import { IsString, IsUUID } from 'class-validator'; +import { ListingUtilities } from './listing-utility.dto'; +import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; + +export class ListingUtilitiesUpdate extends OmitType(ListingUtilities, [ + 'createdAt', + 'id', + 'updatedAt', +]) { + @Expose() + @IsString({ groups: [ValidationsGroupsEnum.default] }) + @IsUUID(4, { groups: [ValidationsGroupsEnum.default] }) + @ApiPropertyOptional() + id?: string; +} diff --git a/api/src/dtos/listings/listing-utility.dto.ts b/api/src/dtos/listings/listing-utility.dto.ts index 714938cd01..239dce2636 100644 --- a/api/src/dtos/listings/listing-utility.dto.ts +++ b/api/src/dtos/listings/listing-utility.dto.ts @@ -1,9 +1,10 @@ +import { AbstractDTO } from '../shared/abstract.dto'; import { ApiPropertyOptional } from '@nestjs/swagger'; import { Expose } from 'class-transformer'; import { IsBoolean } from 'class-validator'; import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; -export class ListingUtilities { +export class ListingUtilities extends AbstractDTO { @Expose() @IsBoolean({ groups: [ValidationsGroupsEnum.default] }) @ApiPropertyOptional() diff --git a/api/src/dtos/paper-applications/paper-application-create.dto.ts b/api/src/dtos/paper-applications/paper-application-create.dto.ts index babc6ff015..6c81fa651e 100644 --- a/api/src/dtos/paper-applications/paper-application-create.dto.ts +++ b/api/src/dtos/paper-applications/paper-application-create.dto.ts @@ -1,15 +1,13 @@ import { ApiPropertyOptional, OmitType } from '@nestjs/swagger'; +import { AssetCreate } from '../assets/asset-create.dto'; import { Expose, Type } from 'class-transformer'; +import { PaperApplicationUpdate } from './paper-application-update.dto'; import { ValidateNested } from 'class-validator'; import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; -import { PaperApplication } from './paper-application.dto'; -import { AssetCreate } from '../assets/asset-create.dto'; -export class PaperApplicationCreate extends OmitType(PaperApplication, [ - 'id', - 'createdAt', - 'updatedAt', +export class PaperApplicationCreate extends OmitType(PaperApplicationUpdate, [ 'assets', + 'id', ]) { @Expose() @ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true }) diff --git a/api/src/dtos/paper-applications/paper-application-update.dto.ts b/api/src/dtos/paper-applications/paper-application-update.dto.ts new file mode 100644 index 0000000000..e1f9f94804 --- /dev/null +++ b/api/src/dtos/paper-applications/paper-application-update.dto.ts @@ -0,0 +1,25 @@ +import { ApiPropertyOptional, OmitType } from '@nestjs/swagger'; +import { AssetCreate } from '../assets/asset-create.dto'; +import { Expose, Type } from 'class-transformer'; +import { IsString, IsUUID, ValidateNested } from 'class-validator'; +import { PaperApplication } from './paper-application.dto'; +import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; + +export class PaperApplicationUpdate extends OmitType(PaperApplication, [ + 'assets', + 'createdAt', + 'id', + 'updatedAt', +]) { + @Expose() + @IsString({ groups: [ValidationsGroupsEnum.default] }) + @IsUUID(4, { groups: [ValidationsGroupsEnum.default] }) + @ApiPropertyOptional() + id?: string; + + @Expose() + @ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true }) + @Type(() => AssetCreate) + @ApiPropertyOptional({ type: AssetCreate }) + assets?: AssetCreate; +} diff --git a/api/src/dtos/unit-groups/unit-group-ami-level-create.dto.ts b/api/src/dtos/unit-groups/unit-group-ami-level-create.dto.ts index 9071bf6fc3..ba88f5014e 100644 --- a/api/src/dtos/unit-groups/unit-group-ami-level-create.dto.ts +++ b/api/src/dtos/unit-groups/unit-group-ami-level-create.dto.ts @@ -1,19 +1,6 @@ -import { ApiPropertyOptional, OmitType } from '@nestjs/swagger'; -import { Expose, Type } from 'class-transformer'; -import { ValidateNested } from 'class-validator'; -import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; -import { IdDTO } from '../shared/id.dto'; -import { UnitGroupAmiLevel } from './unit-group-ami-level.dto'; +import { OmitType } from '@nestjs/swagger'; +import { UnitGroupAmiLevelUpdate } from './unit-group-ami-level-update.dto'; -export class UnitGroupAmiLevelCreate extends OmitType(UnitGroupAmiLevel, [ +export class UnitGroupAmiLevelCreate extends OmitType(UnitGroupAmiLevelUpdate, [ 'id', - 'createdAt', - 'updatedAt', - 'amiChart', -]) { - @Expose() - @Type(() => IdDTO) - @ApiPropertyOptional({ type: IdDTO }) - @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) - amiChart?: IdDTO; -} +]) {} diff --git a/api/src/dtos/unit-groups/unit-group-ami-level-update.dto.ts b/api/src/dtos/unit-groups/unit-group-ami-level-update.dto.ts new file mode 100644 index 0000000000..18c228d70e --- /dev/null +++ b/api/src/dtos/unit-groups/unit-group-ami-level-update.dto.ts @@ -0,0 +1,25 @@ +import { ApiPropertyOptional, OmitType } from '@nestjs/swagger'; +import { Expose, Type } from 'class-transformer'; +import { IdDTO } from '../shared/id.dto'; +import { IsString, IsUUID, ValidateNested } from 'class-validator'; +import { UnitGroupAmiLevel } from './unit-group-ami-level.dto'; +import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; + +export class UnitGroupAmiLevelUpdate extends OmitType(UnitGroupAmiLevel, [ + 'amiChart', + 'createdAt', + 'id', + 'updatedAt', +]) { + @Expose() + @IsString({ groups: [ValidationsGroupsEnum.default] }) + @IsUUID(4, { groups: [ValidationsGroupsEnum.default] }) + @ApiPropertyOptional() + id?: string; + + @Expose() + @Type(() => IdDTO) + @ApiPropertyOptional({ type: IdDTO }) + @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) + amiChart?: IdDTO; +} diff --git a/api/src/dtos/unit-groups/unit-group-create.dto.ts b/api/src/dtos/unit-groups/unit-group-create.dto.ts index 49e59c7462..1e70698175 100644 --- a/api/src/dtos/unit-groups/unit-group-create.dto.ts +++ b/api/src/dtos/unit-groups/unit-group-create.dto.ts @@ -1,31 +1,14 @@ import { ApiPropertyOptional, OmitType } from '@nestjs/swagger'; import { Expose, Type } from 'class-transformer'; +import { UnitGroupAmiLevelCreate } from './unit-group-ami-level-create.dto'; +import { UnitGroupUpdate } from './unit-group-update.dto'; import { ValidateNested } from 'class-validator'; import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; -import { IdDTO } from '../shared/id.dto'; -import UnitGroup from './unit-group.dto'; -import { UnitGroupAmiLevelCreate } from './unit-group-ami-level-create.dto'; -export class UnitGroupCreate extends OmitType(UnitGroup, [ +export class UnitGroupCreate extends OmitType(UnitGroupUpdate, [ 'id', - 'createdAt', - 'updatedAt', - 'unitAccessibilityPriorityTypes', - 'unitTypes', 'unitGroupAmiLevels', ]) { - @Expose() - @Type(() => IdDTO) - @ApiPropertyOptional({ type: IdDTO }) - @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) - unitAccessibilityPriorityTypes?: IdDTO; - - @Expose() - @Type(() => IdDTO) - @ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true }) - @ApiPropertyOptional({ type: [IdDTO] }) - unitTypes?: IdDTO[]; - @Expose() @Type(() => UnitGroupAmiLevelCreate) @ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true }) diff --git a/api/src/dtos/unit-groups/unit-group-update.dto.ts b/api/src/dtos/unit-groups/unit-group-update.dto.ts new file mode 100644 index 0000000000..aa9b191434 --- /dev/null +++ b/api/src/dtos/unit-groups/unit-group-update.dto.ts @@ -0,0 +1,40 @@ +import { ApiPropertyOptional, OmitType } from '@nestjs/swagger'; +import { Expose, Type } from 'class-transformer'; +import { IdDTO } from '../shared/id.dto'; +import { IsString, IsUUID, ValidateNested } from 'class-validator'; +import { UnitGroupAmiLevelUpdate } from './unit-group-ami-level-update.dto'; +import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; +import UnitGroup from './unit-group.dto'; + +export class UnitGroupUpdate extends OmitType(UnitGroup, [ + 'createdAt', + 'id', + 'unitAccessibilityPriorityTypes', + 'unitGroupAmiLevels', + 'unitTypes', + 'updatedAt', +]) { + @Expose() + @IsString({ groups: [ValidationsGroupsEnum.default] }) + @IsUUID(4, { groups: [ValidationsGroupsEnum.default] }) + @ApiPropertyOptional() + id?: string; + + @Expose() + @Type(() => IdDTO) + @ApiPropertyOptional({ type: IdDTO }) + @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) + unitAccessibilityPriorityTypes?: IdDTO; + + @Expose() + @Type(() => IdDTO) + @ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true }) + @ApiPropertyOptional({ type: [IdDTO] }) + unitTypes?: IdDTO[]; + + @Expose() + @Type(() => UnitGroupAmiLevelUpdate) + @ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true }) + @ApiPropertyOptional({ type: [UnitGroupAmiLevelUpdate] }) + unitGroupAmiLevels?: UnitGroupAmiLevelUpdate[]; +} diff --git a/api/src/dtos/units/ami-chart-override-create.dto.ts b/api/src/dtos/units/ami-chart-override-create.dto.ts index 890e883c1d..b129887770 100644 --- a/api/src/dtos/units/ami-chart-override-create.dto.ts +++ b/api/src/dtos/units/ami-chart-override-create.dto.ts @@ -1,8 +1,7 @@ import { OmitType } from '@nestjs/swagger'; -import { UnitAmiChartOverride } from './ami-chart-override.dto'; +import { UnitAmiChartOverrideUpdate } from './ami-chart-override-update.dto'; -export class UnitAmiChartOverrideCreate extends OmitType(UnitAmiChartOverride, [ - 'id', - 'createdAt', - 'updatedAt', -]) {} +export class UnitAmiChartOverrideCreate extends OmitType( + UnitAmiChartOverrideUpdate, + ['id'], +) {} diff --git a/api/src/dtos/units/ami-chart-override-update.dto.ts b/api/src/dtos/units/ami-chart-override-update.dto.ts new file mode 100644 index 0000000000..8620ab732f --- /dev/null +++ b/api/src/dtos/units/ami-chart-override-update.dto.ts @@ -0,0 +1,17 @@ +import { ApiPropertyOptional, OmitType } from '@nestjs/swagger'; +import { Expose } from 'class-transformer'; +import { IsString, IsUUID } from 'class-validator'; +import { UnitAmiChartOverride } from './ami-chart-override.dto'; +import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; + +export class UnitAmiChartOverrideUpdate extends OmitType(UnitAmiChartOverride, [ + 'createdAt', + 'id', + 'updatedAt', +]) { + @Expose() + @IsString({ groups: [ValidationsGroupsEnum.default] }) + @IsUUID(4, { groups: [ValidationsGroupsEnum.default] }) + @ApiPropertyOptional() + id?: string; +} diff --git a/api/src/dtos/units/unit-create.dto.ts b/api/src/dtos/units/unit-create.dto.ts index f8489d15e8..a6f5fba3df 100644 --- a/api/src/dtos/units/unit-create.dto.ts +++ b/api/src/dtos/units/unit-create.dto.ts @@ -1,45 +1,14 @@ import { ApiPropertyOptional, OmitType } from '@nestjs/swagger'; import { Expose, Type } from 'class-transformer'; +import { UnitAmiChartOverrideCreate } from './ami-chart-override-create.dto'; +import { UnitUpdate } from './unit-update.dto'; import { ValidateNested } from 'class-validator'; import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; -import { IdDTO } from '../shared/id.dto'; -import { Unit } from './unit.dto'; -import { UnitAmiChartOverrideCreate } from './ami-chart-override-create.dto'; -export class UnitCreate extends OmitType(Unit, [ +export class UnitCreate extends OmitType(UnitUpdate, [ 'id', - 'createdAt', - 'updatedAt', - 'amiChart', - 'unitTypes', - 'unitAccessibilityPriorityTypes', - 'unitRentTypes', 'unitAmiChartOverrides', ]) { - @Expose() - @Type(() => IdDTO) - @ApiPropertyOptional({ type: IdDTO }) - @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) - unitTypes?: IdDTO; - - @Expose() - @Type(() => IdDTO) - @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) - @ApiPropertyOptional({ type: IdDTO }) - amiChart?: IdDTO; - - @Expose() - @Type(() => IdDTO) - @ApiPropertyOptional({ type: IdDTO }) - @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) - unitAccessibilityPriorityTypes?: IdDTO; - - @Expose() - @Type(() => IdDTO) - @ApiPropertyOptional({ type: IdDTO }) - @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) - unitRentTypes?: IdDTO; - @Expose() @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) @Type(() => UnitAmiChartOverrideCreate) diff --git a/api/src/dtos/units/unit-update.dto.ts b/api/src/dtos/units/unit-update.dto.ts new file mode 100644 index 0000000000..ce825bcb2b --- /dev/null +++ b/api/src/dtos/units/unit-update.dto.ts @@ -0,0 +1,54 @@ +import { ApiPropertyOptional, OmitType } from '@nestjs/swagger'; +import { Expose, Type } from 'class-transformer'; +import { IdDTO } from '../shared/id.dto'; +import { IsString, IsUUID, ValidateNested } from 'class-validator'; +import { Unit } from './unit.dto'; +import { UnitAmiChartOverrideUpdate } from './ami-chart-override-update.dto'; +import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum'; + +export class UnitUpdate extends OmitType(Unit, [ + 'amiChart', + 'createdAt', + 'id', + 'unitAccessibilityPriorityTypes', + 'unitAmiChartOverrides', + 'unitRentTypes', + 'unitTypes', + 'updatedAt', +]) { + @Expose() + @IsString({ groups: [ValidationsGroupsEnum.default] }) + @IsUUID(4, { groups: [ValidationsGroupsEnum.default] }) + @ApiPropertyOptional() + id?: string; + + @Expose() + @Type(() => IdDTO) + @ApiPropertyOptional({ type: IdDTO }) + @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) + unitTypes?: IdDTO; + + @Expose() + @Type(() => IdDTO) + @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) + @ApiPropertyOptional({ type: IdDTO }) + amiChart?: IdDTO; + + @Expose() + @Type(() => IdDTO) + @ApiPropertyOptional({ type: IdDTO }) + @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) + unitAccessibilityPriorityTypes?: IdDTO; + + @Expose() + @Type(() => IdDTO) + @ApiPropertyOptional({ type: IdDTO }) + @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) + unitRentTypes?: IdDTO; + + @Expose() + @ValidateNested({ groups: [ValidationsGroupsEnum.default] }) + @Type(() => UnitAmiChartOverrideUpdate) + @ApiPropertyOptional({ type: UnitAmiChartOverrideUpdate }) + unitAmiChartOverrides?: UnitAmiChartOverrideUpdate; +} diff --git a/shared-helpers/src/types/backend-swagger.ts b/shared-helpers/src/types/backend-swagger.ts index de89dfbf3d..a09ce22735 100644 --- a/shared-helpers/src/types/backend-swagger.ts +++ b/shared-helpers/src/types/backend-swagger.ts @@ -3478,6 +3478,15 @@ export interface ListingImage { } export interface ListingFeatures { + /** */ + id: string + + /** */ + createdAt: Date + + /** */ + updatedAt: Date + /** */ elevator?: boolean @@ -3540,6 +3549,15 @@ export interface ListingFeatures { } export interface ListingUtilities { + /** */ + id: string + + /** */ + createdAt: Date + + /** */ + updatedAt: Date + /** */ water?: boolean @@ -4070,6 +4088,15 @@ export interface ApplicationLotteryTotal { } export interface ListingNeighborhoodAmenities { + /** */ + id: string + + /** */ + createdAt: Date + + /** */ + updatedAt: Date + /** */ groceryStores?: string @@ -4526,6 +4553,152 @@ export interface ListingMapMarker { lng: number } +export interface AssetCreate { + /** */ + fileId: string + + /** */ + label: string + + /** */ + id?: string +} + +export interface UnitsSummaryCreate { + /** */ + unitTypes: IdDTO + + /** */ + monthlyRentMin?: number + + /** */ + monthlyRentMax?: number + + /** */ + monthlyRentAsPercentOfIncome?: string + + /** */ + amiPercentage?: number + + /** */ + minimumIncomeMin?: string + + /** */ + minimumIncomeMax?: string + + /** */ + maxOccupancy?: number + + /** */ + minOccupancy?: number + + /** */ + floorMin?: number + + /** */ + floorMax?: number + + /** */ + sqFeetMin?: string + + /** */ + sqFeetMax?: string + + /** */ + unitAccessibilityPriorityTypes?: IdDTO + + /** */ + totalCount?: number + + /** */ + totalAvailable?: number + + /** */ + rentType?: RentTypeEnum + + /** */ + flatRentValueFrom?: number + + /** */ + flatRentValueTo?: number + + /** */ + monthlyRent?: number +} + +export interface ListingImageCreate { + /** */ + ordinal?: number + + /** */ + assets: AssetCreate + + /** */ + description?: string +} + +export interface ListingFeaturesCreate { + /** */ + elevator?: boolean + + /** */ + wheelchairRamp?: boolean + + /** */ + serviceAnimalsAllowed?: boolean + + /** */ + accessibleParking?: boolean + + /** */ + parkingOnSite?: boolean + + /** */ + inUnitWasherDryer?: boolean + + /** */ + laundryInBuilding?: boolean + + /** */ + barrierFreeEntrance?: boolean + + /** */ + rollInShower?: boolean + + /** */ + grabBars?: boolean + + /** */ + heatingInUnit?: boolean + + /** */ + acInUnit?: boolean + + /** */ + hearing?: boolean + + /** */ + visual?: boolean + + /** */ + mobility?: boolean + + /** */ + barrierFreeUnitEntrance?: boolean + + /** */ + loweredLightSwitch?: boolean + + /** */ + barrierFreeBathroom?: boolean + + /** */ + wideDoorways?: boolean + + /** */ + loweredCabinets?: boolean +} + export interface UnitAmiChartOverrideCreate { /** */ items: AmiChartItem[] @@ -4663,17 +4836,6 @@ export interface UnitGroupCreate { unitGroupAmiLevels?: UnitGroupAmiLevelCreate[] } -export interface AssetCreate { - /** */ - fileId: string - - /** */ - label: string - - /** */ - id?: string -} - export interface PaperApplicationCreate { /** */ language: LanguagesEnum @@ -4702,487 +4864,857 @@ export interface ApplicationMethodCreate { paperApplications?: PaperApplicationCreate[] } -export interface UnitsSummaryCreate { +export interface AddressCreate { /** */ - unitTypes: IdDTO + placeName?: string /** */ - monthlyRentMin?: number + city: string /** */ - monthlyRentMax?: number + county?: string /** */ - monthlyRentAsPercentOfIncome?: string + state: string /** */ - amiPercentage?: number + street: string /** */ - minimumIncomeMin?: string + street2?: string /** */ - minimumIncomeMax?: string + zipCode: string /** */ - maxOccupancy?: number + latitude?: number /** */ - minOccupancy?: number + longitude?: number +} +export interface ListingEventCreate { /** */ - floorMin?: number + type: ListingEventsTypeEnum /** */ - floorMax?: number + startDate?: Date /** */ - sqFeetMin?: string + startTime?: Date /** */ - sqFeetMax?: string + endTime?: Date /** */ - unitAccessibilityPriorityTypes?: IdDTO + url?: string /** */ - totalCount?: number + note?: string /** */ - totalAvailable?: number + label?: string /** */ - rentType?: RentTypeEnum + assets?: AssetCreate +} +export interface ListingUtilitiesCreate { /** */ - flatRentValueFrom?: number + water?: boolean /** */ - flatRentValueTo?: number + gas?: boolean /** */ - monthlyRent?: number -} + trash?: boolean -export interface ListingImageCreate { /** */ - ordinal?: number + sewer?: boolean /** */ - assets: AssetCreate + electricity?: boolean /** */ - description?: string -} + cable?: boolean -export interface AddressCreate { /** */ - placeName?: string + phone?: boolean /** */ - city: string + internet?: boolean +} +export interface ListingNeighborhoodAmenitiesCreate { /** */ - county?: string + groceryStores?: string /** */ - state: string + publicTransportation?: string /** */ - street: string + schools?: string /** */ - street2?: string + parksAndCommunityCenters?: string /** */ - zipCode: string + pharmacies?: string /** */ - latitude?: number + healthCareResources?: string /** */ - longitude?: number + shoppingVenues?: string + + /** */ + hospitals?: string + + /** */ + seniorCenters?: string + + /** */ + recreationalFacilities?: string + + /** */ + playgrounds?: string + + /** */ + busStops?: string } -export interface ListingEventCreate { +export interface ListingCreate { /** */ - type: ListingEventsTypeEnum + additionalApplicationSubmissionNotes?: string /** */ - startDate?: Date + digitalApplication?: boolean /** */ - startTime?: Date + commonDigitalApplication?: boolean /** */ - endTime?: Date + paperApplication?: boolean /** */ - url?: string + referralOpportunity?: boolean /** */ - note?: string + accessibility?: string /** */ - label?: string + amenities?: string /** */ - assets?: AssetCreate + buildingTotalUnits?: number + + /** */ + developer?: string + + /** */ + listingFileNumber?: string + + /** */ + householdSizeMax?: number + + /** */ + householdSizeMin?: number + + /** */ + neighborhood?: string + + /** */ + region?: RegionEnum + + /** */ + petPolicy?: string + + /** */ + smokingPolicy?: string + + /** */ + unitsAvailable?: number + + /** */ + unitAmenities?: string + + /** */ + servicesOffered?: string + + /** */ + yearBuilt?: number + + /** */ + applicationDueDate?: Date + + /** */ + applicationOpenDate?: Date + + /** */ + applicationFee?: string + + /** */ + creditScreeningFee?: string + + /** */ + applicationOrganization?: string + + /** */ + applicationPickUpAddressOfficeHours?: string + + /** */ + applicationPickUpAddressType?: ApplicationAddressTypeEnum + + /** */ + applicationDropOffAddressOfficeHours?: string + + /** */ + applicationDropOffAddressType?: ApplicationAddressTypeEnum + + /** */ + applicationMailingAddressType?: ApplicationAddressTypeEnum + + /** */ + buildingSelectionCriteria?: string + + /** */ + marketingFlyer?: string + + /** */ + accessibleMarketingFlyer?: string + + /** */ + cocInfo?: string + + /** */ + costsNotIncluded?: string + + /** */ + creditHistory?: string + + /** */ + criminalBackground?: string + + /** */ + depositMin?: string + + /** */ + depositMax?: string + + /** */ + depositType?: EnumListingCreateDepositType + + /** */ + depositValue?: number + + /** */ + depositHelperText?: string + + /** */ + disableUnitsAccordion?: boolean + + /** */ + hasHudEbllClearance?: boolean + + /** */ + leasingAgentEmail?: string + + /** */ + leasingAgentName?: string + + /** */ + leasingAgentOfficeHours?: string + + /** */ + leasingAgentPhone?: string + + /** */ + leasingAgentTitle?: string + + /** */ + listingType?: EnumListingCreateListingType + + /** */ + managementWebsite?: string + + /** */ + name: string + + /** */ + postmarkedApplicationsReceivedByDate?: Date + + /** */ + programRules?: string + + /** */ + rentalAssistance?: string + + /** */ + rentalHistory?: string + + /** */ + requiredDocuments?: string + + /** */ + requiredDocumentsList?: ListingDocuments + + /** */ + specialNotes?: string + + /** */ + waitlistCurrentSize?: number + + /** */ + waitlistMaxSize?: number + + /** */ + whatToExpect?: string + + /** */ + whatToExpectAdditionalText?: string + + /** */ + status: ListingsStatusEnum + + /** */ + reviewOrderType?: ReviewOrderTypeEnum + + /** */ + displayWaitlistSize: boolean + + /** */ + reservedCommunityDescription?: string + + /** */ + reservedCommunityMinAge?: number + + /** */ + resultLink?: string + + /** */ + isWaitlistOpen?: boolean + + /** */ + waitlistOpenSpots?: number + + /** */ + customMapPin?: boolean + + /** */ + contentUpdatedAt?: Date + + /** */ + lotteryLastPublishedAt?: Date + + /** */ + lotteryLastRunAt?: Date + + /** */ + lotteryStatus?: LotteryStatusEnum + + /** */ + lastApplicationUpdateAt?: Date + + /** */ + jurisdictions: IdDTO + + /** */ + reservedCommunityTypes?: IdDTO + + /** */ + requestedChanges?: string + + /** */ + requestedChangesDate?: Date + + /** */ + lotteryOptIn?: boolean + + /** */ + includeCommunityDisclaimer?: boolean + + /** */ + communityDisclaimerTitle?: string + + /** */ + communityDisclaimerDescription?: string + + /** */ + marketingType?: MarketingTypeEnum + + /** */ + marketingYear?: number + + /** */ + marketingSeason?: MarketingSeasonEnum + + /** */ + marketingMonth?: MonthEnum + + /** */ + homeType?: HomeTypeEnum + + /** */ + isVerified?: boolean + + /** */ + section8Acceptance?: boolean + + /** */ + lastUpdatedByUser?: IdDTO + + /** */ + listingMultiselectQuestions?: IdDTO[] + + /** */ + assets?: AssetCreate[] + + /** */ + unitsSummary: UnitsSummaryCreate[] + + /** */ + listingImages?: ListingImageCreate[] + + /** */ + listingsBuildingSelectionCriteriaFile?: AssetCreate + + /** */ + listingsMarketingFlyerFile?: AssetCreate + + /** */ + listingsAccessibleMarketingFlyerFile?: AssetCreate + + /** */ + listingsResult?: AssetCreate + + /** */ + listingFeatures?: ListingFeaturesCreate + + /** */ + requestedChangesUser?: IdDTO + + /** */ + units?: UnitCreate[] + + /** */ + unitGroups?: UnitGroupCreate[] + + /** */ + applicationMethods?: ApplicationMethodCreate[] + + /** */ + listingsApplicationPickUpAddress?: AddressCreate + + /** */ + listingsApplicationMailingAddress?: AddressCreate + + /** */ + listingsApplicationDropOffAddress?: AddressCreate + + /** */ + listingsLeasingAgentAddress?: AddressCreate + + /** */ + listingsBuildingAddress?: AddressCreate + + /** */ + listingEvents: ListingEventCreate[] + + /** */ + listingUtilities?: ListingUtilitiesCreate + + /** */ + listingNeighborhoodAmenities?: ListingNeighborhoodAmenitiesCreate } -export interface ListingCreate { +export interface ListingDuplicate { /** */ - additionalApplicationSubmissionNotes?: string + name: string /** */ - digitalApplication?: boolean + includeUnits: boolean + + /** */ + storedListing: IdDTO +} + +export interface UnitAmiChartOverrideUpdate { + /** */ + items: AmiChartItem[] + + /** */ + id?: string +} + +export interface UnitUpdate { + /** */ + amiPercentage?: string + + /** */ + annualIncomeMin?: string /** */ - commonDigitalApplication?: boolean + monthlyIncomeMin?: string /** */ - paperApplication?: boolean + floor?: number /** */ - referralOpportunity?: boolean + annualIncomeMax?: string /** */ - accessibility?: string + maxOccupancy?: number /** */ - amenities?: string + minOccupancy?: number /** */ - buildingTotalUnits?: number + monthlyRent?: string /** */ - developer?: string + numBathrooms?: number /** */ - listingFileNumber?: string + numBedrooms?: number /** */ - householdSizeMax?: number + number?: string /** */ - householdSizeMin?: number + sqFeet?: string /** */ - neighborhood?: string + monthlyRentAsPercentOfIncome?: string /** */ - region?: RegionEnum + bmrProgramChart?: boolean /** */ - petPolicy?: string + id?: string /** */ - smokingPolicy?: string + unitTypes?: IdDTO /** */ - unitsAvailable?: number + amiChart?: IdDTO /** */ - unitAmenities?: string + unitAccessibilityPriorityTypes?: IdDTO /** */ - servicesOffered?: string + unitRentTypes?: IdDTO /** */ - yearBuilt?: number + unitAmiChartOverrides?: UnitAmiChartOverrideUpdate +} +export interface UnitGroupAmiLevelUpdate { /** */ - applicationDueDate?: Date + amiPercentage?: number /** */ - applicationOpenDate?: Date + monthlyRentDeterminationType?: EnumUnitGroupAmiLevelUpdateMonthlyRentDeterminationType /** */ - applicationFee?: string + percentageOfIncomeValue?: number /** */ - creditScreeningFee?: string + flatRentValue?: number /** */ - applicationOrganization?: string + id?: string /** */ - applicationPickUpAddressOfficeHours?: string + amiChart?: IdDTO +} +export interface UnitGroupUpdate { /** */ - applicationPickUpAddressType?: ApplicationAddressTypeEnum + maxOccupancy?: number /** */ - applicationDropOffAddressOfficeHours?: string + minOccupancy?: number /** */ - applicationDropOffAddressType?: ApplicationAddressTypeEnum + flatRentValueFrom?: number /** */ - applicationMailingAddressType?: ApplicationAddressTypeEnum + flatRentValueTo?: number /** */ - buildingSelectionCriteria?: string + monthlyRent?: number /** */ - marketingFlyer?: string + floorMin?: number /** */ - accessibleMarketingFlyer?: string + floorMax?: number /** */ - cocInfo?: string + totalCount?: number /** */ - costsNotIncluded?: string + totalAvailable?: number /** */ - creditHistory?: string + bathroomMin?: number /** */ - criminalBackground?: string + bathroomMax?: number /** */ - depositMin?: string + openWaitlist?: boolean /** */ - depositMax?: string + sqFeetMin?: number /** */ - depositType?: EnumListingCreateDepositType + sqFeetMax?: number /** */ - depositValue?: number + rentType?: RentTypeEnum /** */ - depositHelperText?: string + id?: string /** */ - disableUnitsAccordion?: boolean + unitAccessibilityPriorityTypes?: IdDTO /** */ - hasHudEbllClearance?: boolean + unitTypes?: IdDTO[] /** */ - leasingAgentEmail?: string + unitGroupAmiLevels?: UnitGroupAmiLevelUpdate[] +} +export interface PaperApplicationUpdate { /** */ - leasingAgentName?: string + language: LanguagesEnum /** */ - leasingAgentOfficeHours?: string + id?: string /** */ - leasingAgentPhone?: string + assets?: AssetCreate +} +export interface ApplicationMethodUpdate { /** */ - leasingAgentTitle?: string + type: ApplicationMethodsTypeEnum /** */ - listingType?: EnumListingCreateListingType + label?: string /** */ - managementWebsite?: string + externalReference?: string /** */ - name: string + acceptsPostmarkedApplications?: boolean /** */ - postmarkedApplicationsReceivedByDate?: Date + phoneNumber?: string /** */ - programRules?: string + id?: string /** */ - rentalAssistance?: string + paperApplications?: PaperApplicationUpdate[] +} +export interface AddressUpdate { /** */ - rentalHistory?: string + placeName?: string /** */ - requiredDocuments?: string + city: string /** */ - requiredDocumentsList?: ListingDocuments + county?: string /** */ - specialNotes?: string + state: string /** */ - waitlistCurrentSize?: number + street: string /** */ - waitlistMaxSize?: number + street2?: string /** */ - whatToExpect?: string + zipCode: string /** */ - whatToExpectAdditionalText?: string + latitude?: number /** */ - status: ListingsStatusEnum + longitude?: number /** */ - reviewOrderType?: ReviewOrderTypeEnum + id?: string +} +export interface ListingEventUpdate { /** */ - displayWaitlistSize: boolean + type: ListingEventsTypeEnum /** */ - reservedCommunityDescription?: string + startDate?: Date /** */ - reservedCommunityMinAge?: number + startTime?: Date /** */ - resultLink?: string + endTime?: Date /** */ - isWaitlistOpen?: boolean + url?: string /** */ - waitlistOpenSpots?: number + note?: string /** */ - customMapPin?: boolean + label?: string /** */ - contentUpdatedAt?: Date + assets?: AssetCreate /** */ - lotteryLastPublishedAt?: Date + id?: string +} +export interface ListingFeaturesUpdate { /** */ - lotteryLastRunAt?: Date + elevator?: boolean /** */ - lotteryStatus?: LotteryStatusEnum + wheelchairRamp?: boolean /** */ - lastApplicationUpdateAt?: Date + serviceAnimalsAllowed?: boolean /** */ - jurisdictions: IdDTO + accessibleParking?: boolean /** */ - reservedCommunityTypes?: IdDTO + parkingOnSite?: boolean /** */ - requestedChanges?: string + inUnitWasherDryer?: boolean /** */ - requestedChangesDate?: Date + laundryInBuilding?: boolean /** */ - lotteryOptIn?: boolean + barrierFreeEntrance?: boolean /** */ - includeCommunityDisclaimer?: boolean + rollInShower?: boolean /** */ - communityDisclaimerTitle?: string + grabBars?: boolean /** */ - communityDisclaimerDescription?: string + heatingInUnit?: boolean /** */ - marketingType?: MarketingTypeEnum + acInUnit?: boolean /** */ - marketingYear?: number + hearing?: boolean /** */ - marketingSeason?: MarketingSeasonEnum + visual?: boolean /** */ - marketingMonth?: MonthEnum + mobility?: boolean /** */ - homeType?: HomeTypeEnum + barrierFreeUnitEntrance?: boolean /** */ - isVerified?: boolean + loweredLightSwitch?: boolean /** */ - section8Acceptance?: boolean + barrierFreeBathroom?: boolean /** */ - listingNeighborhoodAmenities?: ListingNeighborhoodAmenities + wideDoorways?: boolean /** */ - lastUpdatedByUser?: IdDTO + loweredCabinets?: boolean /** */ - listingMultiselectQuestions?: IdDTO[] + id?: string +} +export interface ListingUtilitiesUpdate { /** */ - units?: UnitCreate[] + water?: boolean /** */ - unitGroups?: UnitGroupCreate[] + gas?: boolean /** */ - applicationMethods?: ApplicationMethodCreate[] + trash?: boolean /** */ - assets?: AssetCreate[] + sewer?: boolean /** */ - unitsSummary: UnitsSummaryCreate[] + electricity?: boolean /** */ - listingImages?: ListingImageCreate[] + cable?: boolean /** */ - listingsApplicationPickUpAddress?: AddressCreate + phone?: boolean /** */ - listingsApplicationMailingAddress?: AddressCreate + internet?: boolean /** */ - listingsApplicationDropOffAddress?: AddressCreate + id?: string +} +export interface ListingNeighborhoodAmenitiesUpdate { /** */ - listingsLeasingAgentAddress?: AddressCreate + groceryStores?: string /** */ - listingsBuildingAddress?: AddressCreate + publicTransportation?: string /** */ - listingsBuildingSelectionCriteriaFile?: AssetCreate + schools?: string /** */ - listingsMarketingFlyerFile?: AssetCreate + parksAndCommunityCenters?: string /** */ - listingsAccessibleMarketingFlyerFile?: AssetCreate + pharmacies?: string /** */ - listingsResult?: AssetCreate + healthCareResources?: string /** */ - listingEvents: ListingEventCreate[] + shoppingVenues?: string /** */ - listingFeatures?: ListingFeatures + hospitals?: string /** */ - listingUtilities?: ListingUtilities + seniorCenters?: string /** */ - requestedChangesUser?: IdDTO -} + recreationalFacilities?: string -export interface ListingDuplicate { /** */ - name: string + playgrounds?: string /** */ - includeUnits: boolean + busStops?: string /** */ - storedListing: IdDTO + id?: string } export interface ListingUpdate { @@ -5465,9 +5997,6 @@ export interface ListingUpdate { /** */ section8Acceptance?: boolean - /** */ - listingNeighborhoodAmenities?: ListingNeighborhoodAmenities - /** */ lastUpdatedByUser?: IdDTO @@ -5475,13 +6004,13 @@ export interface ListingUpdate { listingMultiselectQuestions?: IdDTO[] /** */ - units?: UnitCreate[] + units?: UnitUpdate[] /** */ - unitGroups?: UnitGroupCreate[] + unitGroups?: UnitGroupUpdate[] /** */ - applicationMethods?: ApplicationMethodCreate[] + applicationMethods?: ApplicationMethodUpdate[] /** */ assets?: AssetCreate[] @@ -5493,19 +6022,19 @@ export interface ListingUpdate { listingImages?: ListingImageCreate[] /** */ - listingsApplicationPickUpAddress?: AddressCreate + listingsApplicationPickUpAddress?: AddressUpdate /** */ - listingsApplicationMailingAddress?: AddressCreate + listingsApplicationMailingAddress?: AddressUpdate /** */ - listingsApplicationDropOffAddress?: AddressCreate + listingsApplicationDropOffAddress?: AddressUpdate /** */ - listingsLeasingAgentAddress?: AddressCreate + listingsLeasingAgentAddress?: AddressUpdate /** */ - listingsBuildingAddress?: AddressCreate + listingsBuildingAddress?: AddressUpdate /** */ listingsBuildingSelectionCriteriaFile?: AssetCreate @@ -5520,16 +6049,19 @@ export interface ListingUpdate { listingsResult?: AssetCreate /** */ - listingEvents: ListingEventCreate[] + listingEvents: ListingEventUpdate[] /** */ - listingFeatures?: ListingFeatures + listingFeatures?: ListingFeaturesUpdate /** */ - listingUtilities?: ListingUtilities + listingUtilities?: ListingUtilitiesUpdate /** */ requestedChangesUser?: IdDTO + + /** */ + listingNeighborhoodAmenities?: ListingNeighborhoodAmenitiesUpdate } export interface Accessibility { @@ -7906,6 +8438,10 @@ export enum EnumListingCreateListingType { "regulated" = "regulated", "nonRegulated" = "nonRegulated", } +export enum EnumUnitGroupAmiLevelUpdateMonthlyRentDeterminationType { + "flatRent" = "flatRent", + "percentageOfIncome" = "percentageOfIncome", +} export enum EnumListingUpdateDepositType { "fixedDeposit" = "fixedDeposit", "depositRange" = "depositRange", diff --git a/sites/partners/src/components/listings/PaperListingForm/index.tsx b/sites/partners/src/components/listings/PaperListingForm/index.tsx index f6ee50e60e..7ed8bbccc3 100644 --- a/sites/partners/src/components/listings/PaperListingForm/index.tsx +++ b/sites/partners/src/components/listings/PaperListingForm/index.tsx @@ -139,18 +139,20 @@ const ListingForm = ({ const [unitGroups, setUnitGroups] = useState([]) const [openHouseEvents, setOpenHouseEvents] = useState([]) const [preferences, setPreferences] = useState( - listingSectionQuestions(listing, MultiselectQuestionsApplicationSectionEnum.preferences)?.map( - (listingPref) => { - return { ...listingPref?.multiselectQuestions } - } - ) ?? [] + listingSectionQuestions( + listing as unknown as Listing, + MultiselectQuestionsApplicationSectionEnum.preferences + )?.map((listingPref) => { + return { ...listingPref?.multiselectQuestions } + }) ?? [] ) const [programs, setPrograms] = useState( - listingSectionQuestions(listing, MultiselectQuestionsApplicationSectionEnum.programs)?.map( - (listingProg) => { - return { ...listingProg?.multiselectQuestions } - } - ) + listingSectionQuestions( + listing as unknown as Listing, + MultiselectQuestionsApplicationSectionEnum.programs + )?.map((listingProg) => { + return { ...listingProg?.multiselectQuestions } + }) ) const [latLong, setLatLong] = useState({ diff --git a/sites/partners/src/components/listings/PaperListingForm/sections/AdditionalFees.tsx b/sites/partners/src/components/listings/PaperListingForm/sections/AdditionalFees.tsx index 001e533e02..62628fea46 100644 --- a/sites/partners/src/components/listings/PaperListingForm/sections/AdditionalFees.tsx +++ b/sites/partners/src/components/listings/PaperListingForm/sections/AdditionalFees.tsx @@ -7,7 +7,7 @@ import { listingUtilities } from "@bloom-housing/shared-helpers" import { EnumListingDepositType, EnumListingListingType, - ListingUtilities, + ListingUtilitiesCreate, } from "@bloom-housing/shared-helpers/src/types/backend-swagger" import SectionWithGrid from "../../../shared/SectionWithGrid" import styles from "../ListingForm.module.scss" @@ -18,7 +18,7 @@ type AdditionalFeesProps = { enableCreditScreeningFee?: boolean enableNonRegulatedListings?: boolean enableUtilitiesIncluded?: boolean - existingUtilities: ListingUtilities + existingUtilities: ListingUtilitiesCreate requiredFields: string[] } diff --git a/sites/partners/src/components/listings/PaperListingForm/sections/BuildingFeatures.tsx b/sites/partners/src/components/listings/PaperListingForm/sections/BuildingFeatures.tsx index bb88d8fb9a..cd88f9b9dc 100644 --- a/sites/partners/src/components/listings/PaperListingForm/sections/BuildingFeatures.tsx +++ b/sites/partners/src/components/listings/PaperListingForm/sections/BuildingFeatures.tsx @@ -3,14 +3,14 @@ import { useFormContext } from "react-hook-form" import { t, Textarea, FieldGroup } from "@bloom-housing/ui-components" import { Grid } from "@bloom-housing/ui-seeds" import { listingFeatures } from "@bloom-housing/shared-helpers" -import { ListingFeatures } from "@bloom-housing/shared-helpers/src/types/backend-swagger" +import { ListingFeaturesCreate } from "@bloom-housing/shared-helpers/src/types/backend-swagger" import SectionWithGrid from "../../../shared/SectionWithGrid" import { defaultFieldProps } from "../../../../lib/helpers" import styles from "../ListingForm.module.scss" type BuildingFeaturesProps = { enableAccessibilityFeatures?: boolean - existingFeatures: ListingFeatures + existingFeatures: ListingFeaturesCreate requiredFields: string[] } diff --git a/sites/partners/src/lib/listings/formTypes.ts b/sites/partners/src/lib/listings/formTypes.ts index a3108e1d48..1ec0c4532b 100644 --- a/sites/partners/src/lib/listings/formTypes.ts +++ b/sites/partners/src/lib/listings/formTypes.ts @@ -5,7 +5,9 @@ import { EnumListingDepositType, Listing, ListingEvent, + ListingFeaturesCreate, ListingsStatusEnum, + ListingUtilitiesCreate, MultiselectQuestion, PaperApplication, PaperApplicationCreate, @@ -20,7 +22,7 @@ export enum AnotherAddressEnum { anotherAddress = "anotherAddress", } -export type FormListing = Omit & { +export type FormListing = Omit & { applicationDueDateField?: { month: string day: string @@ -89,6 +91,8 @@ export type FormListing = Omit & { accessibilityFeatures?: string[] utilities?: string[] selectedRequiredDocuments?: string[] + listingFeatures?: ListingFeaturesCreate + listingUtilities?: ListingUtilitiesCreate } export const addressTypes = {