1 | import {SharedUiComponent} from "./shareduicomponent";
|
2 |
|
3 | export class MultistateComponent extends SharedUiComponent {
|
4 | constructor() {
|
5 | super();
|
6 | }
|
7 | updateTransitionSettings(self, thisState, otherState, position, isActivating) {
|
8 |
|
9 |
|
10 | thisState.isActivating = isActivating;
|
11 | thisState.text = "Active? " + isActivating;
|
12 | }
|
13 | updateCurrentState(self, state, active, available, data) {
|
14 |
|
15 | }
|
16 | chooseState(self, route, active, available, data) {
|
17 | console.log("chooseState");
|
18 | var i;
|
19 | for (i = 0; i < self.states.length; i++) {
|
20 | if (self.states[i].route == route) return self.states[i];
|
21 | }
|
22 | for (i = 0; i < self.states.length; i++) {
|
23 | if (self.states[i] != self.activeState) return self.states[i];
|
24 | }
|
25 | }
|
26 | controller($scope) {
|
27 | console.log("Multistate controller");
|
28 |
|
29 | var self = $scope.componentDefinition;
|
30 | self.scope = $scope;
|
31 | self.states = [{
|
32 | route: null,
|
33 | available: false,
|
34 | active: false,
|
35 | data: null
|
36 | }, {
|
37 | route: null,
|
38 | available: false,
|
39 | active: false,
|
40 | data: null
|
41 | }];
|
42 | self.activeState = null;
|
43 | }
|
44 | setState(self, route, active, available, data, direction) {
|
45 | console.log(self.componentId + ".setState(" + route + "," + active + "," + available + "," + data + "," + direction + ")");
|
46 | console.log(data);
|
47 |
|
48 |
|
49 | if (!self.initialTransitionTimeout && !active && !available && (!data || !Object.keys(data).length)) {
|
50 | self.initialTransitionTimeout = window.setTimeout(function() {
|
51 | self.setState(self, route, active, available, data, direction);
|
52 | self.scope.$apply();
|
53 | }, 100);
|
54 | return;
|
55 | }
|
56 | window.clearTimeout(self.initialTransitionTimeout);
|
57 |
|
58 | if (self.isNative && self.isNative() && self.setNativeState) {
|
59 |
|
60 | self.setNativeState(self, route, active, available, data, direction);
|
61 | } else {
|
62 | var state = self.chooseState(self, route, active, available, data);
|
63 | state.route = route;
|
64 | state.active = active;
|
65 | state.available = available || active;
|
66 | state.data = data;
|
67 |
|
68 | if (state == self.activeState) {
|
69 |
|
70 |
|
71 | self.updateCurrentState(self, state, active, available, data);
|
72 | } else {
|
73 |
|
74 |
|
75 | var otherState = self.states[((self.states.indexOf(state)) + 1) % self.states.length];
|
76 | self.updateTransitionSettings(self, state, otherState, 0, true);
|
77 | self.updateTransitionSettings(self, otherState, state, direction > 0 ? 1 : -1, false);
|
78 | self.activeState = state;
|
79 | }
|
80 | }
|
81 |
|
82 | }
|
83 | }
|