mirror of
https://gitea.smigz.com/smiggiddy/odin-codeprojects.git
synced 2025-06-28 04:45:36 -04:00
some code and stuff
This commit is contained in:
parent
75b83e30ea
commit
17d664eaeb
19 changed files with 762 additions and 4 deletions
58
inventory/public/js/components/modal.js
Normal file
58
inventory/public/js/components/modal.js
Normal file
|
@ -0,0 +1,58 @@
|
|||
import { categoryPicker, storePicker } from "./selectComponent.js";
|
||||
|
||||
function formInput(props) {
|
||||
const formItemDiv = document.createElement("div");
|
||||
formItemDiv.classList.add("form-item");
|
||||
const input = document.createElement("input");
|
||||
input.name = props.name;
|
||||
const label = document.createElement("label");
|
||||
label.textContent = props.labelText;
|
||||
formItemDiv.append(label, input);
|
||||
|
||||
return formItemDiv;
|
||||
}
|
||||
|
||||
async function modal() {
|
||||
const div = document.createElement("div");
|
||||
div.classList.add("modal");
|
||||
div.style = `
|
||||
display: none;
|
||||
positino: fixed;
|
||||
z-index: 1;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 50vh;
|
||||
overflow: auto;
|
||||
background-color: rgb(0,0,0);
|
||||
background-color: rgba(0,0,0,0.4);
|
||||
`;
|
||||
|
||||
const form = document.createElement("form");
|
||||
form.method = "POST";
|
||||
form.action = "/item";
|
||||
const name = formInput({ labelText: "Name", name: "name" });
|
||||
const price = formInput({ labelText: "Price", name: "price" });
|
||||
const qty = formInput({ labelText: "QTY", name: "qty" });
|
||||
|
||||
const categories = await categoryPicker();
|
||||
const stores = await storePicker();
|
||||
|
||||
const submitButton = document.createElement("button");
|
||||
submitButton.type = "submit";
|
||||
submitButton.classList.add("btn");
|
||||
submitButton.textContent = "Add Item";
|
||||
|
||||
const closeButton = document.createElement("button");
|
||||
closeButton.textContent = "Close";
|
||||
closeButton.addEventListener("click", () => {
|
||||
div.style.display = "none";
|
||||
});
|
||||
|
||||
form.append(name, price, qty, categories, stores, submitButton, closeButton);
|
||||
div.append(form);
|
||||
|
||||
return div;
|
||||
}
|
||||
|
||||
export { modal };
|
59
inventory/public/js/components/selectComponent.js
Normal file
59
inventory/public/js/components/selectComponent.js
Normal file
|
@ -0,0 +1,59 @@
|
|||
async function getData(path) {
|
||||
const categories = await fetch(`/${path}`);
|
||||
return await categories.json();
|
||||
}
|
||||
|
||||
function selectComponent(data, select) {
|
||||
data.forEach((opt) => {
|
||||
const option = document.createElement("option");
|
||||
option.value = opt.name;
|
||||
option.textContent = opt.name;
|
||||
select.append(option);
|
||||
});
|
||||
}
|
||||
|
||||
async function categoryPicker() {
|
||||
const selectQuery = document.querySelector(".categories-list-modal");
|
||||
if (selectQuery) document.body.remove(selectQuery);
|
||||
|
||||
const categories = await getData("categories");
|
||||
|
||||
const formItemDiv = document.createElement("div");
|
||||
formItemDiv.classList.add("form-item");
|
||||
|
||||
const formLabel = document.createElement("label");
|
||||
formLabel.textContent = "Categories";
|
||||
|
||||
const select = document.createElement("select");
|
||||
select.classList.add("categories-list-modal");
|
||||
select.name = "category";
|
||||
|
||||
selectComponent(categories, select);
|
||||
|
||||
formItemDiv.append(formLabel, select);
|
||||
return formItemDiv;
|
||||
}
|
||||
|
||||
async function storePicker() {
|
||||
const selectQuery = document.querySelector(".store-list-modal");
|
||||
if (selectQuery) document.body.remove(selectQuery);
|
||||
|
||||
const stores = await getData("stores");
|
||||
|
||||
const formItemDiv = document.createElement("div");
|
||||
formItemDiv.classList.add("form-item");
|
||||
|
||||
const formLabel = document.createElement("label");
|
||||
formLabel.textContent = "stores";
|
||||
|
||||
const select = document.createElement("select");
|
||||
select.classList.add("stores-list-modal");
|
||||
select.name = "store";
|
||||
|
||||
selectComponent(stores, select);
|
||||
|
||||
formItemDiv.append(formLabel, select);
|
||||
return formItemDiv;
|
||||
}
|
||||
|
||||
export { categoryPicker, storePicker };
|
63
inventory/public/js/script.js
Normal file
63
inventory/public/js/script.js
Normal file
|
@ -0,0 +1,63 @@
|
|||
import { modal } from "./components/modal.js";
|
||||
|
||||
const newItemLink = document.querySelector("a[href='/add']");
|
||||
//
|
||||
//if (newItemLink && window.location !== "/item/") {
|
||||
const modalElement = await modal();
|
||||
let modalToggle = false;
|
||||
async function handleDelete(e) {
|
||||
console.log(e.target);
|
||||
}
|
||||
|
||||
document.querySelectorAll(".delete-button").forEach((button) =>
|
||||
button.addEventListener("click", async (e) => {
|
||||
const itemName = e.target.dataset.id;
|
||||
const data = new URLSearchParams(new FormData());
|
||||
data.append("name", itemName);
|
||||
|
||||
const res = await fetch("/item", {
|
||||
method: "DELETE",
|
||||
body: data,
|
||||
});
|
||||
window.location.href = "/";
|
||||
}),
|
||||
);
|
||||
|
||||
document.querySelectorAll(".edit-button").forEach((button) => {
|
||||
button.addEventListener("click", async (e) => {
|
||||
const itemId = e.target.parentNode.dataset.itemId;
|
||||
|
||||
window.location.href = `/item/${itemId}`;
|
||||
});
|
||||
});
|
||||
|
||||
document.querySelectorAll(".delete-btn").forEach((button) => {
|
||||
button.addEventListener("click", async (e) => {
|
||||
const itemId = e.target.dataset.id;
|
||||
const data = new URLSearchParams(new FormData());
|
||||
data.append("id", itemId);
|
||||
|
||||
const res = await fetch("/category", {
|
||||
method: "DELETE",
|
||||
body: data,
|
||||
});
|
||||
const message = await res.text();
|
||||
|
||||
if (message.includes("error")) {
|
||||
alert("unable to delete as item is using category");
|
||||
} else {
|
||||
window.location.href = "/category";
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
newItemLink.addEventListener("click", (e) => {
|
||||
e.preventDefault();
|
||||
modalToggle
|
||||
? (modalElement.style.display = "none")
|
||||
: (modalElement.style.display = "block");
|
||||
modalToggle = !modalToggle;
|
||||
});
|
||||
|
||||
document.body.append(modalElement);
|
||||
//}
|
Loading…
Add table
Add a link
Reference in a new issue