UNPKG

3.27 kBJavaScriptView Raw
1export const reducers = (state = {}, action) => {
2 switch (action.type) {
3 case '@@redux/INIT': {
4 return {
5 open: false,
6 initialRender: true,
7 visibilityFilter: ''
8 }
9 }
10 case 'SET_ITEMS': {
11 return {
12 ...state,
13 items: action.payload,
14 visibleItems: action.payload
15
16 };
17 }
18 case 'SET_FILTER': {
19 let visibleItems = {};
20 Object.keys(state.items).map((key) => {
21 if (
22 !action.payload
23 ||
24 state.items[key].toLowerCase().indexOf(action.payload.toLowerCase().trim()
25 )
26 !== -1
27 ) {
28 visibleItems[key] = state.items[key];
29 }
30 });
31
32 return {
33 ...state,
34 visibilityFilter: action.payload,
35 visibleItems: visibleItems,
36 currentlyHighlighted: state.open ? Object.keys(visibleItems)[0] || '' : ''
37 };
38 }
39 case 'TOGGLE_OPEN': {
40 return {
41 ...state,
42 open: !state.open,
43 currentlyHighlighted: !state.open ? Object.keys(state.visibleItems)[0] || '' : ''
44 };
45 }
46
47 case 'SET_OPEN': {
48 return {
49 ...state,
50 open: action.payload,
51 currentlyHighlighted: action.payload ? Object.keys(state.visibleItems)[0] || '' : ''
52 };
53 }
54
55 case 'SET_NEXT_HIGHLIGHTED': {
56 let keys = Object.keys(state.visibleItems);
57 let currentIndex = keys.indexOf(state.currentlyHighlighted);
58
59 let newIndex = 0;
60 if (currentIndex < keys.length - 1 && currentIndex != -1) {
61 newIndex = currentIndex + 1;
62 }
63 return {
64 ...state,
65 currentlyHighlighted: keys[newIndex]
66 };
67 }
68
69 case 'SET_PREV_HIGHLIGHTED': {
70 let keys = Object.keys(state.visibleItems);
71 let currentIndex = keys.indexOf(state.currentlyHighlighted);
72
73 let newIndex = 0;
74 if (currentIndex > 0) {
75 newIndex = currentIndex - 1;
76 }
77
78 return {
79 ...state,
80 currentlyHighlighted: keys[newIndex]
81 };
82 }
83
84 case 'SET_HIGHLIGHTED': {
85 return {
86 ...state,
87 currentlyHighlighted: action.payload
88 }
89 }
90
91 case 'SET_SELECTED': {
92 return {
93 ...state,
94 currentlyHighlighted: action.payload.selected,
95 selected: action.payload.selected,
96 selectedItemLabel: action.payload.selectedItemLabel
97 }
98 }
99
100 case 'SET_TABINDEX': {
101 return {
102 ...state,
103 tabIndex: action.payload
104 }
105 }
106 case 'SET_INITIAL_RENDER_FALSE' : {
107 return {
108 ...state,
109 initialRender: false
110 }
111 }
112 }
113
114 return state;
115};