openreplay/frontend/app/player/ios/state.js
2021-05-01 15:12:01 +05:30

112 lines
2.1 KiB
JavaScript

import { makeAutoObservable } from "mobx"
//configure ({empceActions: true})
export const
NONE = 0,
CRASHES = 1,
NETWORK = 2,
LOGS = 3,
EVENTS = 4,
CUSTOM = 5,
PERFORMANCE = 6;
export function createToolPanelState() {
return makeAutoObservable({
key: NONE,
toggle(key) { // auto-bind??
this.key = this.key === key ? NONE : key;
},
close() {
this.key = NONE;
},
});
}
export function createToggleState() {
return makeAutoObservable({
enabled: false,
toggle(flag) {
this.enabled = typeof flag === 'boolean'
? flag
: !this.enabled;
},
enable() {
this.enabled = true;
},
disable() {
this.enabled = false;
},
});
}
const SPEED_STORAGE_KEY = "__$player-speed$__";
//const SKIP_STORAGE_KEY = "__$player-skip$__";
//const initialSkip = !!localStorage.getItem(SKIP_STORAGE_KEY);
export const
INITIALIZING = 0,
PLAYING = 1,
PAUSED = 2,
COMPLETED = 3,
SOCKET_ERROR = 5;
export const
PORTRAIT = 1,
LANDSCAPE = 2;
export function createPlayerState(state) {
const storedSpeed = +localStorage.getItem(SPEED_STORAGE_KEY);
const initialSpeed = [1,2,3].includes(storedSpeed) ? storedSpeed : 1;
return makeAutoObservable({
status: INITIALIZING,
_statusSaved: null,
setTime(t) {
this.time = t
},
time: 0,
endTime: 0,
setStatus(status) {
this.status = status;
},
get initializing() {
return this.status === INITIALIZING;
},
get playing() {
return this.status === PLAYING;
},
get completed() {
return this.status === COMPLETED;
},
_buffering: false,
get buffering() {
return this._buffering;
},
setBufferingState(flag = true) {
this._buffering = flag;
},
speed: initialSpeed,
setSpeed(speed) {
localStorage.setItem(SPEED_STORAGE_KEY, speed);
this.speed = speed;
},
width: 360,
height: 780,
orientation: PORTRAIT,
get orientationLandscape() {
return this.orientation === LANDSCAPE;
},
setSize(width, height) {
if (height < 0 || width < 0) {
console.log("Player: wrong non-positive size")
return;
}
this.width = width;
this.height = height;
this.orientation = width > height ? LANDSCAPE : PORTRAIT;
},
...state,
});
}