-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.ts
More file actions
48 lines (38 loc) · 1.23 KB
/
main.ts
File metadata and controls
48 lines (38 loc) · 1.23 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
import { Badge } from "./models/Badge.js";
const formElem = getElem<HTMLFormElement>('badge-form');
const badgesElem = getElem<HTMLElement>('badges');
const resetBtn = getElem<HTMLButtonElement>('reset-btn');
const badges: Badge[] = Badge.LoadBadges();
renderBadges();
function getElem<T extends HTMLElement>(id: string): T | null {
return document.getElementById(id) as T;
}
formElem?.addEventListener('submit', handleSubmit);
resetBtn?.addEventListener('click', clearBadges);
function handleSubmit(event: Event) {
event.preventDefault();
if (!formElem) return;
const formData = new FormData(formElem);
const name = formData.get('name') as string;
const title = formData.get('title') as string;
const department = formData.get('department') as string;
const imgUrl = formData.get('imgUrl') as string;
const badge = new Badge(name, title, department, imgUrl);
badges.push(badge);
renderBadges();
formElem.reset();
Badge.SaveBadges(badges);
}
function renderBadges() {
if (!badgesElem) return;
badgesElem.innerHTML = '';
let template = '';
badges.forEach((badge) => {
template += badge.getTemplate();
});
badgesElem.innerHTML = template;
}
function clearBadges() {
badges.length = 0;
renderBadges();
}