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
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
|