提交代码
This commit is contained in:
1 parent
1236df86cf
commit
7e2cd8969f
7 files changed
+137
-9
No files matched your search
@@ -30,6 +30,15 @@ const hiddenDisplayValue = Symbol('reservation-v4-hidden-display-value')
|
||||
|
||||
export type ReservationV4FieldErrorMap = Record<string, string>
|
||||
export type ReservationV4LookupKind = 'ACCOUNT' | 'ROOM_TYPE' | 'RATE_CODE'
|
||||
export type ReservationV4FieldValidationErrorType = 'required' | 'positiveInteger'
|
||||
export type ReservationV4FieldValidationMessageContext = {
|
||||
type: ReservationV4FieldValidationErrorType
|
||||
field: ReservationV4TaskCardFieldResult
|
||||
fieldKey: string
|
||||
}
|
||||
export type ReservationV4FieldValidationOptions = {
|
||||
formatMessage?: (context: ReservationV4FieldValidationMessageContext) => string
|
||||
}
|
||||
|
||||
export function reservationV4FieldKey(field: ReservationV4TaskCardFieldResult): string {
|
||||
return field.field_pointer || field.field_path
|
||||
@@ -81,21 +90,42 @@ export function buildReservationV4ReviewOverrides(
|
||||
export function validateReservationV4Fields(
|
||||
fields: ReservationV4TaskCardFieldResult[],
|
||||
values: ReservationRecord,
|
||||
options: ReservationV4FieldValidationOptions = {},
|
||||
): ReservationV4FieldErrorMap {
|
||||
return fields.filter(isReservationV4EditableField).reduce<ReservationV4FieldErrorMap>((errors, field) => {
|
||||
const key = reservationV4FieldKey(field)
|
||||
const value = readV4FieldValue(field, values)
|
||||
if (field.required && isEmptyV4Value(value)) {
|
||||
errors[key] = `${field.display_name} is required`
|
||||
errors[key] = formatValidationMessage('required', field, key, options)
|
||||
return errors
|
||||
}
|
||||
if (isTracePositiveIntegerField(field) && !isEmptyV4Value(value) && !isPositiveIntegerValue(value)) {
|
||||
errors[key] = `${field.display_name} must be a positive integer`
|
||||
errors[key] = formatValidationMessage('positiveInteger', field, key, options)
|
||||
}
|
||||
return errors
|
||||
}, {})
|
||||
}
|
||||
|
||||
function formatValidationMessage(
|
||||
type: ReservationV4FieldValidationErrorType,
|
||||
field: ReservationV4TaskCardFieldResult,
|
||||
fieldKey: string,
|
||||
options: ReservationV4FieldValidationOptions,
|
||||
): string {
|
||||
const formattedMessage = options.formatMessage?.({
|
||||
type,
|
||||
field,
|
||||
fieldKey,
|
||||
})
|
||||
if (formattedMessage?.trim()) {
|
||||
return formattedMessage
|
||||
}
|
||||
if (type === 'positiveInteger') {
|
||||
return `${field.display_name} must be a positive integer`
|
||||
}
|
||||
return `${field.display_name} is required`
|
||||
}
|
||||
|
||||
export function isReservationV4ConfirmWritableField(field: ReservationV4TaskCardFieldResult): boolean {
|
||||
if (!isReservationV4EditableField(field)) {
|
||||
return false
|
||||
|
||||
Reference in new issue
Block a user