Files
fluxscape/packages/noodl-viewer-react/src/nodes/std-library/user/login.js
2024-07-15 15:21:01 +02:00

100 lines
2.2 KiB
JavaScript

'use strict';
const UserService = require('./userservice');
const LoginNodeDefinition = {
name: 'net.noodl.user.LogIn',
docs: 'https://docs.noodl.net/nodes/data/user/log-in',
displayNodeName: 'Log In',
category: 'Cloud Services',
color: 'data',
outputs: {
success: {
type: 'signal',
displayName: 'Success',
group: 'Events'
},
failure: {
type: 'signal',
displayName: 'Failure',
group: 'Events'
},
error: {
type: 'string',
displayName: 'Error',
group: 'Error',
getter() {
return this._internal.error;
}
}
},
inputs: {
login: {
displayName: 'Do',
group: 'Actions',
valueChangedToTrue() {
this.scheduleLogIn();
}
},
username: {
displayName: 'Username',
type: 'string',
group: 'General',
set(value) {
this._internal.username = value;
}
},
password: {
displayName: 'Password',
type: 'string',
group: 'General',
set(value) {
this._internal.password = value;
}
}
},
methods: {
setError(err) {
this._internal.error = err;
this.flagOutputDirty('error');
this.sendSignalOnOutput('failure');
if (this.context.editorConnection) {
this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name, this.id, 'user-login-warning', {
message: err,
showGlobally: true
});
}
},
clearWarnings() {
if (this.context.editorConnection) {
this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name, this.id, 'user-login-warning');
}
},
scheduleLogIn() {
if (this.logInScheduled === true) return;
this.logInScheduled = true;
this.scheduleAfterInputsHaveUpdated(() => {
this.logInScheduled = false;
UserService.instance.logIn({
username: this._internal.username,
password: this._internal.password,
success: () => {
this.sendSignalOnOutput('success');
},
error: (e) => {
this.setError(e);
}
});
});
}
}
};
module.exports = {
node: LoginNodeDefinition,
setup(_context, _graphModel) {}
};