-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
154 lines (126 loc) · 4.98 KB
/
script.js
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
// Array com participantes disponíveis
let participantes = [
{
name: 'NatBiscoito',
email: '[email protected]',
dataInscricao: new Date(2024, 1, 3), // Data de inscrição do participante (ano, mês, dia)
dataCheckIn: new Date(2024, 1, 3) // Data de check-in do participante (ano, mês, dia)
},
{
name: 'Haru',
email: '[email protected]',
dataInscricao: new Date(2024, 3, 2), // Data de inscrição do participante (ano, mês, dia)
dataCheckIn: new Date(2024, 2, 3) // Data de check-in do participante (ano, mês, dia)
},
{
name: 'Miguel',
email: '[email protected]',
dataInscricao: new Date(2024, 3, 3), // Data de inscrição do participante (ano, mês, dia)
dataCheckIn: new Date(2024, 2, 3) // Data de check-in do participante (ano, mês, dia)
},
]
// Função para criar a representação de um participante na tela
const criarParticipante = (participante) => {
// Utiliza a biblioteca dayjs para calcular a diferença entre a data atual e a data de inscrição/check-in
const dataInscricao = dayjs(Date.now()).to(participante.dataInscricao);
let dataCheckIn = dayjs(Date.now()).to(participante.dataCheckIn);
//Condição para criar um botão de Check In todas as vezes
if(participante.dataCheckIn == null) {
dataCheckIn = `
<button data-email="${participante.email}" onclick="fazerCheckIn(event)">
Confirmar Check-in
</button>
`
}
// Retorna uma string HTML representando os dados do participante em uma linha de tabela
return `
<tr>
<td><strong>${participante.name}</strong>
<br>${participante.email}</td>
<td>${dataInscricao}</td>
<td>${dataCheckIn}</td>
<button class="apagar" onclick="removerParticipante('${participante.name}')">Remover</button>
</tr>`;
}
// Função para remover participante
const removerParticipante = (name) => {
const msgConfirm = 'Deseja confirmar?'
if(confirm(msgConfirm) == false) {
return
}
for (let i = 0; i < participantes.length; i++) {
if (participantes[i].name === name) {
participantes.splice(i,1);
break;
}
}
atualizarLista(participantes)
}
// Função para atualizar a lista de participantes na tela
const atualizarLista = (participantes) => {
let output = "";
// Analisa cada participante e cria a representação HTML para cada um
for(let participante of participantes){
output = output + criarParticipante(participante);
}
// Atualiza o conteúdo da tabela no documento HTML com a lista de participantes gerada
document.querySelector('tbody').innerHTML = output;
}
//Função p/adicionar um novo participante apartir do formulario
const adicionarParticipante = (event) => {
event.preventDefault()
const dadosForm = new FormData(event.target)
const participante = {
name: dadosForm.get('nome'),
email: dadosForm.get('email'),
dataInscricao: new Date(),
dataCheckIn: null
}
// Verificar se o Participante ja existe
const participanteExist = participantes.find((p) => p.email == participante.email
)
if(participanteExist) {
alert('Email ja cadastrado!')
return
}
participantes = [participante, ...participantes]
atualizarLista(participantes)
//Limpar o Formulario quando der OutPut
//Selecionar evento do input de nome e email e deixar vazio
event.target.querySelector('[name="nome"]').value = ""
event.target.querySelector('[name="email"]').value = ""
}
//Função p/adicionar check-in assim que apertar o button
const fazerCheckIn = (event) => {
// Confirmar Check-In
const msgConfirm = 'Deseja confirmar o Check-In?'
//Condição de cancelar ação
if(confirm(msgConfirm) == false) {
return
}
//Encontrar o Participante dentro da Lista
const participante = participantes.find((p) =>
p.email == event.target.dataset.email
)
// Atualizar o Check-in do Participante
participante.dataCheckIn = new Date()
// Atualizar a lista de Participantes
atualizarLista(participantes)
}
//Função p/executar a atualização de lista
atualizarLista(participantes);
// Codigozinho de Dark/Light mode
function toggleMode() {
const html = document.documentElement
html.classList.toggle("light");
//Mudar icones no light mode
const img1 = document.querySelector();
const img2 = document.querySelector();
if (html.classList.contains("light")) {
img1.setAttribute('src', './assets/name-icon-light.svg');
img2.setAttribute('src', './assets/email-icon-light.svg');
} else {
img1.setAttribute('src', './assets/name-icon.svg');
img2.setAttribute('src', './assets/email-icon.svg');
}
}