diff --git a/backend/core/src/listings/dto/listing-create.dto.ts b/backend/core/src/listings/dto/listing-create.dto.ts index 983521457f..ae5ed9322c 100644 --- a/backend/core/src/listings/dto/listing-create.dto.ts +++ b/backend/core/src/listings/dto/listing-create.dto.ts @@ -45,6 +45,7 @@ export class ListingCreateDto extends OmitType(ListingDto, [ "householdSizeMax", "householdSizeMin", "neighborhood", + "region", "petPolicy", "smokingPolicy", "unitsAvailable", @@ -166,6 +167,11 @@ export class ListingCreateDto extends OmitType(ListingDto, [ @IsString({ groups: [ValidationsGroupsEnum.default] }) neighborhood?: string | null + @Expose() + @IsOptional({ groups: [ValidationsGroupsEnum.default] }) + @IsString({ groups: [ValidationsGroupsEnum.default] }) + region?: string | null + @Expose() @IsOptional({ groups: [ValidationsGroupsEnum.default] }) @IsString({ groups: [ValidationsGroupsEnum.default] }) diff --git a/backend/core/src/listings/dto/listing-update.dto.ts b/backend/core/src/listings/dto/listing-update.dto.ts index 0b56b5d962..bda8618522 100644 --- a/backend/core/src/listings/dto/listing-update.dto.ts +++ b/backend/core/src/listings/dto/listing-update.dto.ts @@ -47,6 +47,7 @@ export class ListingUpdateDto extends OmitType(ListingDto, [ "householdSizeMax", "householdSizeMin", "neighborhood", + "region", "petPolicy", "smokingPolicy", "unitsAvailable", @@ -185,6 +186,11 @@ export class ListingUpdateDto extends OmitType(ListingDto, [ @IsString({ groups: [ValidationsGroupsEnum.default] }) neighborhood?: string | null + @Expose() + @IsOptional({ groups: [ValidationsGroupsEnum.default] }) + @IsString({ groups: [ValidationsGroupsEnum.default] }) + region?: string | null + @Expose() @IsOptional({ groups: [ValidationsGroupsEnum.default] }) @IsString({ groups: [ValidationsGroupsEnum.default] }) diff --git a/backend/core/src/listings/dto/listing.dto.ts b/backend/core/src/listings/dto/listing.dto.ts index c594a4da0b..6edfd66b2a 100644 --- a/backend/core/src/listings/dto/listing.dto.ts +++ b/backend/core/src/listings/dto/listing.dto.ts @@ -314,6 +314,12 @@ export class ListingDto extends OmitType(Listing, [ @Expose() @IsOptional({ groups: [ValidationsGroupsEnum.default] }) @IsEnum(Region, { groups: [ValidationsGroupsEnum.default] }) + @Transform( + (value, obj: Listing) => { + return obj.property?.region + }, + { toClassOnly: true } + ) @ApiProperty({ enum: Region, enumName: "Region", diff --git a/backend/core/src/listings/dto/listings-query-params.ts b/backend/core/src/listings/dto/listings-query-params.ts index 441c56b96c..f57e1ec214 100644 --- a/backend/core/src/listings/dto/listings-query-params.ts +++ b/backend/core/src/listings/dto/listings-query-params.ts @@ -12,6 +12,7 @@ import { } from "class-validator" import { ValidationsGroupsEnum } from "../../shared/types/validations-groups-enum" import { OrderByFieldsEnum } from "../types/listing-orderby-enum" +import { OrderDirEnum } from "../../shared/types/orderdir-enum" export class ListingsQueryParams extends PaginationAllowsAllQueryParams { @Expose() @@ -52,4 +53,16 @@ export class ListingsQueryParams extends PaginationAllowsAllQueryParams { @IsOptional({ groups: [ValidationsGroupsEnum.default] }) @IsEnum(OrderByFieldsEnum, { groups: [ValidationsGroupsEnum.default] }) orderBy?: OrderByFieldsEnum + + @Expose() + @ApiProperty({ + name: "orderDir", + required: false, + enum: OrderDirEnum, + enumName: "OrderDirEnum", + example: "ASC", + }) + @IsOptional({ groups: [ValidationsGroupsEnum.default] }) + @IsEnum(OrderDirEnum, { groups: [ValidationsGroupsEnum.default] }) + orderDir?: OrderDirEnum } diff --git a/backend/core/src/listings/entities/listing.entity.ts b/backend/core/src/listings/entities/listing.entity.ts index 93442e8454..1a6671d35d 100644 --- a/backend/core/src/listings/entities/listing.entity.ts +++ b/backend/core/src/listings/entities/listing.entity.ts @@ -570,12 +570,6 @@ class Listing extends BaseEntity { @IsString({ groups: [ValidationsGroupsEnum.default] }) phoneNumber?: string | null - @Column({ type: "text", nullable: true }) - @Expose() - @IsOptional({ groups: [ValidationsGroupsEnum.default] }) - @IsString({ groups: [ValidationsGroupsEnum.default] }) - region?: string | null - @OneToMany(() => UnitGroup, (summary) => summary.listing, { nullable: true, eager: true, diff --git a/backend/core/src/listings/listings.service.ts b/backend/core/src/listings/listings.service.ts index 7682dcbab0..f7a1d24ee8 100644 --- a/backend/core/src/listings/listings.service.ts +++ b/backend/core/src/listings/listings.service.ts @@ -317,17 +317,17 @@ export class ListingsService { private static addOrderByToQb(qb: SelectQueryBuilder, params: ListingsQueryParams) { switch (params.orderBy) { case OrderByFieldsEnum.mostRecentlyUpdated: - qb.orderBy({ "listings.updated_at": "DESC" }) + qb.orderBy({ "listings.updated_at": params.orderDir ?? "DESC" }) break case OrderByFieldsEnum.mostRecentlyClosed: qb.orderBy({ - "listings.closedAt": { order: "DESC", nulls: "NULLS LAST" }, + "listings.closedAt": { order: params.orderDir ?? "DESC", nulls: "NULLS LAST" }, "listings.publishedAt": { order: "DESC", nulls: "NULLS LAST" }, }) break case OrderByFieldsEnum.applicationDates: qb.orderBy({ - "listings.applicationDueDate": "ASC", + "listings.applicationDueDate": params.orderDir ?? "ASC", }) break case OrderByFieldsEnum.comingSoon: @@ -339,11 +339,24 @@ export class ListingsService { ) qb.addOrderBy("listings.updatedAt", "DESC") break + case OrderByFieldsEnum.status: + qb.orderBy({ + "listings.status": params.orderDir ?? "ASC", + "listings.name": "ASC", + }) + break + case OrderByFieldsEnum.verified: + qb.orderBy({ + "listings.isVerified": params.orderDir ?? "ASC", + "listings.name": "ASC", + }) + break + case OrderByFieldsEnum.name: case undefined: // Default to ordering by applicationDates (i.e. applicationDueDate // and applicationOpenDate) if no orderBy param is specified. qb.orderBy({ - "listings.name": "ASC", + "listings.name": params.orderDir ?? "ASC", }) break default: diff --git a/backend/core/src/listings/types/listing-orderby-enum.ts b/backend/core/src/listings/types/listing-orderby-enum.ts index 0c351532d8..f4695dec0e 100644 --- a/backend/core/src/listings/types/listing-orderby-enum.ts +++ b/backend/core/src/listings/types/listing-orderby-enum.ts @@ -3,4 +3,7 @@ export enum OrderByFieldsEnum { applicationDates = "applicationDates", mostRecentlyClosed = "mostRecentlyClosed", comingSoon = "comingSoon", + name = "name", + status = "status", + verified = "verified", } diff --git a/backend/core/src/migration/1651700608419-add-new-ami-charts.ts b/backend/core/src/migration/1651700608419-add-new-ami-charts.ts new file mode 100644 index 0000000000..77cec8c7c1 --- /dev/null +++ b/backend/core/src/migration/1651700608419-add-new-ami-charts.ts @@ -0,0 +1,33 @@ +import { MigrationInterface, QueryRunner } from "typeorm" +import { HUD2021 } from "../seeder/seeds/ami-charts/HUD2021" +import { HUD2022 } from "../seeder/seeds/ami-charts/HUD2022" +import { MSHDA2022 } from "../seeder/seeds/ami-charts/MSHDA2022" + +export class addNewAmiCharts1651700608419 implements MigrationInterface { + name = "addNewAmiCharts1651700608419" + + public async up(queryRunner: QueryRunner): Promise { + const [{ id }] = await queryRunner.query(`SELECT id FROM jurisdictions WHERE name = 'Detroit'`) + + await queryRunner.query( + `INSERT INTO ami_chart + (name, items, jurisdiction_id) + VALUES ('${HUD2022.name}', '${JSON.stringify(HUD2022.items)}', '${id}') + ` + ) + + await queryRunner.query( + `INSERT INTO ami_chart + (name, items, jurisdiction_id) + VALUES ('${MSHDA2022.name}', '${JSON.stringify(MSHDA2022.items)}', '${id}') + ` + ) + + await queryRunner.query(`UPDATE ami_chart SET items = $1 WHERE name = $2`, [ + JSON.stringify(HUD2021.items), + "HUD 2021", + ]) + } + + public async down(queryRunner: QueryRunner): Promise {} +} diff --git a/backend/core/src/migration/1651740223899-remove-region-from-listing.ts b/backend/core/src/migration/1651740223899-remove-region-from-listing.ts new file mode 100644 index 0000000000..e5aad4ffb5 --- /dev/null +++ b/backend/core/src/migration/1651740223899-remove-region-from-listing.ts @@ -0,0 +1,13 @@ +import { MigrationInterface, QueryRunner } from "typeorm" + +export class removeRegionFromListing1651740223899 implements MigrationInterface { + name = "removeRegionFromListing1651740223899" + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "listings" DROP COLUMN "region"`) + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "listings" ADD "region" text`) + } +} diff --git a/backend/core/src/seeder/seeds/ami-charts/HUD2021.ts b/backend/core/src/seeder/seeds/ami-charts/HUD2021.ts index 53b2f9adda..3a688800da 100644 --- a/backend/core/src/seeder/seeds/ami-charts/HUD2021.ts +++ b/backend/core/src/seeder/seeds/ami-charts/HUD2021.ts @@ -18,32 +18,32 @@ export const HUD2021: Omit { percentOfAmi: 30, householdSize: 3, - income: 21600, + income: 21960, }, { percentOfAmi: 30, householdSize: 4, - income: 24000, + income: 26500, }, { percentOfAmi: 30, householdSize: 5, - income: 25950, + income: 31040, }, { percentOfAmi: 30, householdSize: 6, - income: 27850, + income: 35580, }, { percentOfAmi: 30, householdSize: 7, - income: 29800, + income: 40120, }, { percentOfAmi: 30, householdSize: 8, - income: 31700, + income: 44660, }, { percentOfAmi: 50, @@ -86,44 +86,44 @@ export const HUD2021: Omit income: 52800, }, { - percentOfAmi: 60, + percentOfAmi: 80, householdSize: 1, - income: 33600, + income: 44800, }, { - percentOfAmi: 60, + percentOfAmi: 80, householdSize: 2, - income: 38400, + income: 51200, }, { - percentOfAmi: 60, + percentOfAmi: 80, householdSize: 3, - income: 43200, + income: 57600, }, { - percentOfAmi: 60, + percentOfAmi: 80, householdSize: 4, - income: 48000, + income: 64000, }, { - percentOfAmi: 60, + percentOfAmi: 80, householdSize: 5, - income: 51840, + income: 69150, }, { - percentOfAmi: 60, + percentOfAmi: 80, householdSize: 6, - income: 55680, + income: 74250, }, { - percentOfAmi: 60, + percentOfAmi: 80, householdSize: 7, - income: 59520, + income: 79400, }, { - percentOfAmi: 60, + percentOfAmi: 80, householdSize: 8, - income: 63360, + income: 84500, }, ], } diff --git a/backend/core/src/seeder/seeds/ami-charts/HUD2021.txt b/backend/core/src/seeder/seeds/ami-charts/HUD2021.txt index f43a0f10ba..7f5e4cdb69 100644 --- a/backend/core/src/seeder/seeds/ami-charts/HUD2021.txt +++ b/backend/core/src/seeder/seeds/ami-charts/HUD2021.txt @@ -1,4 +1,3 @@ -30% 16,800 19,200 21,600 24,000 25,950 27,850 29,800 31,700 +30% 16,800 19,200 21,960 26,500 31,040 35,580 40,120 44,660 50% 28,000 32,000 36,000 40,000 43,200 46,400 49,600 52,800 -60% 33,600 38,400 43,200 48,000 51,840 55,680 59,520 63,360 -80% 44,800 51,200 57,600 64,000 69,150 74,250 79,400 84,500 \ No newline at end of file +80% 44,800 51,200 57,600 64,000 69,150 74,250 79,400 84,500 diff --git a/backend/core/src/seeder/seeds/ami-charts/HUD2022.ts b/backend/core/src/seeder/seeds/ami-charts/HUD2022.ts new file mode 100644 index 0000000000..966860f6ab --- /dev/null +++ b/backend/core/src/seeder/seeds/ami-charts/HUD2022.ts @@ -0,0 +1,129 @@ +import { AmiChartCreateDto } from "../../../ami-charts/dto/ami-chart.dto" +import { BaseEntity } from "typeorm" + +// THIS FILE WAS AUTOMATICALLY GENERATED FROM HUD2022.txt. +export const HUD2022: Omit = { + name: "HUD 2022", + items: [ + { + percentOfAmi: 30, + householdSize: 1, + income: 18800, + }, + { + percentOfAmi: 30, + householdSize: 2, + income: 21500, + }, + { + percentOfAmi: 30, + householdSize: 3, + income: 24200, + }, + { + percentOfAmi: 30, + householdSize: 4, + income: 27750, + }, + { + percentOfAmi: 30, + householdSize: 5, + income: 32470, + }, + { + percentOfAmi: 30, + householdSize: 6, + income: 37190, + }, + { + percentOfAmi: 30, + householdSize: 7, + income: 41910, + }, + { + percentOfAmi: 30, + householdSize: 8, + income: 46630, + }, + { + percentOfAmi: 50, + householdSize: 1, + income: 31350, + }, + { + percentOfAmi: 50, + householdSize: 2, + income: 35800, + }, + { + percentOfAmi: 50, + householdSize: 3, + income: 40300, + }, + { + percentOfAmi: 50, + householdSize: 4, + income: 44750, + }, + { + percentOfAmi: 50, + householdSize: 5, + income: 48350, + }, + { + percentOfAmi: 50, + householdSize: 6, + income: 51950, + }, + { + percentOfAmi: 50, + householdSize: 7, + income: 55500, + }, + { + percentOfAmi: 50, + householdSize: 8, + income: 59100, + }, + { + percentOfAmi: 80, + householdSize: 1, + income: 50150, + }, + { + percentOfAmi: 80, + householdSize: 2, + income: 57300, + }, + { + percentOfAmi: 80, + householdSize: 3, + income: 64450, + }, + { + percentOfAmi: 80, + householdSize: 4, + income: 71600, + }, + { + percentOfAmi: 80, + householdSize: 5, + income: 77350, + }, + { + percentOfAmi: 80, + householdSize: 6, + income: 83100, + }, + { + percentOfAmi: 80, + householdSize: 7, + income: 88800, + }, + { + percentOfAmi: 80, + householdSize: 8, + income: 94550, + }, + ], +} diff --git a/backend/core/src/seeder/seeds/ami-charts/HUD2022.txt b/backend/core/src/seeder/seeds/ami-charts/HUD2022.txt new file mode 100644 index 0000000000..c9b73250a7 --- /dev/null +++ b/backend/core/src/seeder/seeds/ami-charts/HUD2022.txt @@ -0,0 +1,3 @@ +30% 18,800 21,500 24,200 27,750 32,470 37,190 41,910 46,630 +50% 31,350 35,800 40,300 44,750 48,350 51,950 55,500 59,100 +80% 50,150 57,300 64,450 71,600 77,350 83,100 88,800 94,550 diff --git a/backend/core/src/seeder/seeds/ami-charts/MSHDA2022.ts b/backend/core/src/seeder/seeds/ami-charts/MSHDA2022.ts new file mode 100644 index 0000000000..a6dbb08576 --- /dev/null +++ b/backend/core/src/seeder/seeds/ami-charts/MSHDA2022.ts @@ -0,0 +1,649 @@ +import { AmiChartCreateDto } from "../../../ami-charts/dto/ami-chart.dto" +import { BaseEntity } from "typeorm" + +// THIS FILE WAS AUTOMATICALLY GENERATED FROM MSHDA2022.txt. +export const MSHDA2022: Omit = { + name: "MSHDA 2022", + items: [ + { + percentOfAmi: 20, + householdSize: 1, + income: 12860, + }, + { + percentOfAmi: 20, + householdSize: 2, + income: 14700, + }, + { + percentOfAmi: 20, + householdSize: 3, + income: 16540, + }, + { + percentOfAmi: 20, + householdSize: 4, + income: 18360, + }, + { + percentOfAmi: 20, + householdSize: 5, + income: 19840, + }, + { + percentOfAmi: 20, + householdSize: 6, + income: 21300, + }, + { + percentOfAmi: 20, + householdSize: 7, + income: 22780, + }, + { + percentOfAmi: 20, + householdSize: 8, + income: 24240, + }, + { + percentOfAmi: 25, + householdSize: 1, + income: 16075, + }, + { + percentOfAmi: 25, + householdSize: 2, + income: 18375, + }, + { + percentOfAmi: 25, + householdSize: 3, + income: 20675, + }, + { + percentOfAmi: 25, + householdSize: 4, + income: 22950, + }, + { + percentOfAmi: 25, + householdSize: 5, + income: 24800, + }, + { + percentOfAmi: 25, + householdSize: 6, + income: 26625, + }, + { + percentOfAmi: 25, + householdSize: 7, + income: 28475, + }, + { + percentOfAmi: 25, + householdSize: 8, + income: 30300, + }, + { + percentOfAmi: 30, + householdSize: 1, + income: 19290, + }, + { + percentOfAmi: 30, + householdSize: 2, + income: 22050, + }, + { + percentOfAmi: 30, + householdSize: 3, + income: 24810, + }, + { + percentOfAmi: 30, + householdSize: 4, + income: 27540, + }, + { + percentOfAmi: 30, + householdSize: 5, + income: 29760, + }, + { + percentOfAmi: 30, + householdSize: 6, + income: 31950, + }, + { + percentOfAmi: 30, + householdSize: 7, + income: 34170, + }, + { + percentOfAmi: 30, + householdSize: 8, + income: 36360, + }, + { + percentOfAmi: 35, + householdSize: 1, + income: 22505, + }, + { + percentOfAmi: 35, + householdSize: 2, + income: 25725, + }, + { + percentOfAmi: 35, + householdSize: 3, + income: 28945, + }, + { + percentOfAmi: 35, + householdSize: 4, + income: 32130, + }, + { + percentOfAmi: 35, + householdSize: 5, + income: 34720, + }, + { + percentOfAmi: 35, + householdSize: 6, + income: 37275, + }, + { + percentOfAmi: 35, + householdSize: 7, + income: 39865, + }, + { + percentOfAmi: 35, + householdSize: 8, + income: 42420, + }, + { + percentOfAmi: 40, + householdSize: 1, + income: 25720, + }, + { + percentOfAmi: 40, + householdSize: 2, + income: 29400, + }, + { + percentOfAmi: 40, + householdSize: 3, + income: 33080, + }, + { + percentOfAmi: 40, + householdSize: 4, + income: 36720, + }, + { + percentOfAmi: 40, + householdSize: 5, + income: 39680, + }, + { + percentOfAmi: 40, + householdSize: 6, + income: 42600, + }, + { + percentOfAmi: 40, + householdSize: 7, + income: 45560, + }, + { + percentOfAmi: 40, + householdSize: 8, + income: 48480, + }, + { + percentOfAmi: 45, + householdSize: 1, + income: 28935, + }, + { + percentOfAmi: 45, + householdSize: 2, + income: 33075, + }, + { + percentOfAmi: 45, + householdSize: 3, + income: 37215, + }, + { + percentOfAmi: 45, + householdSize: 4, + income: 41310, + }, + { + percentOfAmi: 45, + householdSize: 5, + income: 44640, + }, + { + percentOfAmi: 45, + householdSize: 6, + income: 47925, + }, + { + percentOfAmi: 45, + householdSize: 7, + income: 51255, + }, + { + percentOfAmi: 45, + householdSize: 8, + income: 54540, + }, + { + percentOfAmi: 50, + householdSize: 1, + income: 32150, + }, + { + percentOfAmi: 50, + householdSize: 2, + income: 36750, + }, + { + percentOfAmi: 50, + householdSize: 3, + income: 41350, + }, + { + percentOfAmi: 50, + householdSize: 4, + income: 45900, + }, + { + percentOfAmi: 50, + householdSize: 5, + income: 49600, + }, + { + percentOfAmi: 50, + householdSize: 6, + income: 53250, + }, + { + percentOfAmi: 50, + householdSize: 7, + income: 56950, + }, + { + percentOfAmi: 50, + householdSize: 8, + income: 60600, + }, + { + percentOfAmi: 55, + householdSize: 1, + income: 35365, + }, + { + percentOfAmi: 55, + householdSize: 2, + income: 40425, + }, + { + percentOfAmi: 55, + householdSize: 3, + income: 45485, + }, + { + percentOfAmi: 55, + householdSize: 4, + income: 50490, + }, + { + percentOfAmi: 55, + householdSize: 5, + income: 54560, + }, + { + percentOfAmi: 55, + householdSize: 6, + income: 58575, + }, + { + percentOfAmi: 55, + householdSize: 7, + income: 62645, + }, + { + percentOfAmi: 55, + householdSize: 8, + income: 66660, + }, + { + percentOfAmi: 60, + householdSize: 1, + income: 38580, + }, + { + percentOfAmi: 60, + householdSize: 2, + income: 44100, + }, + { + percentOfAmi: 60, + householdSize: 3, + income: 49620, + }, + { + percentOfAmi: 60, + householdSize: 4, + income: 55080, + }, + { + percentOfAmi: 60, + householdSize: 5, + income: 59520, + }, + { + percentOfAmi: 60, + householdSize: 6, + income: 63900, + }, + { + percentOfAmi: 60, + householdSize: 7, + income: 68340, + }, + { + percentOfAmi: 60, + householdSize: 8, + income: 72720, + }, + { + percentOfAmi: 70, + householdSize: 1, + income: 45010, + }, + { + percentOfAmi: 70, + householdSize: 2, + income: 51450, + }, + { + percentOfAmi: 70, + householdSize: 3, + income: 57890, + }, + { + percentOfAmi: 70, + householdSize: 4, + income: 64260, + }, + { + percentOfAmi: 70, + householdSize: 5, + income: 69440, + }, + { + percentOfAmi: 70, + householdSize: 6, + income: 74550, + }, + { + percentOfAmi: 70, + householdSize: 7, + income: 79730, + }, + { + percentOfAmi: 70, + householdSize: 8, + income: 84840, + }, + { + percentOfAmi: 80, + householdSize: 1, + income: 51440, + }, + { + percentOfAmi: 80, + householdSize: 2, + income: 58800, + }, + { + percentOfAmi: 80, + householdSize: 3, + income: 66160, + }, + { + percentOfAmi: 80, + householdSize: 4, + income: 73440, + }, + { + percentOfAmi: 80, + householdSize: 5, + income: 79360, + }, + { + percentOfAmi: 80, + householdSize: 6, + income: 85200, + }, + { + percentOfAmi: 80, + householdSize: 7, + income: 91120, + }, + { + percentOfAmi: 80, + householdSize: 8, + income: 96960, + }, + { + percentOfAmi: 100, + householdSize: 1, + income: 64300, + }, + { + percentOfAmi: 100, + householdSize: 2, + income: 73500, + }, + { + percentOfAmi: 100, + householdSize: 3, + income: 82700, + }, + { + percentOfAmi: 100, + householdSize: 4, + income: 91800, + }, + { + percentOfAmi: 100, + householdSize: 5, + income: 99200, + }, + { + percentOfAmi: 100, + householdSize: 6, + income: 106500, + }, + { + percentOfAmi: 100, + householdSize: 7, + income: 113900, + }, + { + percentOfAmi: 100, + householdSize: 8, + income: 121200, + }, + { + percentOfAmi: 120, + householdSize: 1, + income: 77160, + }, + { + percentOfAmi: 120, + householdSize: 2, + income: 88200, + }, + { + percentOfAmi: 120, + householdSize: 3, + income: 99240, + }, + { + percentOfAmi: 120, + householdSize: 4, + income: 110160, + }, + { + percentOfAmi: 120, + householdSize: 5, + income: 119040, + }, + { + percentOfAmi: 120, + householdSize: 6, + income: 127800, + }, + { + percentOfAmi: 120, + householdSize: 7, + income: 136680, + }, + { + percentOfAmi: 120, + householdSize: 8, + income: 145440, + }, + { + percentOfAmi: 125, + householdSize: 1, + income: 80375, + }, + { + percentOfAmi: 125, + householdSize: 2, + income: 91875, + }, + { + percentOfAmi: 125, + householdSize: 3, + income: 103375, + }, + { + percentOfAmi: 125, + householdSize: 4, + income: 114750, + }, + { + percentOfAmi: 125, + householdSize: 5, + income: 124000, + }, + { + percentOfAmi: 125, + householdSize: 6, + income: 133125, + }, + { + percentOfAmi: 125, + householdSize: 7, + income: 142375, + }, + { + percentOfAmi: 125, + householdSize: 8, + income: 151500, + }, + { + percentOfAmi: 140, + householdSize: 1, + income: 90020, + }, + { + percentOfAmi: 140, + householdSize: 2, + income: 102900, + }, + { + percentOfAmi: 140, + householdSize: 3, + income: 115780, + }, + { + percentOfAmi: 140, + householdSize: 4, + income: 128520, + }, + { + percentOfAmi: 140, + householdSize: 5, + income: 138880, + }, + { + percentOfAmi: 140, + householdSize: 6, + income: 149100, + }, + { + percentOfAmi: 140, + householdSize: 7, + income: 159460, + }, + { + percentOfAmi: 140, + householdSize: 8, + income: 169680, + }, + { + percentOfAmi: 150, + householdSize: 1, + income: 96450, + }, + { + percentOfAmi: 150, + householdSize: 2, + income: 110250, + }, + { + percentOfAmi: 150, + householdSize: 3, + income: 124050, + }, + { + percentOfAmi: 150, + householdSize: 4, + income: 137700, + }, + { + percentOfAmi: 150, + householdSize: 5, + income: 148800, + }, + { + percentOfAmi: 150, + householdSize: 6, + income: 159750, + }, + { + percentOfAmi: 150, + householdSize: 7, + income: 170850, + }, + { + percentOfAmi: 150, + householdSize: 8, + income: 181800, + }, + ], +} diff --git a/backend/core/src/seeder/seeds/ami-charts/MSHDA2022.txt b/backend/core/src/seeder/seeds/ami-charts/MSHDA2022.txt new file mode 100644 index 0000000000..cbc2869e77 --- /dev/null +++ b/backend/core/src/seeder/seeds/ami-charts/MSHDA2022.txt @@ -0,0 +1,16 @@ +20% 12,860 14,700 16,540 18,360 19,840 21,300 22,780 24,240 +25% 16,075 18,375 20,675 22,950 24,800 26,625 28,475 30,300 +30% 19,290 22,050 24,810 27,540 29,760 31,950 34,170 36,360 +35% 22,505 25,725 28,945 32,130 34,720 37,275 39,865 42,420 +40% 25,720 29,400 33,080 36,720 39,680 42,600 45,560 48,480 +45% 28,935 33,075 37,215 41,310 44,640 47,925 51,255 54,540 +50% 32,150 36,750 41,350 45,900 49,600 53,250 56,950 60,600 +55% 35,365 40,425 45,485 50,490 54,560 58,575 62,645 66,660 +60% 38,580 44,100 49,620 55,080 59,520 63,900 68,340 72,720 +70% 45,010 51,450 57,890 64,260 69,440 74,550 79,730 84,840 +80% 51,440 58,800 66,160 73,440 79,360 85,200 91,120 96,960 +100% 64,300 73,500 82,700 91,800 99,200 106,500 113,900 121,200 +120% 77,160 88,200 99,240 110,160 119,040 127,800 136,680 145,440 +125% 80,375 91,875 103,375 114,750 124,000 133,125 142,375 151,500 +140% 90,020 102,900 115,780 128,520 138,880 149,100 159,460 169,680 +150% 96,450 110,250 124,050 137,700 148,800 159,750 170,850 181,800 diff --git a/backend/core/src/shared/types/orderdir-enum.ts b/backend/core/src/shared/types/orderdir-enum.ts new file mode 100644 index 0000000000..c5544abe52 --- /dev/null +++ b/backend/core/src/shared/types/orderdir-enum.ts @@ -0,0 +1,4 @@ +export enum OrderDirEnum { + ASC = "ASC", + DESC = "DESC", +} diff --git a/backend/core/src/translations/services/translations.service.ts b/backend/core/src/translations/services/translations.service.ts index 24271d43bc..02b2aecade 100644 --- a/backend/core/src/translations/services/translations.service.ts +++ b/backend/core/src/translations/services/translations.service.ts @@ -81,6 +81,7 @@ export class TranslationsService extends AbstractServiceFactory< "requiredDocuments", "specialNotes", "whatToExpect", + "whatToExpectAdditionalText", "property.accessibility", "property.amenities", "property.neighborhood", diff --git a/backend/core/types/src/backend-swagger.ts b/backend/core/types/src/backend-swagger.ts index e065a6f282..73babe8a9c 100644 --- a/backend/core/types/src/backend-swagger.ts +++ b/backend/core/types/src/backend-swagger.ts @@ -1250,6 +1250,8 @@ export class ListingsService { view?: string /** */ orderBy?: OrderByFieldsEnum + /** */ + orderDir?: OrderDirEnum } = {} as any, options: IRequestOptions = {} ): Promise { @@ -1263,6 +1265,7 @@ export class ListingsService { filter: params["filter"], view: params["view"], orderBy: params["orderBy"], + orderDir: params["orderDir"], } let data = null @@ -4595,7 +4598,7 @@ export interface ListingFilterParams { status?: EnumListingFilterParamsStatus /** */ - bedrooms?: string + bedRoomSize?: string /** */ zipcode?: string @@ -4657,9 +4660,6 @@ export interface ListingFilterParams { /** */ acInUnit?: boolean - /** */ - neighborhood?: string - /** */ jurisdiction?: string @@ -4674,6 +4674,9 @@ export interface ListingFilterParams { /** */ accessibility?: string + + /** */ + region?: string } export interface FormMetadataExtraData { @@ -5767,9 +5770,6 @@ export interface ListingCreate { /** */ marketingSeason?: ListingSeasonEnum - /** */ - region?: Region - /** */ applicationMethods: ApplicationMethodCreate[] @@ -5824,6 +5824,9 @@ export interface ListingCreate { /** */ neighborhood?: string + /** */ + region?: string + /** */ petPolicy?: string @@ -6238,9 +6241,6 @@ export interface ListingUpdate { /** */ marketingSeason?: ListingSeasonEnum - /** */ - region?: Region - /** */ id?: string @@ -6304,6 +6304,9 @@ export interface ListingUpdate { /** */ neighborhood?: string + /** */ + region?: string + /** */ petPolicy?: string @@ -7061,6 +7064,14 @@ export enum OrderByFieldsEnum { "applicationDates" = "applicationDates", "mostRecentlyClosed" = "mostRecentlyClosed", "comingSoon" = "comingSoon", + "name" = "name", + "status" = "status", + "verified" = "verified", +} + +export enum OrderDirEnum { + "ASC" = "ASC", + "DESC" = "DESC", } export enum ListingApplicationAddressType { diff --git a/shared-helpers/src/formKeys.ts b/shared-helpers/src/formKeys.ts index 042148d553..04827403af 100644 --- a/shared-helpers/src/formKeys.ts +++ b/shared-helpers/src/formKeys.ts @@ -238,20 +238,20 @@ export const preferredUnit = [ export const bedroomKeys = ["SRO", "studio", "oneBdrm", "twoBdrm", "threeBdrm"] -export const listingFeatures = { - elevator: "Elevator", - wheelchairRamp: "Wheelchair Ramp", - serviceAnimalsAllowed: "Service Animals Allowed", - accessibleParking: "Accessible Parking", - parkingOnSite: "Parking on Site", - inUnitWasherDryer: "In Unit Washer Dryer", - laundryInBuilding: "Laundry in Building", - barrierFreeEntrance: "Barrier Free Entrance", - rollInShower: "Laundry in Building", - grabBars: "Grab Bars", - heatingInUnit: "Heating in Unit", - acInUnit: "AC in Unit", - hearing: "Hearing", - mobility: "Mobility", - visual: "Visual", -} +export const listingFeatures = [ + "wheelchairRamp", + "elevator", + "serviceAnimalsAllowed", + "accessibleParking", + "parkingOnSite", + "inUnitWasherDryer", + "laundryInBuilding", + "barrierFreeEntrance", + "rollInShower", + "grabBars", + "heatingInUnit", + "acInUnit", + "hearing", + "mobility", + "visual", +] diff --git a/sites/partners/layouts/index.tsx b/sites/partners/layouts/index.tsx index c950f0aeb9..6099e0293b 100644 --- a/sites/partners/layouts/index.tsx +++ b/sites/partners/layouts/index.tsx @@ -79,8 +79,8 @@ const Layout = (props) => { {t("pageTitle.privacy")} {" "} - - {t("pageTitle.disclaimer")} + + {t("pageTitle.terms")} diff --git a/sites/partners/lib/hooks.ts b/sites/partners/lib/hooks.ts index 7884ea104f..f72e5cecac 100644 --- a/sites/partners/lib/hooks.ts +++ b/sites/partners/lib/hooks.ts @@ -10,11 +10,15 @@ import { EnumPreferencesFilterParamsComparison, EnumProgramsFilterParamsComparison, EnumUserFilterParamsComparison, + OrderByFieldsEnum, + OrderDirEnum, } from "@bloom-housing/backend-core/types" interface PaginationProps { page?: number limit: number | "all" + orderBy?: OrderByFieldsEnum + orderDir?: OrderDirEnum } interface UseSingleApplicationDataProps extends PaginationProps { @@ -40,11 +44,19 @@ export function useSingleListingData(listingId: string) { } } -export function useListingsData({ page, limit, listingIds }: UseListingsDataProps) { +export function useListingsData({ + page, + limit, + listingIds, + orderBy, + orderDir, +}: UseListingsDataProps) { const params = { page, limit, view: "base", + orderBy, + orderDir: OrderDirEnum.ASC, } // filter if logged user is an agent @@ -59,6 +71,10 @@ export function useListingsData({ page, limit, listingIds }: UseListingsDataProp }) } + if (orderBy) { + Object.assign(params, { orderBy, orderDir }) + } + const { listingsService } = useContext(AuthContext) const fetcher = () => listingsService.list(params) diff --git a/sites/partners/page_content/locale_overrides/ar.json b/sites/partners/page_content/locale_overrides/ar.json index c596087408..9e221868e8 100644 --- a/sites/partners/page_content/locale_overrides/ar.json +++ b/sites/partners/page_content/locale_overrides/ar.json @@ -1,11 +1,7 @@ { - "nav": { - "siteTitlePartners": "بوابة ديترويت بارتنر" - }, - "footer": { - "copyright": "مدينة ديترويت © 2021 • جميع الحقوق محفوظة", - "header": "ديترويت هوم كونيكت هو مشروع تابع لـ", - "headerUrl": "هتبص://ديترويتم.جوف/دبرتمنتص/حسينجندرفتلزشندبرتمنة", - "headerLink": "مدينة ديترويت - قسم الإسكان والتنشيط" - } + "nav.siteTitlePartners": "بوابة ديترويت بارتنر", + "footer.copyright": "مدينة ديترويت © 2022 • جميع الحقوق محفوظة", + "footer.header": "ديترويت هوم كونيكت هو مشروع تابع لـ", + "footer.headerUrl": "هتبص://ديترويتم.جوف/دبرتمنتص/حسينجندرفتلزشندبرتمنة", + "footer.headerLink": "مدينة ديترويت" } diff --git a/sites/partners/page_content/locale_overrides/bn.json b/sites/partners/page_content/locale_overrides/bn.json index 269029b1a3..3ee7cf835c 100644 --- a/sites/partners/page_content/locale_overrides/bn.json +++ b/sites/partners/page_content/locale_overrides/bn.json @@ -1,11 +1,7 @@ { - "nav": { - "siteTitlePartners": "ডেট্রয়েট পার্টনার পোর্টাল" - }, - "footer": { - "copyright": "ডেট্রয়েট শহর © 2021 • সর্বস্বত্ব সংরক্ষিত", - "header": "ডেট্রয়েট হোম কানেক্ট একটি প্রকল্প", - "headerUrl": "হটপস://ডেট্রয়টমি.গভ/ডিপার্টমেন্টস/হাউসিং-এন্ড-রেভিটালিজটিও-ডিপার্টমেন্ট", - "headerLink": "ডেট্রয়েট শহর - আবাসন ও পুনরুজ্জীবন বিভাগ" - } + "nav.siteTitlePartners": "ডেট্রয়েট পার্টনার পোর্টাল", + "footer.copyright": "ডেট্রয়েট শহর © 2022 • সর্বস্বত্ব সংরক্ষিত", + "footer.header": "ডেট্রয়েট হোম কানেক্ট একটি প্রকল্প", + "footer.headerUrl": "হটপস://ডেট্রয়টমি.গভ/ডিপার্টমেন্টস/হাউসিং-এন্ড-রেভিটালিজটিও-ডিপার্টমেন্ট", + "footer.headerLink": "ডেট্রয়েট সিটি" } diff --git a/sites/partners/page_content/locale_overrides/es.json b/sites/partners/page_content/locale_overrides/es.json index 70c6eded31..74b9585f0f 100644 --- a/sites/partners/page_content/locale_overrides/es.json +++ b/sites/partners/page_content/locale_overrides/es.json @@ -1,11 +1,7 @@ { - "nav": { - "siteTitlePartners": "Portal de socios de Detroit" - }, - "footer": { - "copyright": "Ciudad de Detroit © 2021 • Todos los derechos reservados", - "header": "Detroit Home Connect es un proyecto del", - "headerUrl": "https://detroitmi.gov/departments/housing-and-revitalization-department", - "headerLink": "Ciudad de Detroit - Departamento de Vivienda y Revitalización" - } + "nav.siteTitlePartners": "Portal de socios de Detroit", + "footer.copyright": "Ciudad de Detroit © 2022 • Todos los derechos reservados", + "footer.header": "Detroit Home Connect es un proyecto del", + "footer.headerUrl": "https://detroitmi.gov/departments/housing-and-revitalization-department", + "footer.headerLink": "Ciudad de Detroit" } diff --git a/sites/partners/pages/index.tsx b/sites/partners/pages/index.tsx index d9b9ff55da..8b93f5b9a4 100644 --- a/sites/partners/pages/index.tsx +++ b/sites/partners/pages/index.tsx @@ -1,4 +1,4 @@ -import React, { useMemo, useContext, useState } from "react" +import React, { useMemo, useContext, useEffect, useRef, useState, useCallback } from "react" import Head from "next/head" import { PageHeader, @@ -11,53 +11,69 @@ import { LoadingOverlay, } from "@bloom-housing/ui-components" import { AgGridReact } from "ag-grid-react" -import { GridOptions } from "ag-grid-community" - +import { ColumnApi, ColumnState, GridOptions } from "ag-grid-community" +import { useRouter } from "next/router" import { useListingsData } from "../lib/hooks" import Layout from "../layouts" import { MetaTags } from "../src/MetaTags" -import { ListingStatus } from "@bloom-housing/backend-core/types" -class formatLinkCell { - link: HTMLAnchorElement - - init(params) { - this.link = document.createElement("a") - this.link.classList.add("text-blue-700") - this.link.setAttribute("href", `/listings/${params.data.id}/applications`) - this.link.innerText = params.valueFormatted || params.value - } +import { ListingStatus, OrderByFieldsEnum, OrderDirEnum } from "@bloom-housing/backend-core/types" - getGui() { - return this.link - } -} +const COLUMN_STATE_KEY = "column-state" -class ApplicationsLink extends formatLinkCell { - init(params) { - super.init(params) - this.link.setAttribute("href", `/listings/${params.data.id}/applications`) - this.link.setAttribute("data-test-id", "listing-status-cell") - } -} - -class ListingsLink extends formatLinkCell { - init(params) { - super.init(params) - this.link.setAttribute("href", `/listings/${params.data.id}`) - } +type ListingListSortOptions = { + orderBy: OrderByFieldsEnum + orderDir: OrderDirEnum } export default function ListingsList() { const { profile } = useContext(AuthContext) const isAdmin = profile.roles?.isAdmin || false + const router = useRouter() + + const [gridColumnApi, setGridColumnApi] = useState(null) + /* Pagination */ const [itemsPerPage, setItemsPerPage] = useState(AG_PER_PAGE_OPTIONS[0]) const [currentPage, setCurrentPage] = useState(1) + /* OrderBy columns */ + const [sortOptions, setSortOptions] = useState({ + orderBy: OrderByFieldsEnum.name, + orderDir: OrderDirEnum.ASC, + }) + const metaDescription = t("pageDescription.welcome", { regionName: t("region.name") }) const metaImage = "" // TODO: replace with hero image + function saveColumnState(api: ColumnApi) { + const columnState = api.getColumnState() + const columnStateJSON = JSON.stringify(columnState) + sessionStorage.setItem(COLUMN_STATE_KEY, columnStateJSON) + } + + function onGridReady(params) { + setGridColumnApi(params.columnApi) + } + + class formatLinkCell { + link: HTMLAnchorElement + + init(params) { + this.link = document.createElement("a") + this.link.classList.add("text-blue-700") + this.link.innerText = params.valueFormatted || params.value + this.link.addEventListener("click", function () { + void saveColumnState(params.columnApi) + void router.push(`/listings/${params.data.id}`) + }) + } + + getGui() { + return this.link + } + } + class formatWaitlistStatus { text: HTMLSpanElement @@ -73,41 +89,63 @@ export default function ListingsList() { } } - const gridOptions: GridOptions = { - components: { - ApplicationsLink, - formatLinkCell, - formatWaitlistStatus, - ListingsLink, - }, - } + /* Grid Functionality and Formatting */ + // update table items order on sort change + const initialLoadOnSort = useRef(false) + const onSortChange = useCallback((columns: ColumnState[]) => { + // prevent multiple fetch on initial render + if (!initialLoadOnSort.current) { + initialLoadOnSort.current = true + return + } + + const sortedBy = columns.find((col) => col.sort) + const { colId, sort } = sortedBy || {} + + let col = colId + if (colId === "isVerified") { + col = "verified" + } + const allowedSortColIds: string[] = Object.values(OrderByFieldsEnum) + if (allowedSortColIds.includes(col)) { + const name = OrderByFieldsEnum[col] + setSortOptions({ + orderBy: name, + orderDir: sort.toUpperCase() as OrderDirEnum, + }) + } + }, []) const columnDefs = useMemo(() => { const columns = [ { headerName: t("listings.listingName"), field: "name", - sortable: false, + sortable: true, + unSortIcon: true, + sort: "asc", filter: false, - resizable: true, - cellRenderer: "ListingsLink", + width: 450, + minWidth: 100, + cellRenderer: "formatLinkCell", }, { headerName: t("listings.buildingAddress"), field: "buildingAddress.street", sortable: false, filter: false, - resizable: true, - flex: 1, + width: 495, + minWidth: 100, valueFormatter: ({ value }) => (value ? value : t("t.none")), }, { headerName: t("listings.listingStatusText"), field: "status", sortable: true, + unSortIcon: true, filter: false, - resizable: true, - flex: 1, + width: 150, + minWidth: 100, valueFormatter: ({ value }) => { switch (value) { case ListingStatus.active: @@ -125,8 +163,10 @@ export default function ListingsList() { headerName: t("listings.verified"), field: "isVerified", sortable: true, + unSortIcon: true, filter: false, - resizable: true, + width: 150, + minWidth: 100, valueFormatter: ({ value }) => (value ? t("t.yes") : t("t.no")), }, ] @@ -139,8 +179,42 @@ export default function ListingsList() { listingIds: !isAdmin ? profile?.leasingAgentInListings?.map((listing) => listing.id) : undefined, + orderBy: sortOptions.orderBy, + orderDir: sortOptions.orderDir, }) + const gridOptions: GridOptions = { + onSortChanged: (params) => { + saveColumnState(params.columnApi) + onSortChange(params.columnApi.getColumnState()) + }, + components: { + formatLinkCell, + formatWaitlistStatus, + }, + suppressNoRowsOverlay: listingsLoading, + } + + /* Pagination */ + // reset page to 1 when user change limit + useEffect(() => { + setCurrentPage(1) + }, [itemsPerPage]) + + /* Data Performance */ + // Load a table state on initial render & pagination change (because the new data comes from the API) + useEffect(() => { + const savedColumnState = sessionStorage.getItem(COLUMN_STATE_KEY) + if (gridColumnApi && savedColumnState) { + const parsedState: ColumnState[] = JSON.parse(savedColumnState) + + gridColumnApi.applyColumnState({ + state: parsedState, + applyOrder: true, + }) + } + }, [gridColumnApi, currentPage]) + return ( @@ -171,7 +245,11 @@ export default function ListingsList() {
{ const listing = useContext(ListingContext) @@ -13,7 +12,9 @@ const DetailBuildingFeatures = () => { if (listing?.features[feature]) { featuresExist = true return ( -
  • {listingFeatures[feature]}
  • +
  • + {t(`eligibility.accessibility.${feature}`)} +
  • ) } }) diff --git a/sites/partners/src/listings/PaperListingForm/formatters/AdditionalMetadataFormatter.ts b/sites/partners/src/listings/PaperListingForm/formatters/AdditionalMetadataFormatter.ts index 4187ac67a2..6feed984f7 100644 --- a/sites/partners/src/listings/PaperListingForm/formatters/AdditionalMetadataFormatter.ts +++ b/sites/partners/src/listings/PaperListingForm/formatters/AdditionalMetadataFormatter.ts @@ -45,7 +45,7 @@ export default class AdditionalMetadataFormatter extends Formatter { ? ListingReviewOrder.lottery : ListingReviewOrder.firstComeFirstServe - this.data.features = Object.keys(listingFeatures).reduce((acc, current) => { + this.data.features = listingFeatures.reduce((acc, current) => { return { ...acc, [current]: this.data.listingFeatures && this.data.listingFeatures.indexOf(current) >= 0, diff --git a/sites/partners/src/listings/PaperListingForm/sections/BuildingFeatures.tsx b/sites/partners/src/listings/PaperListingForm/sections/BuildingFeatures.tsx index 920da28a46..af97626667 100644 --- a/sites/partners/src/listings/PaperListingForm/sections/BuildingFeatures.tsx +++ b/sites/partners/src/listings/PaperListingForm/sections/BuildingFeatures.tsx @@ -15,9 +15,9 @@ const BuildingFeatures = (props: BuildingFeaturesProps) => { const { register } = formMethods const featureOptions = useMemo(() => { - return Object.keys(listingFeatures).map((item) => ({ + return listingFeatures.map((item) => ({ id: item, - label: listingFeatures[item], + label: t(`eligibility.accessibility.${item}`), defaultChecked: props.existingFeatures ? props.existingFeatures[item] : false, register, })) diff --git a/sites/public/cypress/integration/navigation.ts b/sites/public/cypress/integration/navigation.ts index 62cb103825..a5e3ff59d3 100644 --- a/sites/public/cypress/integration/navigation.ts +++ b/sites/public/cypress/integration/navigation.ts @@ -14,21 +14,21 @@ describe("Navigating around the site", () => { }) it("Loads a non-listing-related page directly", () => { - cy.visit("/disclaimer") + cy.visit("/terms") - // Check that the Disclaimer page banner text is present on the page - cy.contains("Endorsement Disclaimers") + // Check that the Terms page banner text is present on the page + cy.contains("Terms and Conditions") }) it("Can navigate to all page types after initial site load", () => { cy.visit("/") - // Click on the Disclaimer page link in the footer - cy.get("footer a").contains("Disclaimer").click() + // Click on the Terms page link in the footer + cy.get("footer a").contains("Terms and Conditions").click() - // Should be on the disclaimer page - cy.location("pathname").should("equal", "/disclaimer") - cy.contains("Endorsement Disclaimers") + // Should be on the terms page + cy.location("pathname").should("equal", "/terms") + cy.contains("Terms and Conditions") // Click on the listings page link in the header nav cy.get(".navbar").contains("Sign in").click() diff --git a/sites/public/layouts/application.tsx b/sites/public/layouts/application.tsx index 5166e839f3..4250d500e3 100644 --- a/sites/public/layouts/application.tsx +++ b/sites/public/layouts/application.tsx @@ -151,8 +151,8 @@ const Layout = (props) => { {t("pageTitle.privacy")} - - {t("pageTitle.disclaimer")} + + {t("pageTitle.terms")} diff --git a/sites/public/layouts/eligibility.tsx b/sites/public/layouts/eligibility.tsx index 13dfceb5be..7edcf7f46a 100644 --- a/sites/public/layouts/eligibility.tsx +++ b/sites/public/layouts/eligibility.tsx @@ -29,7 +29,7 @@ export interface EligibilityLayoutProps { const EligibilityLayout = (props: EligibilityLayoutProps) => { const router = useRouter() const { eligibilityRequirements } = useContext(EligibilityContext) - + const clientLoaded = OnClientSide() const handleSubmit = props.formMethods.handleSubmit const onBack = async (data) => { diff --git a/sites/public/lib/helpers.tsx b/sites/public/lib/helpers.tsx index a6c550d86f..4c8485bafa 100644 --- a/sites/public/lib/helpers.tsx +++ b/sites/public/lib/helpers.tsx @@ -308,7 +308,7 @@ export const getUnitGroupSummary = (listing: Listing): UnitSummaryTable => { .map((type) => ( {t(`listings.unitTypes.${type}`)} )) - .reduce((acc, curr) => [acc, ", ", curr])} + .reduce((acc, curr, index) => [acc, index !== 0 ? ", " : "", curr], [])} ), rent: rent ?? t("listings.unitsSummary.notAvailable"), diff --git a/sites/public/page_content/disclaimer.md b/sites/public/page_content/disclaimer.md deleted file mode 100644 index 7cf0dac47a..0000000000 --- a/sites/public/page_content/disclaimer.md +++ /dev/null @@ -1,11 +0,0 @@ -### External Link Policies - -The City of Detroit uses link and search capabilities to point to public information posted on the Internet. The City of Detroit does not endorse or provide preferential treatment to any third party websites or associated organizations or persons. Additionally, the City of Detroit does not control third party sites and therefore it does not warrant that third party sites are accurate or, reliable, or that they have operational links. The privacy policies here do not necessarily apply to external websites. You may either contact the external websites or read their Privacy Policies or Statements to find out what their data collection and distribution polices are. - ---- - -### Ownership - -In general, information presented on this web site is considered in the public domain. It may be distributed or copied as permitted by law. However, the City of Detroit does make some use of copyrighted data such as photographs which may require additional permissions prior to your use. In order to use any information on this web site not owned or created by the City of Detroit, you must seek permission directly from the owning (or holding) sources. If you are unsure of whether information is in the public domain or privately owned, please contact [safiya.merchant@detroitmi.gov](mailto:safiya.merchant@detroitmi.gov). The City of Detroit shall have the right to use for any purpose, at no charge, all information submitted on the City of Detroit site. This right may only be limited if a submission is made under separate legal contract. The City of Detroit shall be free to use, for any purpose, any ideas, concepts, or techniques contained in information provided through this site. - ---- diff --git a/sites/public/page_content/locale_overrides/ar.json b/sites/public/page_content/locale_overrides/ar.json index a0c6cfd042..91533f8ffd 100644 --- a/sites/public/page_content/locale_overrides/ar.json +++ b/sites/public/page_content/locale_overrides/ar.json @@ -1,28 +1,21 @@ { - "welcome": { - "title": "العثور على سكن للإيجار بأسعار معقولة في Detroit", - "heroText": "Detroit Home Connect هو مكان لك للعثور على سكن يمكنك تحمل تكاليفه بناءً على احتياجاتك المنزلية." - }, - "nav": { - "siteTitle": "ديترويت هوم كونيكت" - }, - "region": { - "name": "ديترويت" - }, - "footer": { - "copyright": "مدينة ديترويت © 2021 • جميع الحقوق محفوظة", - "header": "ديترويت هوم كونيكت", - "headerLink": "مدينة ديترويت", - "forGeneralInquiries": "للاستفسارات العامة حول البرنامج:", - "youMayCall": "يمكنك الاتصال بمدينة ديترويت HRD على:", - "forListingQuestions": "للحصول على قائمة الأسئلة والتطبيق:", - "pleaseContact": "প্রতিটি তালিকায় প্রদর্শিত সম্পত্তি এজেন্টের সাথে যোগাযোগ করুন।" - }, - "leasingAgent": { - "contact": "شركة إدارة", - "dueToHighCallVolume": "" - }, - "listingFilters": { - "resetButton": "انظر جميع القوائم" - } + "welcome.title": "العثور على سكن للإيجار بأسعار معقولة في Detroit", + "welcome.heroText": "مصدرك للعثور على سكن متعدد الأُسر بناءً على دخلك واحتياجات أسرتك", + "welcome.seeMoreOpportunitiesTruncated": "الاطلاع على المزيد من موارد الإسكان معقول التكلفة", + "welcome.viewAdditionalHousingTruncated": "عرض الموارد", + "nav.siteTitle": "ديترويت هوم كونيكت", + "region.name": "ديترويت", + "footer.copyright": "مدينة ديترويت © 2021 • جميع الحقوق محفوظة", + "footer.header": "ديترويت هوم كونيكت", + "footer.headerLink": "مدينة ديترويت", + "footer.forGeneralInquiries": "للاستفسارات العامة حول البرنامج:", + "footer.youMayCall": "يمكنك الاتصال بمدينة ديترويت HRD على:", + "footer.forListingQuestions": "للحصول على قائمة الأسئلة والتطبيق:", + "footer.pleaseContact": "‫يرجى الاتصال بوكلاء العقارات في كل قائمة.‬", + "leasingAgent.contact": "شركة إدارة", + "leasingAgent.dueToHighCallVolume": "", + "listingFilters.resetButton": "انظر جميع القوائم", + "pageTitle.additionalResources": "موارد إسكان إضافية", + "pageDescription.resources": "جمعت إدارة الإسكان والتعمير بمدينة ديترويت قائمة بالموارد لمساعدتك على العثور على مسكنك وصيانته.", + "pageDescription.additionalResources": "نشجعك على تصفح الموارد الإضافية في رحلة بحثك عن السكن" } diff --git a/sites/public/page_content/locale_overrides/bn.json b/sites/public/page_content/locale_overrides/bn.json index 44b7c1975e..951d08a0e9 100644 --- a/sites/public/page_content/locale_overrides/bn.json +++ b/sites/public/page_content/locale_overrides/bn.json @@ -1,28 +1,21 @@ { - "welcome": { - "title": "Detroit এ সাশ্রয়ী মূল্যের ভাড়া আবাসন খুঁজুন", - "heroText": "Detroit Home Connect হল আপনার জন্য আবাসন খোঁজার জায়গা যা আপনি আপনার পরিবারের প্রয়োজনের ভিত্তিতে সামর্থ্য করতে পারেন।" - }, - "nav": { - "siteTitle": "ডেট্রয়েট হোম কানেক্ট" - }, - "region": { - "name": "ডেট্রয়েট" - }, - "footer": { - "copyright": "ডেট্রয়েট শহর © 2021 • সর্বস্বত্ব সংরক্ষিত", - "header": "ডেট্রয়েট হোম সংযোগ", - "headerLink": "ডেট্রয়েট শহর", - "forGeneralInquiries": "সাধারণ প্রোগ্রাম অনুসন্ধানের জন্য:", - "youMayCall": "আপনি ডেট্রয়েট এইচআরডি সিটিতে কল করতে পারেন:", - "forListingQuestions": "তালিকা এবং অ্যাপ্লিকেশন প্রশ্নের জন্য:", - "pleaseContact": "প্রতিটি তালিকায় প্রদর্শিত সম্পত্তি এজেন্টের সাথে যোগাযোগ করুন।" - }, - "leasingAgent": { - "contact": "ব্যবস্থাপনা কোম্পানি", - "dueToHighCallVolume": "" - }, - "listingFilters": { - "resetButton": "সমস্ত তালিকা দেখুন" - } + "welcome.title": "Detroit এ সাশ্রয়ী মূল্যের ভাড়া আবাসন খুঁজুন", + "welcome.heroText": "আপনার আয় এবং পরিবারের চাহিদার উপর ভিত্তি করে একাধিক-পারিবারিক আবাসন অনুসন্ধানের লক্ষ্যে আপনার সম্পদ", + "welcome.seeMoreOpportunitiesTruncated": "আরও সাশ্রয়ী মূল্যের আবাসন দেখুন", + "welcome.viewAdditionalHousingTruncated": "সম্পদ দেখুন", + "nav.siteTitle": "ডেট্রয়েট হোম কানেক্ট", + "region.name": "ডেট্রয়েট", + "footer.copyright": "ডেট্রয়েট শহর © 2021 • সর্বস্বত্ব সংরক্ষিত", + "footer.header": "ডেট্রয়েট হোম সংযোগ", + "footer.headerLink": "ডেট্রয়েট সিটি", + "footer.forGeneralInquiries": "সাধারণ প্রোগ্রাম অনুসন্ধানের জন্য:", + "footer.youMayCall": "আপনি ডেট্রয়েট এইচআরডি সিটিতে কল করতে পারেন:", + "footer.forListingQuestions": "তালিকা এবং অ্যাপ্লিকেশন প্রশ্নের জন্য:", + "footer.pleaseContact": "প্রতিটি তালিকায় প্রদর্শিত সম্পত্তি এজেন্টের সাথে যোগাযোগ করুন।", + "leasingAgent.contact": "ব্যবস্থাপনা কোম্পানি", + "leasingAgent.dueToHighCallVolume": "", + "listingFilters.resetButton": "সমস্ত তালিকা দেখুন", + "pageTitle.additionalResources": "অতিরিক্ত আবাসন সম্পদ", + "pageDescription.resources": "সিটি অফ ডেট্রয়েট হাউজিং অ্যান্ড রিভাইটালাইজেশন ডিপার্টমেন্ট আপনাকে আপনার আবাসন খুঁজে পেতে এবং বজায় রাখতে সহায়তা করার জন্য সংস্থানগুলির একটি তালিকা তৈরি করেছে। এই পৃষ্ঠার শেষে, আপনি চারটি ছোট ভিডিওও পাবেন যেখানে আপনি সাশ্রয়ী মূল্যের আবাসনের জন্য আবেদন প্রক্রিয়া সম্পর্কে আরও জানতে পারবেন।", + "pageDescription.additionalResources": "আমরা আপনাকে আবাসনের জন্য আপনার অনুসন্ধানে অতিরিক্ত সম্পদ ব্রাউজ করতে উৎসাহিত করি" } diff --git a/sites/public/page_content/locale_overrides/es.json b/sites/public/page_content/locale_overrides/es.json index b25a305afc..7f986434c6 100644 --- a/sites/public/page_content/locale_overrides/es.json +++ b/sites/public/page_content/locale_overrides/es.json @@ -1,28 +1,21 @@ { - "welcome": { - "title": "Encuentre viviendas de alquiler asequibles en Detroit", - "heroText": "Detroit Home Connect es un lugar para que encuentre una vivienda que pueda pagar según las necesidades de su hogar." - }, - "nav": { - "siteTitle": "Detroit Home Connect" - }, - "region": { - "name": "Detroit" - }, - "footer": { - "copyright": "Ciudad de Detroit © 2021 • Todos los derechos reservados", - "header": "Detroit Home Connect", - "headerLink": "Ciudad de Detroit", - "forGeneralInquiries": "Para consultas generales sobre programas:", - "youMayCall": "Puede llamar al Departamento de Recursos Humanos de la ciudad de Detroit al:", - "forListingQuestions": "Para preguntas sobre listas y solicitudes:", - "pleaseContact": "Comuníquese con el agente inmobiliario que se muestra en cada listado." - }, - "leasingAgent": { - "contact": "Empresa de gestión", - "dueToHighCallVolume": "" - }, - "listingFilters": { - "resetButton": "Ver Todos los Listados" - } + "welcome.title": "Encuentre viviendas de alquiler asequibles en Detroit", + "welcome.heroText": "Su recurso para encontrar viviendas multifamiliares según sus ingresos y necesidades de vivienda", + "welcome.seeMoreOpportunitiesTruncated": "Ver más recursos de viviendas asequibles", + "welcome.viewAdditionalHousingTruncated": "Ver recursos", + "nav.siteTitle": "Detroit Home Connect", + "region.name": "Detroit", + "footer.copyright": "Ciudad de Detroit © 2021 • Todos los derechos reservados", + "footer.header": "Detroit Home Connect", + "footer.headerLink": "Ciudad de Detroit", + "footer.forGeneralInquiries": "Para consultas generales sobre programas:", + "footer.youMayCall": "Puede llamar al Departamento de Recursos Humanos de la ciudad de Detroit al:", + "footer.forListingQuestions": "Para preguntas sobre listas y solicitudes:", + "footer.pleaseContact": "Comuníquese con el agente inmobiliario que se muestra en cada listado.", + "leasingAgent.contact": "Empresa de gestión", + "leasingAgent.dueToHighCallVolume": "", + "listingFilters.resetButton": "Ver Todos los Listados", + "pageDescription.resources": "El Departamento de Vivienda y Revitalización de la Ciudad de Detroit ha compilado una lista de recursos para ayudarlo a encontrar y mantener su vivienda. Al final de esta página, también encontrará cuatro videos breves donde podrá obtener más información sobre el proceso de solicitud de vivienda asequible.", + "pageDescription.additionalResources": "El Departamento de Vivienda y Revitalización de la ciudad de Detroit ha compilado una lista de recursos para ayudarle a encontrar y mantener su vivienda.", + "pageTitle.additionalResources": "Recursos de vivienda adicionales" } diff --git a/sites/public/page_content/locale_overrides/general.json b/sites/public/page_content/locale_overrides/general.json index 0e3973398e..5062d045f3 100644 --- a/sites/public/page_content/locale_overrides/general.json +++ b/sites/public/page_content/locale_overrides/general.json @@ -2,10 +2,10 @@ "welcome.title": "Find affordable rental housing in Detroit", "welcome.heroText": "Your resource to find multi-family housing based on your income and household needs", "welcome.signUp": "Get emailed whenever a new listing is posted", + "nav.rentals": "Rentals", "welcome.seeMoreOpportunitiesTruncated": "See more affordable housing resources", "welcome.viewAdditionalHousingTruncated": "View resources", "nav.siteTitle": "Detroit Home Connect", - "nav.rentals": "Rentals", "region.name": "Detroit", "footer.copyright": "City of Detroit © 2022 • All Rights Reserved", "footer.header": "Detroit Home Connect", @@ -22,5 +22,8 @@ "listings.communityPrograms": "Community Programs", "listings.communityProgramsDescription": "This program includes opportunities for members of specific communities", "pageTitle.additionalResources": "Additional Housing Resources", - "pageDescription.additionalResources": "We encourage you to browse additional resources in your search for housing." + "pageDescription.resources": "The City of Detroit Housing and Revitalization Department has compiled a list of resources to help you find and maintain your housing. At the end of this page, you will also find four short videos where you can learn more about the application process for affordable housing.", + "pageDescription.additionalResources": "We encourage you to browse additional resources in your search for housing.", + "errors.minGreaterThanMaxRentError": "Min Rent must be less than or equal to Max Rent", + "errors.maxLessThanMinRentError": "Max Rent must be greater than or equal to Min Rent" } diff --git a/sites/public/page_content/privacy_policy.md b/sites/public/page_content/privacy_policy.md index 8ec5025235..603775e5b0 100644 --- a/sites/public/page_content/privacy_policy.md +++ b/sites/public/page_content/privacy_policy.md @@ -1,23 +1,40 @@ -Thank you for visiting the City of Detroit website and reviewing our privacy policy. The information contained on this website is collected and maintained for the benefit of the public. While the City of Detroit makes best efforts to maintain accurate information the City of Detroit does not endorse the authenticity of information that originates from third parties. + ---- +### Privacy Statement -### Your Personal Information +This web site is created and maintained by the City of Detroit (City) for the benefit of the public. -The City of Detroit will not collect personal information about you when you visit our website unless you choose to provide that information to us. We do not give, share, sell, or transfer any personal information. +### Privacy Policy -Some of our online services require you to register for an account. We ask you for some personal information in order to create an account (typically your name, email address and a password for your account) and we will use that information to provide the service. +Information collected from any user of the City's web site or online service shall be used or disclosed for official purposes only, or to comply with any state or federal law. Unless required by law, necessary to provide the online services or consent of the website user has been obtained, the City will not intentionally disclose any Personally Identifiable Information (PII ) of its web users to any third-party. +The City recognizes and respects individuals' online privacy. The City complies with HIPAA, Michigan Internet Privacy Protection Act, Social Security Number Privacy Act, National Crime Prevent ion and Privacy Act, Child Identification and Protection Act, Michigan City Income Tax Act, Crime Victims Act, etc. Please be advised, however, the City is required to comply with the Michigan Freedom of Information Act (FOIA) and may be required to disclose user information pursuant to subpoenas, court orders, or any other state or federal law, including for any law enforcement purposes. -Information that you voluntarily provide to us through our optional online feedback form is used to help enhance our website. It may be used internally by the City of Detroit employees and contractors for that purpose alone. When you visit a City of Detroit website, you should be aware that data linking your computer to a particular website (a "cookie") may be created. Temporary cookies may be used when necessary to complete a transaction, to process data submitted to us online, to facilitate an ongoing Internet interaction, or to understand trends in the use of City of Detroit websites. Cookies do not compromise your privacy or security. Using web browser settings, you can refuse the cookies or delete the cookie file from your computer by using any of the widely available methods. +### Information Collected by the City -### Traffic Analysis and Security +As you use this website, the City will be collecting information from you, which may be used for official purposes, including but not limited to: statistically measure certain site traffic, improve the web site, and enhance its online services capabilities. Certain information may be collected from you automatically when you view this website, register your account and download information. This information may include, but may not be limited to, the following: -We do analyze user traffic patterns on our website automatically through your browser. This information includes the IP address of your computer or network, current date, current time, your browser, and operating system, the page(s) you visited on our website, and the referring page (page that you came from). We use the aggregated information from all of our visitors to measure and improve site performance, analyze user traffic, and to improve the content of our site. At times, we may track the keywords entered into our search engines from all users to find out which topics are popular although we don't keep track of specific words that any one user enters. +- Your internet protocol address (IP Address) assigned by your internet service provider. +- Your domain name; +- The type of browser and operating system used by you; +- The date and time you accessed the City's web site; +- The pages you requested and/or visited; and +- The link site from where you to were able to obtain certain information. -We only use this information to measure server performance, to improve the content on our website, and to guarantee a high level of security for all users. Unauthorized attempts to upload or modify information in any way are forbidden. Users who are visiting the City of Detroit website are also expressly consenting to this monitoring of network traffic. +The information collected may be reviewed on used in the aggregate with other users for comparison and/or statistical purposes to improve the efficiency and quality this website, including any services provided via this website. +Certain PII will be collected from you in order to: -Information that you voluntarily provide to us through our optional online feedback form is used to help enhance our website. It may be used internally by the City of Detroit employees and contractors for that purpose alone. When you visit a City of Detroit website, you should be aware that data linking your computer to a particular website (a "cookie") may be created. Temporary cookies may be used when necessary to complete a transaction, to process data submitted to us online, to facilitate an ongoing Internet interaction, or to understand trends in the use of City of Detroit websites. Cookies do not compromise your privacy or security. Using web browser settings, you can refuse the cookies or delete the cookie file from your computer by using any of the widely available methods. +
    +- complete a request for an online service; or +- to register for the website account. +
    ---- +Any information you submit online will be treated as if you had submitted the information in-person rather than over the Internet. The City uses the Pll you provide to tailor your use of the website to your needs and preferences; and to provide the online services you are requesting. -_Updated September 21, 2021_ +### Disclaimer + +This website contains hyperlinks to other websites on the Internet which are not under the control of the City. These links to other web sites do not constitute nor imply the City’s endorsement of the content, viewpoint, and/or accuracy of information posted on the other websites. The mere fact that this website links to other web sites does not mean that the City represents the contents or the policies of other web sites. Providing these links serves only as a convenience to this website’s users. +The City does not warrant or make any representations as to the quality, content, accuracy or completeness of the information, graphics, links and other items contained in this website or any that may be website hyperlinked. Such materials have been compiled from a variety of sources and are subject to change without notice by the City. Commercial use of the information or our online services is prohibited without written permission of the City of Detroit. diff --git a/sites/public/page_content/resources/civil_rights_inclusion_opportunity.md b/sites/public/page_content/resources/civil_rights_inclusion_opportunity.md index 70f9c7522d..4874870c53 100644 --- a/sites/public/page_content/resources/civil_rights_inclusion_opportunity.md +++ b/sites/public/page_content/resources/civil_rights_inclusion_opportunity.md @@ -1,3 +1,31 @@ + + ### [City of Detroit Civil Rights, Inclusion, and Opportunity Department](https://detroitmi.gov/departments/civil-rights-inclusion-opportunity-department) CRIO's Civil Rights team investigates discrimination complaints and provides language and translation services. It also houses the Office of Disability Affairs for the City of Detroit. + + + + + +### [Departamento de Derechos Civiles, Inclusión y Oportunidades de la ciudad de Detroit (CRIO, por sus siglas en inglés)](https://detroitmi.gov/departments/civil-rights-inclusion-opportunity-department) + +El equipo de derechos civiles del CRIO investiga las denuncias de discriminación y brinda servicios de idioma y traducción. Además, incluye a la Oficina de Asuntos de Discapacidad de la ciudad de Detroit. + + + + + +### [إدارة الحقوق المدنية والاندماج والفرص في مدينة ديترويت](https://detroitmi.gov/departments/civil-rights-inclusion-opportunity-department) + +يحقق فريق الحقوق المدنية التابع لإدارة الحقوق المدنية والاندماج والفرص في مدينة ديترويت (CRIO) في شكاوى التمييز ويوفر خدمات اللغة والترجمة. ويشمل كذلك مكتب شؤون المعاقين في مدينة ديترويت. + + + + + +### [ডেট্রয়েট শহরের নাগরিক অধিকার, অন্তর্ভুক্তি এবং সুযোগ বিভাগ](https://detroitmi.gov/departments/civil-rights-inclusion-opportunity-department) + +CRIO-এর নাগরিক অধিকার দল বৈষম্যের অভিযোগ তদন্ত করে এবং ভাষা ও অনুবাদ পরিষেবা প্রদান করে। এটি ডেট্রয়েট শহরের জন্য প্রতিবন্ধী বিষয়ক কাজও সম্পাদন করে। + + diff --git a/sites/public/page_content/resources/enforce_property_conditions.md b/sites/public/page_content/resources/enforce_property_conditions.md index c51a9658e6..b3a655f90c 100644 --- a/sites/public/page_content/resources/enforce_property_conditions.md +++ b/sites/public/page_content/resources/enforce_property_conditions.md @@ -1,3 +1,31 @@ + + ### [Enforce Property Conditions](https://detroitmi.gov/departments/buildings-safety-engineering-and-environmental-department) If your landlord fails to provide a well-maintained home, you can submit complaints regarding property maintenance code violations directly to the City of Detroit BSEED. Please contact BSEED at [313-628-2451](tel:+1-313-628-2451) to discuss complaints. + + + + + +### [Haga que las condiciones de la propiedad se cumplan](https://detroitmi.gov/departments/buildings-safety-engineering-and-environmental-department) + +Si su arrendador no proporciona un hogar bien mantenido, puede presentar una queja sobre las violaciones del código de mantenimiento de la propiedad directamente ante el Departamento de Edificios, Seguridad, Ingeniería y Medio Ambiente (BSEED, por sus siglas en inglés) de la ciudad de Detroit. Llame al Departamento de Edificios, Seguridad, Ingeniería y Medio Ambiente al [313-628-2451](tel:+1-313-628-2451) para hablar sobre las quejas. + + + + + +### [إنفاذ شروط العقارات](https://detroitmi.gov/departments/buildings-safety-engineering-and-environmental-department) + +إذا لم يوفر لك صاحب العقار منزلاً بحالة جيدة، فيمكنك تقديم الشكاوى بشأن مخالفات قانون صيانة العقارات بشكل مباشر إلى إدارة المباني وهندسة السلامة والبيئة (BSEED) التابعة لمدينة ديترويت. يُرجى الاتصال بإدارة المباني وهندسة السلامة والبيئة على الرقم [3136282451](tel:+1-313-628-2451) لمناقشة الشكاوى. + + + + + +### [সম্পদের শর্তাবলি প্রয়োগ করুন](https://detroitmi.gov/departments/buildings-safety-engineering-and-environmental-department) + +আপনার বাড়িওয়ালা একটি ভালোভাবে রক্ষণাবেক্ষণকৃত বাড়ি প্রদানে ব্যর্থ হলে আপনি সরাসরি ডেট্রয়েট সিটির BSEED-এ সম্পত্তি রক্ষণাবেক্ষণ কোড লঙ্ঘন সংক্রান্ত অভিযোগ দায়ের করতে পারেন। অভিযোগ নিয়ে আলোচনা করতে অনুগ্রহ করে [313-628-2451](tel:+1-313-628-2451) নম্বরে BSEED এর সাথে যোগাযোগ করুন। + + diff --git a/sites/public/page_content/resources/eviction_prevention.md b/sites/public/page_content/resources/eviction_prevention.md index a51aa1ab80..f4c9c8aeeb 100644 --- a/sites/public/page_content/resources/eviction_prevention.md +++ b/sites/public/page_content/resources/eviction_prevention.md @@ -1,3 +1,38 @@ + + ### Eviction Prevention and Legal Assistance Several agencies in Detroit provide legal assistance to low-income households facing eviction and other issues. Organizations to call include the [United Community Housing Coalition](https://www.uchcdetroit.org/) ([313-963-3310](tel:+1-313-963-3310)), [Lakeshore Legal Aid](https://lakeshorelegalaid.org/) ([888-783-8190](tel:+1-888-783-8190)), and the [Legal Aid and Defender Association](https://ladadetroit.org/) ([313-967-5800](tel:+1-313-967-5800)). + + + + + +### Prevención del desalojo y asistencia legal + +Varias agencias de Detroit brindan asistencia legal a viviendas de bajos recursos que enfrentan problemas de desalojo y de otra índole. Las organizaciones a las cuales recurrir incluyen las siguientes: [United Community Housing Coalition](https://www.uchcdetroit.org/) ([313-963-3310](tel:+1-313-963-3310)), [Lakeshore Legal Aid](https://lakeshorelegalaid.org/) ([888-783-8190](tel:+1-888-783-8190)), y la [Legal Aid and Defender Association](https://ladadetroit.org/) ([313-967-5800](tel:+1-313-967-5800)). + + + + + +### منع الطرد والمساعدة القانونية + +تقدم العديد من الوكالات في ديترويت المساعدة القانونية للأسر ذات الدخل المنخفض المهددة بالطرد وغيرها من القضايا. تشمل المنظمات التي يجب الاتصال بها كلاً من + +[United Community Housing Coalition](https://www.uchcdetroit.org/) ([3139633310](tel:+1-313-963-3310)) +، و +[Lakeshore Legal Aid](https://lakeshorelegalaid.org/) ([8887838190](tel:+1-888-783-8190)) +، و +[Legal Aid and Defender Association](https://ladadetroit.org/) ([3139675800](tel:+1-313-967-5800)) +. + + + + + +### [ডেট্রয়েট হাউজিং নেটওয়ার্ক](https://detroitmi.gov/departments/buildings-safety-engineering-and-environmental-department) + +ডেট্রয়েট হাউজিং নেটওয়ার্ক বেশ কয়েকটি কমিউনিটি সংগঠন সমন্বয়ে গঠিত যা বাসিন্দাদের আর্থিক এবং বন্ধক বিষয়ক পরামর্শ এবং সম্পত্তি কর ও বাড়ি মেরামত সহায়তাসহ বিভিন্ন ধরনের আবাসন পরিষেবা প্রদান করে। + + diff --git a/sites/public/page_content/resources/fair_housing.md b/sites/public/page_content/resources/fair_housing.md index b8c9989c4f..9839b62b0f 100644 --- a/sites/public/page_content/resources/fair_housing.md +++ b/sites/public/page_content/resources/fair_housing.md @@ -1,3 +1,32 @@ + + ### [Fair Housing](https://www.fairhousingdetroit.org/) The Fair Housing Center of Metropolitan Detroit works to make sure residents have equal access to housing and are not discriminated against based on their identity. They provide housing assistance and counseling, as well as assistance to those pursuing legal cases related to fair housing issues. For more information, call [313-579-3247](tel:+1-313-579-3247). + + + + + +### Equidad para acceder a la vivienda + +El Centro de Vivienda Justa del área metropolitana de Detroit trabaja para asegurar que los residentes tengan un acceso justo a la vivienda y que no sean discriminados por su identidad. El centro brinda asistencia y asesoramiento en materia de vivienda, además de ayuda para iniciar procesos judiciales en relación con problemas de vivienda justa. Para obtener más información, llame al [313-579-3247](tel:+1-313-579-3247). + + + + + +### الإسكان العادل + +يعمل مركز الإسكان العادل في ميتروبوليتان ديترويت على ضمان تمتع السكان بالمساواة في الحصول على السكن وعدم التمييز ضدهم على أساس هوياتهم. حيث يقدم المركز المساعدة والإرشاد في مجال الإسكان، فضلاً عن مساعدة الذين يقيمون الدعاوى القانونية المتعلقة بقضايا الإسكان العادل. ولمزيد من المعلومات، اتصل بالرقم +[3135793247](tel:+1-313-579-3247). + + + + + +### ন্যায্য আবাসন + +মেট্রোপলিটন ডেট্রয়েট এর ফেয়ার হাউজিং সেন্টার এটা নিশ্চিত করতে কাজ করে যে, আবাসনে বাসিন্দাদের সমান অ্যাক্সেস রয়েছে এবং তাদের পরিচয়ের ভিত্তিতে বৈষম্য করা হয় না। তারা আবাসন সহায়তা এবং পরামর্শ প্রদান করে, সেইসাথে ন্যায্য আবাসন সংক্রান্ত সমস্যা সম্বলিত আইনি মামলায় জড়িত ব্যক্তিদের সহায়তা করে৷ আরও তথ্যের জন্য [313-579-3247](tel:+1-313-579-3247) নম্বরে কল করুন। + + diff --git a/sites/public/page_content/resources/financial_counseling.md b/sites/public/page_content/resources/financial_counseling.md index 5a290c40c5..6506074c8e 100644 --- a/sites/public/page_content/resources/financial_counseling.md +++ b/sites/public/page_content/resources/financial_counseling.md @@ -1,3 +1,31 @@ + + ### [Financial Counseling](https://detroitmi.gov/departments/department-neighborhoods/financial-empowerment-center-fec) The Financial Empowerment Center (FEC) offers professional, one-on-one financial counseling as a free public service to enable residents to address their financial challenges, needs, and plan for their futures. To schedule an appointment, call [313-322-6222](tel:+1-313-322-6222). + + + + + +### [Asesoramiento financiero](https://detroitmi.gov/departments/department-neighborhoods/financial-empowerment-center-fec) + +El Centro de Empoderamiento Financiero (FEC, por sus siglas en inglés) ofrece asesoramiento financiero profesional y personalizado de manera pública y gratuita y permite a los residentes abordar sus dificultades y necesidades financieras y planificar sus futuros. Para agendar una cita, llame al [313-322-6222](tel:+1-313-322-6222). + + + + + +### [الاستشارة المالية](https://detroitmi.gov/departments/department-neighborhoods/financial-empowerment-center-fec) + +يقدم مركز التمكين المالي (FEC) استشارات مالية مهنية فردية كخدمة عامة مجانية لتمكين السكان من مواجهة تحدياتهم المالية وتلبية احتياجاتهم والتخطيط لمستقبلهم. لحجز موعد، اتصل بالرقم [3133226222](tel:+1-313-322-6222). + + + + + +### [মিশিগান 211](https://detroitmi.gov/departments/department-neighborhoods/financial-empowerment-center-fec) + +আর্থিক ক্ষমতায়ন কেন্দ্র (FEC) বিনামূল্যের জনসেবা হিসাবে বাসিন্দাদের তাদের আর্থিক চ্যালেঞ্জ ও চাহিদা মোকাবিলা এবং তাদের ভবিষ্যৎ পরিকল্পনার ক্ষেত্রে সক্ষম করার জন্য আর্থিক বিষয়ে পেশাদার, ওয়ান-টু-ওয়ান পরামর্শ প্রদান করে। অ্যাপয়েন্টমেন্ট নির্ধারণ করতে [313-322-6222](tel:+1-313-322-6222) নম্বরে কল করুন। + + diff --git a/sites/public/page_content/resources/home_repair.md b/sites/public/page_content/resources/home_repair.md index 208c276c77..69e537486f 100644 --- a/sites/public/page_content/resources/home_repair.md +++ b/sites/public/page_content/resources/home_repair.md @@ -1,3 +1,31 @@ + + ### [Home Repair](https://detroitmi.gov/departments/housing-and-revitalization-department/residents) No-interest home repair loans are available for eligible households. The City of Detroit also operates programs to ensure lead hazards are removed from homes. + + + + + +### Reparaciones de la vivienda + +Se encuentran disponibles préstamos sin intereses para reparación de viviendas elegibles. Asimismo, la ciudad de Detroit gestiona programas para garantizar la eliminación de peligros causados por el plomo en las viviendas. + + + + + +### إصلاح المنازل + +تتوفر قروض إصلاح المنازل بدون فوائد للأسر المؤهلة. كما تدير مدينة ديترويت أيضًا البرامج لضمان التخلص من مخاطر الرصاص في المنازل. + + + + + +### বাড়ি মেরামত + +যোগ্য পরিবারের জন্য বিনা সুদে বাড়ি মেরামতের ঋণ পাওয়া যায়। ডেট্রয়েট সিটিও বাড়ি থেকে সীসার বিপদ দূর করার বিষয়টি নিশ্চিত করার লক্ষ্যে কর্মসূচি পরিচালনা করে। + + diff --git a/sites/public/page_content/resources/homelessness_services.md b/sites/public/page_content/resources/homelessness_services.md index 32c859844d..cd26ccd57c 100644 --- a/sites/public/page_content/resources/homelessness_services.md +++ b/sites/public/page_content/resources/homelessness_services.md @@ -1,3 +1,33 @@ + + ### [Homelessness Services and Shelter Access](http://www.camdetroit.org/) Access emergency shelter by contacting CAM Detroit. Call CAM Detroit at [(313) 305-0311](tel:+1-313-305-0311). For the most up to date information on CAM hours, visit [www.camdetroit.org](http://www.camdetroit.org/). In-person services are available for veterans at 4646 John R. St., Red Tower, 2nd Floor, Detroit MI 48201. + + + + + +### [Servicios para personas sin hogar y acceso a refugios](http://www.camdetroit.org/) + +Acceda a refugios de emergencia llamando a CAM Detroit al (313) 305-0311. Para obtener información actualizada sobre los horarios del CAM, visite [www.camdetroit.org](http://www.camdetroit.org/). Se encuentran disponibles servicios presenciales para veteranos en la siguiente dirección: 4646 John R. St., Red Tower, 2nd Floor, Detroit MI 48201. + + + + + +### [خدمات المشردين والحصول على مأوى](http://www.camdetroit.org/) + +يمكنك الوصول إلى مأوى الطوارئ من خلال الاتصال بكنائس المعونة المسيحية (CAM) في ديترويت. اتصل بكنائس المعونة المسيحية (CAM) في ديترويت على الرقم +[3133050311](tel:+1-313-305-0311) +. للحصول على أحدث المعلومات حول ساعات عمل كنائس المعونة المسيحية، تفضل بزيارة [www.camdetroit.org](http://www.camdetroit.org/). تتوفر الخدمات الشخصية للمحاربين القدامى في العنوان 4646 John R. St., Red Tower, 2nd Floor, Detroit MI 48201. + + + + + +### [গৃহহীনতার ক্ষেত্রে পরিষেবা এবং আশ্রয়ে অ্যাক্সেস](http://www.camdetroit.org/) + +সিএএম ডেট্রয়েট এর সাথে যোগাযোগ করে জরুরি আশ্রয়ে অ্যাক্সেস করুন। সিএএম ডেট্রয়েটকে [(313) 305-0311](tel:+1-313-305-0311) নম্বরে কল করুন। সিএএম ঘণ্টার সবচেয়ে আপডেট তথ্যের জন্য www.[www.camdetroit.org](http://www.camdetroit.org/) দেখুন। 4646 John R. St., Red Tower, 2nd Floor, Detroit MI 48201-এ প্রাক্তন সমরকর্মীদের জন্য ব্যক্তিগত পরিষেবা পাওয়া যায়। + + diff --git a/sites/public/page_content/resources/homeowner_property_tax_relief.md b/sites/public/page_content/resources/homeowner_property_tax_relief.md index 19f708d933..e1edfa662d 100644 --- a/sites/public/page_content/resources/homeowner_property_tax_relief.md +++ b/sites/public/page_content/resources/homeowner_property_tax_relief.md @@ -1,3 +1,31 @@ + + ### [Homeowner Property Tax Relief](https://detroitmi.gov/government/boards/property-assessment-board-review/homeowners-property-exemption-hope) City/County programs can help income eligible homeowners reduce current and back taxes. You must re-apply annually. + + + + + +### [Alivio fiscal para propietarios de viviendas](https://detroitmi.gov/government/boards/property-assessment-board-review/homeowners-property-exemption-hope) + +Los programas de la ciudad y el condado pueden ayudar a los propietarios de viviendas que reúnen los requisitos de ingresos para reducir los impuestos actuales y atrasados. Usted debe renovar su postulación anualmente. + + + + + +### [إعفاء الضرائب العقارية لمالكي المنازل](https://detroitmi.gov/government/boards/property-assessment-board-review/homeowners-property-exemption-hope) + +يمكن لبرامج المدينة/المقاطعة مساعدة مالكي المنازل المؤهلين حسب الدخل على تخفيض الضرائب الحالية والمتأخرة. يجب عليك إعادة تقديم الطلب سنويًا. + + + + + +### [বাড়ির মালিকের সম্পত্তি কর ছাড়](https://detroitmi.gov/government/boards/property-assessment-board-review/homeowners-property-exemption-hope) + +সিটি/কাউন্টির কর্মসূচি আয়ের ভিত্তিতে যোগ্য বাড়ির মালিকদের বর্তমান এবং পূর্বের কর কমাতে সহায়তা করতে পারে। আপনাকে বার্ষিক ভিত্তিতে পুনরায় আবেদন করতে হবে। + + diff --git a/sites/public/page_content/resources/housing_and_revitalization.md b/sites/public/page_content/resources/housing_and_revitalization.md index 13b2c6d5c6..4262e8a97b 100644 --- a/sites/public/page_content/resources/housing_and_revitalization.md +++ b/sites/public/page_content/resources/housing_and_revitalization.md @@ -1,3 +1,31 @@ + + ### [City of Detroit Housing and Revitalization Department](https://detroitmi.gov/departments/housing-and-revitalization-department) The Housing and Revitalization Department supports the development, rehabilitation, and preservation of affordable housing in the City of Detroit. For more information, call [313-224-6380](tel:+1-313-224-6380). + + + + + +### [Departamento de Vivienda y Revitalización de la ciudad de Detroit](https://detroitmi.gov/departments/housing-and-revitalization-department) + +El Departamento de Vivienda y Revitalización brinda apoyo para el desarrollo, la rehabilitación y preservación de las viviendas asequibles de la ciudad de Detroit. Para obtener más información, llame al [313-224-6380](tel:+1-313-224-6380). + + + + + +### [إدارة الإسكان والتعمير بمدينة ديترويت ](https://detroitmi.gov/departments/housing-and-revitalization-department) + +تدعم إدارة الإسكان والتعمير تطوير الإسكان معقول التكلفة في مدينة ديترويت وترميمه وصيانته. لمزيد من المعلومات، اتصل بالرقم [3132246380](tel:+1-313-224-6380). + + + + + +### [ডেট্রয়েট সিটির হাউজিং এবং রিভাইটালাইজেশন ডিপার্টমেন্ট ](https://detroitmi.gov/departments/housing-and-revitalization-department) + +হাউজিং এবং রিভাইটালাইজেশন ডিপার্টমেন্ট ডেট্রয়েট শহরে সাশ্রয়ী মূল্যের আবাসন তৈরি, পুনর্বাসন এবং সংরক্ষণে সহায়তা করে থকে। আরও তথ্যের জন্য [313-224-6380](tel:+1-313-224-6380) নম্বরে কল করুন। + + diff --git a/sites/public/page_content/resources/housing_commission.md b/sites/public/page_content/resources/housing_commission.md index 0cbf810a92..6571510f1f 100644 --- a/sites/public/page_content/resources/housing_commission.md +++ b/sites/public/page_content/resources/housing_commission.md @@ -1,3 +1,31 @@ + + ### [Detroit Housing Commission](https://www.dhcmi.org/Default.aspx) The Detroit Housing Commission operates affordable for low- and moderate-income Detroiters. The DHC also operates waitlists for its properties. For more information, call the DHC Administrative Office at [313-877-8000](tel:+1-313-877-8000) or the Assisted Housing (Section 8) Customer Service Center at [313-877-8807](tel:+1-313-877-8807). + + + + + +### [Comisión de Viviendas de Detroit (DHC, por sus siglas en inglés)](https://www.dhcmi.org/Default.aspx) + +La Comisión de Viviendas de Detroit gestiona viviendas asequibles para residentes de Detroit de bajos y medianos ingresos. Además, gestiona listas de espera para sus propiedades. Para obtener más información, llame a la Oficina Administrativa de la DHC al [313-877-8000](tel:+1-313-877-8000) o con el centro de atención al cliente para asistencia sobre viviendas (sección 8) al [313-877-8807](tel:+1-313-877-8807). + + + + + +### [لجنة الإسكان في ديترويت](https://www.dhcmi.org/Default.aspx) + +تدير لجنة الإسكان في ديترويت (DHC) المساكن بأسعار معقولة لسكان ديترويت من ذوي الدخل المنخفض والمتوسط. كما تدير لجنة الإسكان في ديترويت أيضًا قوائم الانتظار للعقارات التابعة لها. ولمزيد من المعلومات، اتصل بالمكتب الإداري التابع للجنة الإسكان في ديترويت على الرقم [3138778000](tel:+1-313-877-8000) أو مركز خدمة عملاء الإسكان المدعوم (القسم 8) على الرقم [3138778807](tel:+1-313-877-8807). + + + + + +### [ডেট্রয়েট হাউজিং কমিশন](https://www.dhcmi.org/Default.aspx) + +ডেট্রয়েট হাউজিং কমিশন কম এবং মাঝারি আয়ের ডেট্রয়েটবাসীদের জন্য সাশ্রয়ী মূল্যে কাজ করে। DHC তাদের সম্পত্তির জন্য অপেক্ষমান তালিকাও পরিচালনা করে। আরও তথ্যের জন্য [313-877-8000](tel:+1-313-877-8000) নম্বরে DHC প্রশাসনিক অফিসে অথবা [313-877-8807](tel:+1-313-877-8807) নম্বরে অ্যাসিস্টেড হাউজিং (সেকশন 8) গ্রাহক পরিষেবা কেন্দ্রে কল করুন। + + diff --git a/sites/public/page_content/resources/housing_counseling.md b/sites/public/page_content/resources/housing_counseling.md index 58c19fc7bd..f995c8f018 100644 --- a/sites/public/page_content/resources/housing_counseling.md +++ b/sites/public/page_content/resources/housing_counseling.md @@ -1,3 +1,32 @@ + + ### [Housing Counseling](https://housing.state.mi.us/webportal/default.aspx?page=counseling_start) Several agencies in the Detroit area provide housing counselors that can help you connect to resources. A certified housing counselor can help you understand your rights, get ready to purchase a home, and identify additional assistance you may be eligible for. + + + + + +### Asesoramiento sobre viviendas + +Varias agencias del área de Detroit proporcionan asesores de vivienda que pueden ayudarle a ponerse en contacto con recursos. Un asesor de vivienda certificado puede ayudarle a comprender sus derechos, a prepararse para comprar una vivienda, e identificar cualquier asistencia adicional para la que usted pudiera calificar. + + + + + +### استشارات الإسكان + +توفر العديد من الوكالات في منطقة ديترويت مستشارين للإسكان يمكنهم مساعدتك على الوصول إلى الموارد. يمكن أن يساعدك مستشار الإسكان +المعتمد على فهم حقوقك والاستعداد لشراء منزل وتحديد الإعانة الإضافية التي قد تكون مؤهلاً للحصول عليها. + + + + + +### আবাসন বিষয়ক পরামর্শ + +ডেট্রয়েট এলাকার বেশ কিছু সংস্থা আবাসন সম্পর্কিত পরামর্শ প্রদান করে যা আপনাকে সম্পদের সাথে সংযোগ স্থাপনে সাহায্য করতে পারে। একজন প্রত্যয়িত হাউজিং কাউন্সেলর আপনাকে আপনার অধিকার বুঝতে, বাড়ি কেনার জন্য প্রস্তুত হতে এবং আপনাকে যোগ্য করে তুলতে অতিরিক্ত সহায়তা শনাক্ত করতে সাহায্য করতে পারেন। + + diff --git a/sites/public/page_content/resources/housing_network.md b/sites/public/page_content/resources/housing_network.md index c5f15f3854..4e42f971cf 100644 --- a/sites/public/page_content/resources/housing_network.md +++ b/sites/public/page_content/resources/housing_network.md @@ -1,3 +1,31 @@ + + ### [Detroit Housing Network](https://detroithousingnetwork.org/) The Detroit Housing Network is comprised of several community organizations that provide a variety of housing services to residents, including financial and mortgage counseling and property tax and home repair assistance. + + + + + +### [Red de Viviendas de Detroit](https://detroithousingnetwork.org/) + +Si su arrendador no proporciona un hogar bien mantenido, puede presentar una queja sobre las violaciones del código de mantenimiento de la propiedad directamente ante el Departamento de Edificios, Seguridad, Ingeniería y Medio Ambiente (BSEED, por sus siglas en inglés) de la ciudad de Detroit. Llame al Departamento de Edificios, Seguridad, Ingeniería y Medio Ambiente al 313-628-2451 para hablar sobre las quejas. + + + + + +### [شبكة الإسكان في ديترويت](https://detroitmi.gov/departments/buildings-safety-engineering-and-environmental-department) + +تتألف شبكة الإسكان في ديترويت من العديد من المنظمات المجتمعية التي تقدم مجموعة متنوعة من خدمات الإسكان للمقيمين، بما في ذلك الاستشارات المالية والرهن العقاري والضرائب العقارية ومساعدة إصلاح المنازل. + + + + + +### [ডেট্রয়েট হাউজিং নেটওয়ার্ক](https://detroitmi.gov/departments/buildings-safety-engineering-and-environmental-department) + +ডেট্রয়েট হাউজিং নেটওয়ার্ক বেশ কয়েকটি কমিউনিটি সংগঠন সমন্বয়ে গঠিত যা বাসিন্দাদের আর্থিক এবং বন্ধক বিষয়ক পরামর্শ এবং সম্পত্তি কর ও বাড়ি মেরামত সহায়তাসহ বিভিন্ন ধরনের আবাসন পরিষেবা প্রদান করে। + + diff --git a/sites/public/page_content/resources/housing_relocation_assistance.md b/sites/public/page_content/resources/housing_relocation_assistance.md index 0b669993c2..f320d5adb4 100644 --- a/sites/public/page_content/resources/housing_relocation_assistance.md +++ b/sites/public/page_content/resources/housing_relocation_assistance.md @@ -1,3 +1,31 @@ + + ### [Housing Relocation Assistance](https://www.uchcdetroit.org/) United Community Housing Coalition works with individuals and families who are facing eviction to identify decent and affordable housing opportunities and assist with relocation. Call UCHC at [313-963-3310](tel:+1-313-963-3310). + + + + + +### [Asistencia para la reubicación de vivienda](https://www.uchcdetroit.org/) + +United Community Housing Coalition trabaja con las personas y las familias que enfrentan un desalojo para que puedan identificar oportunidades decentes y asequibles de vivienda y les brinda asistencia para su reubicación. Llame a la UCHC al [313-963-3310](tel:+1-313-963-3310). + + + + + +### [مساعدة الانتقال](https://www.uchcdetroit.org/) + +يتعاون تحالف الإسكان المجتمعي المتحد (UCHC) مع الأفراد والأُسر المهددة بالطرد لإيجاد فرص إسكان لائق وبأسعار معقولة والمساعدة على الانتقال. اتصل بتحالف الإسكان المجتمعي المتحد على الرقم [3139633310](tel:+1-313-963-3310). + + + + + +### [বাড়ির মালিকের সম্পত্তি কর ছাড়](https://www.uchcdetroit.org/) + +সিটি/কাউন্টির কর্মসূচি আয়ের ভিত্তিতে যোগ্য বাড়ির মালিকদের বর্তমান এবং পূর্বের কর কমাতে সহায়তা করতে পারে। আপনাকে বার্ষিক ভিত্তিতে পুনরায় আবেদন করতে হবে। + + diff --git a/sites/public/page_content/resources/land_bank_authority.md b/sites/public/page_content/resources/land_bank_authority.md index 78b1685dc6..4b01731dbf 100644 --- a/sites/public/page_content/resources/land_bank_authority.md +++ b/sites/public/page_content/resources/land_bank_authority.md @@ -1,3 +1,31 @@ + + ### [Detroit Land Bank Authority](https://buildingdetroit.org/) The Land Bank offers homeownership opportunities for Detroiters. For more information, call [844-BUY-DLBA](tel:+1-844-BUY-DLBA). + + + + + +### [Autoridad del Banco de Tierras de Detroit](https://buildingdetroit.org/) + +El Banco de Tierras ofrece oportunidades a los ciudadanos de Detroit para que puedan acceder a la vivienda propia. Para obtener más información, llame al [844-BUY-DLBA](tel:+1-844-BUY-DLBA). + + + + + +### [هيئة بنك الأراضي بمدينة ديترويت ](https://buildingdetroit.org/) + +يوفر بنك الأراضي فرص امتلاك المنازل لسكان ديترويت . لمزيد من المعلومات، اتصل بالرقم [844BUYDLBA](tel:+1-844-BUY-DLBA). + + + + + +### [ডেট্রয়েট ল্যান্ড ব্যাংক কর্তৃপক্ষ](https://buildingdetroit.org/) + +ল্যান্ড ব্যাঙ্ক ডেট্রয়েটবাসীদের জন্য বাড়ির মালিকানার সুযোগ প্রদান করে। আরও তথ্যের জন্য [844-BUY-DLBA](tel:+1-844-BUY-DLBA)-এ কল করুন। + + diff --git a/sites/public/page_content/resources/michigan_211.md b/sites/public/page_content/resources/michigan_211.md index be7c2ab80a..5ac84f4da4 100644 --- a/sites/public/page_content/resources/michigan_211.md +++ b/sites/public/page_content/resources/michigan_211.md @@ -1,3 +1,31 @@ + + ### [Michigan 211](https://www.mi211.org/) Michigan 211 is a free service available 24 hours a day. By calling 211, you can connect with a staff member, who will help direct you to resources in your community. They can connect you to a variety of resources, including food, help with housing, assistance paying bills, etc. + + + + + +### [Michigan 211 ](https://www.mi211.org/) + +Michigan 211 es un servicio gratuito disponible las 24 horas del día. Al llamar al 211, usted podrá conversar con un operador que lo orientará para acceder a recursos en su comunidad. Además, se podrá poner en contacto con varios recursos, lo que incluye alimento, asistencia con la vivienda, con el pago de facturas, etc. + + + + + +### [ميشيغان 211](https://www.mi211.org/) + +ميشيغان 211 هي خدمة مجانية متاحة على مدار 24 ساعة يوميًا. من خلال الاتصال بالرقم 211، يمكنك التواصل مع أحد الموظفين والذي سيقدم لك المساعدة اللازمة لتوجيهك إلى الموارد المتاحة في مجتمعك. حيث بإمكانه توصيلك بمجموعة متنوعة من الموارد، بما في ذلك الطعام، والمساعدة على السكن، والمساعدة على دفع الفواتير، وما إلى ذلك. + + + + + +### [মিশিগান 211](https://www.mi211.org/) + +মিশিগান 211 হলো একটি বিনামূল্যের পরিষেবা যা দিনে 24 ঘণ্টা পাওয়া যায়। 211 নম্বরে কল করার মাধ্যমে আপনি কোনো কর্মীর সাথে সংযোগ স্থাপন করতে পারেন, যিনি আপনাকে আপনার কমিউনিটির সম্পদ নির্দেশ করতে সহায়তা করবেন। তারা আপনাকে খাদ্য, বাসস্থান সহায়তা, বিল পরিশোধে সহায়তা ইত্যাদিসহ বিভিন্ন সম্পদের সাথে সংযুক্ত করতে পারে। + + diff --git a/sites/public/page_content/resources/project_clean_slate.md b/sites/public/page_content/resources/project_clean_slate.md index fb20c3977a..e9dfec176e 100644 --- a/sites/public/page_content/resources/project_clean_slate.md +++ b/sites/public/page_content/resources/project_clean_slate.md @@ -1,3 +1,31 @@ + + ### [Project Clean Slate (criminal expungements)](https://detroitmi.gov/departments/law-department/project-clean-slate) Project Clean Slate is a free City of Detroit program that helps residents expunge criminal convictions and improve access to better employment, housing, and educational opportunities. + + + + + +### [Project Clean Slate (eliminación de antecedentes penales)](https://detroitmi.gov/departments/law-department/project-clean-slate) + +Project Clean Slate es un programa gratuito de la ciudad de Detroit que ayuda a los residentes a eliminar los antecedentes penales y a optimizar el acceso a un mejor empleo, a una vivienda y a oportunidades educativas. + + + + + +### [مشروع الصحيفة البيضاء (شطب السجل الجنائي)](https://detroitmi.gov/departments/law-department/project-clean-slate) + +مشروع الصحيفة البيضاء (Project Clean Slate) هو برنامج مجاني تابع لمدينة ديترويت يساعد السكان على شطب الإدانات الجنائية وتحسين الوصول إلى فرص عمل وإسكان وتعليم أفضل. + + + + + +### [প্রজেক্ট ক্লিন স্লেট (অপরাধী পরিচয় মুছে ফেলা)](https://detroitmi.gov/departments/law-department/project-clean-slate) + +প্রোজেক্ট ক্লিন স্লেট হলো ডেট্রয়েট শহরের একটি বিনামূল্যের কর্মসূচি যা বাসিন্দাদের অপরাধী পরিচয় মুছে ফেলা এবং আরও ভালো কর্মসংস্থান, আবাসন ও শিক্ষার সুযোগে অ্যাক্সেস বাড়াতে সহায়তা করে। + + diff --git a/sites/public/page_content/resources/sidebar.md b/sites/public/page_content/resources/sidebar.md index 8f08d00fc1..cbbca62897 100644 --- a/sites/public/page_content/resources/sidebar.md +++ b/sites/public/page_content/resources/sidebar.md @@ -1,3 +1,5 @@ + + #### Contact **City of Detroit Housing and Revitalization Department** @@ -5,3 +7,41 @@ For listing and application questions, please contact the Property Agent displayed on the listing. For general program inquiries, you may call the Housing and Revitalization Department at [313-224-6380](tel:+13132246380). + + + + + +#### Contacto + +**Departamento de Vivienda y Revitalización de la ciudad de Detroit** + +Si tiene preguntas sobre las ofertas y solicitudes, comuníquese con el agente de bienes y raíces indicado en cada oferta. + +Para consultas generales sobre el programa, comuníquese con el Departamento de Vivienda y Revitalización al [313-224-6380](tel:+13132246380). + + + + + +#### الاتصال + +**إدارة الإسكان والتعمير بمدينة ديترويت** + +للأسئلة المتعلقة بالقوائم وتقديم الطلبات، يُرجى الاتصال بوكيل العقارات الوارد ذكره في القائمة. + +للاستفسارات العامة حول البرنامج، يمكنك الاتصال بإدارة الإسكان والتعمير على الرقم [313-224-6380](tel:+13132246380). + + + + + +#### যোগাযোগ + +**ডেট্রয়েট সিটির হাউজিং এবং রিভাইটালাইজেশন ডিপার্টমেন্ট** + +তালিকা এবং আবেদনের প্রশ্নের জন্য অনুগ্রহ করে তালিকায় প্রদর্শিত প্রোপার্টি এজেন্ট এর সাথে যোগাযোগ করুন। + +সাধারণ কর্মসূচি অনুসন্ধানের জন্য আপনি [313-224-6380](tel:+13132246380) নম্বরে হাউজিং এবং রিভাইটালাইজেশন ডিপার্টমেন্টকে কল করতে পারেন। + + diff --git a/sites/public/page_content/resources/tax_foreclosure_prevention.md b/sites/public/page_content/resources/tax_foreclosure_prevention.md index 7c6dcdaf34..ef73d0f2e3 100644 --- a/sites/public/page_content/resources/tax_foreclosure_prevention.md +++ b/sites/public/page_content/resources/tax_foreclosure_prevention.md @@ -1,3 +1,33 @@ + + ### [Tax Foreclosure Prevention](http://www.uchcdetroit.org/) Make It Home (MIH) is a home-purchase program that gives tenants living in foreclosed homes the option to purchase their home before the foreclosure auction. Call United Community Housing Coalition (UCHC) at [(313) 405-7726](tel:+1-313-405-7726). UCHC also offers counseling and homeowner solutions for those who might be at risk of foreclosure. + + + + + +### [Prevención de las ejecuciones hipotecarias ](http://www.uchcdetroit.org/) + +Make It Home (MIH) es un programa de compra de viviendas que brinda a los inquilinos residentes en viviendas afectadas por una ejecución hipotecaria la opción de comprar esa propiedad antes de la fecha de remate. Comuníquese con la United Community Housing Coalition (UCHC) al [(313) 405-7726](tel:+1-313-405-7726). Asimismo, la UCHC ofrece asesoramiento y soluciones para propietarios en riesgo de una ejecución hipotecaria. + + + + + +### [منع الحجز الضريبي](http://www.uchcdetroit.org/) + +اجعله منزلك (MIH) هو برنامج شراء منازل يمنح المستأجرين المقيمين في منازل تم الحجز عليها خيار شراء المنازل قبل مزاد الحجز العقاري. اتصل بتحالف الإسكان المجتمعي المتحد (UCHC) على الرقم +[3134057726](tel:+1-313-405-7726). +كما يُقدم تحالف الإسكان المجتمعي المتحد أيضًا المشورة والحلول لأصحاب المنازل المعرضين لخطر الحجز. + + + + + +### [ট্যাক্স ফোরক্লোজার প্রতিরোধ](http://www.uchcdetroit.org/) + +মেক ইট হোম (MIH) হলো একটি বাড়ি-ক্রয় কর্মসূচি যা ফোরক্লোজার নিলামের আগে ভাড়াটেকে ফোরক্লোজার হতে যাওয়া তাদের বসবাসের বাড়ি কেনার বিকল্প সুযোগ প্রদান করে। ইউনাইটেড কমিউনিটি হাউজিং কোয়ালিশন (UCHC)-কে [(313) 405-7726](tel:+1-313-405-7726) নম্বরে কল করুন। UCHC-ও যারা ফোরক্লোজারের ঝুঁকিতে রয়েছেন তাদের জন্য পরামর্শ এবং বাড়ির মালিক ভিত্তিক সমাধান প্রদান করে। + + diff --git a/sites/public/page_content/resources/utilities_assistance.md b/sites/public/page_content/resources/utilities_assistance.md index c7f55882d1..985f8e8693 100644 --- a/sites/public/page_content/resources/utilities_assistance.md +++ b/sites/public/page_content/resources/utilities_assistance.md @@ -1,3 +1,31 @@ + + ### [Utilities Assistance](https://www.waynemetro.org/energy-and-water-assistance/) Wayne Metro offers multiple programs to assist residents with paying their water bills and other utilities. To learn more, call [313-388-9799](tel:+1-313-388-9799). The Heat and Warmth Fund ([THAW](https://thawfund.org/)) also works with partners to distribute utilities assistance to households in need. To contact THAW, call [1-800-866-8429](tel:+1-800-866-8429). + + + + + +### [Asistencia con los servicios públicos](https://www.waynemetro.org/energy-and-water-assistance/) + +Wayne Metro ofrece varios programas para brindar asistencia a los residentes con el pago de las facturas del agua y otros servicios públicos. Para obtener más información, llame al [313-388-9799](tel:+1-313-388-9799). The Heat and Warmth Fund (THAW) también trabaja con socios para hacer llegar la asistencia a viviendas con necesidades. Para comunicarse con el THAW, llame al [1-800-866-8429](tel:+1-800-866-8429). + + + + + +### [مساعدة المرافق](https://www.waynemetro.org/energy-and-water-assistance/) + +تقدم وين مترو برامج متعددة لمساعدة السكان على دفع فواتير المياه والمرافق الأخرى. ولمعرفة المزيد، اتصل بالرقم [3133889799](tel:+1-313-388-9799). كما يتعاون صندوق التسخين والتدفئة (THAW) أيضًا مع الشركاء على توزيع مساعدات المرافق على الأسر المحتاجة. للتواصل مع الصندوق، اتصل بالرقم [18008668429](tel:+1-800-866-8429). + + + + + +### [ইউটিলিটির সহায়তা](https://www.waynemetro.org/energy-and-water-assistance/) + +ওয়েইন মেট্রো বাসিন্দাদের তাদের জল/পানি এবং অন্যান্য পরিষেবার বিল পরিশোধে সহায়তা করার জন্য একাধিক কর্মসূচি প্রদান করে। আরও জানতে [313-388-9799](tel:+1-313-388-9799) নম্বরে কল করুন। তাপ ও উষ্ণতা তহবিল (THAW) প্রয়োজনে পরিবারের জন্য পরিষেবা সহায়তা প্রদান করতে অংশীদারদের সাথে কাজ করে। THAW-এর সাথে যোগাযোগ করতে [1-800-866-8429](tel:+1-800-866-8429) নম্বরে কল করুন। + + diff --git a/sites/public/page_content/resources/video_affordable_housing.md b/sites/public/page_content/resources/video_affordable_housing.md new file mode 100644 index 0000000000..b793555d3f --- /dev/null +++ b/sites/public/page_content/resources/video_affordable_housing.md @@ -0,0 +1,23 @@ + + +### [Detroit Home Connect: What is Affordable Housing?](https://www.youtube.com/watch?v=cqd1IlIm1HM&list=PLUZWFHZ-TRXc45NPGSxpFPDmfNcc8Dk7u&index=1&ab_channel=CityofDetroit) + + + + + +### [Detroit Home Connect: ¿Qué es la vivienda asequible?](https://www.youtube.com/watch?v=cqd1IlIm1HM&list=PLUZWFHZ-TRXc45NPGSxpFPDmfNcc8Dk7u&index=1&ab_channel=CityofDetroit) + + + + + +### [Detroit Home Connect: What is Affordable Housing?](https://www.youtube.com/watch?v=cqd1IlIm1HM&list=PLUZWFHZ-TRXc45NPGSxpFPDmfNcc8Dk7u&index=1&ab_channel=CityofDetroit) + + + + + +### [Detroit Home Connect: সাশ্রয়ী মূল্যের আবাসন কি?](https://www.youtube.com/watch?v=cqd1IlIm1HM&list=PLUZWFHZ-TRXc45NPGSxpFPDmfNcc8Dk7u&index=1&ab_channel=CityofDetroit) + + diff --git a/sites/public/page_content/resources/video_housing_application.md b/sites/public/page_content/resources/video_housing_application.md new file mode 100644 index 0000000000..2d5b196a54 --- /dev/null +++ b/sites/public/page_content/resources/video_housing_application.md @@ -0,0 +1,23 @@ + + +### [Detroit Home Connect: The Affordable Housing Application](https://www.youtube.com/watch?v=39KLpIXiPDI&list=PLUZWFHZ-TRXc45NPGSxpFPDmfNcc8Dk7u&index=4&ab_channel=CityofDetroit) + + + + + +### [Detroit Home Connect: La Solicitud de Vivienda Asequible](https://www.youtube.com/watch?v=39KLpIXiPDI&list=PLUZWFHZ-TRXc45NPGSxpFPDmfNcc8Dk7u&index=4&ab_channel=CityofDetroit) + + + + + +### [Detroit Home Connect: The Affordable Housing Application](https://www.youtube.com/watch?v=39KLpIXiPDI&list=PLUZWFHZ-TRXc45NPGSxpFPDmfNcc8Dk7u&index=4&ab_channel=CityofDetroit) + + + + + +### [Detroit Home Connect: সাশ্রয়ী মূল্যের হাউজিং অ্যাপ্লিকেশন](https://www.youtube.com/watch?v=39KLpIXiPDI&list=PLUZWFHZ-TRXc45NPGSxpFPDmfNcc8Dk7u&index=4&ab_channel=CityofDetroit) + + diff --git a/sites/public/page_content/resources/video_housing_waitlists.md b/sites/public/page_content/resources/video_housing_waitlists.md new file mode 100644 index 0000000000..b1f248a940 --- /dev/null +++ b/sites/public/page_content/resources/video_housing_waitlists.md @@ -0,0 +1,23 @@ + + +### [Detroit Home Connect: Affordable Housing Waitlists](https://www.youtube.com/watch?v=CZ8UVjdCcA8&list=PLUZWFHZ-TRXc45NPGSxpFPDmfNcc8Dk7u&index=3&ab_channel=CityofDetroit) + + + + + +### [Detroit Home Connect: Listas de espera para viviendas asequibles](https://www.youtube.com/watch?v=CZ8UVjdCcA8&list=PLUZWFHZ-TRXc45NPGSxpFPDmfNcc8Dk7u&index=3&ab_channel=CityofDetroit) + + + + + +### [Detroit Home Connect: Affordable Housing Waitlists](https://www.youtube.com/watch?v=CZ8UVjdCcA8&list=PLUZWFHZ-TRXc45NPGSxpFPDmfNcc8Dk7u&index=3&ab_channel=CityofDetroit) + + + + + +### [Detroit Home Connect: সাশ্রয়ী মূল্যের হাউজিং ওয়েটলিস্ট](https://www.youtube.com/watch?v=CZ8UVjdCcA8&list=PLUZWFHZ-TRXc45NPGSxpFPDmfNcc8Dk7u&index=3&ab_channel=CityofDetroit) + + diff --git a/sites/public/page_content/resources/video_income_restrictions.md b/sites/public/page_content/resources/video_income_restrictions.md new file mode 100644 index 0000000000..9cbca71f92 --- /dev/null +++ b/sites/public/page_content/resources/video_income_restrictions.md @@ -0,0 +1,23 @@ + + +### [Detroit Home Connect: Understanding Income Restrictions](https://www.youtube.com/watch?v=jknVMnyXEW8&list=PLUZWFHZ-TRXc45NPGSxpFPDmfNcc8Dk7u&index=2&ab_channel=CityofDetroit) + + + + + +### [Detroit Home Connect: Comprensión de las restricciones de ingresos](https://www.youtube.com/watch?v=jknVMnyXEW8&list=PLUZWFHZ-TRXc45NPGSxpFPDmfNcc8Dk7u&index=2&ab_channel=CityofDetroit) + + + + + +### [Detroit Home Connect: Understanding Income Restrictions](https://www.youtube.com/watch?v=jknVMnyXEW8&list=PLUZWFHZ-TRXc45NPGSxpFPDmfNcc8Dk7u&index=2&ab_channel=CityofDetroit) + + + + + +### [Detroit Home Connect: আয়ের সীমাবদ্ধতা বোঝা](https://www.youtube.com/watch?v=jknVMnyXEW8&list=PLUZWFHZ-TRXc45NPGSxpFPDmfNcc8Dk7u&index=2&ab_channel=CityofDetroit) + + diff --git a/sites/public/page_content/terms.md b/sites/public/page_content/terms.md new file mode 100644 index 0000000000..c405032a1f --- /dev/null +++ b/sites/public/page_content/terms.md @@ -0,0 +1,93 @@ + + +TERMS AND CONDITIONS OF USE for Detroit Home Connect. The City of Detroit has worked with developers and property management staff to ensure the accuracy of information on this website. However, due to the changing nature of property information, please contact the property for the most up to date details on any housing opportunity. The City of Detroit does not certify the authenticity of information provided by third parties. See more information below. +These Terms were most recently updated on, and are effective as of: May 1, 2022 + +#### SECTION 1: DEFINITIONS + +For purposes of these Terms and Conditions of Use the following words or phrases have the meanings respectively ascribed to them as set forth herein: +City means the City of Detroit, Michigan acting through its Housing and Revitalization Department, including its officers, employees, agents, and contractors. +Content means all information, data, metadata, and other content that is contained in, available from, provided by, submitted to, or generated by the Website, including but not limited to: text, data, software, sounds, photographs, video, graphics, or other material, whether or not presented to you. +Detroit Home Connect means the Website and all of its Content. +Privacy Policy means the privacy policy for use of the Website, available at the location identified in Section 4 of these Terms. +Prohibited Content includes any Content that is or could reasonably be construed as: + +1. Intentionally false, misleading, or deceptive; +2. Libelous, defamatory, or slanderous; +3. Profane or containing gratuitous violence; +4. Obscene, pornographic, profane, or gratuitously depicting violent or sexual activity; +5. Incitement or encouragement of, involvement in, or conspiracy to commit any criminal or otherwise illegal activity, or to take action that could foreseeably incur legal liability; +6. In violation of any patent, copyright, trademark, or other intellectual property right; +7. Intentionally insulting, demeaning, disparaging, discriminatory, abusive, or hostile to any individual, identifiable group of individuals, or their traditions, customs, common practices, or distinctive characteristics; +8. Threatening, harassing, bullying, or abusive; +9. So objectionable under prevailing community standards as to foreseeably result in distress, harm, or suffering to others; or +10. Gratuitously disparaging of Detroit Home Connect or the City, or any part thereof, or indicating, suggesting, or implying that any product, service, individual, or entity is endorsed or recommended by Detroit Home Connect the Website for any purpose. + +Services means all functions, features, and capabilities of the Website that enable any activities or other use of the Website. Services may include but are not limited to: review, reproduce, or disseminate Content; submit or post communications or other information to the Website or to any third party via the Website, receive communications or other information from the Website or to any third party via the Website. +Terms means the complete current version of the terms and conditions of use set forth herein. +Third Party means an individual or entity other than the City. You must acknowledge and understand that the Website, including all Content and Services, is provided to you strictly for informational purposes only, solely as a matter of convenience, and you agree to use the Website solely for such informational purposes. To that end, you must acknowledge and understand that the Website, including all Content and Services, is subject to change at any time without notice. The City expressly disclaims any and all responsibility for the accuracy, completeness, reliability, or timeliness, or lack thereof, of any Content, even if such content was accurately provided to it. Assessing the accuracy, completeness, reliability, or timeliness of all Content is solely your responsibility. +You must understand that the Website, including all Content and Services, does NOT constitute and is NOT intended to serve as legal or financial advice in any capacity, or as advice for any particular purpose, and you agree to not use or rely upon the Website as such. +You must acknowledge, understand and agree that although Website, including certain Content and Services, may describe various governmental functions or activities or summarize governmental information, including public laws, rules, regulations, orders, notices, records, or other publications, NONE of the Content constitutes or represents, and you agree to not use or rely upon the Website, including any Content and Services, an official representation of governmental activities or official governmental publication, unless it is clearly and expressly marked as such. +You must understand and agree that although certain Services may enable or facilitate Users’ engagement or other form of communication with governmental entities, departments or officials, NONE of the Services constitutes or represents, and must not be used or relied upon as, an official means of communication for any governmental purpose. Acceptance of any engagement or communication made by means of the Website or any Services is at the City’s sole discretion. +You may provide links to the Website, whether from another website, social media post, or other publication in any medium. You agree that doing so in any instance is subject to all of the following conditions: (a) the link directs to the Website’s homepage, located at “https://homeconnect.detroitmi.gov”; (b) you do not remove or obscure, by framing or otherwise, any portion of the Website, including advertisements, links to these Terms, copyright notices, or other notices on the Web Site; (c) you provide prior written notice to the City of such link by sending an email to: detroithomeconnect@detroitmi.gov and (d) you acknowledge that the City may request that you refrain or discontinue providing links to the Website at any time and for any reason in its sole and absolute discretion, and you agree to refrain from or immediately discontinue providing links to the Website upon such request by the City. +You understand that the City is not a consumer reporting agency and none of the Content or Services provided via the Website constitute a “consumer report” as such term is defined in the Federal Fair Credit Reporting Act (FCRA), 15 U.S.C. sec. 1681 et seq. The Content available to you must not be used as a factor in consumer debt collection decisioning, establishing a consumer’s eligibility for credit, insurance, employment, government benefits, or housing, or for any other purpose authorized under the FCRA. You agree to refrain from using Website, including its Content and Services, for any purpose authorized under the FCRA or in relation to taking an adverse action relating to a consumer application. + +#### SECTION 6: USER ACCOUNTS + +Access to certain Content, Services, or other portions of the Website may require your registration and creation of a User account. You must understand that the particular portions of the Website for which registration is required is in the City’s sole discretion and may change at any time. By your registration, you agree that all registration information is accurate and complete. It is your responsibility to inform the City of any inaccuracies or changes to that information. +You must acknowledge, understand and agree that your User account is for your individual use only, and that you are strictly prohibited from permitting, allowing, authorizing, assisting, or otherwise enabling (a) any User other than you to access any portion of the Website requiring registration through your account, or (b) any multiple Users on a network or otherwise, to access any portion of the Website requiring registration through any single User account, whether or not such account is yours. You are responsible for preventing all such unauthorized use. If you believe there has been unauthorized use of your or another User account, you agree to immediately notify the City by sending an e-mail to detroithomeconnect@detroitmi.gov. +You must understand that the City and the Website enables Users to register for and maintain accounts as a Service merely for their convenience. You agree that neither you nor any other User has any right to the creation or maintenance of any such account and the City bears no obligation to create or maintain such an account for any User, including you. You agree that the City may refuse to allow the creation a new account and may suspend, terminate, or modify the terms of any existing User account at any time for any reason in its sole discretion, whether or not for violation of these Terms. + +#### SECTION 7: USER CONTENT + +The Website may provide certain Services by which Users can create User Content and submit such Content to the Website. By submitting any Content to the Website, you agree to grant, and warrant that you have all such rights as are legally required to expressly grant, to the City a royalty-free, perpetual, irrevocable, non-exclusive right and license to use, reproduce, modify, adapt, publish, translate, sub-license, create derivative works from, distribute, perform and display such Content, in whole or in part, and to incorporate such Content into other works in any form, medium or technology now known or later developed, throughout the world. +You must not submit to the Website any Content that constitutes or could foreseeably constitute Prohibited Content. Further, you must not submit to the Website any Content that you do not have a legal right to transmit under all applicable laws, including, but not limited to intellectual property laws, or under any applicable contractual or fiduciary relationship, including but not limited to proprietary or confidential information or information that infringes any patent, trademark, trade secret, copyright or other proprietary rights of any party. You warrant to the City that no Content submitted by you to the Website contains any content described in this paragraph. +The City does not pre-screen Content submitted by you or any User and accepts no obligation to do so, but reserves the absolute right, in its sole discretion, to refuse or remove any Content, whether or not it constitutes Prohibited User Content. You must accept full and exclusive responsibility for all Content that you upload, post or otherwise submit to the Website. + +#### SECTION 8: THIRD PARTY CONTENT AND LINKS TO THIRD PARTY SITES + +Third Party Content may appear on the Website or may be accessible via links that appear on the Website. The City hereby expressly disclaims any responsibility for, and will assume no liability for, any Third Party Content, including, but not limited to, such Third Party Content that constitutes, or could in the future constitute, Prohibited Content. You must understand that no Third Party Content is endorsed by the City and does not necessarily reflect the beliefs, opinions, or positions of the City any User, and you agree to refrain from attributing any Third Party Content to the City any User. + +#### SECTION 9: MODIFICATIONS TO WEBSITE, CONTENT, OR SERVICES + +The City reserves the right to create, modify, expand, restrict, suspend, or discontinue, all either temporarily or permanently, the Website, including any Content and Services, at any time in its sole discretion for any reason or no reason at all, and without notice. You must understand, acknowledge and agree that the City disclaims all liability to you or any third party for any such actions related to the Website, including its Content and Services, and you agree to refrain from imposing or taking any action in pursuit of imposing such liability on the City in relation to any such action. + +#### SECTION 10: TERMINATION + +You agree that the City may, at any time and without notice, terminate or restrict your use of or access to the Website, including any Content and Services, in its sole discretion for any reason, including without limitation, its belief that you have violated or acted inconsistently with the letter or spirit of these Terms, or no reason at all. The provisions of Disclaimer, Limitation of Liability, and Indemnification shall survive such termination. + +#### SECTION 11: DISCLAIMER + +YOU UNDERSTAND AND AGREE THAT THE WEBSITE, INCLUDING ALL CONTENT AND SERVICES, IS PROVIDED ON AN AS-IS, AS-AVAILABLE BASIS AND WITHOUT WARRANTIES OF ANY KIND EITHER EXPRESS OR IMPLIED. TO THE FULLEST EXTENT PERMISSIBLE PURSUANT TO APPLICABLE LAW, THE OWNERS DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT OF INTELLECTUAL PROPERTY. THE OWNERS DO NOT WARRANT THAT THE WEB SITE WILL MEET YOUR REQUIREMENTS, THAT IT WILL BE UNINTERRUPTED, TIMELY, SECURE, OR ERROR-FREE, THAT DEFECTS WILL BE CORRECTED, OR THAT THE WEBSITE OR THE SERVER(S) THAT MAKES THE WEBSITE AVAILABLE ARE FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS. THE OWNERS DO NOT WARRANT OR MAKE ANY REPRESENTATIONS REGARDING THE USE OR THE RESULTS OF THE USE OF THE CONTENT OR SERVICES ON THE WEBSITE IN TERMS OF ITS CORRECTNESS, ACCURACY, RELIABILITY, TIMELINESS, OR OTHERWISE. YOU ASSUME THE ENTIRE COST FOR ANY AND ALL CONSEQUENCES, INCLUDING, DAMAGES TO YOUR COMPUTER SYSTEM OR ANY LOSS THAT RESULTS FROM THE DOWNLOAD OF ANY CONTENT FROM THE WEBSITE. APPLICABLE LAW MAY NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY NOT APPLY TO YOU. + +#### SECTION 12: LIMITATION OF LIABILITY + +UNDER NO CIRCUMSTANCES, INCLUDING BUT NOT LIMITED TO NEGLIGENCE, WILL THE CITY BE LIABLE FOR ANY DAMAGES THAT RESULT FROM THE USE OF, OR THE INABILITY TO USE, THE CONTENT ON THE WEBSITE, EVEN IF THE CITY OR AN AUTHORIZED REPRESENTATIVE THEREOF MAY HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, TO THE FULL EXTENT ALLOWED BY APPLICABLE LAW. + +#### SECTION 13: INDEMNIFICATION + +You agree to indemnify, defend and hold harmless the City, as well as its subsidiaries, affiliates, agents, partners, owners, employees, licensors, licensees, suppliers, and any Third Party Content providers to the Website from and against all claims, losses, expenses, damages and costs, including reasonable attorneys’ fees, resulting from any violation by you of these Terms or from your use of the Website. + +#### SECTION 14: MISCELLANEOUS + +
    +- Entire Agreement + These Terms set forth the entire understanding between you and the City and supersedes prior agreements, communications, and representations between you and the City regarding the subject matter contained herein. +- Applicable Laws + These Terms are governed by and must be interpreted in accordance with the laws of the State of Michigan without regard to its conflict of laws provisions. Any controversy or claim arising out of or relating to these Terms shall be resolved in a state or federal court located in the County of Wayne in the State of Michigan and you agree to submit to the personal and exclusive jurisdiction of such courts. Regardless of any statute or law providing a longer limitation, you agree that any claim or cause of action arising out of or related to these Terms must be filed within one (1) year after such claim or cause of action arises, or will be barred forever. +- Waiver/Severability + The failure by the City to strictly enforce against every breach of every provision of these Terms must not be construed as a waiver of any such breach, or any subsequent breach, by you or any other User. If any provision of these Terms is unlawful, void or unenforceable under Applicable Law, then that provision may be severable from the remaining provisions and will not affect their validity and enforceability. +- Headings + The headings contained herein have been inserted as a matter of convenience for reference only and do not control or affect the meaning or construction of any of the terms or provisions herein. +- Copyright Notice + All Content within the Website is protected by copyright law except where explicitly noted otherwise. All rights reserved. +- Reservation of Rights + All rights not expressly granted herein are reserved. +- Contact Information + By e-mail: detroithomeconnect@detroitmi.gov +
    +--- diff --git a/sites/public/pages/additional-resources.tsx b/sites/public/pages/additional-resources.tsx index 545fdc25af..7b816dae20 100644 --- a/sites/public/pages/additional-resources.tsx +++ b/sites/public/pages/additional-resources.tsx @@ -33,6 +33,10 @@ import landBankAuthority from "../page_content/resources/land_bank_authority.md" import projectCleanSlate from "../page_content/resources/project_clean_slate.md" import civilRightsInclusionOpportunity from "../page_content/resources/civil_rights_inclusion_opportunity.md" import housingRelocationAssistance from "../page_content/resources/housing_relocation_assistance.md" +import videoAffordableHousing from "../page_content/resources/video_affordable_housing.md" +import videoIncomeRestrictions from "../page_content/resources/video_income_restrictions.md" +import videoHousingApplication from "../page_content/resources/video_housing_application.md" +import videoHousingWaitlists from "../page_content/resources/video_housing_waitlists.md" import sidebarContent from "../page_content/resources/sidebar.md" const AdditionalResources = () => { @@ -64,8 +68,8 @@ const AdditionalResources = () => {
    {housingAndRevitalization} {enforcePropertyConditions} @@ -85,6 +89,10 @@ const AdditionalResources = () => { {projectCleanSlate} {civilRightsInclusionOpportunity} {housingRelocationAssistance} + {videoAffordableHousing} + {videoIncomeRestrictions} + {videoHousingApplication} + {videoHousingWaitlists}
    diff --git a/sites/public/pages/listings/filtered.tsx b/sites/public/pages/listings/filtered.tsx index 41169154d1..5be55f8baf 100644 --- a/sites/public/pages/listings/filtered.tsx +++ b/sites/public/pages/listings/filtered.tsx @@ -33,9 +33,9 @@ const FilteredListingsPage = () => { // Filter state const [filterModalVisible, setFilterModalVisible] = useState(false) - function setQueryString(page: number, filters = filterState) { + function setQueryString(page: number, limit: number, filters = filterState) { void router.push( - `/listings/filtered?page=${page}${encodeToFrontendFilterString(filters)}`, + `/listings/filtered?page=${page}&limit=${limit}${encodeToFrontendFilterString(filters)}`, undefined, { shallow: true, @@ -79,11 +79,11 @@ const FilteredListingsPage = () => { /* Form Handler */ // eslint-disable-next-line @typescript-eslint/unbound-method - const onSubmit = (data: ListingFilterState) => { + const onSubmit = (page: number, limit: number, data: ListingFilterState) => { // hide status filter delete data[FrontendListingFilterStateKeys.status] setFilterModalVisible(false) - setQueryString(/*page=*/ 1, data) + setQueryString(page, limit, data) } let rentalsFoundTitle: string @@ -109,7 +109,11 @@ const FilteredListingsPage = () => { onClose={() => setFilterModalVisible(false)} contentAreaClassName={"px-0 pt-0 pb-0 h-full"} > - + onSubmit(1, itemsPerPage, data)} + filterState={filterState} + onClose={setFilterModalVisible} + />

    @@ -132,13 +136,13 @@ const FilteredListingsPage = () => { {numberOfFilters > 0 && ( @@ -168,8 +172,8 @@ const FilteredListingsPage = () => { currentPage={currentPage} itemsPerPage={itemsPerPage} quantityLabel={t("listings.totalListings")} - setCurrentPage={setCurrentPage} - setItemsPerPage={setItemsPerPage} + setCurrentPage={(page) => onSubmit(page, itemsPerPage, filterState)} + setItemsPerPage={(limit) => onSubmit(1, Number(limit), filterState)} includeBorder={false} matchListingCardWidth={true} /> diff --git a/sites/public/pages/disclaimer.tsx b/sites/public/pages/terms.tsx similarity index 79% rename from sites/public/pages/disclaimer.tsx rename to sites/public/pages/terms.tsx index b29d78d20d..cf53e84f14 100644 --- a/sites/public/pages/disclaimer.tsx +++ b/sites/public/pages/terms.tsx @@ -4,20 +4,20 @@ import Markdown from "markdown-to-jsx" import { PageView, pushGtmEvent } from "@bloom-housing/shared-helpers" import { UserStatus } from "../lib/constants" import Layout from "../layouts/application" -import pageContent from "../page_content/disclaimer.md" +import pageContent from "../page_content/terms.md" -const Disclaimer = () => { +const Terms = () => { const { profile } = useContext(AuthContext) useEffect(() => { pushGtmEvent({ event: "pageView", - pageTitle: "Disclaimer", + pageTitle: "Terms", status: profile ? UserStatus.LoggedIn : UserStatus.NotLoggedIn, }) }, [profile]) - const pageTitle = <>{t("pageTitle.disclaimer")} + const pageTitle = <>{t("pageTitle.terms")} return ( @@ -29,4 +29,4 @@ const Disclaimer = () => { ) } -export default Disclaimer +export default Terms diff --git a/sites/public/src/ListingView.tsx b/sites/public/src/ListingView.tsx index 041deb1ffc..22488ea92e 100644 --- a/sites/public/src/ListingView.tsx +++ b/sites/public/src/ListingView.tsx @@ -37,7 +37,6 @@ import { import { cloudinaryPdfFromId, imageUrlFromListing, - listingFeatures, occupancyTable, } from "@bloom-housing/shared-helpers" import dayjs from "dayjs" @@ -329,7 +328,7 @@ export const ListingView = (props: ListingProps) => { const features = Object.keys(listing?.features ?? {}).map((feature, index) => { if (listing?.features[feature]) { featuresExist = true - return
  • {listingFeatures[feature]}
  • + return
  • {t(`eligibility.accessibility.${feature}`)}
  • } }) return featuresExist ?
      {features}
    : null @@ -379,10 +378,7 @@ export const ListingView = (props: ListingProps) => { /> {hmiData.length > 0 && (
    - {t("listings.unitSummaryGroupMessage")}{" "} - - {t("listings.unitSummaryGroupLinkText")} - + {t("listings.unitSummaryGroupMessage")}
    )} diff --git a/sites/public/src/Resource.tsx b/sites/public/src/Resource.tsx index adadd3bf59..2e6fac093e 100644 --- a/sites/public/src/Resource.tsx +++ b/sites/public/src/Resource.tsx @@ -5,7 +5,6 @@ const Resource = ({ children }) => (
    { ) setAccessibilityFeatureOptions( - Object.keys(listingFeatures).map((elem) => ({ + listingFeatures.map((elem) => ({ value: elem, - label: listingFeatures[elem], + label: t(`eligibility.accessibility.${elem}`), })) ) }, []) @@ -118,7 +118,9 @@ const FilterForm = (props: FilterFormProps) => { // This is causing a linting issue with unbound-method, see issue: // https://github.com/react-hook-form/react-hook-form/issues/2887 // eslint-disable-next-line @typescript-eslint/unbound-method - const { handleSubmit, register, reset } = useForm() + const { handleSubmit, errors, register, reset, trigger, watch: formWatch } = useForm() + const minRent = formWatch("minRent") + const maxRent = formWatch("maxRent") return (
    { register={register} prepend={"$"} defaultValue={localFilterState?.minRent} + error={errors?.minRent !== undefined} + errorMessage={t("errors.minGreaterThanMaxRentError")} + validation={{ max: maxRent || minRent }} + inputProps={{ + onBlur: () => { + void trigger("minRent") + void trigger("maxRent") + }, + }} /> @@ -233,6 +244,15 @@ const FilterForm = (props: FilterFormProps) => { register={register} prepend={"$"} defaultValue={localFilterState?.maxRent} + error={errors?.maxRent !== undefined} + errorMessage={t("errors.maxLessThanMinRentError")} + validation={{ min: minRent }} + inputProps={{ + onBlur: () => { + void trigger("minRent") + void trigger("maxRent") + }, + }} /> @@ -325,7 +345,7 @@ const FilterForm = (props: FilterFormProps) => { diff --git a/ui-components/src/actions/Button.scss b/ui-components/src/actions/Button.scss index 666c09360e..78186b2482 100644 --- a/ui-components/src/actions/Button.scss +++ b/ui-components/src/actions/Button.scss @@ -87,24 +87,24 @@ &.has-icon-left { .button__icon { - @apply mr-1; + @apply me-1; } } &.has-icon-right { .button__icon { - @apply ml-1; + @apply ms-1; } } } &.has-icon-left { .button__icon { - @apply mr-3; + @apply me-3; } } &.has-icon-right { .button__icon { - @apply ml-3; + @apply ms-3; } } diff --git a/ui-components/src/blocks/ActionBlock.scss b/ui-components/src/blocks/ActionBlock.scss index f6562b8e4a..8a8a14dafa 100644 --- a/ui-components/src/blocks/ActionBlock.scss +++ b/ui-components/src/blocks/ActionBlock.scss @@ -100,9 +100,9 @@ } } .action-block__header { - @apply ml-6; + @apply ms-6; @media (max-width: 640px) { - @apply ml-0; + @apply ms-0; } } } diff --git a/ui-components/src/blocks/ImageCard.tsx b/ui-components/src/blocks/ImageCard.tsx index 458e4529ff..034f1699a4 100644 --- a/ui-components/src/blocks/ImageCard.tsx +++ b/ui-components/src/blocks/ImageCard.tsx @@ -73,14 +73,14 @@ const ImageCard = (props: ImageCardProps) => { {tag.iconType && ( )} {tag.text} diff --git a/ui-components/src/blocks/Tooltip.tsx b/ui-components/src/blocks/Tooltip.tsx index 12494737bc..4b03f1b00a 100644 --- a/ui-components/src/blocks/Tooltip.tsx +++ b/ui-components/src/blocks/Tooltip.tsx @@ -1,4 +1,4 @@ -import React, { useState, useRef } from "react" +import React, { useState, useRef, useEffect } from "react" import useKeyPress from "../helpers/useKeyPress" import "./Tooltip.scss" @@ -29,6 +29,14 @@ const Tooltip = ({ className, id, text, children }: React.PropsWithChildren hide()) + useEffect(() => { + window.addEventListener("scroll", () => hide()) + + return () => { + window.removeEventListener("scroll", () => hide()) + } + }, []) + return (
    ([]) diff --git a/ui-components/src/global/forms.scss b/ui-components/src/global/forms.scss index 749ec27f05..40164899a8 100644 --- a/ui-components/src/global/forms.scss +++ b/ui-components/src/global/forms.scss @@ -46,8 +46,8 @@ } select.input { - @apply pl-3; - @apply pr-8; + @apply ps-3; + @apply pe-8; } input.input { @@ -64,11 +64,11 @@ } .prepend + input[aria-invalid="false"] { - @apply pl-8; + @apply ps-8; } .prepend + input[aria-invalid="true"] { - @apply pl-12; + @apply pe-12; } &.control-narrower { @@ -201,7 +201,6 @@ .control { .input, - .prepend, select { @apply border-red-700; @apply border-2; @@ -253,7 +252,7 @@ input[type="number"] { @apply flex; .field { - @apply mr-5; + @apply me-5; @apply mb-0; } } diff --git a/ui-components/src/global/markdown.scss b/ui-components/src/global/markdown.scss index cd3712b581..cb0d490345 100644 --- a/ui-components/src/global/markdown.scss +++ b/ui-components/src/global/markdown.scss @@ -25,9 +25,15 @@ ul:not(:last-child) { @apply mb-4; } - ul { list-style: disc; @apply ml-6; } + ol { + list-style: inside; + list-style-type: decimal; + } + li:last-child { + @apply mb-4; + } } diff --git a/ui-components/src/locales/ar.json b/ui-components/src/locales/ar.json index c35391bad5..0d938d99fd 100644 --- a/ui-components/src/locales/ar.json +++ b/ui-components/src/locales/ar.json @@ -9,6 +9,8 @@ "account.haveAnAccount": "هل لديك حساب؟", "account.myApplications": "تطبيقاتي", "account.myApplicationsSubtitle": "اطلع على تواريخ وقوائم اليانصيب للممتلكات التي قمت بتقديم طلب للحصول عليها", + "account.myFavorites": "المفضلة", + "account.myFavoritesSubtitle": "حفظ القوائم والتحقق مرة أخرى من التحديثات", "account.application.confirmation": "تأكيد", "account.application.error": "خطأ", "account.application.noAccessError": "لا يوجد تطبيق بهذا المعرف", @@ -443,7 +445,7 @@ "authentication.signIn.error": "حدث خطأ أثناء تسجيل دخولك", "authentication.signIn.errorGenericMessage": "يرجى المحاولة مرة أخرى ، أو الاتصال بالدعم للمساعدة.", "authentication.signIn.forgotPassword": "هل نسيت كلمة السر؟", - "authentication.signIn.success": "مرحبًا بك مرة أخرى ،٪ {name}!", + "authentication.signIn.success": "مرحبًا بعودتك، %{name}", "authentication.createAccount.accountConfirmed": "تم تأكيد حسابك بنجاح.", "authentication.createAccount.anEmailHasBeenSent": "تم إرسال بريد إلكتروني إلى٪ {email}", "authentication.createAccount.confirmationInstruction": "الرجاء النقر فوق الارتباط الموجود في البريد الإلكتروني الذي أرسلناه لك لإكمال إنشاء الحساب.", @@ -458,6 +460,7 @@ "authentication.createAccount.email": "بريد إلكتروني", "authentication.createAccount.emailPrivacy": "سنستخدم عنوان بريدك الإلكتروني فقط للاتصال بك بخصوص طلبك.", "authentication.createAccount.reEnterEmail": "أعد إدخال البريد الإلكتروني", + "authentication.createAccount.noAccount": "ليس لديك حساب؟", "authentication.createAccount.phone": "هاتف", "authentication.createAccount.reEnterPassword": "إعادة إدخال كلمة المرور الخاصة بك", "authentication.createAccount.resendTheEmail": "إعادة إرسال البريد الإلكتروني", @@ -515,7 +518,7 @@ "footer.srContactInformation": "معلومات للتواصل", "footer.srLegalInformation": "المعلومات القانونية", "footer.contact": "اتصال", - "footer.disclaimer": "تنصل", + "footer.terms": "تنصل", "footer.forGeneralQuestions": "للاستفسارات العامة عن البرنامج ، يمكنك الاتصال بنا على 000-000-0000.", "footer.giveFeedback": "إعطاء ردود الفعل", "footer.privacyPolicy": "سياسة الخصوصية", @@ -539,10 +542,11 @@ "leasingAgent.title": "عنوان وكيل التأجير", "leasingAgent.officeHours": "ساعات العمل", "leasingAgent.officeHoursPlaceholder": "على سبيل المثال: 9:00 صباحًا - 5:00 مساءً ، من الاثنين إلى الجمعة", + "listingFilters.clear": "مسح", "listings.error": "كانت هناك مشكلة في إرسال النموذج.", "listings.closeThisListing": "هل تريد حقًا إغلاق هذه القائمة؟", "listings.active": "قبول الطلبات", - "listings.pending": "قريبا", + "listings.pending": "قريبًا", "listings.closed": "مغلق", "listings.actions.publish": "ينشر", "listings.actions.draft": "حفظ كمسودة", @@ -683,8 +687,8 @@ "listings.reservedCommunitySeniorTitle": "مبنى كبير", "listings.reservedCommunityTitleDefault": "مبنى محجوز", "listings.reservedCommunityTypes.senior": "كبار السن", - "listings.reservedCommunityTypes.senior55": "كبار السن 55+", - "listings.reservedCommunityTypes.senior62": "كبار السن 62+", + "listings.reservedCommunityTypes.senior55": "لكبار السن فوق 55 سنة", + "listings.reservedCommunityTypes.senior62": "لكبار السن فوق 62 سنة", "listings.reservedCommunityTypes.partiallySenior": "كبار السن جزئيا", "listings.reservedCommunityTypes.specialNeeds": "يمكن الوصول", "listings.reservedFor": "محجوز لـ٪ {type}", @@ -734,6 +738,7 @@ "listings.sections.photoSubtitle": "قم بتحميل صورة للقائمة التي سيتم استخدامها كمعاينة.", "listings.sections.processSubtitle": "التواريخ الهامة ومعلومات الاتصال", "listings.sections.processTitle": "معالجة", + "listings.sections.publicProgramNote": "غالبًا ما تتلقى عقارات الإسكان الميسور التكلفة تمويلًا لإسكان مجموعات سكانية محددة ، مثل كبار السن ، والمقيمين ذوي الإعاقة ، وما إلى ذلك. يمكن للممتلكات أن تخدم أكثر من مجموعة سكانية واحدة. اتصل بهذا العقار إذا لم تكن متأكدًا مما إذا كنت مؤهلاً.", "listings.sections.rankingsResultsTitle": "الترتيب والنتائج", "listings.sections.rankingsResultsSubtitle": "قدم تفاصيل حول ما يحدث للطلبات بمجرد تقديمها.", "listings.sections.rentalAssistanceSubtitle": "سيتم النظر في قسائم اختيار السكن ، والقسم 8 وبرامج مساعدة الإيجار السارية الأخرى لهذه المنشأة. في حالة وجود دعم إيجار ساري المفعول ، سيعتمد الحد الأدنى المطلوب للدخل على جزء من الإيجار الذي يدفعه المستأجر بعد استخدام الدعم.", @@ -763,6 +768,8 @@ "listings.upcomingLotteries.noResults": "لا توجد قوائم مغلقة مع اليانصيب القادمة في هذا الوقت.", "listings.upcomingLotteries.show": "إظهار القوائم المغلقة", "listings.upcomingLotteries.title": "القوائم المغلقة", + "listings.vacantUnits": "الوحدات الشاغرة", + "listings.verifiedListing": "مؤكدة حسب العقار", "listings.waitlist.closed": "قائمة الانتظار مغلقة", "listings.waitlist.currentSizeQuestion": "كم عدد الأشخاص في القائمة الحالية؟", "listings.waitlist.label": "قائمة الانتظار", @@ -867,6 +874,7 @@ "nav.myApplications": "تطبيقاتي", "nav.myDashboard": "لوحة القيادة الخاصة بي", "nav.mySettings": "اعداداتي", + "nav.rentals": "الإيجارات", "nav.signIn": "تسجيل الدخول", "nav.signOut": "خروج", "nav.signUp": "اشتراك", @@ -876,7 +884,7 @@ "nav.flags": "أعلام", "nav.users": "المستخدمون", "pageTitle.additionalResources": "المزيد من فرص السكن", - "pageTitle.disclaimer": "إخلاء المسؤولية عن المصادقة", + "pageTitle.terms": "إخلاء المسؤولية عن المصادقة", "pageTitle.housingCounselors": "مستشاري الإسكان", "pageTitle.getAssistance": "احصل على المساعدة", "pageTitle.rentalListings": "انظر الإيجارات", @@ -893,6 +901,19 @@ "region.name": "المنطقة المحلية", "progressNav.srHeading": "تقدم", "progressNav.current": "الخطوة الحالية: ", + "publicFilter.confirmedListings": "القوائم المؤكدة", + "publicFilter.confirmedListingsFieldLabel": "أظهر فقط القوائم المؤكدة حسب العقار", + "publicFilter.bedRoomSize": "حجم غرفة النوم", + "publicFilter.rentRange": "نطاق الإيجار الشهري", + "publicFilter.rentRangeMin": "بدون حد أدنى للإيجار", + "publicFilter.rentRangeMax": "بدون حد أقصى للإيجار", + "publicFilter.communityPrograms": "البرامج المجتمعية", + "publicFilter.waitlist.open": "قائمة الانتظار المفتوحة", + "publicFilter.waitlist.closed": "قائمة الانتظار المكتملة", + "seasons.fall": "الخريف", + "seasons.spring": "الربيع", + "seasons.summer": "الصيف", + "seasons.winter": "الشتاء", "states.AL": "ألاباما", "states.AK": "ألاسكا", "states.AZ": "أريزونا", @@ -952,7 +973,7 @@ "t.areYouStillWorking": "هل ما زلت تعمل؟", "t.accessibility": "إمكانية الوصول", "t.am": "صباحا", - "t.availability": "التوفر", + "t.availability": "التوافر", "t.automatic": "تلقائي", "t.back": "عودة", "t.built": "مبني", @@ -966,7 +987,7 @@ "t.date": "تاريخ", "t.delete": "حذف", "t.deposit": "إيداع", - "t.done": "فعله", + "t.done": "تم", "t.descriptionTitle": "وصف", "t.description": "أدخل الوصف", "t.emailAddressPlaceholder": "يو@ميعمل.كوم", @@ -1095,9 +1116,12 @@ "welcome.latestListings": "أحدث القوائم", "welcome.lastUpdated": "آخر تحديث %{date}", "welcome.cityRegions": "مناطق المدينة", + "welcome.signUp": "احصل على رسائل عبر البريد الإلكتروني كلما تم نشر قائمة جديدة", + "welcome.signUpToday": "سجّل اليوم", "welcome.subTitle": "انقر فوق الزر أدناه للعثور على سكن مستأجر بناءً على دخلك واحتياجات أسرتك", "whatToExpect.label": "ماذا تتوقع", "whatToExpect.default": "سيتم الاتصال بالمتقدمين من قبل وكيل الملكية بترتيب الترتيب حتى يتم ملء الشواغر. سيتم التحقق من جميع المعلومات التي قدمتها وتأكيد أهليتك. ستتم إزالة طلبك من قائمة الانتظار إذا قدمت أي بيانات احتيالية. إذا لم نتمكن من التحقق من تفضيل السكن الذي طالبت به ، فلن تحصل على الأفضلية ولكن لن يتم معاقبتك بطريقة أخرى. إذا تم اختيار طلبك ، فكن مستعدًا لملء طلب أكثر تفصيلاً وتقديم المستندات الداعمة المطلوبة.", + "listingFilters.allRentals": "جميع الإيجارات", "listingFilters.buttonTitle": "منقي", "listingFilters.buttonTitleWithNumber": "فلتر (%{number})", "listingFilters.loading": "جار التحميل...", @@ -1151,7 +1175,7 @@ "eligibility.progress.sections.disability": "عجز", "eligibility.progress.sections.accessibility": "إمكانية الوصول", "eligibility.progress.sections.income": "دخل", - "eligibility.progress.sections.disclaimer": "تنصل", + "eligibility.progress.sections.terms": "تنصل", "eligibility.welcome.header": "أهلا بك", "eligibility.welcome.description": "مرحبًا بك في Detroit Home Connect! لمعرفة الإيجارات التي قد تكون مؤهلاً لها ، ما عليك سوى الإجابة على أربعة أسئلة.", "eligibility.household.prompt": "كم عدد الأشخاص الذين سيعيشون في إيجارك القادم ، بما في ذلك أنت؟", @@ -1184,21 +1208,24 @@ "eligibility.income.ranges.30kTo40k": "30000 دولار - 39999 دولار", "eligibility.income.ranges.40kTo50k": "40000 دولار - 49999 دولار", "eligibility.income.ranges.over50k": "50000 دولار أو أكثر", - "eligibility.accessibility.title": "ميزات إمكانية الوصول", - "eligibility.accessibility.prompt": "هل تحتاج إلى ميزات وصول إضافية؟", + "eligibility.accessibility.acInUnit": "مكيف في الوحدة", + "eligibility.accessibility.accessibleParking": "وقوف السيارات لذوي الاحتياجات الخاصة", + "eligibility.accessibility.barrierFreeEntrance": "دخول خالي من العوائق", "eligibility.accessibility.description": "تحتوي بعض الخصائص على ميزات إمكانية الوصول قد لا يمتلكها الآخرون.", "eligibility.accessibility.elevator": "مصعد", - "eligibility.accessibility.wheelchairRamp": "منحدر للكراسي المتحركة", - "eligibility.accessibility.serviceAnimalsAllowed": "مسموح بحيوانات الخدمة", - "eligibility.accessibility.accessibleParking": "وقوف السيارات لذوي الاحتياجات الخاصة", - "eligibility.accessibility.parkingOnSite": "وقوف السيارات في الموقع", + "eligibility.accessibility.grabBars": "انتزاع القضبان", + "eligibility.accessibility.hearing": "سمع", + "eligibility.accessibility.heatingInUnit": "تدفئة في الوحدة", "eligibility.accessibility.inUnitWasherDryer": "في وحدة تجفيف الغسالة", "eligibility.accessibility.laundryInBuilding": "مغسلة في المبنى", - "eligibility.accessibility.barrierFreeEntrance": "دخول خالي من العوائق", + "eligibility.accessibility.mobility": "إمكانية التنقل", + "eligibility.accessibility.parkingOnSite": "وقوف السيارات في الموقع", + "eligibility.accessibility.prompt": "هل تحتاج إلى ميزات وصول إضافية؟", "eligibility.accessibility.rollInShower": "لفة في دش", - "eligibility.accessibility.grabBars": "انتزاع القضبان", - "eligibility.accessibility.heatingInUnit": "تدفئة في الوحدة", - "eligibility.accessibility.acInUnit": "مكيف في الوحدة", + "eligibility.accessibility.serviceAnimalsAllowed": "مسموح بحيوانات الخدمة", + "eligibility.accessibility.title": "ميزات إمكانية الوصول", + "eligibility.accessibility.visual": "المرئية", + "eligibility.accessibility.wheelchairRamp": "منحدر للكراسي المتحركة", "eligibility.disclaimer.description": "شكرا لك على الإجابة على هذه الأسئلة. عندما تنقر أو تضغط على 'عرض النتائج الآن' ، سترى إيجارات قد تناسب احتياجاتك بناءً على إجاباتك. يمكن أن تؤثر عوامل متعددة على الأهلية لتأجيرات معينة ، لذلك إذا رأيت إيجارًا تهتم به ، فاتصل بوكيل العقارات في القائمة. يمكنهم مساعدتك في تحديد ما إذا كنت مؤهلاً لهذا الإيجار.", "eligibility.preferNotToSay": "افضل عدم القول", "resources.body1": "قد تحتاج إلى مساعدة إضافية في بحثك عن سكن. قامت إدارة الموارد البشرية بتجميع قائمة من الموارد لمساعدتك في العثور على سكنك والحفاظ عليه.", diff --git a/ui-components/src/locales/bn.json b/ui-components/src/locales/bn.json index 6d73c47387..82a0c69cf7 100644 --- a/ui-components/src/locales/bn.json +++ b/ui-components/src/locales/bn.json @@ -9,6 +9,8 @@ "account.haveAnAccount": "ইতিমধ্যে একটি সদস্যপদ আছে?", "account.myApplications": "আমার অ্যাপ্লিকেশন", "account.myApplicationsSubtitle": "যেসব বৈশিষ্ট্যের জন্য আপনি আবেদন করেছেন তার জন্য লটারির তারিখ এবং তালিকা দেখুন", + "account.myFavorites": "আমার পছন্দ", + "account.myFavoritesSubtitle": "তালিকা সংরক্ষণ করুন এবং আপডেটের জন্য ফিরে আসুন", "account.application.confirmation": "নিশ্চিতকরণ", "account.application.error": "ত্রুটি", "account.application.noAccessError": "সেই আইডি সহ কোন আবেদন নেই", @@ -443,7 +445,7 @@ "authentication.signIn.error": "আপনাকে সাইন ইন করার সময় একটি ত্রুটি হয়েছে", "authentication.signIn.errorGenericMessage": "অনুগ্রহ করে আবার চেষ্টা করুন, অথবা সাহায্যের জন্য সহায়তার সাথে যোগাযোগ করুন।", "authentication.signIn.forgotPassword": "পাসওয়ার্ড ভুলে গেছেন?", - "authentication.signIn.success": "আবার স্বাগতম, %{name}!", + "authentication.signIn.success": "আবার স্বাগতম, %{name}", "authentication.createAccount.accountConfirmed": "আপনার অ্যাকাউন্ট সফলভাবে নিশ্চিত করা হয়েছে।", "authentication.createAccount.anEmailHasBeenSent": "%{Email} এ একটি ইমেল পাঠানো হয়েছে", "authentication.createAccount.confirmationInstruction": "অ্যাকাউন্ট তৈরি সম্পূর্ণ করার জন্য আমরা আপনাকে যে ইমেইলটি পাঠিয়েছি সেই লিঙ্কে ক্লিক করুন।", @@ -458,6 +460,7 @@ "authentication.createAccount.email": "ইমেইল", "authentication.createAccount.emailPrivacy": "আমরা আপনার আবেদন সম্পর্কে আপনার সাথে যোগাযোগ করতে শুধুমাত্র আপনার ইমেইল ঠিকানা ব্যবহার করব।", "authentication.createAccount.reEnterEmail": "ই - মেইল ​​এর ঠিকানা পুনঃ - প্রবেশ করান", + "authentication.createAccount.noAccount": "কোনো অ্যাকাউন্ট নেই?", "authentication.createAccount.phone": "ফোন", "authentication.createAccount.reEnterPassword": "আপনার পাসওয়ার্ড পুনরায় লিখুন", "authentication.createAccount.resendTheEmail": "ইমেলটি আবার পাঠান", @@ -515,7 +518,7 @@ "footer.srContactInformation": "যোগাযোগের তথ্য", "footer.srLegalInformation": "আইনি তথ্য", "footer.contact": "যোগাযোগ", - "footer.disclaimer": "অস্বীকৃতি", + "footer.terms": "অস্বীকৃতি", "footer.forGeneralQuestions": "সাধারণ প্রোগ্রাম অনুসন্ধানের জন্য, আপনি আমাদের 000-000-0000 এ কল করতে পারেন।", "footer.giveFeedback": "মতামত দিন", "footer.privacyPolicy": "গোপনীয়তা নীতি", @@ -539,6 +542,7 @@ "leasingAgent.title": "লিজিং এজেন্ট শিরোনাম", "leasingAgent.officeHours": "অফিসের সময়সূচি", "leasingAgent.officeHoursPlaceholder": "উদা: সকাল :00:০০ - বিকাল ৫ টা, সোমবার থেকে শুক্রবার", + "listingFilters.clear": "পরিষ্কার", "listings.error": "ফর্ম জমা দিতে সমস্যা হয়েছে।", "listings.closeThisListing": "আপনি কি সত্যিই এই তালিকাটি বন্ধ করতে চান?", "listings.active": "আবেদন গ্রহণ করা", @@ -683,8 +687,8 @@ "listings.reservedCommunitySeniorTitle": "সিনিয়র বিল্ডিং", "listings.reservedCommunityTitleDefault": "সংরক্ষিত ভবন", "listings.reservedCommunityTypes.senior": "সিনিয়র", - "listings.reservedCommunityTypes.senior55": "বয়স্ক 55+", - "listings.reservedCommunityTypes.senior62": "সিনিয়র 62+", + "listings.reservedCommunityTypes.senior55": "প্রবীণ 55+", + "listings.reservedCommunityTypes.senior62": "প্রবীণ 62+", "listings.reservedCommunityTypes.partiallySenior": "আংশিক সিনিয়র", "listings.reservedCommunityTypes.specialNeeds": "অ্যাক্সেসযোগ্য", "listings.reservedFor": "%{Type} এর জন্য সংরক্ষিত", @@ -734,6 +738,7 @@ "listings.sections.photoSubtitle": "তালিকাটির জন্য একটি ছবি আপলোড করুন যা পূর্বরূপ হিসাবে ব্যবহৃত হবে।", "listings.sections.processSubtitle": "গুরুত্বপূর্ণ তারিখ এবং যোগাযোগের তথ্য", "listings.sections.processTitle": "প্রক্রিয়া", + "listings.sections.publicProgramNote": "সাশ্রয়ী মূল্যের আবাসন সম্পত্তি প্রায়শই নির্দিষ্ট জনসংখ্যার জন্য তহবিল পায়, যেমন বয়স্ক, প্রতিবন্ধী বাসিন্দা ইত্যাদি। সম্পত্তি একাধিক জনসংখ্যাকে সেবা দিতে পারে। আপনি যোগ্য কিনা তা নিশ্চিত না হলে এই সম্পত্তির সাথে যোগাযোগ করুন।", "listings.sections.rankingsResultsTitle": "র R্যাঙ্কিং এবং ফলাফল", "listings.sections.rankingsResultsSubtitle": "একবার আবেদন জমা দিলে কি হয় সে সম্পর্কে বিস্তারিত তথ্য প্রদান করুন।", "listings.sections.rentalAssistanceSubtitle": "এই সম্পত্তির জন্য হাউজিং চয়েস ভাউচার, বিভাগ 8 এবং অন্যান্য বৈধ ভাড়া সহায়তা প্রোগ্রাম বিবেচনা করা হবে। বৈধ ভাড়া ভর্তুকির ক্ষেত্রে, প্রয়োজনীয় ন্যূনতম আয় ভাড়ার অংশের উপর ভিত্তি করে হবে যা ভাড়াটিয়া ভর্তুকি ব্যবহারের পরে পরিশোধ করে।", @@ -763,6 +768,8 @@ "listings.upcomingLotteries.noResults": "এই সময়ে আসন্ন লটারির সাথে কোন বন্ধ তালিকা নেই।", "listings.upcomingLotteries.show": "বন্ধ তালিকা দেখান", "listings.upcomingLotteries.title": "বন্ধ তালিকা", + "listings.vacantUnits": "খালি ইউনিটসমূহ", + "listings.verifiedListing": "সম্পত্তির ভিত্তিতে নিশ্চিতকৃত", "listings.waitlist.closed": "অপেক্ষার তালিকা বন্ধ", "listings.waitlist.currentSizeQuestion": "বর্তমান তালিকায় কতজন আছেন?", "listings.waitlist.label": "প্রতীক্ষার তালিকা", @@ -867,6 +874,7 @@ "nav.myApplications": "আমার অ্যাপ্লিকেশন", "nav.myDashboard": "আমার ড্যাশবোর্ড", "nav.mySettings": "আমার সেটিংস", + "nav.rentals": "ভাড়া", "nav.signIn": "সাইন ইন করুন", "nav.signOut": "সাইন আউট", "nav.signUp": "নিবন্ধন করুন", @@ -876,7 +884,7 @@ "nav.flags": "পতাকা", "nav.users": "ব্যবহারকারীরা", "pageTitle.additionalResources": "আরও আবাসন সুযোগ", - "pageTitle.disclaimer": "অনুমোদন অস্বীকৃতি", + "pageTitle.terms": "অনুমোদন অস্বীকৃতি", "pageTitle.housingCounselors": "হাউজিং কাউন্সিলর", "pageTitle.getAssistance": "সহায়তা পান", "pageTitle.rentalListings": "ভাড়া দেখুন", @@ -893,6 +901,19 @@ "region.name": "স্থানীয় অঞ্চল", "progressNav.srHeading": "অগ্রগতি", "progressNav.current": "বর্তমান ধাপ: ", + "publicFilter.confirmedListings": "নিশ্চিত তালিকাসমূহ", + "publicFilter.confirmedListingsFieldLabel": "শুধুমাত্র সম্পত্তির ভিত্তিতে নিশ্চিতকৃত তালিকাসমূহ দেখান", + "publicFilter.bedRoomSize": "বেডরুমের আকার", + "publicFilter.rentRange": "মাসিক ভাড়ার পরিসর", + "publicFilter.rentRangeMin": "কোনো সর্বনিম্ন ভাড়া নেই", + "publicFilter.rentRangeMax": "কোনো সর্বোচ্চ ভাড়া নেই", + "publicFilter.communityPrograms": "কমিউনিটি কর্মসূচি", + "publicFilter.waitlist.open": "খোলা অপেক্ষমান তালিকা", + "publicFilter.waitlist.closed": "বন্ধ অপেক্ষমান তালিকা", + "seasons.fall": "শরৎ", + "seasons.spring": "বসন্ত", + "seasons.summer": "গ্রীষ্ম", + "seasons.winter": "শীত", "states.AL": "আলাবামা", "states.AK": "আলাস্কা", "states.AZ": "অ্যারিজোনা", @@ -952,7 +973,7 @@ "t.areYouStillWorking": "তুমি কি এখনও কাজ করছো?", "t.accessibility": "সহজলভ্যতা", "t.am": "এএম", - "t.availability": "উপস্থিতি", + "t.availability": "প্রাপ্যতা", "t.automatic": "স্বয়ংক্রিয়", "t.back": "পেছনে", "t.built": "নির্মিত", @@ -1095,9 +1116,12 @@ "welcome.latestListings": "সর্বশেষ তালিকা", "welcome.lastUpdated": "সর্বশেষ আপডেট করা হয়েছে %{date} তারিখে", "welcome.cityRegions": "শহরের অঞ্চলগুলি", + "welcome.signUp": "কোনো নতুন তালিকা পোস্ট করা হলেই ইমেইল পাওয়ার সুযোগ নিন", + "welcome.signUpToday": "আজই সাইন-আপ করুন", "welcome.subTitle": "আপনার আয় এবং গৃহস্থালি চাহিদার উপর ভিত্তি করে ভাড়া আবাসন খুঁজে পেতে নীচের বোতামে ক্লিক করুন", "whatToExpect.label": "কি আশা করছ", "whatToExpect.default": "শূন্যপদ পূরণ না হওয়া পর্যন্ত আবেদনকারীরা র agent্যাঙ্ক ক্রমে সম্পত্তি এজেন্টের সাথে যোগাযোগ করবে। আপনার দেওয়া সমস্ত তথ্য যাচাই করা হবে এবং আপনার যোগ্যতা নিশ্চিত করা হবে। যদি আপনি কোন প্রতারণামূলক বিবৃতি দিয়ে থাকেন তাহলে আপনার আবেদনটি প্রতীক্ষার তালিকা থেকে সরিয়ে দেওয়া হবে। যদি আমরা আপনার দাবি করা আবাসন পছন্দ যাচাই করতে না পারি, তাহলে আপনি অগ্রাধিকার পাবেন না কিন্তু অন্যথায় শাস্তি পাবেন না। আপনার আবেদন নির্বাচন করা উচিত, আরো বিস্তারিত আবেদন পূরণ এবং প্রয়োজনীয় সহায়ক নথি প্রদান করার জন্য প্রস্তুত থাকুন।", + "listingFilters.allRentals": "সমস্ত ভাড়া", "listingFilters.buttonTitle": "ছাঁকনি", "listingFilters.buttonTitleWithNumber": "ফিল্টার (%{number})", "listingFilters.loading": "লোড হচ্ছে...", @@ -1151,7 +1175,7 @@ "eligibility.progress.sections.disability": "অক্ষমতা", "eligibility.progress.sections.accessibility": "অ্যাক্সেসযোগ্যতা", "eligibility.progress.sections.income": "আয়", - "eligibility.progress.sections.disclaimer": "দাবিত্যাগ", + "eligibility.progress.sections.terms": "দাবিত্যাগ", "eligibility.welcome.header": "স্বাগত", "eligibility.welcome.description": "Detroit Home Connect এ স্বাগতম! আপনি যে ভাড়ার জন্য যোগ্য হতে পারেন তা দেখতে, শুধু চারটি প্রশ্নের উত্তর দিন।", "eligibility.household.prompt": "আপনার পরবর্তী ভাড়ায় আপনি সহ কতজন লোক বাস করবে?", @@ -1184,21 +1208,24 @@ "eligibility.income.ranges.30kTo40k": "$30,000 - $39,999", "eligibility.income.ranges.40kTo50k": "$40,000 - $49,999", "eligibility.income.ranges.over50k": "$50,000 বা তার বেশি", - "eligibility.accessibility.title": "অভিগম্যতা বৈশিষ্ট্য", - "eligibility.accessibility.prompt": "আপনার কি অতিরিক্ত অ্যাক্সেসিবিলিটি বৈশিষ্ট্য প্রয়োজন?", + "eligibility.accessibility.acInUnit": "ইউনিট এ এসি", + "eligibility.accessibility.accessibleParking": "অভিগম্য পার্কিং", + "eligibility.accessibility.barrierFreeEntrance": "বাধা_মুক্ত_প্রবেশ", "eligibility.accessibility.description": "কিছু বৈশিষ্ট্যে অ্যাক্সেসিবিলিটি বৈশিষ্ট্য রয়েছে যা অন্যদের নাও থাকতে পারে।", "eligibility.accessibility.elevator": "লিফট", - "eligibility.accessibility.wheelchairRamp": "হুইলচেয়ার র‌্যাম্প", - "eligibility.accessibility.serviceAnimalsAllowed": "পরিষেবা অনুমোদিত", - "eligibility.accessibility.accessibleParking": "অভিগম্য পার্কিং", - "eligibility.accessibility.parkingOnSite": "সাইটে পার্কিং", + "eligibility.accessibility.grabBars": "দখল বার", + "eligibility.accessibility.hearing": "শ্রবণ", + "eligibility.accessibility.heatingInUnit": "হিটিং ইউনিট", "eligibility.accessibility.inUnitWasherDryer": "ইউনিট ওয়াশার ড্রায়ার", "eligibility.accessibility.laundryInBuilding": "বিল্ডিংয়ে লন্ড্রি", - "eligibility.accessibility.barrierFreeEntrance": "বাধা_মুক্ত_প্রবেশ", + "eligibility.accessibility.mobility": "গতিশীলতা", + "eligibility.accessibility.parkingOnSite": "সাইটে পার্কিং", + "eligibility.accessibility.prompt": "আপনার কি অতিরিক্ত অ্যাক্সেসিবিলিটি বৈশিষ্ট্য প্রয়োজন?", "eligibility.accessibility.rollInShower": "স্নানে রোল", - "eligibility.accessibility.grabBars": "দখল বার", - "eligibility.accessibility.heatingInUnit": "হিটিং ইউনিট", - "eligibility.accessibility.acInUnit": "ইউনিট এ এসি", + "eligibility.accessibility.serviceAnimalsAllowed": "পরিষেবা অনুমোদিত", + "eligibility.accessibility.title": "অভিগম্যতা বৈশিষ্ট্য", + "eligibility.accessibility.visual": "চাক্ষুষ", + "eligibility.accessibility.wheelchairRamp": "হুইলচেয়ার র‌্যাম্প", "eligibility.disclaimer.description": "এই প্রশ্নের উত্তর দেওয়ার জন্য আপনাকে ধন্যবাদ. আপনি যখন \"এখন ফলাফল দেখুন\" ক্লিক করেন বা ট্যাপ করেন, তখন আপনি ভাড়া দেখতে পাবেন যা আপনার উত্তরের উপর ভিত্তি করে আপনার প্রয়োজনের সাথে মানানসই হতে পারে। একাধিক কারণ নির্দিষ্ট ভাড়ার জন্য যোগ্যতাকে প্রভাবিত করতে পারে, তাই আপনি যদি এমন একটি ভাড়া দেখতে পান যা আপনি আগ্রহী, তালিকায় থাকা সম্পত্তি এজেন্টের সাথে যোগাযোগ করুন৷ আপনি সেই ভাড়ার জন্য যোগ্য কিনা তা নির্ধারণ করতে তারা আপনাকে সাহায্য করতে পারে।", "eligibility.preferNotToSay": "না বলা পছন্দ", "resources.body1": "আবাসন অনুসন্ধানে আপনার অতিরিক্ত সহায়তার প্রয়োজন হতে পারে। আপনার আবাসন খুঁজে পেতে এবং বজায় রাখতে সাহায্য করার জন্য HRD সম্পদের একটি তালিকা তৈরি করেছে।", diff --git a/ui-components/src/locales/es.json b/ui-components/src/locales/es.json index 5ccca8e9a5..a6fbe0231f 100644 --- a/ui-components/src/locales/es.json +++ b/ui-components/src/locales/es.json @@ -6,6 +6,8 @@ "account.haveAnAccount": "¿Ya tiene una cuenta?", "account.myApplications": "Mis Solicitudes", "account.myApplicationsSubtitle": "Vea las fechas de la lotería y los listados de las propiedades para las que ha presentado solicitudes", + "account.myFavorites": "Mis favoritos", + "account.myFavoritesSubtitle": "Guardar las ofertas y volver a buscar actualizaciones", "application.ada.hearing": "Para dificultades auditivas", "application.ada.label": "Viviendas accesibles de conformidad con ADA", "application.ada.mobility": "Para dificultades en la movilidad", @@ -296,7 +298,7 @@ "authentication.createAccount.confirmationInstruction": "Por favor haga clic en el enlace del email que le hemos enviado para completar la creación de su cuenta.", "authentication.createAccount.confirmationNeeded": "Se necesita confirmación", "authentication.createAccount.mustBe8Chars": "debe tener 8 caracteres", - "authentication.createAccount.noAccount": "No tienes una cuenta?", + "authentication.createAccount.noAccount": "¿No tiene una cuenta?", "authentication.createAccount.password": "Contraseña", "authentication.createAccount.passwordInfo": "Debe tener al menos 8 caracteres e incluir al menos 1 letra y al menos un número", "authentication.createAccount.reEnterEmail": "Vuelva a introducir la dirección de correo electrónico", @@ -305,11 +307,29 @@ "authentication.signIn.error": "Hubo un error cuando usted inició sesión", "authentication.signIn.errorGenericMessage": "Por favor inténtelo de nuevo, o comuníquese con servicio al cliente para recibir asistencia.", "authentication.signIn.forgotPassword": "Olvidé la contraseña", - "authentication.signIn.success": "¡Bienvenido de nuevo, %{name}!", + "authentication.signIn.success": "Bienvenido de nuevo, %{name}", "authentication.timeout.action": "Permanecer en la sesión", "authentication.timeout.signOutMessage": "Su seguridad es importante para nosotros. Concluimos su sesión debido a inactividad. Sírvase iniciar sesión para continuar.", "authentication.timeout.text": "Para proteger su identidad, su sesión concluirá en un minuto debido a inactividad. Si decide no responder, perderá toda la información que no haya guardado y concluirá su sesión.", "config.routePrefix": "es", + "eligibility.accessibility.acInUnit": "CA en la unidad", + "eligibility.accessibility.accessibleParking": "Estacionamiento Accesible", + "eligibility.accessibility.barrierFreeEntrance": "Entrada sin barreras", + "eligibility.accessibility.description": "Algunas propiedades tienen características de accesibilidad que otras pueden no tener.", + "eligibility.accessibility.elevator": "Ascensor", + "eligibility.accessibility.grabBars": "Barras de apoyo", + "eligibility.accessibility.hearing": "Audiencia", + "eligibility.accessibility.heatingInUnit": "Calefacción en Unidad", + "eligibility.accessibility.inUnitWasherDryer": "Lavadora y secadora en el apartamento", + "eligibility.accessibility.laundryInBuilding": "Lavandería en el edificio", + "eligibility.accessibility.mobility": "Movilidad", + "eligibility.accessibility.parkingOnSite": "Estacionamiento en el lugar", + "eligibility.accessibility.prompt": "¿Necesita funciones de accesibilidad adicionales?", + "eligibility.accessibility.rollInShower": "Rollo en la ducha", + "eligibility.accessibility.serviceAnimalsAllowed": "Se admiten animales de servicio", + "eligibility.accessibility.title": "Funciones de accesibilidad", + "eligibility.accessibility.visual": "Visual", + "eligibility.accessibility.wheelchairRamp": "Rampa para silla de ruedas", "errors.agreeError": "Debe estar de acuerdo con los términos para poder continuar", "errors.alert.badRequest": "¡Oops! Parece que algo salió mal. Por favor, inténtelo de nuevo. \n\nComuníquese con su departamento de vivienda si sigue teniendo problemas.", "errors.alert.timeoutPleaseTryAgain": "¡Oops! Parece que algo salió mal. Por favor, inténtelo de nuevo.", @@ -335,7 +355,7 @@ "errors.zipCodeError": "Por favor ingrese un código postal", "footer.contact": "Contacto", "footer.copyright": "Demonstration Jurisdiction © 2021 • Todos los derechos reservados.", - "footer.disclaimer": "Exención de responsabilidades", + "footer.terms": "Exención de responsabilidades", "footer.forGeneralQuestions": "Si requiere información general sobre el programa, nos puede llamar al 000-000-0000.", "footer.giveFeedback": "Proporcione sus comentarios", "housingCounselors.call": "Llame al %{number}", @@ -345,6 +365,8 @@ "leasingAgent.contact": "Comuníquese con el Agente de alquiler", "leasingAgent.dueToHighCallVolume": "Debido al alto volumen de llamadas, usted podría escuchar un mensaje.", "leasingAgent.officeHours": "Horario de oficina", + "listingFilters.allRentals": "Todos los alquileres", + "listingFilters.clear": "Borrar", "listings.additionalInformation": "Información adicional", "listings.additionalInformationEnvelope": "Sobre de Información adicional", "listings.allUnits": "Todas las viviendas", @@ -410,6 +432,7 @@ "listings.occupancyDescriptionNoSro": "Los límites de ocupación de esta edificación están basados en el tipo de vivienda.", "listings.occupancyDescriptionSomeSro": "La ocupación de esta edificación varía según el tipo de vivienda. Los SROs están limitados a 1 persona por vivienda, sin importar la edad. Para todos los demás tipos de vivienda, los límites de ocupación no toman en cuenta a niños menores de 6 años.", "listings.openHouseEvent.header": "Eventos de puerta abierta", + "listings.pending": "Próximamente", "listings.percentAMIUnit": "Vivienda AMI de %{percent}%", "listings.priorityUnits": "Viviendas prioritarias", "listings.priorityUnitsDescription": "Esta edificación cuenta con viviendas apartadas si alguna de las siguientes condiciones se aplican a usted o a alguna persona de su hogar:", @@ -420,6 +443,8 @@ "listings.rentalHistory": "Historial de alquiler", "listings.requiredDocuments": "Documentos requeridos", "listings.reservedCommunityBuilding": "Edificación %{type}", + "listings.reservedCommunityTypes.senior55": "Adultos mayores de 55 años", + "listings.reservedCommunityTypes.senior62": "Adultos mayores de 62 años", "listings.reservedFor": "Reservada para %{type}", "listings.reservedTypePlural.family": "familias", "listings.reservedTypePlural.senior": "adultos mayores", @@ -440,6 +465,7 @@ "listings.sections.neighborhoodSubtitle": "Ubicación y transporte", "listings.sections.processSubtitle": "Fechas importantes e información de contacto", "listings.sections.processTitle": "Proceso", + "listings.sections.publicProgramNote": "Las propiedades de viviendas asequibles a menudo reciben fondos para albergar a poblaciones específicas, como personas mayores, residentes con discapacidades, etc. Las propiedades pueden atender a más de una población. Comuníquese con esta propiedad si no está seguro si califica.", "listings.sections.rentalAssistanceSubtitle": "Housing Choice Vouchers, Section 8 y otros programas válidos de asistencia en el alquiler serán considerados en esta propiedad. En el caso de un subsidio en el alquiler válido, los ingresos mínimos requeridos estarán basados en la porción del alquiler que pague el inquilino después de utilizar el subsidio.", "listings.sections.rentalAssistanceTitle": "Asistencia en el alquiler", "listings.seeMaximumIncomeInformation": "Ver Información sobre ingresos máximos", @@ -456,6 +482,8 @@ "listings.unitsAreFor": "Estas viviendas son para %{type}.", "listings.unitsHaveAccessibilityFeaturesFor": "Estas viviendas tienen características de accesibilidad para personas con %{type}.", "listings.upcomingLotteries.noResults": "No hay listados cerrados ni loterías próximas en este momento.", + "listings.vacantUnits": "Unidades vacantes", + "listings.verifiedListing": "Confirmado según propiedad", "listings.waitlist.closed": "Lista de espera cerrada", "listings.waitlist.currentSize": "Tamaño de la lista de espera actual", "listings.waitlist.finalSize": "Tamaño final de la lista de espera", @@ -475,13 +503,15 @@ "nav.myDashboard": "Mi Tablero de control", "nav.mySettings": "Mis Configuraciones", "nav.properties": "Propiedades", + "nav.rentals": "Alquileres", "nav.signIn": "Iniciar sesión", "nav.signOut": "Cerrar sesión", "nav.siteTitle": "Portal de viviendas", "pageDescription.listing": "Haga su solicitud de vivienda de precio accesible en %{listingName} en %{regionName}, construida en sociedad con Exygy.", "pageDescription.welcome": "Busque y haga su solicitud de vivienda de precio accesible en el Portal de vivienda de %{regionName}", + "pageTitle.resources": "Recursos", "pageTitle.additionalResources": "Más oportunidades de vivienda", - "pageTitle.disclaimer": "Exenciones de respaldos", + "pageTitle.terms": "Exenciones de respaldos", "pageTitle.getAssistance": "Obtener asistencia", "pageTitle.housingCounselors": "Asesores de vivienda", "pageTitle.privacy": "Política de privacidad", @@ -491,7 +521,20 @@ "pageTitle.welcomeVietnamese": "Tiếng Việt", "progressNav.current": "Paso actual: ", "progressNav.srHeading": "Progreso", + "publicFilter.confirmedListings": "Ofertas confirmadas", + "publicFilter.confirmedListingsFieldLabel": "Mostrar únicamente ofertas confirmadas según propiedad", + "publicFilter.bedRoomSize": "Tamaño del dormitorio", + "publicFilter.rentRange": "Rango del alquiler mensual", + "publicFilter.rentRangeMin": "Sin costo de alquiler mínimo", + "publicFilter.rentRangeMax": "Sin costo de alquiler máximo", + "publicFilter.communityPrograms": "Programas comunitarios", + "publicFilter.waitlist.open": "Abrir lista de espera", + "publicFilter.waitlist.closed": "Cerrar lista de espera", "region.name": "Región local", + "seasons.fall": "Otoño", + "seasons.spring": "Primavera", + "seasons.summer": "Verano", + "seasons.winter": "Invierno", "states.AK": "Alaska", "states.AL": "Alabama", "states.AR": "Arkansas", @@ -557,6 +600,7 @@ "t.delete": "Borrar", "t.deposit": "Depósito", "t.description": "Ingrese descripción", + "t.done": "Hecho", "t.edit": "Editar", "t.email": "Email", "t.emailAddressPlaceholder": "you@myemail.com", @@ -622,8 +666,8 @@ "welcome.seeMoreOpportunities": "Ver más oportunidades de alquiler y propiedad de vivienda", "welcome.seeMoreOpportunitiesTruncated": "Ver más oportunidades y recursos de vivienda", "welcome.seeRentalListings": "Ver viviendas en alquiler", - "welcome.signUp": "Reciba correos electrónicos cuando se publique un anuncio nuevo", - "welcome.signUpToday": "Regístrese hoy", + "welcome.signUp": "Reciba correos electrónicos cuando se publique una nueva oferta", + "welcome.signUpToday": "Inscríbase hoy", "welcome.title": "Haga su solicitud de vivienda de precio accesible en", "welcome.viewAdditionalHousing": "Vea Oportunidades y recursos adicionales de vivienda", "welcome.viewAdditionalHousingTruncated": "Ver oportunidades y recursos", diff --git a/ui-components/src/locales/general.json b/ui-components/src/locales/general.json index 342d801aad..34591dffe8 100644 --- a/ui-components/src/locales/general.json +++ b/ui-components/src/locales/general.json @@ -614,7 +614,7 @@ "authentication.signIn.error": "There was an error signing you in", "authentication.signIn.errorGenericMessage": "Please try again, or contact support for help.", "authentication.signIn.forgotPassword": "Forgot password?", - "authentication.signIn.success": "Welcome back, %{name}!", + "authentication.signIn.success": "Welcome back, %{name}", "authentication.signIn.passwordOutdated": "Your password has expired. Please reset your password.", "authentication.signIn.accountHasBeenLocked": "For security reasons, this account has been locked.", "authentication.signIn.youHaveToWait": "You’ll have to wait 30 minutes since the last failed attempt before trying again.", @@ -704,7 +704,7 @@ "footer.srContactInformation": "Contact information", "footer.srLegalInformation": "Legal information", "footer.contact": "Contact", - "footer.disclaimer": "Disclaimer", + "footer.terms": "Terms and Conditions", "footer.forGeneralQuestions": "For general program inquiries, you may call us at 000-000-0000.", "footer.giveFeedback": "Give Feedback", "footer.privacyPolicy": "Privacy Policy", @@ -821,7 +821,7 @@ "listings.editPreferences": "Edit Preferences", "listings.enterLotteryForWaitlist": "Submit an application for an open slot on the waitlist for %{units} units.", "listings.firstComeFirstServe": "First come first serve", - "listings.forIncomeCalculations": "For income calculations, household size includes everyone (all ages) living in the unit.", + "listings.forIncomeCalculations": "To determine your eligibility for this property, choose your household size (include yourself in that calculation). For each type of unit, your household cannot make more than the income limit shown below.", "listings.forIncomeCalculationsBMR": "Income calculations are based on unit type", "listings.hideClosedListings": "Hide Closed Listings", "listings.householdMaximumIncome": "Household Maximum Income", @@ -903,11 +903,6 @@ "listings.reservedCommunityTypes.partiallySenior": "Partially Seniors", "listings.reservedCommunityTypes.specialNeeds": "Accessible", "listings.reservedCommunityTypes.developmentalDisability": "Developmental Disability", - "listings.reservedCommunityTypeDescriptions.senior": "Seniors", - "listings.reservedCommunityTypeDescriptions.senior55": "Seniors 55+", - "listings.reservedCommunityTypeDescriptions.senior62": "Seniors 62+", - "listings.reservedCommunityTypeDescriptions.specialNeeds": "Special Needs", - "listings.reservedCommunityTypeDescriptions.developmentalDisability": "People with Developmental Disabilities", "listings.reservedFor": "Reserved for %{type}", "listings.reservedCommunityType": "Reserved Community Type", "listings.reservedTypePlural.family": "families", @@ -989,9 +984,8 @@ "listings.unitTypes.studio": "Studio", "listings.unitTypes.SRO": "SRO", "listings.vacantUnit": "vacant unit", - "listings.vacantUnits": "Vacant Units", - "listings.unitSummaryGroupMessage": "For each type of unit, you cannot make more than the income limit shown for the", - "listings.unitSummaryGroupLinkText": "Household Maximum Income", + "listings.vacantUnits": "Vacant units", + "listings.unitSummaryGroupMessage": "For each type of unit, you cannot make more than the income limit associated with your household size, as shown in the Household Maximum Income table below.", "listings.unitsAreFor": "These units are for %{type}.", "listings.unitsHaveAccessibilityFeaturesFor": "These units have accessibility features for people with %{type}.", "listings.upcomingLotteries.hide": "Hide Closed Listings", @@ -1131,8 +1125,8 @@ "listings.unitsDescription": "Select the building units that are available through this listing.", "listings.unitTypesOrIndividual": "Do you want to show unit types or individual units?", "listings.listingIsAlreadyLive": "This listing is already live. Updates will affect the applicant experience on the housing portal.", - "listings.managerHasConfirmedInformation": "A property manager has confirmed the information on this listing", - "listings.areaMedianIncome": "Area Median Income is the income number at which half of the population earns more and half earns less, based on the number of people in the household.", + "listings.managerHasConfirmedInformation": "Property management staff or the owner has checked this listing to make sure the information is correct.", + "listings.areaMedianIncome": "Eligibility for regulated affordable housing is based on the area median income, or AMI. To qualify for this housing, you often have to meet certain income requirements. These requirements are based on income levels relative to AMI.", "lottery.applicationsThatQualifyForPreference": "Applications that qualify for this preference will be given a higher priority.", "lottery.viewPreferenceList": "View Preference List", "nav.srHeading": "Navigation Menu", @@ -1158,7 +1152,7 @@ "nav.flags": "Flags", "nav.users": "Users", "pageTitle.additionalResources": "More Housing Opportunities", - "pageTitle.disclaimer": "Endorsement Disclaimers", + "pageTitle.terms": "Terms and Conditions", "pageTitle.housingCounselors": "Housing Counselors", "pageTitle.getAssistance": "Get Assistance", "pageTitle.rentalListings": "See Rentals", @@ -1170,7 +1164,6 @@ "pageTitle.about": "About", "pageTitle.feedback": "Share website feedback", "pageTitle.resources": "Resources", - "pageTitle.favorites": "My Favorites", "pageDescription.welcome": "Search and apply for affordable housing on %{regionName}'s Housing Portal", "pageDescription.listing": "Apply for affordable housing at %{listingName} in %{regionName}, built in partnership with Exygy.", "region.name": "Local Region", @@ -1410,7 +1403,7 @@ "welcome.cityRegions": "City regions", "welcome.subTitle": "Click the button below to find rental housing based on your income and household needs", "welcome.seeMoreOpportunitiesTruncated": "See more housing opportunities and resources", - "welcome.signUp": "Get emailed whenever a new listing is posted", + "welcome.signUp": "Get emails whenever a new listing is posted ", "welcome.signUpToday": "Sign up today", "welcome.viewAdditionalHousing": "View additional housing opportunities and resources", "welcome.viewAdditionalHousingTruncated": "View opportunities and resources", @@ -1517,21 +1510,24 @@ "eligibility.income.ranges.30kTo40k": "$30,000 - $39,999", "eligibility.income.ranges.40kTo50k": "$40,000 - $49,999", "eligibility.income.ranges.over50k": "$50,000 or more", - "eligibility.accessibility.title": "Accessibility Features", - "eligibility.accessibility.prompt": "Do you require additional accessibility features?", + "eligibility.accessibility.acInUnit": "AC in Unit", + "eligibility.accessibility.accessibleParking": "Accessible Parking", + "eligibility.accessibility.barrierFreeEntrance": "Barrier Free Entrance", "eligibility.accessibility.description": "Some properties have accessibility features that others may not have.", "eligibility.accessibility.elevator": "Elevator", - "eligibility.accessibility.wheelchairRamp": "Wheelchair Ramp", - "eligibility.accessibility.serviceAnimalsAllowed": "Service Animals Allowed", - "eligibility.accessibility.accessibleParking": "Accessible Parking", - "eligibility.accessibility.parkingOnSite": "Parking On Site", + "eligibility.accessibility.grabBars": "Grab Bars", + "eligibility.accessibility.hearing": "Hearing", + "eligibility.accessibility.heatingInUnit": "Heating in Unit", "eligibility.accessibility.inUnitWasherDryer": "In Unit Washer Dryer", "eligibility.accessibility.laundryInBuilding": "Laundry in Building", - "eligibility.accessibility.barrierFreeEntrance": "Barrier Free Entrance", + "eligibility.accessibility.mobility": "Mobility", + "eligibility.accessibility.parkingOnSite": "Parking On Site", + "eligibility.accessibility.prompt": "Do you require additional accessibility features?", "eligibility.accessibility.rollInShower": "Roll in Shower", - "eligibility.accessibility.grabBars": "Grab Bars", - "eligibility.accessibility.heatingInUnit": "Heating in Unit", - "eligibility.accessibility.acInUnit": "AC in Unit", + "eligibility.accessibility.serviceAnimalsAllowed": "Service Animals Allowed", + "eligibility.accessibility.title": "Accessibility Features", + "eligibility.accessibility.visual": "Visual", + "eligibility.accessibility.wheelchairRamp": "Wheelchair Ramp", "eligibility.disclaimer.description": "Thank you for answering these questions. When you click or tap \"See results now\", you'll see rentals that might fit your needs based on your answers. Multiple factors can affect eligibility for specific rentals, so if you see a rental you're interested in, contact the Property Agent on the listing. They can help you determine if you're eligible for that rental.", "eligibility.preferNotToSay": "Prefer not to say", "eligibility.seeResultsNow": "See results now", diff --git a/ui-components/src/locales/vi.json b/ui-components/src/locales/vi.json index 6414ac10a4..7d81e724e5 100644 --- a/ui-components/src/locales/vi.json +++ b/ui-components/src/locales/vi.json @@ -334,7 +334,7 @@ "errors.zipCodeError": "Vui lòng nhập số zipcode", "footer.contact": "Liên lạc", "footer.copyright": "Demonstration Jurisdiction © 2021 • Giữ Mọi Bản quyền", - "footer.disclaimer": "Tuyên bố miễn trách nhiệm", + "footer.terms": "Tuyên bố miễn trách nhiệm", "footer.forGeneralQuestions": "Đối với các thắc mắc chung về chương trình, quý vị có thể gọi cho chúng tôi theo số 000-000-0000.", "footer.giveFeedback": "Đưa ra Phản hồi", "housingCounselors.call": "Hãy gọi %{number}", @@ -480,7 +480,7 @@ "pageDescription.listing": "Ghi danh nhà ở giá phải chăng tại %{listingNam} ở %{regionName}, được xây dựng với sự hợp tác của Exygy.", "pageDescription.welcome": "Tìm kiếm và ghi danh nhà ở giá cả phải chăng trên Cổng thông tin về Gia cư tại %{regionName}", "pageTitle.additionalResources": "Thêm nhiều Cơ hội Nhà ở Hơn", - "pageTitle.disclaimer": "Tuyên bố miễn trách nhiệm Chứng thực", + "pageTitle.terms": "Tuyên bố miễn trách nhiệm Chứng thực", "pageTitle.getAssistance": "Nhận Hỗ trợ", "pageTitle.housingCounselors": "Cố vấn Nhà ở", "pageTitle.privacy": "Chính sách Quyền Riêng tư", diff --git a/ui-components/src/locales/zh.json b/ui-components/src/locales/zh.json index 5382c3d49f..b189d09745 100644 --- a/ui-components/src/locales/zh.json +++ b/ui-components/src/locales/zh.json @@ -334,7 +334,7 @@ "errors.zipCodeError": "請輸入郵遞區號", "footer.contact": "聯絡方式", "footer.copyright": "Demonstration Jurisdiction © 2021 • 版權所有", - "footer.disclaimer": "免責聲明", + "footer.terms": "免責聲明", "footer.forGeneralQuestions": "若為一般計劃查詢,可以致電 000-000-0000 聯絡我們。", "footer.giveFeedback": "提供回饋意見", "housingCounselors.call": "請致電 %{number}", @@ -480,7 +480,7 @@ "pageDescription.listing": "申請在 %{regionName} 的 %{listingName}(與 Exygy 合作興建)可負擔房屋。", "pageDescription.welcome": "在 %{regionName} 的房屋網站搜尋並申請可負擔房屋", "pageTitle.additionalResources": "更多住房申請機會", - "pageTitle.disclaimer": "背書免責聲明", + "pageTitle.terms": "背書免責聲明", "pageTitle.getAssistance": "尋求協助", "pageTitle.housingCounselors": "房屋顧問", "pageTitle.privacy": "隱私權政策", diff --git a/ui-components/src/page_components/listing/ListingCard.tsx b/ui-components/src/page_components/listing/ListingCard.tsx index 39d3a47c55..359665615c 100644 --- a/ui-components/src/page_components/listing/ListingCard.tsx +++ b/ui-components/src/page_components/listing/ListingCard.tsx @@ -97,7 +97,7 @@ const ListingCard = (props: ListingCardProps) => { return ( {cardTag.iconType && ( @@ -105,7 +105,7 @@ const ListingCard = (props: ListingCardProps) => { size={"medium"} symbol={cardTag.iconType} fill={cardTag.iconColor ?? IconFillColors.primary} - className={"mr-2"} + className={"me-2"} /> )} {cardTag.text} diff --git a/ui-components/src/page_components/listing/ListingsGroup.scss b/ui-components/src/page_components/listing/ListingsGroup.scss index fb7e171b02..f17e505dbe 100644 --- a/ui-components/src/page_components/listing/ListingsGroup.scss +++ b/ui-components/src/page_components/listing/ListingsGroup.scss @@ -22,7 +22,7 @@ .listings-group__icon { @apply hidden; @apply pr-5; - @apply mr-5; + @apply me-5; @apply border-r-4; @apply border-gray-700; @apply items-center;