UNPKG

3.16 kBJavaScriptView Raw
1import {SharedUiComponent} from "./shareduicomponent";
2
3export class MultistateComponent extends SharedUiComponent {
4 constructor() {
5 super();
6 }
7 updateTransitionSettings(self, thisState, otherState, position, isActivating) {
8 // set fields for individual components
9 // position will be 0 for active, -1 or +1 for inactive depending on transition direction
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 // console.log("native")
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 // in place update - no animation
70 // console.log("in place");
71 self.updateCurrentState(self, state, active, available, data);
72 } else {
73 // console.log("new state");
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 //console.log(self.states);
82 }
83}