1
resposta

[Bug] Está dando problema nas operações de depositar e transferir

Insira aqui a descrição dessa imagem para ajudar na acessibilidade No log a primeira vez fiz um deposito de 100, na segunda fiz outro deposito de 10 ai printou os dois depositos, na terceira operação saquei 100 ai mostrou no log o saque de 100 e dois prints de deposito de 100.

@Component({
  selector: 'app-root',
  imports: [BannerComponent, FormNovaTransacaoComponent],
  templateUrl: './app.component.html',
  styleUrl: './app.component.css'
})
export class AppComponent {

  transacoes = signal<Transacao[]>([]);
  saldo = computed(() => {
    return this.transacoes().reduce((total, transacao) => {
      console.log('Tipo: ', transacao.tipo, 'Valor: ', transacao.valor, 'Total: ', total);

      switch (transacao.tipo) {
        case TipoTransacao.DEPOSITO:
          return total + transacao.valor;
        case TipoTransacao.SAQUE:
          return total <= 0 ? 0 : total - transacao.valor;
        default:
          throw new Error('Tipo de transação inválido');
      }
    }, 0);
  });

  processarTransacao(transacao: Transacao) {
    if (transacao.tipo === TipoTransacao.SAQUE && this.saldo() <= 0) {
      alert('Saldo insuficiente para realizar o saque!');
      return;
    }

    this.transacoes.update((listaAtual) => [transacao, ...listaAtual]);
  }
}
<main class="form-wrapper">
  <form class="form" (ngSubmit)="aosubmeter()" ngNativeValidate >
    <h2 class="titulo">Nova transação</h2>
    <div class="campos">
      <label class="campo-grupo">
        Transação
        <div class="select-wrapper">
          <select [(ngModel)]="tipoTransacao" name="select-tipo-transacao" class="campo select-tipo-transacao" required>
            <option value="" disabled selected>Selecione o tipo de Transação</option>
            @for (tipo of tipoTransacaoEnum | keyvalue; track tipo.key) {
              <option [value]="tipo.value">{{ tipo.value }}</option>
            }
          </select>
        </div>
      </label>
      <label class="campo-grupo">
        Valor
        <div class="input-wrapper">
          <input
            [(ngModel)]="valorTransacao"
            type="number"
            name="valor"
            class="campo input-valor-transacap"
            min="0.01"
            step="0.01"
            placeholder="R$ 0,00"
            required
          >
        </div>
      </label>
      <button class="botao-confirmar-transacao">Confirmar transação</button>
    </div>
  </form>
</main>
@Component({
  selector: 'app-form-nova-transacao',
  imports: [FormsModule, KeyValuePipe],
  templateUrl: './form-nova-transacao.component.html',
  styleUrl: './form-nova-transacao.component.css'
})
export class FormNovaTransacaoComponent {
  tipoTransacao = ''
  valorTransacao = '';

  transacaoCriada = output<Transacao>();
  tipoTransacaoEnum = TipoTransacao;

  aosubmeter() {
    const transacao = new Transacao(
      this.tipoTransacao as TipoTransacao,
      Number(this.valorTransacao),
    );

    this.transacaoCriada.emit(transacao);

    this.valorTransacao = '';
    this.tipoTransacao = '';
  }
}
1 resposta

Olá, manda ai o projeto completo no github