let formInputs = {}; const OpenMenu = (data) => { if (data == null || data == "") { console.log("No data detected"); return null; } $(`.main-wrapper`).fadeIn(0); let form = ["
", `
${data.header != null ? data.header : "Form Title"}
`]; data.inputs.forEach((item, index) => { switch (item.type) { case "text": form.push(renderTextInput(item)); break; case "password": form.push(renderPasswordInput(item)); break; case "number": form.push(renderNumberInput(item)); break; case "radio": form.push(renderRadioInput(item)); break; case "select": form.push(renderSelectInput(item)); break; case "checkbox": form.push(renderCheckboxInput(item)); break; case "color": form.push(renderColorInput(item)); break; default: form.push(`
${item.text}
`); } }); form.push(``); form.push("
"); $(".main-wrapper").html(form.join(" ")); $("#qb-input-form").on("change", function (event) { if ($(event.target).attr("type") == "checkbox") { const value = $(event.target).is(":checked") ? "true" : "false"; formInputs[$(event.target).attr("value")] = value; } else { formInputs[$(event.target).attr("name")] = $(event.target).val(); } }); $("#qb-input-form").on("submit", async function (event) { if (event != null) { event.preventDefault(); } await $.post(`https://${GetParentResourceName()}/buttonSubmit`, JSON.stringify({ data: formInputs })); CloseMenu(); }); }; const renderTextInput = (item) => { const { text, name } = item; formInputs[name] = item.default ? item.default : ""; const isRequired = item.isRequired == "true" || item.isRequired ? "required" : ""; const defaultValue = item.default ? `value="${item.default}"` : ""; return ` `; }; const renderPasswordInput = (item) => { const { text, name } = item; formInputs[name] = item.default ? item.default : ""; const isRequired = item.isRequired == "true" || item.isRequired ? "required" : ""; const defaultValue = item.default ? `value="${item.default}"` : ""; return ` `; }; const renderNumberInput = (item) => { try { const { text, name } = item; formInputs[name] = item.default ? item.default : ""; const isRequired = item.isRequired == "true" || item.isRequired ? "required" : ""; const defaultValue = item.default ? `value="${item.default}"` : ""; return ``; } catch (err) { console.log(err); return ""; } }; const renderRadioInput = (item) => { const { options, name, text } = item; formInputs[name] = options[0].value; let div = `
${text}
`; div += '
'; options.forEach((option, index) => { div += ``; }); div += "
"; div += "
"; return div; }; const renderCheckboxInput = (item) => { const { options, name, text } = item; let div = `
${text}
`; div += '
'; options.forEach((option, index) => { div += ``; formInputs[option.value] = option.checked ? "true" : "false"; }); div += "
"; div += "
"; return div; }; const renderSelectInput = (item) => { const { options, name, text } = item; let div = `
${text}
`; div += `"; return div; }; const renderColorInput = (item) => { const { text, name } = item; formInputs[name] = item.default ? item.default : "#ffffff"; const isRequired = item.isRequired == "true" || item.isRequired ? "required" : ""; const defaultValue = item.default ? `value="${item.default}"` : ""; return ` `; }; const CloseMenu = () => { $(`.main-wrapper`).fadeOut(0); $("#qb-input-form").remove(); formInputs = {}; }; const SetStyle = (style) => { var stylesheet = $("", { rel: "stylesheet", type: "text/css", href: `./styles/${style}.css`, }); stylesheet.appendTo("head"); }; const CancelMenu = () => { $.post(`https://${GetParentResourceName()}/closeMenu`); return CloseMenu(); }; window.addEventListener("message", (event) => { const data = event.data; const info = data.data; const action = data.action; switch (action) { case "SET_STYLE": return SetStyle(info); case "OPEN_MENU": return OpenMenu(info); case "CLOSE_MENU": return CloseMenu(); default: return; } }); document.onkeyup = function (event) { const charCode = event.key; if (charCode == "Escape") { CancelMenu(); } else if (charCode == "Enter") { SubmitData(); } }; // IDK why this is a thing ? what if they misclick? $(document).click(function (event) { var $target = $(event.target); if (!$target.closest(".main-wrapper").length && $(".main-wrapper").is(":visible")) { CancelMenu(); } });