feat: 新增工单中心、房间巡查、失物招领等业务模块
- 新增工单中心(ticket_center)与工单工作台(ticket_workbench)页面 - 新增房间巡查(room_inspection)与失物招领发布(lost_found_publish)页面 - 预约看样流程新增房型/楼栋/楼层选择器组件 - 新增工具模块: booking-entry、privacy、reservation-flow - api/index.js 补充楼层列表、看样提交等接口 - locales/messages.js 补充多语言文案 - manifest.json 开启微信小程序隐私检查 - 完善登录、注册、申请详情、账单等相关页面交互
This commit is contained in:
36
utils/booking-entry.js
Normal file
36
utils/booking-entry.js
Normal file
@@ -0,0 +1,36 @@
|
||||
function normalizeUrl(url = '') {
|
||||
return String(url || '').trim()
|
||||
}
|
||||
|
||||
export function isBookingEntryUrl(url = '') {
|
||||
return /^\/pkgBooking\/(book_viewing\/book_viewing|book\/book)(?:\?|$)/.test(normalizeUrl(url))
|
||||
}
|
||||
|
||||
export function resolveExistingBookingNavigationTarget(stayState = {}) {
|
||||
const source = stayState || {}
|
||||
const currentBooking = source.currentBooking || null
|
||||
const hasCheckedIn = source.hasCheckedIn === true
|
||||
|
||||
if (currentBooking && currentBooking.orderNo) {
|
||||
return `/pkgBooking/booking_detail/booking_detail?orderNo=${encodeURIComponent(currentBooking.orderNo)}`
|
||||
}
|
||||
|
||||
if (currentBooking) {
|
||||
return '/pkgBooking/booking_detail/booking_detail'
|
||||
}
|
||||
|
||||
if (hasCheckedIn) {
|
||||
return '/pages/index/index?pageId=stay-service'
|
||||
}
|
||||
|
||||
return ''
|
||||
}
|
||||
|
||||
export function resolveBookingRedirectAfterLogin(targetUrl = '', stayState = {}) {
|
||||
const normalizedTargetUrl = normalizeUrl(targetUrl)
|
||||
if (!isBookingEntryUrl(normalizedTargetUrl)) {
|
||||
return normalizedTargetUrl
|
||||
}
|
||||
|
||||
return resolveExistingBookingNavigationTarget(stayState) || normalizedTargetUrl
|
||||
}
|
||||
@@ -2,15 +2,110 @@ import { getEnums } from '@/api/index.js'
|
||||
import { getCurrentLanguage } from '@/utils/i18n'
|
||||
|
||||
const ENUMS_CACHE_KEY = 'mini_enums_cache_v1'
|
||||
const BUILTIN_ENUMS = {
|
||||
zh: {
|
||||
IdCardTypeEnum: [
|
||||
{ key: 3, value: '港澳通行证', valueEn: 'Mainland Travel Permit for Hong Kong and Macao Residents' },
|
||||
{ key: 2, value: '护照', valueEn: 'Passport' },
|
||||
{ key: 99, value: '其他', valueEn: 'Other' },
|
||||
{ key: 1, value: '身份证', valueEn: 'ID Card' },
|
||||
{ key: 4, value: '台湾通行证', valueEn: 'Mainland Travel Permit for Taiwan Residents' }
|
||||
]
|
||||
},
|
||||
en: {
|
||||
IdCardTypeEnum: [
|
||||
{ key: 3, value: 'Mainland Travel Permit for Hong Kong and Macao Residents', valueZh: '港澳通行证' },
|
||||
{ key: 2, value: 'Passport', valueZh: '护照' },
|
||||
{ key: 99, value: 'Other', valueZh: '其他' },
|
||||
{ key: 1, value: 'ID Card', valueZh: '身份证' },
|
||||
{ key: 4, value: 'Mainland Travel Permit for Taiwan Residents', valueZh: '台湾通行证' }
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
let enumsMap = {}
|
||||
let enumsLanguage = ''
|
||||
let fetchPromise = null
|
||||
|
||||
function hasRemoteEnumData(map = {}, language) {
|
||||
const currentLanguage = getNormalizedLanguage(language)
|
||||
const builtinKeys = Object.keys(BUILTIN_ENUMS[currentLanguage] || {})
|
||||
const sourceMap = map && typeof map === 'object' ? map : {}
|
||||
return Object.keys(sourceMap).some(code => !builtinKeys.includes(code))
|
||||
}
|
||||
|
||||
function mergeEnumOptionList(builtinList = [], customList = []) {
|
||||
const nextList = []
|
||||
const customMap = new Map()
|
||||
|
||||
;(Array.isArray(customList) ? customList : []).forEach((item) => {
|
||||
if (!item || typeof item !== 'object') return
|
||||
customMap.set(String(item.key), item)
|
||||
})
|
||||
|
||||
;(Array.isArray(builtinList) ? builtinList : []).forEach((item) => {
|
||||
const key = String(item && item.key)
|
||||
const customItem = customMap.get(key)
|
||||
if (customItem) {
|
||||
nextList.push({
|
||||
...item,
|
||||
...customItem
|
||||
})
|
||||
customMap.delete(key)
|
||||
return
|
||||
}
|
||||
nextList.push(item)
|
||||
})
|
||||
|
||||
customMap.forEach((item) => {
|
||||
nextList.push(item)
|
||||
})
|
||||
|
||||
return nextList
|
||||
}
|
||||
|
||||
function mergeBuiltinEnums(map = {}, language) {
|
||||
const currentLanguage = getNormalizedLanguage(language)
|
||||
const builtinMap = BUILTIN_ENUMS[currentLanguage] || {}
|
||||
const mergedMap = {
|
||||
...builtinMap,
|
||||
...(map || {})
|
||||
}
|
||||
|
||||
Object.keys(builtinMap).forEach((code) => {
|
||||
if (!Array.isArray(mergedMap[code])) {
|
||||
mergedMap[code] = builtinMap[code]
|
||||
return
|
||||
}
|
||||
mergedMap[code] = mergeEnumOptionList(builtinMap[code], mergedMap[code])
|
||||
})
|
||||
|
||||
return mergedMap
|
||||
}
|
||||
|
||||
function parseJsonStringMaybe(value) {
|
||||
if (typeof value !== 'string') {
|
||||
return value
|
||||
}
|
||||
const text = value.trim()
|
||||
if (!text) {
|
||||
return value
|
||||
}
|
||||
if (!((text.startsWith('{') && text.endsWith('}')) || (text.startsWith('[') && text.endsWith(']')))) {
|
||||
return value
|
||||
}
|
||||
try {
|
||||
return JSON.parse(text)
|
||||
} catch (error) {
|
||||
return value
|
||||
}
|
||||
}
|
||||
|
||||
function normalizeEnumMap(data) {
|
||||
const normalizedData = parseJsonStringMaybe(data)
|
||||
const map = {}
|
||||
if (Array.isArray(data)) {
|
||||
data.forEach((item) => {
|
||||
if (Array.isArray(normalizedData)) {
|
||||
normalizedData.forEach((item) => {
|
||||
if (item && item.code) {
|
||||
map[item.code] = Array.isArray(item.data) ? item.data : []
|
||||
}
|
||||
@@ -76,26 +171,30 @@ function writeEnumsCache(map, language) {
|
||||
export function initEnumsFromCache(language) {
|
||||
const currentLanguage = getNormalizedLanguage(language)
|
||||
if (Object.keys(enumsMap).length && enumsLanguage === currentLanguage) return enumsMap
|
||||
enumsMap = readEnumsCache(currentLanguage)
|
||||
enumsMap = mergeBuiltinEnums(readEnumsCache(currentLanguage), currentLanguage)
|
||||
enumsLanguage = currentLanguage
|
||||
return enumsMap
|
||||
}
|
||||
|
||||
export async function fetchEnums(force = false, language) {
|
||||
const currentLanguage = getNormalizedLanguage(language)
|
||||
if (!force && Object.keys(enumsMap).length && enumsLanguage === currentLanguage) return enumsMap
|
||||
if (!force && Object.keys(enumsMap).length && enumsLanguage === currentLanguage && hasRemoteEnumData(enumsMap, currentLanguage)) {
|
||||
return enumsMap
|
||||
}
|
||||
if (fetchPromise) return fetchPromise
|
||||
|
||||
fetchPromise = (async () => {
|
||||
if (!force && (!Object.keys(enumsMap).length || enumsLanguage !== currentLanguage)) {
|
||||
initEnumsFromCache(currentLanguage)
|
||||
if (Object.keys(enumsMap).length) return enumsMap
|
||||
if (Object.keys(enumsMap).length && hasRemoteEnumData(enumsMap, currentLanguage)) {
|
||||
return enumsMap
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
const res = await getEnums({}, currentLanguage)
|
||||
const data = res && res.data ? res.data : res
|
||||
const map = normalizeEnumMap(data)
|
||||
const map = mergeBuiltinEnums(normalizeEnumMap(data), currentLanguage)
|
||||
if (Object.keys(map).length) {
|
||||
enumsMap = map
|
||||
enumsLanguage = currentLanguage
|
||||
@@ -118,6 +217,10 @@ export function getEnumOptions(code, language) {
|
||||
return enumsMap[code] || []
|
||||
}
|
||||
|
||||
export function getBuiltInEnums(language) {
|
||||
return mergeBuiltinEnums({}, language)
|
||||
}
|
||||
|
||||
export function getEnumLabel(code, key, fallback = '', language) {
|
||||
const options = getEnumOptions(code, language)
|
||||
const matched = options.find(item => String(item.key) === String(key))
|
||||
|
||||
86
utils/privacy.js
Normal file
86
utils/privacy.js
Normal file
@@ -0,0 +1,86 @@
|
||||
const privacyAuthorizationHandlers = []
|
||||
let hasBoundPrivacyAuthorizationListener = false
|
||||
|
||||
function getActivePrivacyAuthorizationHandler() {
|
||||
return privacyAuthorizationHandlers.length
|
||||
? privacyAuthorizationHandlers[privacyAuthorizationHandlers.length - 1]
|
||||
: null
|
||||
}
|
||||
|
||||
export function bindPrivacyAuthorizationListener(handler) {
|
||||
if (typeof handler !== 'function') {
|
||||
return
|
||||
}
|
||||
|
||||
const existedIndex = privacyAuthorizationHandlers.indexOf(handler)
|
||||
if (existedIndex !== -1) {
|
||||
privacyAuthorizationHandlers.splice(existedIndex, 1)
|
||||
}
|
||||
privacyAuthorizationHandlers.push(handler)
|
||||
|
||||
// #ifdef MP-WEIXIN
|
||||
if (hasBoundPrivacyAuthorizationListener || typeof wx === 'undefined' || !wx.onNeedPrivacyAuthorization) {
|
||||
return
|
||||
}
|
||||
|
||||
wx.onNeedPrivacyAuthorization((resolve) => {
|
||||
const activeHandler = getActivePrivacyAuthorizationHandler()
|
||||
if (typeof activeHandler === 'function') {
|
||||
activeHandler(resolve)
|
||||
}
|
||||
})
|
||||
hasBoundPrivacyAuthorizationListener = true
|
||||
// #endif
|
||||
}
|
||||
|
||||
export function unbindPrivacyAuthorizationListener(handler) {
|
||||
const existedIndex = privacyAuthorizationHandlers.lastIndexOf(handler)
|
||||
if (existedIndex !== -1) {
|
||||
privacyAuthorizationHandlers.splice(existedIndex, 1)
|
||||
}
|
||||
}
|
||||
|
||||
export function getPrivacyAuthorizationStatus() {
|
||||
// #ifdef MP-WEIXIN
|
||||
return new Promise((resolve) => {
|
||||
if (typeof wx === 'undefined' || !wx.getPrivacySetting) {
|
||||
resolve({ needAuthorization: false })
|
||||
return
|
||||
}
|
||||
|
||||
wx.getPrivacySetting({
|
||||
success: (res) => {
|
||||
resolve({
|
||||
...res,
|
||||
needAuthorization: !!(res && res.needAuthorization)
|
||||
})
|
||||
},
|
||||
fail: () => {
|
||||
resolve({ needAuthorization: false })
|
||||
}
|
||||
})
|
||||
})
|
||||
// #endif
|
||||
// #ifndef MP-WEIXIN
|
||||
return Promise.resolve({ needAuthorization: false })
|
||||
// #endif
|
||||
}
|
||||
|
||||
export function openWechatPrivacyContract() {
|
||||
// #ifdef MP-WEIXIN
|
||||
return new Promise((resolve, reject) => {
|
||||
if (typeof wx === 'undefined' || !wx.openPrivacyContract) {
|
||||
resolve()
|
||||
return
|
||||
}
|
||||
|
||||
wx.openPrivacyContract({
|
||||
success: resolve,
|
||||
fail: reject
|
||||
})
|
||||
})
|
||||
// #endif
|
||||
// #ifndef MP-WEIXIN
|
||||
return Promise.resolve()
|
||||
// #endif
|
||||
}
|
||||
@@ -84,6 +84,29 @@ function shouldSkipUnauthorizedRedirect() {
|
||||
return route === 'pkgAccount/login/login' || route === 'pages/login/index' || route === 'pages/login/login'
|
||||
}
|
||||
|
||||
function normalizeRequestedLanguageHeaderValue(language) {
|
||||
return String(language || getCurrentLanguage() || 'zh').trim().toLowerCase() === 'en' ? 'en' : 'zh'
|
||||
}
|
||||
|
||||
function buildRequestHeader(header = {}, token = '') {
|
||||
const normalizedHeader = { ...(header || {}) }
|
||||
const requestedLanguageHeaderKey = Object.keys(normalizedHeader).find(key => String(key || '').toLowerCase() === 'x-requested-language')
|
||||
|
||||
if (requestedLanguageHeaderKey && requestedLanguageHeaderKey !== 'X-Requested-Language') {
|
||||
delete normalizedHeader[requestedLanguageHeaderKey]
|
||||
}
|
||||
|
||||
normalizedHeader['X-Requested-Language'] = normalizeRequestedLanguageHeaderValue(
|
||||
requestedLanguageHeaderKey ? normalizedHeader[requestedLanguageHeaderKey] : normalizedHeader['X-Requested-Language']
|
||||
)
|
||||
|
||||
return {
|
||||
'Content-Type': 'application/json',
|
||||
...(token ? { Authorization: `Bearer ${token}` } : {}),
|
||||
...normalizedHeader
|
||||
}
|
||||
}
|
||||
|
||||
function handleUnauthorized(responseData) {
|
||||
clearLoginSession()
|
||||
|
||||
@@ -126,12 +149,7 @@ export function request(options = {}) {
|
||||
data: uppercaseMethod === 'GET'
|
||||
? (params !== undefined ? normalizedParams : normalizedData)
|
||||
: normalizedData,
|
||||
header: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-Requested-Language': getCurrentLanguage(),
|
||||
...(token ? { Authorization: `Bearer ${token}` } : {}),
|
||||
...header
|
||||
},
|
||||
header: buildRequestHeader(header, token),
|
||||
success: (res) => {
|
||||
const { statusCode, data: responseData } = res
|
||||
if ((statusCode === 401) || (responseData && Number(responseData.code) === 401)) {
|
||||
|
||||
176
utils/reservation-flow.js
Normal file
176
utils/reservation-flow.js
Normal file
@@ -0,0 +1,176 @@
|
||||
const RESERVATION_FLOW_STEP = {
|
||||
INSPECTION: 10,
|
||||
BILL: 20,
|
||||
CONTRACT: 30,
|
||||
CHECKIN: 40
|
||||
}
|
||||
|
||||
function getLanguage(language) {
|
||||
return language === 'en' ? 'en' : 'zh'
|
||||
}
|
||||
|
||||
function parseJsonStringMaybe(value) {
|
||||
if (typeof value !== 'string') {
|
||||
return value
|
||||
}
|
||||
|
||||
const text = value.trim()
|
||||
if (!text) {
|
||||
return value
|
||||
}
|
||||
|
||||
const isJsonLike = (
|
||||
(text.startsWith('{') && text.endsWith('}'))
|
||||
|| (text.startsWith('[') && text.endsWith(']'))
|
||||
)
|
||||
|
||||
if (!isJsonLike) {
|
||||
return value
|
||||
}
|
||||
|
||||
try {
|
||||
return JSON.parse(text)
|
||||
} catch (error) {
|
||||
return value
|
||||
}
|
||||
}
|
||||
|
||||
function normalizeArray(value) {
|
||||
if (Array.isArray(value)) {
|
||||
return value
|
||||
}
|
||||
return []
|
||||
}
|
||||
|
||||
export function parseReservationFlowResponse(response) {
|
||||
const rawPayload = response && response.data ? response.data : response
|
||||
const payload = parseJsonStringMaybe(rawPayload)
|
||||
|
||||
if (Array.isArray(payload)) {
|
||||
return payload
|
||||
}
|
||||
|
||||
if (payload && Array.isArray(payload.data)) {
|
||||
return payload.data
|
||||
}
|
||||
|
||||
if (payload && payload.data && Array.isArray(payload.data.data)) {
|
||||
return payload.data.data
|
||||
}
|
||||
|
||||
return []
|
||||
}
|
||||
|
||||
export function getReservationOrderNo(source = {}) {
|
||||
const candidates = [
|
||||
source.orderNo,
|
||||
source.OrderNo,
|
||||
source.reservationOrderNo,
|
||||
source.searchedOrderNo,
|
||||
source.bookingOrderNo
|
||||
]
|
||||
|
||||
for (let index = 0; index < candidates.length; index += 1) {
|
||||
const value = String(candidates[index] || '').trim()
|
||||
if (value) {
|
||||
return value
|
||||
}
|
||||
}
|
||||
|
||||
return ''
|
||||
}
|
||||
|
||||
export function getReservationCurrentNode(flow = {}) {
|
||||
const nodes = normalizeArray(flow && flow.flowNodes)
|
||||
.filter(item => item && typeof item === 'object')
|
||||
.sort((a, b) => Number(a.sort || 0) - Number(b.sort || 0))
|
||||
|
||||
if (!nodes.length) {
|
||||
return null
|
||||
}
|
||||
|
||||
return nodes.find(item => item.isCurrent) || nodes[nodes.length - 1]
|
||||
}
|
||||
|
||||
export function buildReservationFlowMap(flowList = []) {
|
||||
return normalizeArray(flowList)
|
||||
.filter(item => item && typeof item === 'object')
|
||||
.reduce((result, item) => {
|
||||
const orderNo = getReservationOrderNo(item)
|
||||
if (!orderNo) {
|
||||
return result
|
||||
}
|
||||
|
||||
result[orderNo] = {
|
||||
...item,
|
||||
orderNo,
|
||||
currentNode: getReservationCurrentNode(item)
|
||||
}
|
||||
return result
|
||||
}, {})
|
||||
}
|
||||
|
||||
export function attachReservationFlow(item = {}, flowMap = {}) {
|
||||
const orderNo = getReservationOrderNo(item)
|
||||
const matchedFlow = orderNo ? flowMap[orderNo] : null
|
||||
|
||||
return {
|
||||
...item,
|
||||
reservationOrderNo: orderNo,
|
||||
reservationFlow: matchedFlow || null,
|
||||
reservationCurrentNode: matchedFlow && matchedFlow.currentNode ? matchedFlow.currentNode : null
|
||||
}
|
||||
}
|
||||
|
||||
export function getReservationStepMeta(step, language = 'zh') {
|
||||
const currentLanguage = getLanguage(language)
|
||||
const map = {
|
||||
[RESERVATION_FLOW_STEP.INSPECTION]: {
|
||||
label: currentLanguage === 'en' ? 'Inspection' : '验房',
|
||||
actionText: currentLanguage === 'en' ? 'View Inspection' : '查看验房'
|
||||
},
|
||||
[RESERVATION_FLOW_STEP.BILL]: {
|
||||
label: currentLanguage === 'en' ? 'Bill' : '账单',
|
||||
actionText: currentLanguage === 'en' ? 'Go to Bill' : '去缴费'
|
||||
},
|
||||
[RESERVATION_FLOW_STEP.CONTRACT]: {
|
||||
label: currentLanguage === 'en' ? 'Contract' : '合同',
|
||||
actionText: currentLanguage === 'en' ? 'Go to Contract' : '去签约'
|
||||
},
|
||||
[RESERVATION_FLOW_STEP.CHECKIN]: {
|
||||
label: currentLanguage === 'en' ? 'Check-in' : '入住',
|
||||
actionText: currentLanguage === 'en' ? 'Go to Check-in' : '去入住'
|
||||
}
|
||||
}
|
||||
|
||||
return map[Number(step)] || {
|
||||
label: currentLanguage === 'en' ? 'Current Step' : '当前步骤',
|
||||
actionText: currentLanguage === 'en' ? 'View Current Step' : '查看当前步骤'
|
||||
}
|
||||
}
|
||||
|
||||
export function getReservationCurrentStepText(source = {}, language = 'zh') {
|
||||
const node = source && source.reservationCurrentNode
|
||||
? source.reservationCurrentNode
|
||||
: getReservationCurrentNode(source)
|
||||
|
||||
if (!node) {
|
||||
return ''
|
||||
}
|
||||
|
||||
return String(node.stepDesc || '').trim() || getReservationStepMeta(node.step, language).label
|
||||
}
|
||||
|
||||
export function getReservationCurrentActionText(source = {}, language = 'zh') {
|
||||
const node = source && source.reservationCurrentNode
|
||||
? source.reservationCurrentNode
|
||||
: getReservationCurrentNode(source)
|
||||
|
||||
if (!node) {
|
||||
return ''
|
||||
}
|
||||
|
||||
return getReservationStepMeta(node.step, language).actionText
|
||||
}
|
||||
|
||||
export { RESERVATION_FLOW_STEP }
|
||||
@@ -364,6 +364,11 @@ export function normalizeAreaRoomType(item = {}) {
|
||||
|
||||
return {
|
||||
code: item.code || '',
|
||||
areaCode: item.areaCode || '',
|
||||
buildingCode: item.buildingCode || item.buildingNo || '',
|
||||
buildingName: item.buildingName || '',
|
||||
buildingSectionCode: item.buildingSectionCode || item.unitCode || '',
|
||||
buildingSectionName: item.buildingSectionName || item.unitName || '',
|
||||
name: item.name || '',
|
||||
nameEn: item.nameEn || '',
|
||||
nameEnDisplay: compactEnglishText(item.nameEn || '', 22),
|
||||
|
||||
@@ -112,18 +112,25 @@ function pickFirstValue(...values) {
|
||||
return ''
|
||||
}
|
||||
|
||||
function buildPendingContractQuery() {
|
||||
const user = getCurrentUser() || {}
|
||||
const userCode = pickFirstValue(user.userCode, user.code, user.UserCode)
|
||||
const query = {
|
||||
ProviderType: 'WechatMiniProgram'
|
||||
function buildPendingContractQuery(order = {}) {
|
||||
const orderNo = pickFirstValue(order.orderNo, order.no, order.code, order.OrderNo)
|
||||
if (!orderNo) {
|
||||
return null
|
||||
}
|
||||
|
||||
if (userCode) {
|
||||
query.UserCode = userCode
|
||||
return {
|
||||
ProviderType: 'WechatMiniProgram',
|
||||
OrderNo: orderNo
|
||||
}
|
||||
}
|
||||
|
||||
return query
|
||||
function buildEffectiveContractQuery(order = {}) {
|
||||
const orderNo = pickFirstValue(order.orderNo, order.no, order.code, order.OrderNo)
|
||||
if (!orderNo) {
|
||||
return null
|
||||
}
|
||||
return {
|
||||
OrderNo: orderNo
|
||||
}
|
||||
}
|
||||
|
||||
function enrichBookingLanguageFields(booking = {}) {
|
||||
@@ -233,15 +240,23 @@ function requestStayState(language = 'zh') {
|
||||
IsExport: false
|
||||
}, language)
|
||||
.then((orderResponse) => {
|
||||
return Promise.all([
|
||||
Promise.resolve(orderResponse),
|
||||
getMyPendingSignContracts(buildPendingContractQuery(), language).catch(() => []),
|
||||
getMyEffectiveContracts({}, language).catch(() => [])
|
||||
])
|
||||
})
|
||||
.then(([orderResponse, pendingContractsResponse, effectiveContractsResponse]) => {
|
||||
const orderList = normalizeBookingList(parseOrderListResponse(orderResponse), language)
|
||||
const currentOrder = pickCurrentStayOrder(orderList)
|
||||
const pendingContractQuery = buildPendingContractQuery(currentOrder)
|
||||
const effectiveContractQuery = buildEffectiveContractQuery(currentOrder)
|
||||
|
||||
return Promise.all([
|
||||
Promise.resolve(orderList),
|
||||
Promise.resolve(currentOrder),
|
||||
pendingContractQuery
|
||||
? getMyPendingSignContracts(pendingContractQuery, language).catch(() => [])
|
||||
: Promise.resolve([]),
|
||||
effectiveContractQuery
|
||||
? getMyEffectiveContracts(effectiveContractQuery, language).catch(() => [])
|
||||
: Promise.resolve([])
|
||||
])
|
||||
})
|
||||
.then(([orderList, currentOrder, pendingContractsResponse, effectiveContractsResponse]) => {
|
||||
const pendingContracts = parseContractList(pendingContractsResponse)
|
||||
const effectiveContracts = parseContractList(effectiveContractsResponse)
|
||||
const currentBooking = enrichBookingLanguageFields(pickCurrentBooking(orderList) || buildContractStepBooking(pendingContracts))
|
||||
|
||||
Reference in New Issue
Block a user