UNPKG

sls-dev-tools

Version:

The Dev Tools for the Serverless World

134 lines (109 loc) 3.87 kB
"use strict"; var _fieldWithTitle = require("../components/fieldWithTitle"); var _box = require("../components/box"); var _modalLayout = require("../components/modalLayout"); var _modalTitle = require("../components/modalTitle"); var _index = require("./index"); const blessed = require("blessed"); const eventInjectionModal = (screen, eventBridge, application, injectEvent, prefilledEvent, schemas) => { const eventInjectLayout = new _modalLayout.ModalLayout(screen, 112, 31, true); // Prefill textbox with previous submission if there is one const event = prefilledEvent || { EventBusName: eventBridge, DetailType: "", Source: "", Detail: "{}" }; // String values textboxes are initialized with const preset = [event.EventBusName, event.DetailType, event.Source, event.Detail]; const fields = ["EventBusName", "DetailType", "Source", "Detail"]; const numTextboxes = 4; let currentTextbox = 1; const textboxes = []; const unselectTextbox = index => { textboxes[index].style.border.fg = "green"; if (index === 4 || index === 5) { textboxes[index].style.fg = "green"; } }; const selectTextbox = index => { textboxes[index].style.border.fg = "yellow"; if (index === 4 || index === 5) { textboxes[index].style.fg = "yellow"; } }; const updateEventValues = () => { event.EventBusName = textboxes[0].getValue(); event.DetailType = textboxes[1].getValue(); event.Source = textboxes[2].getValue(); event.Detail = textboxes[3].getValue(); }; const storeInputValues = () => { // Store all text to populate modal when next opened updateEventValues(); application.previousSubmittedEvent[eventBridge] = event; }; const closeModal = () => { storeInputValues(); application.setIsModalOpen(false); application.returnFocus(); eventInjectLayout.destroy(); }; const openEventRegistryModal = () => { storeInputValues(); eventInjectLayout.destroy(); (0, _index.eventRegistryModal)(screen, eventBridge, application, schemas, injectEvent); }; new _modalTitle.ModalTitle(eventInjectLayout, 110, "Event Injection"); for (let i = 0; i < numTextboxes; i += 1) { const textboxWithTitle = (0, _fieldWithTitle.generateFieldWithTitle)(blessed, eventInjectLayout, fields[i], preset[i], 110); const { textbox } = textboxWithTitle; textbox.on("cancel", () => { updateEventValues(); closeModal(); }); textboxes.push(textbox); } const submit = new _box.Box(eventInjectLayout, 110, 4, "Submit"); const openEventRegistryModalBox = new _box.Box(eventInjectLayout, 110, 4, "Open event registry"); textboxes.push(submit); textboxes.push(openEventRegistryModalBox); new _box.Box(eventInjectLayout, 110, 4, "Arrow keys to select field | ENTER to toggle edit mode \nENTER on Submit to inject event | ESC to close"); eventInjectLayout.focus(); selectTextbox(currentTextbox); eventInjectLayout.key(["enter"], () => { // Inject event or select field for entry if (currentTextbox === 4) { updateEventValues(); injectEvent(event, application.eventBridge); closeModal(); } else if (currentTextbox === 5) { openEventRegistryModal(); } else { textboxes[currentTextbox].focus(); } }); eventInjectLayout.key(["up"], () => { unselectTextbox(currentTextbox); currentTextbox -= 1; if (currentTextbox === -1) { currentTextbox = 5; } selectTextbox(currentTextbox); }); eventInjectLayout.key(["down"], () => { unselectTextbox(currentTextbox); currentTextbox += 1; if (currentTextbox === 6) { currentTextbox = 0; } selectTextbox(currentTextbox); }); eventInjectLayout.key(["escape"], () => { // Discard modal closeModal(); }); }; module.exports = { eventInjectionModal };