displayChoices = async (divID, type, options) => {
return new Promise((resolve, reject) => {
const container = document.getElementById(divID);
container.innerHTML = "";
const submitButton = document.createElement("button");
submitButton.textContent = "Submit";
submitButton.type = "button";
if (type === "string") {
if (options === null) {
const inputField = document.createElement("input");
inputField.type = "text";
inputField.placeholder = "Enter a string";
container.appendChild(inputField);
container.appendChild(submitButton);
submitButton.addEventListener("click", () => {
const value = inputField.value;
resolve(value === "" ? null : value);
});
} else {
options.forEach((option) => {
const radioContainer = document.createElement("div");
const radioButton = document.createElement("input");
radioButton.type = "radio";
radioButton.name = "choice";
radioButton.value = option === null ? "null" : option;
const label = document.createElement("label");
label.textContent = option === null ? "null" : option;
radioContainer.appendChild(radioButton);
radioContainer.appendChild(label);
container.appendChild(radioContainer);
});
container.appendChild(submitButton);
submitButton.addEventListener("click", () => {
const selectedOption = document.querySelector(
`input[name="choice"]:checked`
);
if (selectedOption) {
resolve(
selectedOption.value === "null" ? null : selectedOption.value
);
} else {
alert("Please select an option");
}
});
}
} else if (type === "boolean") {
["true", "false"].forEach((option) => {
const radioContainer = document.createElement("div");
const radioButton = document.createElement("input");
radioButton.type = "radio";
radioButton.name = "choice";
radioButton.value = option;
const label = document.createElement("label");
label.textContent = option;
radioContainer.appendChild(radioButton);
radioContainer.appendChild(label);
container.appendChild(radioContainer);
});
container.appendChild(submitButton);
submitButton.addEventListener("click", () => {
const selectedOption = document.querySelector(
`input[name="choice"]:checked`
);
if (selectedOption) {
resolve(selectedOption.value === "true");
} else {
alert("Please select an option");
}
});
} else if (type === "integer") {
const inputField = document.createElement("input");
inputField.type = "number";
inputField.step = "1";
inputField.placeholder = "Enter an integer value";
container.appendChild(inputField);
container.appendChild(submitButton);
submitButton.addEventListener("click", () => {
const value = inputField.value;
if (value === "") {
resolve(null);
} else {
resolve(parseInt(value, 10));
}
});
} else if (type === "number") {
const inputField = document.createElement("input");
inputField.type = "number";
inputField.placeholder = "Enter a number";
container.appendChild(inputField);
container.appendChild(submitButton);
submitButton.addEventListener("click", () => {
const value = inputField.value;
if (value === "") {
resolve(null);
} else {
resolve(parseFloat(value));
}
});
} else {
const inputField = document.createElement("input");
inputField.type = "text";
inputField.placeholder = "Enter a string";
container.appendChild(inputField);
container.appendChild(submitButton);
submitButton.addEventListener("click", () => {
const value = inputField.value;
resolve(value === "" ? null : value);
});
}
});
}