You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.7 KiB
JavaScript

import { create } from 'zustand'
import { devtools } from 'zustand/middleware'
import { fetchJSON, postForm } from '@/utils/request'
import { usingStorage } from '@/hooks/usingStorage'
export const fetchHotelList = async (hotelName, checkinDateString, checkoutDateString) => {
const { errcode, data } = await fetchJSON(
'http://202.103.68.93:3002/search_hotel',
{ keyword: hotelName, checkin: checkinDateString, checkout: checkoutDateString }
)
return errcode !== 0 ? {} : data
}
export const fetchAvailability = async (hotelId, checkinDateString, checkoutDateString, adultCount=2, roomCount=1) => {
const { errcode, data } = await fetchJSON(
'http://202.103.68.93:3002/availability',
{ hotel_id: hotelId, checkin: checkinDateString, checkout: checkoutDateString, adults: adultCount, rooms: roomCount }
)
return errcode !== 0 ? {} : data
}
const useHotelStore = create(devtools((set, get) => ({
selectedHotel: null,
hotelList: [],
roomList: [],
selectHotel: (hotel) => {
set(() => ({
selectedHotel: hotel
}))
},
searchByCriteria: async(formValues) => {
const resultArray = await fetchHotelList(
formValues.hotelName,
formValues.dataRange[0].format('YYYY-MM-DD'),
formValues.dataRange[1].format('YYYY-MM-DD')
)
set(() => ({
hotelList: resultArray
}))
},
getRoomListByHotel: async(hotelId, checkin, checkout, adultCount=2, roomCount=1) => {
const resultArray = await fetchAvailability(
hotelId,
checkin,
checkout,
adultCount,
roomCount
)
set(() => ({
roomList: resultArray
}))
},
}), { name: 'hotelStore' }))
export default useHotelStore