diff --git a/packages/app-builder/src/models/transfer-alert.ts b/packages/app-builder/src/models/transfer-alert.ts index c80a78e8..a9e970e2 100644 --- a/packages/app-builder/src/models/transfer-alert.ts +++ b/packages/app-builder/src/models/transfer-alert.ts @@ -5,6 +5,7 @@ import { type TransferAlertUpdateAsBeneficiaryBodyDto, type TransferAlertUpdateAsSenderBodyDto, } from 'marble-api/generated/transfercheck-api'; +import { z } from 'zod'; export const transferAlerStatuses = [ 'pending', @@ -70,9 +71,9 @@ export function adaptTransferAlertBeneficiary( export interface TransferAlertCreateBody { transferId: string; message: string; - transferEndToEndId: string; - beneficiaryIban: string; - senderIban: string; + transferEndToEndId?: string; + beneficiaryIban?: string; + senderIban?: string; } export function adaptTransferAlertCreateBodyDto( @@ -81,9 +82,9 @@ export function adaptTransferAlertCreateBodyDto( return { transfer_id: createTransferAlert.transferId, message: createTransferAlert.message, - transfer_end_to_end_id: createTransferAlert.transferEndToEndId, - beneficiary_iban: createTransferAlert.beneficiaryIban, - sender_iban: createTransferAlert.senderIban, + transfer_end_to_end_id: createTransferAlert.transferEndToEndId ?? '', + beneficiary_iban: createTransferAlert.beneficiaryIban ?? '', + sender_iban: createTransferAlert.senderIban ?? '', }; } @@ -99,10 +100,10 @@ export function adaptTransferAlertUpdateAsSenderBodyDto( body: TransferAlertUpdateAsSenderBody, ): TransferAlertUpdateAsSenderBodyDto { return { - message: body.message, - transfer_end_to_end_id: body.transferEndToEndId, - beneficiary_iban: body.beneficiaryIban, - sender_iban: body.senderIban, + message: body.message ?? '', + transfer_end_to_end_id: body.transferEndToEndId ?? '', + beneficiary_iban: body.beneficiaryIban ?? '', + sender_iban: body.senderIban ?? '', }; } @@ -118,3 +119,19 @@ export function adaptUpdateTransferAlertAsBeneficiaryDto( status: body.status, }; } + +export const messageSchema = z + .string({ required_error: 'required' }) + .max(1000, { message: 'max 1000 characters' }); + +export const transferEndToEndIdSchema = z + .string() + .max(100, { message: 'max 100 characters' }); + +export const senderIbanSchema = z + .string() + .max(34, { message: 'max 34 characters' }); + +export const beneficiaryIbanSchema = z + .string() + .max(34, { message: 'max 34 characters' }); diff --git a/packages/app-builder/src/routes/transfercheck+/ressources+/alert.create.tsx b/packages/app-builder/src/routes/transfercheck+/ressources+/alert.create.tsx index bbc46c42..7d2f3482 100644 --- a/packages/app-builder/src/routes/transfercheck+/ressources+/alert.create.tsx +++ b/packages/app-builder/src/routes/transfercheck+/ressources+/alert.create.tsx @@ -4,10 +4,16 @@ import { FormInput } from '@app-builder/components/Form/FormInput'; import { FormLabel } from '@app-builder/components/Form/FormLabel'; import { FormTextArea } from '@app-builder/components/Form/FormTextArea'; import { setToastMessage } from '@app-builder/components/MarbleToaster'; +import { + beneficiaryIbanSchema, + messageSchema, + senderIbanSchema, + transferEndToEndIdSchema, +} from '@app-builder/models/transfer-alert'; import { serverServices } from '@app-builder/services/init.server'; import { getRoute } from '@app-builder/utils/routes'; import { conform, useForm } from '@conform-to/react'; -import { getFieldsetConstraint, parse } from '@conform-to/zod'; +import { parse } from '@conform-to/zod'; import { type ActionFunctionArgs, json } from '@remix-run/node'; import { useFetcher } from '@remix-run/react'; import * as React from 'react'; @@ -18,10 +24,10 @@ import { z } from 'zod'; const createAlertFormSchema = z.object({ transferId: z.string(), - message: z.string({ required_error: 'required' }), - transferEndToEndId: z.string(), - senderIban: z.string(), - beneficiaryIban: z.string(), + message: messageSchema, + transferEndToEndId: transferEndToEndIdSchema.optional(), + senderIban: senderIbanSchema.optional(), + beneficiaryIban: beneficiaryIbanSchema.optional(), }); type CreateAlertForm = z.infer; @@ -121,7 +127,6 @@ function CreateAlertContent({ id: formId, defaultValue: { ...defaultValue, message: '' }, lastSubmission: fetcher.data?.submission, - constraint: getFieldsetConstraint(createAlertFormSchema), onValidate({ formData }) { return parse(formData, { schema: createAlertFormSchema, @@ -138,6 +143,17 @@ function CreateAlertContent({ {t('transfercheck:alert.create.title')}
+ + {t('transfercheck:alert.create.message')} + + + - - {t('transfercheck:alert.create.message')} - - -
; @@ -121,7 +127,6 @@ function UpdateAlertContent({ id: formId, defaultValue, lastSubmission: fetcher.data?.submission, - constraint: getFieldsetConstraint(updateAlertFormSchema), onValidate({ formData }) { return parse(formData, { schema: updateAlertFormSchema, @@ -138,6 +143,17 @@ function UpdateAlertContent({ {t('transfercheck:alert.update.title')}
+ + {t('transfercheck:alert.update.message')} + + + - - {t('transfercheck:alert.update.message')} - - -