-
Notifications
You must be signed in to change notification settings - Fork 1
/
client.mjs
61 lines (56 loc) · 1.27 KB
/
client.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import create from "zustand/vanilla";
class API {
static searchFlights = async () => {};
static bookFlight = async () => {};
}
import z from "zod";
export const actions = {
updateFlights: {
type: "updateFlights",
payload: null,
},
searchFlights: {
type: "searchFlights",
payload: {
query: "from: SFO to: LAX",
},
},
selectFlight: {
type: "selectFlight",
payload: {
flightId: "askldjfagasld",
},
},
bookFlight: {
type: "bookFlight",
payload: {
flightId: "asldfalksjdf",
},
},
};
const reducer = async (state, action) => {
const payload = action.payload;
switch (action.type) {
case actions.updateFlights:
await API.updateFlights(payload);
set({ flights });
return flights;
break;
case actions.searchFlights:
const flights = await API.searchFlights(payload);
set({ flights });
return flights;
case actions.selectFlight:
set({ selectedFlight: payload.flightId });
return flights;
case actions.bookFlight:
return await API.bookFlight(state.selectedFlight);
default:
break;
}
};
export const store = create((set) => ({
selectedFlight: null,
flights: [],
dispatch: (args) => set((state) => reducer(state, args)),
}));