Carregando
0xF0Lição 16 de 16

Projeto final: um quadro de disponibilidade de eventos

Conecte dados, uma requisição assíncrona, atualizações do DOM e um feedback acessível.

27 min Questionário com 4 perguntas 1 exercício de código
Ao final desta lição, você saberá
  • Explicar as responsabilidades do HTML, do CSS, do JavaScript do navegador e do JavaScript do servidor
  • Renderizar um resultado assíncrono com segurança
  • Tratar os estados de disponível e indisponível

Imagine um espaço de eventos anunciando vagas em oficinas. O HTML dá à página um título, um botão e um elemento de status. O CSS facilita enxergar a disponibilidade. O JavaScript do navegador pede a contagem mais recente e atualiza o DOM. Uma API em Node.js poderia ler o estoque de vagas e devolver JSON. Neste projeto final, você constrói a decisão do navegador com uma Promise simulada, então não precisa de servidor nem de conta.

board.html
1<h1>Workshop seats</h1>
2<button id="refresh" type="button">Refresh availability</button>
3<p id="availability" role="status">Choose refresh to check seats.</p>
4<script src="board.js" defer></script>
board.css
.open { color: #126245; }
.full { color: #9b2727; }
#availability { font-weight: 700; }
board.js (browser)
1const status = document.querySelector("#availability");
2document.querySelector("#refresh").addEventListener("click", async () => {
3  status.textContent = "Checking…";
4  try {
5    const response = await fetch("/api/seats");
6    if (!response.ok) throw new Error("HTTP " + response.status);
7    const data = await response.json();
8    status.textContent = data.seats > 0 ? data.seats + " seats open" : "Fully booked";
9    status.classList.toggle("open", data.seats > 0);
10    status.classList.toggle("full", data.seats === 0);
11  } catch { status.textContent = "Could not check seats. Try again."; }
12});

Experimente

Até 15 XP

Acompanhe a pilha completa

Siga a requisição do navegador até um servidor Node e de volta. Preveja que lado controla a mensagem visível.

Mensagem 1 de 4Previsões 0/0
Página HTML/CSS
JavaScript do navegador
API Node
Status no DOM

Equipes reais usam esse padrão para disponibilidade de estoque, status de pedidos, horários de agendamento e painéis. Antes de lançar, teste os casos de zero, de valor positivo e de falha. Verifique a página com teclado e com leitor de tela; uma mensagem de status deve ser anunciada sem tirar o foco do botão.

Principais conclusões

  • Mantenha claras as responsabilidades de estrutura, estilo, comportamento no navegador e dados no servidor.

  • Renderize o estado visível ao usuário com textContent e classes CSS.

  • Teste os resultados de zero, de valor positivo e de falha, não só o caminho feliz.

Quiz da aula

4 perguntas · aprovação com 3 acertos · até 50 XP

Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.

Pratique: escreva código em JavaScript

Escreva o programa, execute-o com os casos de teste e use o retorno para desenvolver suas habilidades em JavaScript.

Exercício 1

Renderize todos os estados de disponibilidade

+25 XP

O código inicial cria um parágrafo de status na página isolada do exercício. A entrada é ok,N ou error,N. Aguarde a requisição simulada com await. Em caso de sucesso, coloque no parágrafo N seats open se N for positivo, ou Fully booked se for zero; em caso de erro, coloque Could not check seats. Imprima o textContent dele.

  • Vagas abertas
  • Lotado
  • A requisição falhou
main.js
Carregando editor…

O JavaScript roda em um frame isolado do navegador, com limite de 1,5 segundo. A entrada fica disponível na variável de string input.

Dúvidas sobre esta lição

Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.

Carregando publicações…