Left-side-panel-without-tests
[arvados.git] / src / store / side-panel / side-panel-reducer.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import * as _ from "lodash";
6
7 import actions, { SidePanelAction } from './side-panel-action';
8 import { SidePanelItem } from '../../components/side-panel/side-panel';
9
10 export type SidePanelState = SidePanelItem[];
11
12 const sidePanelReducer = (state: SidePanelState = sidePanelData, action: SidePanelAction) => {
13     return actions.match(action, {
14         TOGGLE_SIDE_PANEL_ITEM_OPEN: () => {
15             const sidePanel = _.cloneDeep(state);
16             sidePanel[0].open = !sidePanel[0].open;
17             return sidePanel;
18         },
19         TOGGLE_SIDE_PANEL_ITEM_ACTIVE: itemId => {
20             const sidePanel = _.cloneDeep(state);
21             resetSidePanelActivity(sidePanel);
22             sidePanel.map(it => {
23                 if (it.id === itemId) {
24                     it.active = true;
25                 }
26             });
27             resetProjectsCollapse(sidePanel); 
28             return sidePanel;
29         },
30         default: () => state
31     });
32 };
33
34 export const sidePanelData = [
35     {
36         id: "1",
37         name: "Projects",
38         icon: "fas fa-th fa-fw",
39         open: false,
40         active: false,
41     },
42     {
43         id: "2",
44         name: "Shared with me",
45         icon: "fas fa-users fa-fw",
46         active: false,
47     },
48     {
49         id: "3",
50         name: "Workflows",
51         icon: "fas fa-cogs fa-fw",
52         active: false,
53     },
54     {
55         id: "4",
56         name: "Recent open",
57         icon: "icon-time fa-fw",
58         active: false,
59     },
60     {
61         id: "5",
62         name: "Favorites",
63         icon: "fas fa-star fa-fw",
64         active: false,
65     },
66     {
67         id: "6",
68         name: "Trash",
69         icon: "fas fa-trash-alt fa-fw",
70         active: false,
71     }
72 ];
73
74 function resetSidePanelActivity(sidePanel: SidePanelItem[]) {
75     for (const t of sidePanel) {
76         t.active = false;
77     }
78 }
79
80 function resetProjectsCollapse(sidePanel: SidePanelItem[]) {
81     if (!sidePanel[0].active) {
82         sidePanel[0].open = false;
83     }
84 }
85
86 export default sidePanelReducer;