@apidaze/node-red-contrib-apidaze
Version:
Node-RED module for Apidaze
183 lines (159 loc) • 5.3 kB
HTML
<script type="text/javascript">
const apiOperations = [
{
name: 'Transfer',
value: 'transfer',
},
{
name: 'Eavesdrop',
value: 'eavesdrop',
},
{
name: 'Intercept',
value: 'intercept',
},
{
name: 'Send SMS',
value: 'sms',
},
];
RED.nodes.registerType('api-request', {
category: 'apidaze',
color: '#E9967A',
defaults: {
account: {
value: '',
type: 'config',
label: 'Account',
required: true,
},
operation: {
value: apiOperations[0].value,
required: true,
},
data: {
value: {}
},
continue: {
value: false,
},
proxy: {
value: '',
validate: RED.validators.regex(/(^$)|(^https?:\/\/)/)
},
timeout: {
value: null,
},
},
inputs: 1,
outputs: 1,
icon: 'font-awesome/fa-exchange',
label: 'API request',
oneditprepare: function() {
// hide all operation blocks
$('.operation-data[data-api-operation]').hide();
const $select = $('select#node-input-operation');
$select.on('change', function (event) {
const newOperation = $(this).val();
$('.operation-data[data-api-operation]').hide();
$(`.operation-data[data-api-operation="${newOperation}"]`).show();
});
$.each(apiOperations, (index, item) => {
const { name, value } = item;
const $option = $('<option />', {
value,
text: name,
selected: value === this.operation,
});
$select.append($option);
});
// restore the persisted data in custom fields
const dataEntries = Object.entries(this.data);
for (const entry of dataEntries) {
const [key, value] = entry;
$(`.operation-data[data-api-operation="${this.operation}"]`)
.find(`[id="node-input-${key}"]`)
.val(value);
}
},
oneditsave: function() {
const operation = this.operation;
const inputs = $(`[data-api-operation="${operation}"]`).find('input, textarea');
// persist the data out of custom fields
this.data = Array.from(inputs).reduce(function(pv, cv) {
const value = $(cv).val();
const name = $(cv).attr('id').replace('node-input-', '');
return {
...pv,
[name]: value
}
}, {});
}
});
</script>
<script type="text/html" data-template-name="api-request">
<div class="form-row">
<label for="node-input-account"><i class="fa fa-user"></i> Account</label>
<input type="text" id="node-input-account" />
</div>
<div class="form-row">
<label for="node-input-operation"><i class="fa fa-tasks"></i> Operation</label>
<select id="node-input-operation"></select>
</div>
<div class="operation-data" data-api-operation="transfer">
<div class="form-row">
<label for="node-input-callUuid"><i class="fa fa-hashtag"></i> Call UUID</label>
<input type="text" id="node-input-callUuid" />
</div>
</div>
<div class="operation-data" data-api-operation="eavesdrop">
<div class="form-row">
<label for="node-input-callUuid"><i class="fa fa-hashtag"></i> Call UUID</label>
<input type="text" id="node-input-callUuid" />
</div>
<div class="form-row">
<label for="node-input-interceptorUuid"><i class="fa fa-hashtag"></i> Interceptor UUID</label>
<input type="text" id="node-input-interceptorUuid" />
</div>
</div>
<div class="operation-data" data-api-operation="intercept">
<div class="form-row">
<label for="node-input-callUuid"><i class="fa fa-hashtag"></i> Call UUID</label>
<input type="text" id="node-input-callUuid" />
</div>
<div class="form-row">
<label for="node-input-interceptorUuid"><i class="fa fa-hashtag"></i> Interceptor UUID</label>
<input type="text" id="node-input-interceptorUuid" />
</div>
</div>
<div class="operation-data" data-api-operation="sms">
<div class="form-row">
<label for="node-input-to"><i class="fa fa-hashtag"></i> To</label>
<input type="text" id="node-input-to" />
</div>
<div class="form-row">
<label for="node-input-from"><i class="fa fa-hashtag"></i> From</label>
<input type="text" id="node-input-from" />
</div>
<div class="form-row">
<label for="node-input-message"><i class="fa fa-commenting"></i> Message</label>
<textarea id="node-input-message"></textarea>
</div>
</div>
<div class="form-row">
<label for="node-input-continue"><i class="fa fa-pause"></i> Continue?</label>
<input type="checkbox" id="node-input-continue" style="display:inline-block; width:auto; vertical-align:top;" />
</div>
<div class="form-row">
<label for="node-input-proxy"><i class="fa fa-server"></i> Proxy</label>
<input type="text" id="node-input-proxy" />
</div>
<div class="form-row">
<label for="node-input-timeout"><i class="fa fa-clock-o"></i> Timeout</label>
<input type="text" id="node-input-timeout" />
</div>
<input type="hidden" id="node-input-outputs" />
</script>
<script type="text/html" data-help-name="api-request">
<p>Makes an Apidaze API request.</p>
</script>