mirror of
https://github.com/fluxscape/fluxscape.git
synced 2026-01-11 14:52:54 +01:00
198 lines
5.1 KiB
JavaScript
198 lines
5.1 KiB
JavaScript
'use strict';
|
|
|
|
const UserService = require('./userservice');
|
|
|
|
const SignUpNodeDefinition = {
|
|
name: 'net.noodl.user.SignUp',
|
|
docs: 'https://docs.noodl.net/nodes/data/user/sign-up',
|
|
displayNodeName: 'Sign Up',
|
|
category: 'Cloud Services',
|
|
color: 'data',
|
|
initialize() {
|
|
const internal = this._internal;
|
|
internal.userProperties = {};
|
|
},
|
|
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: {
|
|
signup: {
|
|
displayName: 'Do',
|
|
group: 'Actions',
|
|
valueChangedToTrue() {
|
|
this.scheduleSignUp();
|
|
}
|
|
},
|
|
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;
|
|
}
|
|
},
|
|
email: {
|
|
displayName: 'Email',
|
|
type: 'string',
|
|
group: 'General',
|
|
set(value) {
|
|
this._internal.email = 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');
|
|
}
|
|
},
|
|
scheduleSignUp() {
|
|
const internal = this._internal;
|
|
|
|
if (this.signUpScheduled === true) return;
|
|
this.signUpScheduled = true;
|
|
|
|
this.scheduleAfterInputsHaveUpdated(() => {
|
|
this.signUpScheduled = false;
|
|
|
|
UserService.instance.signUp({
|
|
username: this._internal.username,
|
|
password: this._internal.password,
|
|
email: this._internal.email,
|
|
properties: internal.userProperties,
|
|
success: () => {
|
|
this.sendSignalOnOutput('success');
|
|
},
|
|
error: (e) => {
|
|
this.setError(e);
|
|
}
|
|
});
|
|
});
|
|
},
|
|
setUserProperty(name, value) {
|
|
this._internal.userProperties[name] = value;
|
|
},
|
|
registerInputIfNeeded(name) {
|
|
if (this.hasInput(name)) {
|
|
return;
|
|
}
|
|
|
|
if (name.startsWith('prop-')) {
|
|
return this.registerInput(name, {
|
|
set: this.setUserProperty.bind(this, name.substring('prop-'.length))
|
|
});
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
function updatePorts(nodeId, _parameters, editorConnection, systemCollections) {
|
|
var ports = [];
|
|
|
|
if (systemCollections) {
|
|
// Fetch ports from collection keys
|
|
var c = systemCollections.find((c) => c.name === '_User');
|
|
if (c && c.schema && c.schema.properties) {
|
|
var props = c.schema.properties;
|
|
const _ignoreKeys = ['authData', 'password', 'username', 'createdAt', 'updatedAt', 'emailVerified', 'email'];
|
|
for (var key in props) {
|
|
if (_ignoreKeys.indexOf(key) !== -1) continue;
|
|
|
|
var p = props[key];
|
|
if (ports.find((_p) => _p.name === key)) continue;
|
|
|
|
if (p.type === 'Relation') {
|
|
} else {
|
|
// Other schema type ports
|
|
const _typeMap = {
|
|
String: 'string',
|
|
Boolean: 'boolean',
|
|
Number: 'number',
|
|
Date: 'date'
|
|
};
|
|
|
|
ports.push({
|
|
type: {
|
|
name: _typeMap[p.type] ? _typeMap[p.type] : '*'
|
|
},
|
|
plug: 'input',
|
|
group: 'Properties',
|
|
name: 'prop-' + key,
|
|
displayName: key
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
editorConnection.sendDynamicPorts(nodeId, ports);
|
|
}
|
|
|
|
module.exports = {
|
|
node: SignUpNodeDefinition,
|
|
setup(context, graphModel) {
|
|
if (!context.editorConnection || !context.editorConnection.isRunningLocally()) {
|
|
return;
|
|
}
|
|
|
|
function _managePortsForNode(node) {
|
|
updatePorts(node.id, node.parameters, context.editorConnection, graphModel.getMetaData('systemCollections'));
|
|
|
|
node.on('parameterUpdated', function (_event) {
|
|
updatePorts(node.id, node.parameters, context.editorConnection, graphModel.getMetaData('systemCollections'));
|
|
});
|
|
|
|
graphModel.on('metadataChanged.systemCollections', function (data) {
|
|
updatePorts(node.id, node.parameters, context.editorConnection, data);
|
|
});
|
|
}
|
|
|
|
graphModel.on('editorImportComplete', () => {
|
|
graphModel.on('nodeAdded.net.noodl.user.SignUp', function (node) {
|
|
_managePortsForNode(node);
|
|
});
|
|
|
|
for (const node of graphModel.getNodesWithType('net.noodl.user.SignUp')) {
|
|
_managePortsForNode(node);
|
|
}
|
|
});
|
|
}
|
|
};
|