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
70
71
72
73
|
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
const { assert, immutableUpdate } = require("devtools/shared/DevToolsUtils");
const { actions, individualsState, viewState } = require("../constants");
const handlers = Object.create(null);
handlers[actions.POP_VIEW] = function (_state, _action) {
return null;
};
handlers[actions.CHANGE_VIEW] = function (individuals, { newViewState }) {
if (newViewState === viewState.INDIVIDUALS) {
assert(!individuals,
"Should not switch to individuals view when already in individuals view");
return Object.freeze({
state: individualsState.COMPUTING_DOMINATOR_TREE,
});
}
return null;
};
handlers[actions.FOCUS_INDIVIDUAL] = function (individuals, { node }) {
assert(individuals, "Should have individuals");
return immutableUpdate(individuals, { focused: node });
};
handlers[actions.FETCH_INDIVIDUALS_START] = function (individuals, action) {
assert(individuals, "Should have individuals");
return Object.freeze({
state: individualsState.FETCHING,
focused: individuals.focused,
});
};
handlers[actions.FETCH_INDIVIDUALS_END] = function (individuals, action) {
assert(individuals, "Should have individuals");
assert(!individuals.nodes, "Should not have nodes");
assert(individuals.state === individualsState.FETCHING,
"Should only end fetching individuals after starting.");
const focused = individuals.focused
? action.nodes.find(n => n.nodeId === individuals.focused.nodeId)
: null;
return Object.freeze({
state: individualsState.FETCHED,
nodes: action.nodes,
id: action.id,
censusBreakdown: action.censusBreakdown,
indices: action.indices,
labelDisplay: action.labelDisplay,
focused,
dominatorTree: action.dominatorTree,
});
};
handlers[actions.INDIVIDUALS_ERROR] = function (_, { error }) {
return Object.freeze({
error,
nodes: null,
state: individualsState.ERROR,
});
};
module.exports = function (individuals = null, action) {
const handler = handlers[action.type];
return handler ? handler(individuals, action) : individuals;
};
|