Files
OpenNoodl/packages/noodl-viewer-react/src/nodes/std-library/switch.js

99 lines
2.1 KiB
JavaScript

'use strict';
const Switch = {
name: 'Switch',
docs: 'https://docs.noodl.net/nodes/logic/switch',
category: 'Logic',
initialize() {
this._internal.state = false;
this._internal.initialized = false;
},
getInspectInfo() {
return this._internal.state;
},
inputs: {
on: {
displayName: 'On',
group: 'Change State',
valueChangedToTrue() {
if (this._internal.state === true) {
return;
}
this._internal.state = true;
this.flagOutputDirty('state');
this.emitSignals();
}
},
off: {
displayName: 'Off',
group: 'Change State',
valueChangedToTrue() {
if (this._internal.state === false) {
return;
}
this._internal.state = false;
this.flagOutputDirty('state');
this.emitSignals();
}
},
flip: {
displayName: 'Flip',
group: 'Change State',
valueChangedToTrue() {
this._internal.state = !this._internal.state;
this.flagOutputDirty('state');
this.emitSignals();
}
},
onFromStart: {
type: 'boolean',
displayName: 'State',
group: 'General',
default: false,
set(value) {
this._internal.state = !!value;
this.flagOutputDirty('state');
this.emitSignals();
}
}
},
outputs: {
state: {
type: 'boolean',
displayName: 'Current State',
getter() {
return this._internal.state;
}
},
switched: {
displayName: 'Switched',
type: 'signal',
group: 'Signals'
},
switchedToOn: {
displayName: 'Switched To On',
type: 'signal',
group: 'Signals'
},
switchedToOff: {
displayName: 'Switched To Off',
type: 'signal',
group: 'Signals'
}
},
prototypeExtensions: {
emitSignals() {
if (this._internal.state === true) {
this.sendSignalOnOutput('switchedToOn');
} else {
this.sendSignalOnOutput('switchedToOff');
}
this.sendSignalOnOutput('switched');
}
}
};
module.exports = {
node: Switch
};