-
Notifications
You must be signed in to change notification settings - Fork 87
/
useTicketListFilterState.js
69 lines (59 loc) · 1.5 KB
/
useTicketListFilterState.js
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
62
63
64
65
66
67
68
69
import { useReducer } from '@wordpress/element';
const useTicketListFilterState = () => {
const initialState = {
displayTicketDate: 'start',
isChained: false,
showTickets: 'all',
ticketsSortedBy: 'chronologically',
};
const [state, dispatch] = useReducer(reducer, initialState);
const setDisplayTicketDate = (displayTicketDate) => {
dispatch({
type: 'SET_DISPLAY_TICKET_DATE',
displayTicketDate,
});
};
const setShowTickets = (showTickets) => {
dispatch({
type: 'SET_SHOW_TICKETS',
showTickets,
});
};
const setTicketsSortedBy = (ticketsSortedBy) => {
dispatch({
ticketsSortedBy,
type: 'SET_TICKETS_SORTEDBY',
});
};
const toggleIsChained = () => {
dispatch({
type: 'TOGGLE_IS_CHAINED',
});
};
return {
displayTicketDate: state.displayTicketDate,
isChained: state.isChained,
setDisplayTicketDate,
setShowTickets,
setTicketsSortedBy,
showTickets: state.showTickets,
ticketsSortedBy: state.ticketsSortedBy,
toggleIsChained,
};
};
const reducer = (state, action) => {
const { displayTicketDate, showTickets, ticketsSortedBy } = action;
switch (action.type) {
case 'SET_DISPLAY_TICKET_DATE':
return { ...state, displayTicketDate };
case 'SET_SHOW_TICKETS':
return { ...state, showTickets };
case 'SET_TICKETS_SORTEDBY':
return { ...state, ticketsSortedBy };
case 'TOGGLE_IS_CHAINED':
return { ...state, isChained: !state.isChained };
default:
throw new Error('Unexpected action');
}
};
export default useTicketListFilterState;