Olá prezados(as), alguém poderia me ajudar com esse erro. Eu codei todo o projeto em paralelo para exercício. Tanto a minha versão quanto a versão final acontece a mesma coisa. Em resumo acontece o seguinte, se inicialmente não houver saldo ou movimentação funciona. Após o recarregamento da página, ao buscar os dados no localstorage acusa o erro abaixo:
Conta.js:28 Uncaught TypeError: listaTransacoes.sort is not a function at Conta.getGruposTransacoes (Conta.js:28:53) at renderizarExtrato (extrato-component.js:7:36) at extrato-component.js:5:1
abaixo o codigo Conta.ts
import { Armazenador } from "./Armazenador.js";
import { ValidaDebito, ValidaDeposito } from "./Decorators.js";
import { GrupoTransacao } from "./GrupoTransacao.js";
import { TipoTransacao } from "./TipoTransacao.js";
import { Transacao } from "./Transacao.js";
export class Conta {
protected nome: string;
protected saldo: number = Armazenador.obter<number>("saldo") || 0;
private transacoes: Transacao[] =
Armazenador.obter<Transacao[]>("transacoes", (key: string, value: any) => {
if (key === "data") {
return new Date(value);
}
return value;
}) || [];
constructor(nome: string) {
this.nome = nome;
}
public getTitular() {
return this.nome;
}
getGruposTransacoes(): GrupoTransacao[] {
const gruposTransacoes: GrupoTransacao[] = [];
const listaTransacoes: Transacao[] = structuredClone(this.transacoes);
const transacoesOrdenadas: Transacao[] = listaTransacoes.sort(
(t1, t2) => t2.data.getTime() - t1.data.getTime()
);
let labelAtualGrupoTransacao: string = "";
for (let transacao of transacoesOrdenadas) {
let labelGrupoTransacao: string = transacao.data.toLocaleDateString(
"pt-br",
{ month: "long", year: "numeric" }
);
if (labelAtualGrupoTransacao !== labelGrupoTransacao) {
labelAtualGrupoTransacao = labelGrupoTransacao;
gruposTransacoes.push({
label: labelGrupoTransacao,
transacoes: [],
});
}
gruposTransacoes.at(-1).transacoes.push(transacao);
}
return gruposTransacoes;
}
getSaldo() {
return this.saldo;
}
getDataAcesso(): Date {
return new Date();
}
registrarTransacao(novaTransacao: Transacao): void {
if (novaTransacao.tipoTransacao == TipoTransacao.DEPOSITO) {
this.depositar(novaTransacao.valor);
} else if (
novaTransacao.tipoTransacao == TipoTransacao.TRANSFERENCIA ||
novaTransacao.tipoTransacao == TipoTransacao.PAGAMENTO_BOLETO
) {
this.debitar(novaTransacao.valor);
novaTransacao.valor *= -1;
} else {
throw new Error("Tipo de Transação é inválido!");
}
this.transacoes.push(novaTransacao);
console.log(this.getGruposTransacoes());
Armazenador.salvar("transacoes", JSON.stringify(this.transacoes));
}
@ValidaDebito
debitar(valor: number): void {
this.saldo -= valor;
Armazenador.salvar("saldo", this.saldo.toString());
}
@ValidaDeposito
depositar(valor: number): void {
this.saldo += valor;
Armazenador.salvar("saldo", this.saldo.toString());
}
}
export class ContaPremium extends Conta {
registrarTransacao(transacao: Transacao): void {
if (transacao.tipoTransacao === TipoTransacao.DEPOSITO) {
console.log("ganhou um bônus de 0.50 centavos");
transacao.valor = transacao.valor += 0.5;
}
super.registrarTransacao(transacao);
}
}
const conta = new Conta("Joana da Silva Olveira");
const contaPremium = new ContaPremium("Mônica Hillman");
export default conta;
não anexei o codigo do extrato-component.ts porque excedeu o limite