-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathadmin.js
More file actions
114 lines (92 loc) · 2.8 KB
/
Copy pathadmin.js
File metadata and controls
114 lines (92 loc) · 2.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
const PASSWORD = 'admin123';
const AUTH_KEY = 'cod-store-admin-auth';
const PRODUCT_KEY = 'cod-store-products';
const loginPanel = document.getElementById('login-panel');
const adminPanel = document.getElementById('admin-panel');
const loginForm = document.getElementById('login-form');
const loginError = document.getElementById('login-error');
const productForm = document.getElementById('product-form');
const adminProductList = document.getElementById('admin-product-list');
const logoutBtn = document.getElementById('logout-btn');
let products = [];
init();
async function init() {
products = await loadProducts();
if (localStorage.getItem(AUTH_KEY) === 'true') {
showAdmin();
} else {
showLogin();
}
}
function showAdmin() {
loginPanel.classList.add('hidden');
adminPanel.classList.remove('hidden');
renderProductList();
}
function showLogin() {
loginPanel.classList.remove('hidden');
adminPanel.classList.add('hidden');
}
async function loadProducts() {
const localProducts = localStorage.getItem(PRODUCT_KEY);
if (localProducts) {
return JSON.parse(localProducts);
}
const response = await fetch('products.json');
return response.json();
}
function saveProducts() {
localStorage.setItem(PRODUCT_KEY, JSON.stringify(products));
}
function renderProductList() {
adminProductList.innerHTML = '';
products.forEach((product) => {
const item = document.createElement('li');
item.innerHTML = `
<span>${product.name} - $${product.price}</span>
<button class="link-btn" data-id="${product.id}">Delete</button>
`;
item.querySelector('button').addEventListener('click', () => {
deleteProduct(product.id);
});
adminProductList.appendChild(item);
});
}
function deleteProduct(productId) {
products = products.filter((product) => product.id !== productId);
saveProducts();
renderProductList();
}
loginForm.addEventListener('submit', (event) => {
event.preventDefault();
const formData = new FormData(loginForm);
const password = formData.get('password');
if (password === PASSWORD) {
localStorage.setItem(AUTH_KEY, 'true');
loginError.textContent = '';
showAdmin();
return;
}
loginError.textContent = 'Invalid password.';
});
productForm.addEventListener('submit', (event) => {
event.preventDefault();
const formData = new FormData(productForm);
const newProduct = {
id: `p${Date.now()}`,
name: String(formData.get('name')).trim(),
price: Number(formData.get('price')),
image: String(formData.get('image')).trim(),
};
if (!newProduct.name || !newProduct.price || !newProduct.image) {
return;
}
products.unshift(newProduct);
saveProducts();
renderProductList();
productForm.reset();
});
logoutBtn.addEventListener('click', () => {
localStorage.removeItem(AUTH_KEY);
showLogin();
});