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
|
/**
* ============LICENSE_START========================================================================
* ONAP : ccsdk feature sdnr wt odlux
* =================================================================================================
* Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
* =================================================================================================
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
* ============LICENSE_END==========================================================================
*/
import { IActionHandler } from '../../../../framework/src/flux/action';
import { SetBusyAction, SetSearchTextAction, UpdateExpandedNodesAction, UpdateInventoryTreeAction, UpdateSelectedNodeAction } from '../actions/inventoryTreeActions';
import { InventoryTreeNode, InventoryType, TreeDemoItem } from '../models/inventory';
export interface IInvenroryTree {
isBusy: boolean;
rootNodes: TreeDemoItem[];
selectedNode?: InventoryType;
expandedItems: TreeDemoItem[];
searchTerm: string;
}
const initialState: IInvenroryTree = {
isBusy: false,
rootNodes: [],
searchTerm: '',
selectedNode: undefined,
expandedItems: [],
};
const getTreeDataFromInvetoryTreeNode = (node: InventoryTreeNode): TreeDemoItem[] => Object.keys(node).reduce<TreeDemoItem[]>((acc, key) => {
const cur = node[key];
acc.push({
isMatch: cur.isMatch,
content: cur.label || key,
value: key,
children: cur.children && getTreeDataFromInvetoryTreeNode(cur.children),
});
return acc;
}, []);
export const inventoryTreeHandler: IActionHandler<IInvenroryTree> = (state = initialState, action) => {
if (action instanceof SetBusyAction) {
state = { ...state, isBusy: action.busy };
} else if (action instanceof SetSearchTextAction) {
state = { ...state, searchTerm: action.searchTerm };
} else if (action instanceof UpdateInventoryTreeAction) {
const rootNodes = getTreeDataFromInvetoryTreeNode(action.rootNode);
state = { ...state, rootNodes: rootNodes, expandedItems: [], selectedNode: undefined };
} else if (action instanceof UpdateSelectedNodeAction) {
state = { ...state, selectedNode: action.selectedNode };
} else if (action instanceof UpdateExpandedNodesAction) {
state = { ...state, expandedItems: action.expandedNodes || [] };
}
return state;
};
|