接入V4房型信息展示模型
This commit is contained in:
1 parent
1d593f05fd
commit
8d181ee8ad
21 files changed
+1390
-77
No files matched your search
@@ -18,7 +18,8 @@ const reviewWriteTargets = new Set([
|
||||
'FIELD_OVERRIDES',
|
||||
])
|
||||
const readonlyControlTypes = new Set(['READONLY', 'FILE', 'WORKFLOW_STATE', 'STRUCTURED_TABLE'])
|
||||
const reviewWritablePointerPrefixes = ['/basic_information/', '/business_fields/']
|
||||
const reviewWritablePointerPrefixes = ['/basic_information/', '/room_information/final_values/', '/business_fields/']
|
||||
const roomInformationFieldPrefix = '/room_information/final_values/'
|
||||
const hiddenDisplayValue = Symbol('reservation-v4-hidden-display-value')
|
||||
|
||||
export type ReservationV4FieldErrorMap = Record<string, string>
|
||||
@@ -37,6 +38,11 @@ export function buildReservationV4InitialFieldValues(
|
||||
}, {})
|
||||
}
|
||||
|
||||
export function isReservationV4RoomInformationSafeField(field: ReservationV4TaskCardFieldResult): boolean {
|
||||
const pointer = field.field_pointer || fieldPathToPointer(field.field_path)
|
||||
return pointer.startsWith(roomInformationFieldPrefix) && !isForbiddenRoomInformationPointer(pointer)
|
||||
}
|
||||
|
||||
export function buildReservationV4ConfirmedPayload(
|
||||
fields: ReservationV4TaskCardFieldResult[],
|
||||
values: ReservationRecord,
|
||||
@@ -78,6 +84,9 @@ export function isReservationV4ConfirmWritableField(field: ReservationV4TaskCard
|
||||
if (!isReservationV4EditableField(field)) {
|
||||
return false
|
||||
}
|
||||
if (isRoomInformationReadOnlyDerivedField(field)) {
|
||||
return false
|
||||
}
|
||||
if (isUnsafeV4Field(field)) {
|
||||
return false
|
||||
}
|
||||
@@ -92,6 +101,9 @@ export function isReservationV4ReviewWritableField(field: ReservationV4TaskCardF
|
||||
if (!isReservationV4EditableField(field)) {
|
||||
return false
|
||||
}
|
||||
if (isRoomInformationReadOnlyDerivedField(field)) {
|
||||
return false
|
||||
}
|
||||
const pointer = field.field_pointer || fieldPathToPointer(field.field_path)
|
||||
if (!reviewWritablePointerPrefixes.some((prefix) => pointer.startsWith(prefix))) {
|
||||
return false
|
||||
@@ -352,6 +364,25 @@ function isUnsafeV4Field(field: ReservationV4TaskCardFieldResult): boolean {
|
||||
return isReservationV4UnsafeDisplayKey(field.field_path) || isReservationV4UnsafeDisplayKey(field.field_pointer)
|
||||
}
|
||||
|
||||
function isRoomInformationReadOnlyDerivedField(field: ReservationV4TaskCardFieldResult): boolean {
|
||||
const pointer = field.field_pointer || fieldPathToPointer(field.field_path)
|
||||
if (!pointer.startsWith(roomInformationFieldPrefix)) {
|
||||
return false
|
||||
}
|
||||
return isForbiddenRoomInformationPointer(pointer)
|
||||
}
|
||||
|
||||
function isForbiddenRoomInformationPointer(pointer: string): boolean {
|
||||
const normalizedPointer = pointer.toLowerCase()
|
||||
return normalizedPointer.endsWith('/nights') ||
|
||||
normalizedPointer.endsWith('/adult') ||
|
||||
normalizedPointer.endsWith('/adults') ||
|
||||
normalizedPointer.endsWith('/block_id') ||
|
||||
normalizedPointer.endsWith('/confirmation_number') ||
|
||||
normalizedPointer.includes('/target_order') ||
|
||||
normalizedPointer.includes('/locator_value')
|
||||
}
|
||||
|
||||
function isUnsafeUrlLikeValue(value: string): boolean {
|
||||
const trimmedValue = value.trim()
|
||||
return /^(https?:\/\/|oss:\/\/|s3:\/\/)/i.test(trimmedValue)
|
||||
|
||||
Reference in new issue
Block a user