Este é um projeto de uma aplicação para gestão de solicitações de reembolso, desenvolvido durante o curso de JavaScript da Rocketseat. A aplicação permite adicionar despesas, categorizá-las, visualizar uma lista dinâmica de solicitações e acompanhar o total acumulado em tempo real.
- HTML5: Estrutura da página e formulários.
- CSS3: Estilização moderna e responsiva.
- JavaScript (ES6+): Lógica da aplicação e manipulação dinâmica do conteúdo.
O projeto foi construído utilizando conceitos fundamentais e avançados de JavaScript para garantir uma experiência de usuário fluida.
A manipulação do DOM é o coração deste projeto. O JavaScript interage com o HTML para capturar dados e atualizar a interface.
- Seleção de Elementos: Utilização de
querySelectoregetElementById. - Criação Dinâmica: Uso de
document.createElementpara gerar novos itens de despesa na lista. - Eventos: Captura de eventos como
onsubmit(formulário),oninput(formatação em tempo real) eaddEventListener(delegação de eventos para remoção de itens).
const form = document.querySelector("form");
const expenseList = document.querySelector("ul");As funções foram utilizadas para organizar a lógica em blocos reutilizáveis e especializados, como formatação de moeda, adição de itens e atualização de totais.
- Funções Nomeadas:
formatCurrencyBRL,expenseAdd,updateTotals. - Arrow Functions: Utilizadas em manipuladores de eventos.
function formatCurrencyBRL(value) {
return value.toLocaleString("pt-BR", {
style: "currency",
currency: "BRL",
});
}Para calcular o valor total das despesas, a aplicação percorre todos os itens da lista dinamicamente.
- Laço For: Utilizado para iterar sobre os elementos filhos (li) da lista de despesas e somar seus valores.
for (let item = 0; item < items.length; item++) {
const itemAmount = items[item].querySelector(".expense-amount");
// Lógica de soma...
}Métodos de manipulação de strings e Expressões Regulares (RegEx) foram essenciais para tratar os dados de entrada e formatar a exibição.
.replace(): Utilizado para remover caracteres não numéricos (/\D/g) e formatar valores monetários..toUpperCase(): Para padronização visual.- Template Literals: Para construção dinâmica de caminhos de imagens e classes HTML.
let value = amount.value.replace(/\D/g, "");Os dados de cada despesa são estruturados em objetos, facilitando o transporte e a organização das informações entre as funções.
const newExpense = {
id: new Date().getTime(),
expense: expense.value,
category_id: category.value,
category_name: category.options[category.selectedIndex].text,
amount: amount.value,
create_at: new Date(),
};- Formatação de Moeda: O campo de valor formata automaticamente enquanto o usuário digita (padrão BRL).
- Adição de Despesas: Adiciona itens à lista com ícone correspondente à categoria.
- Cálculo Automático: Atualiza a quantidade de itens e o valor total sempre que uma despesa é adicionada ou removida.
- Remoção de Itens: Permite excluir solicitações da lista clicando no ícone de lixeira.
- Tratamento de Erros: Feedback ao usuário através de
try...catche alertas.
- Clone este repositório.
- Abra o arquivo
index.htmldiretamente no seu navegador ou utilize uma extensão como a Live Server no VS Code.
Projeto desenvolvido para fins de estudo e prática de fundamentos de JavaScript.