ice-frontend-react-mobx
Version:
ICE Frontend REACT+MobX
98 lines (87 loc) • 3.1 kB
JavaScript
const debug = require('debug')('ice:models:feed'); // eslint-disable-line no-unused-vars
import { computed, observable, reaction } from 'mobx';
import debounce from '../helpers/debounce';
export const DeviceDefaults = {
name: null,
ip: null,
port: null,
deviceType: null,
deviceModel: null,
sourceFeed: null,
phase: null,
desc: null,
sensorStreamEnabled: null,
upstreamFailureSensor: null,
isConnected: false,
state: null,
deviceBreakerLimit: null
};
export class Device {
_id = null;
name = DeviceDefaults.name;
ip = DeviceDefaults.ip;
port = DeviceDefaults.port;
deviceType = DeviceDefaults.deviceType;
deviceModel = DeviceDefaults.deviceModel;
sourceFeed = DeviceDefaults.sourceFeed;
phase = DeviceDefaults.phase;
desc = DeviceDefaults.desc;
sensorStreamEnabled = DeviceDefaults.sensorStreamEnabled;
upstreamFailureSensor = DeviceDefaults.upstreamFailureSensor;
isConnected = DeviceDefaults.isConnected;
state = DeviceDefaults.state;
deviceBreakerLimit = DeviceDefaults.deviceBreakerLimit;
io = null;
broadcaster = null;
constructor (io) {
this.io = io;
this.broadcaster = reaction(
() => this.toJson,
debounce((json) => {
debug('Device object updated...', json);
this.io.emit('msg', { type: 'device_updated', data: json });
})
);
}
get id () {
return this._id;
}
get toJson () {
return {
id: this.id,
name: this.name,
ip: this.ip,
port: this.port,
deviceType: this.deviceType,
deviceModel: this.deviceModel,
sourceFeed: this.sourceFeed,
phase: this.phase,
desc: this.desc,
sensorStreamEnabled: this.sensorStreamEnabled,
upstreamFailureSensor: this.upstreamFailureSensor,
isConnected: this.isConnected,
state: this.state,
deviceBreakerLimit: this.deviceBreakerLimit
};
}
updateFromJson (json) {
this._id = json.id;
this.name = json.name || DeviceDefaults.name;
this.ip = json.ip || DeviceDefaults.ip;
this.port = json.port || DeviceDefaults.port;
this.deviceType = json.deviceType || DeviceDefaults.deviceType;
this.deviceModel = json.deviceModel || DeviceDefaults.deviceModel;
this.sourceFeed = json.sourceFeed || DeviceDefaults.sourceFeed;
this.phase = json.phase || DeviceDefaults.phase;
this.desc = json.desc || DeviceDefaults.desc;
this.sensorStreamEnabled = json.sensorStreamEnabled || DeviceDefaults.sensorStreamEnabled;
this.upstreamFailureSensor = json.upstreamFailureSensor || DeviceDefaults.upstreamFailureSensor;
this.isConnected = json.isConnected || DeviceDefaults.isConnected;
this.state = json.state || DeviceDefaults.state;
this.deviceBreakerLimit = json.deviceBreakerLimit || DeviceDefaults.deviceBreakerLimit;
}
dispose () {
this.io.emit('msg', { type: 'device_deleted', data: this.id });
this.broadcaster();
}
}