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.

64 lines
1.6 KiB
JavaScript

import { create } from 'zustand'
import { devtools } from 'zustand/middleware'
import { fetchJSON } from '@/utils/request'
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) => ({
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