UNPKG

@apidaze/node-red-contrib-apidaze

Version:
183 lines (159 loc) 5.3 kB
<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>