diff --git a/libs/application/templates/rental-agreement/src/forms/RentalHousingInfo.ts b/libs/application/templates/rental-agreement/src/forms/RentalHousingInfo.ts index e2cd410238a3..96efce926265 100644 --- a/libs/application/templates/rental-agreement/src/forms/RentalHousingInfo.ts +++ b/libs/application/templates/rental-agreement/src/forms/RentalHousingInfo.ts @@ -4,7 +4,7 @@ import { RentalHousingPropertyInfo } from './rentalHousingInfo/rentalHousingProp import { RentalHousingLandlordInfo } from './rentalHousingInfo/rentalHousingLandlordInfo' import { RentalHousingTenantInfo } from './rentalHousingInfo/rentalHousingTenantInfo' import { RentalHousingSpecialProvisions } from './rentalHousingInfo/rentalHousingSpecialProvisions' -import { RentalHousingConditionInspection } from './rentalHousingInfo/rentalHousingConditionInspection' +import { RentalHousingCondition } from './rentalHousingInfo/rentalHousingCondition' import { RentalHousingFireProtections } from './rentalHousingInfo/rentalHousingFireProtections' export const RentalHousingInfo = buildSection({ @@ -15,7 +15,7 @@ export const RentalHousingInfo = buildSection({ RentalHousingLandlordInfo, RentalHousingTenantInfo, RentalHousingSpecialProvisions, - RentalHousingConditionInspection, + RentalHousingCondition, RentalHousingFireProtections, ], }) diff --git a/libs/application/templates/rental-agreement/src/forms/rentalHousingInfo/rentalHousingCondition.ts b/libs/application/templates/rental-agreement/src/forms/rentalHousingInfo/rentalHousingCondition.ts new file mode 100644 index 000000000000..3aa05e50c6bf --- /dev/null +++ b/libs/application/templates/rental-agreement/src/forms/rentalHousingInfo/rentalHousingCondition.ts @@ -0,0 +1,75 @@ +import { + buildSubSection, + buildMultiField, + buildRadioField, + buildDescriptionField, + buildTextField, + buildFileUploadField, +} from '@island.is/application/core' +import { getApplicationAnswers, getInspectorOptions } from '../../lib/utils' +import * as m from '../../lib/messages' +import { rentalHousingConditionInspector } from '../../lib/constants' + +export const RentalHousingCondition = buildSubSection({ + id: 'rentalHousingCondition', + title: m.housingCondition.subSectionName, + children: [ + buildMultiField({ + id: 'rentalHousingCondition', + title: m.housingCondition.pageTitle, + description: m.housingCondition.pageDescription, + children: [ + buildDescriptionField({ + id: 'rentalHousingConditionTitle', + title: m.housingCondition.inspectorTitle, + titleVariant: 'h3', + space: 1, + }), + buildRadioField({ + id: 'rentalHousingConditionInspector', + title: '', + description: m.housingCondition.inspectorDescription, + options: getInspectorOptions(), + defaultValue: 'contractParties', + width: 'half', + }), + buildTextField({ + id: 'rentalHousingConditionInspectorName', + title: m.housingCondition.independantInspectorNameLabel, + placeholder: m.housingCondition.independantInspectorNamePlaceholder, + condition: (answers) => { + const { inspectorOptions } = getApplicationAnswers(answers) + return ( + inspectorOptions === + rentalHousingConditionInspector.INDEPENDENT_PARTY + ) + }, + required: true, + }), + buildDescriptionField({ + id: 'rentalHousingResultsTitle', + title: m.housingCondition.inspectionResultsTitle, + titleVariant: 'h3', + space: 6, + }), + buildTextField({ + id: 'rentalHousingConditionTextInput', + title: m.housingCondition.inspectionResultsInputLabel, + description: m.housingCondition.inspectionResultsDescription, + placeholder: m.housingCondition.inspectionResultsInputPlaceholder, + variant: 'textarea', + rows: 8, + }), + buildFileUploadField({ + id: 'asdf', + title: m.housingCondition.fileUploadTitle, + uploadHeader: m.housingCondition.fileUploadTitle, + uploadDescription: m.housingCondition.fileUploadDescription, + uploadAccept: '.pdf, .doc, .docx, .rtf, .jpg, .jpeg, .png, .heic', + uploadMultiple: true, + forImageUpload: true, + }), + ], + }), + ], +}) diff --git a/libs/application/templates/rental-agreement/src/forms/rentalHousingInfo/rentalHousingConditionInspection.ts b/libs/application/templates/rental-agreement/src/forms/rentalHousingInfo/rentalHousingConditionInspection.ts deleted file mode 100644 index 8be68da3dbbc..000000000000 --- a/libs/application/templates/rental-agreement/src/forms/rentalHousingInfo/rentalHousingConditionInspection.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { - buildSubSection, - buildMultiField, - buildRadioField, - buildDescriptionField, - buildTextField, - buildFileUploadField, -} from '@island.is/application/core' -import * as m from '../../lib/messages' - -export const RentalHousingConditionInspection = buildSubSection({ - id: 'rentalHousingConditionInspection', - title: m.housingConditionInspection.subSectionName, - children: [ - buildMultiField({ - id: 'rentalHousingConditionInspection', - title: m.housingConditionInspection.pageTitle, - description: m.housingConditionInspection.pageDescription, - children: [ - buildRadioField({ - id: 'rentalHousingConditionInspectionRadio', - title: m.housingConditionInspection.inspectorTitle, - description: m.housingConditionInspection.inspectorDescription, - options: [ - { - value: 'contractParties', - label: - m.housingConditionInspection.inspectorOptionContractParties, - }, - { - value: 'independentParty', - label: - m.housingConditionInspection.inspectorOptionIndependentParty, - }, - ], - width: 'half', - space: 1, - }), - buildDescriptionField({ - id: 'rentalHousingConditionInspectionTitle', - title: m.housingConditionInspection.inspectionResultsTitle, - description: - m.housingConditionInspection.inspectionResultsDescription, - titleVariant: 'h5', - space: 3, - }), - buildTextField({ - id: 'rentalHousingConditionInspectionTextInput', - title: m.housingConditionInspection.inspectionResultsInputLabel, - placeholder: - m.housingConditionInspection.inspectionResultsInputPlaceholder, - variant: 'textarea', - rows: 8, - }), - buildFileUploadField({ - id: 'rentalHousingConditionInspectionFileUpload', - title: m.housingConditionInspection.fileUploadTitle, - uploadDescription: m.housingConditionInspection.fileUploadDescription, - uploadMultiple: true, - }), - ], - }), - ], -}) diff --git a/libs/application/templates/rental-agreement/src/lib/constants.ts b/libs/application/templates/rental-agreement/src/lib/constants.ts index b0dd83aa4834..2431df46d854 100644 --- a/libs/application/templates/rental-agreement/src/lib/constants.ts +++ b/libs/application/templates/rental-agreement/src/lib/constants.ts @@ -12,6 +12,11 @@ export enum Roles { APPLICANT = 'applicant', } +export enum rentalHousingConditionInspector { + CONTRACT_PARTIES = 'contractParties', + INDEPENDENT_PARTY = 'independentParty', +} + export const pruneAfterDays = (Days: number): StateLifeCycle => { return { shouldBeListed: false, diff --git a/libs/application/templates/rental-agreement/src/lib/dataSchema.ts b/libs/application/templates/rental-agreement/src/lib/dataSchema.ts index 74f6cdb7f675..be7ee86b74e0 100644 --- a/libs/application/templates/rental-agreement/src/lib/dataSchema.ts +++ b/libs/application/templates/rental-agreement/src/lib/dataSchema.ts @@ -2,6 +2,12 @@ import { z } from 'zod' import * as kennitala from 'kennitala' import * as m from './messages' +const FileSchema = z.object({ + name: z.string(), + key: z.string(), + url: z.string().optional(), +}) + export const dataSchema = z.object({ approveExternalData: z.boolean().refine((v) => v), applicant: z.object({ @@ -11,4 +17,5 @@ export const dataSchema = z.object({ params: m.dataSchema.nationalId, }), }), + asdf: z.array(FileSchema), }) diff --git a/libs/application/templates/rental-agreement/src/lib/messages/housing/housingConditionInspection.ts b/libs/application/templates/rental-agreement/src/lib/messages/housing/housingCondition.ts similarity index 65% rename from libs/application/templates/rental-agreement/src/lib/messages/housing/housingConditionInspection.ts rename to libs/application/templates/rental-agreement/src/lib/messages/housing/housingCondition.ts index fa9cd0378479..aaad0102506e 100644 --- a/libs/application/templates/rental-agreement/src/lib/messages/housing/housingConditionInspection.ts +++ b/libs/application/templates/rental-agreement/src/lib/messages/housing/housingCondition.ts @@ -1,73 +1,83 @@ import { defineMessages } from 'react-intl' -export const housingConditionInspection = defineMessages({ +export const housingCondition = defineMessages({ subSectionName: { - id: 'ra.application:housingConditionInspection.subSectionName', + id: 'ra.application:housingCondition.subSectionName', defaultMessage: 'Ástandsskoðun', description: 'Housing condition inspection sub section name', }, pageTitle: { - id: 'ra.application:housingConditionInspection.pageTitle', + id: 'ra.application:housingCondition.pageTitle', defaultMessage: 'Ástand húsnæðis', description: 'Housing condition inspection page title', }, pageDescription: { - id: 'ra.application:housingConditionInspection.pageDescription', + id: 'ra.application:housingCondition.pageDescription', defaultMessage: 'Leigusamningur þarf lögum samkvæmt að innihalda ástandsúttekt á húsnæðinu. Sú úttekt þarf að fara fram við samningsgerðina. Gott er að skoða húsnæðið gaumgæfilega og taka myndir af ástandi. [Sjá nánar hér](https://island.is/skraning-leigusamnings-i-leiguskra#astandsuttekt-og-brunauttekt).', description: 'Housing condition inspection page description', }, inspectorTitle: { - id: 'ra.application:housingConditionInspection.inspectorTitle', + id: 'ra.application:housingCondition.inspectorTitle', defaultMessage: 'Framkvæmdaraðili ástandsskoðunar', description: 'Housing condition inspector title', }, inspectorDescription: { - id: 'ra.application:housingConditionInspection.inspectorDescription', + id: 'ra.application:housingCondition.inspectorDescription', defaultMessage: 'Athugið að aðilar geta sjálfir gert ástandsúttekt eða fengið óháðan aðila til þess og þá skiptist kostnaðurinn við það jafnt á milli aðila.', description: 'Housing condition inspector description', }, inspectorOptionContractParties: { - id: 'ra.application:housingConditionInspection.inspectorOptionContractParties', + id: 'ra.application:housingCondition.inspectorOptionContractParties', defaultMessage: 'Samningsaðilar', description: 'Housing condition inspector option contract parties', }, inspectorOptionIndependentParty: { - id: 'ra.application:housingConditionInspection.inspectorOptionIndependentParty', + id: 'ra.application:housingCondition.inspectorOptionIndependentParty', defaultMessage: 'Óháður aðili', description: 'Housing condition inspector option independent party', }, + independantInspectorNameLabel: { + id: 'ra.application:housingCondition.independantInspectorNameLabel', + defaultMessage: 'Fullt Nafn', + description: 'Housing condition independant inspector name', + }, + independantInspectorNamePlaceholder: { + id: 'ra.application:housingCondition.independantInspectorNamePlaceholder', + defaultMessage: 'Skrifaðu hér fullt nafn óháðs aðila', + description: 'Housing condition independant inspector name placeholder', + }, inspectionResultsTitle: { - id: 'ra.application:housingConditionInspection.inspectionResultsTitle', + id: 'ra.application:housingCondition.inspectionResultsTitle', defaultMessage: 'Niðurstöður ástandsúttektar', description: 'Housing condition inspection results title', }, inspectionResultsDescription: { - id: 'ra.application:housingConditionInspection.inspectionResultsDescription', + id: 'ra.application:housingCondition.inspectionResultsDescription', defaultMessage: 'Hér á að setja inn helstu niðurstöður ástandsúttektar. Gott er að taka myndir af þeim atriðum sem skipta máli. Ef óháður aðili hefur framkvæmt úttektina má setja niðurstöðurnar með sem fylgiskjal.', description: 'Housing condition inspection results description', }, inspectionResultsInputLabel: { - id: 'ra.application:housingConditionInspection.inspectionResultsInputLabel', + id: 'ra.application:housingCondition.inspectionResultsInputLabel', defaultMessage: 'Ástandsúttekt', description: 'Housing condition inspection results input label', }, inspectionResultsInputPlaceholder: { - id: 'ra.application:housingConditionInspection.inspectionResultsPlaceholder', + id: 'ra.application:housingCondition.inspectionResultsPlaceholder', defaultMessage: 'Skrifaðu hér allt sem á við', description: 'Housing condition inspection results placeholder', }, fileUploadTitle: { - id: 'ra.application:housingConditionInspection.fileUploadTitle', + id: 'ra.application:housingCondition.fileUploadTitle', defaultMessage: 'Dragðu skjöl hingað til að hlaða upp', description: 'Housing condition file upload title', }, fileUploadDescription: { - id: 'ra.application:housingConditionInspection.fileUploadDescription', + id: 'ra.application:housingCondition.fileUploadDescription', defaultMessage: - 'Tekið er við skjölum með endingu: .png, .jpg, .jpeg, .pdf, .docx, .rtf. Skjöl geta ekki verið stærri en 0 mb og ekki fleiri en 0.', + 'Tekið er við skjölum með endingu: .png, .jpg, .jpeg, .pdf, .docx, .rtf.', description: 'Housing condition file upload description', }, }) diff --git a/libs/application/templates/rental-agreement/src/lib/messages/index.ts b/libs/application/templates/rental-agreement/src/lib/messages/index.ts index b7b4cdfa7ce9..0cbed17a9cf6 100644 --- a/libs/application/templates/rental-agreement/src/lib/messages/index.ts +++ b/libs/application/templates/rental-agreement/src/lib/messages/index.ts @@ -4,7 +4,7 @@ export * from './housing/registerProperty' export * from './housing/landlordDetails' export * from './housing/tenantDetails' export * from './housing/specialProvisions' -export * from './housing/housingConditionInspection' +export * from './housing/housingCondition' export * from './housing/housingFireProtections' export * from './rentalInfo/rentalPeriod' export * from './rentalInfo/rentalAmount' diff --git a/libs/application/templates/rental-agreement/src/lib/utils.ts b/libs/application/templates/rental-agreement/src/lib/utils.ts index a1797915bc09..429b2b5b1928 100644 --- a/libs/application/templates/rental-agreement/src/lib/utils.ts +++ b/libs/application/templates/rental-agreement/src/lib/utils.ts @@ -1,5 +1,32 @@ +import { Application } from '@island.is/application/types' +import { rentalHousingConditionInspector } from './constants' +import * as m from './messages' +import { getValueViaPath } from '@island.is/application/core' + export const insertAt = (str: string, sub: string, pos: number) => `${str.slice(0, pos)}${sub}${str.slice(pos)}` export const formatNationalId = (nationalId: string) => insertAt(nationalId.replace('-', ''), '-', 6) || '-' + +export const getApplicationAnswers = (answers: Application['answers']) => { + const inspectorOptions = getValueViaPath( + answers, + 'rentalHousingConditionInspector', + ) as rentalHousingConditionInspector + + return { + inspectorOptions, + } +} + +export const getInspectorOptions = () => [ + { + value: rentalHousingConditionInspector.CONTRACT_PARTIES, + label: m.housingCondition.inspectorOptionContractParties, + }, + { + value: rentalHousingConditionInspector.INDEPENDENT_PARTY, + label: m.housingCondition.inspectorOptionIndependentParty, + }, +]