Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Storage - Atualizando uma lista de items

Tenho uma lista de produtos salva com 10 produtos

eu modifico 3 itens dessa lista e mando salvar todos de uma única vez

public updateList(list: Product[]): Promise<any> {
    return this.storage.get(PRODUCTS).then((products: Product[]) => {
      if (!products || products.length === 0) {
        return null;
      }
      let newProducts: Product[] = [];
      for (let product of list) {
        for (let p of products) {
          if (p.id === product.id) {
            newProducts.push(product);
          } else {
            newProducts.push(p);
          }
        }
      }

      return this.storage.set(PRODUCTS, newProducts);
    });
  }

esses 2 loops estão estranhos pra mim, alem de que o item pode acabar duplicando. Alguém tem uma solução melhor pra esse problema?

2 respostas

A lista que está passando por parâmetro está populada com todos os produtos, ou é uma lista com somente novos produtos?

Se for só de produtos novos, faça o seguinte:

for (let product of list) {
    newProducts.push(product);
}

for (let p of products) {
    newProducts.push(p);
}

Caso for uma lista que tem todos os produtos existente, não é necessário fazer os fors.

solução!

eu resolvi aqui dessa maneira

 public updateList(list: Product[]): Promise<any> {
    return this.storage.get(PRODUCTS).then((products: Product[]) => {
      if (!products || products.length === 0) {
        return null;
      }
      let oldProducts: Product[] = [];
      for (let item of products) {
        if (!list.filter(p => { return p.id === item.id })[0])
          oldProducts.push(item)
      }

      return this.storage.set(PRODUCTS, oldProducts.concat(list));
    });
  }

oldProducts são os produtos que eu já tinha na base e que não fiz nenhuma modificação, enquanto list eram os modificados, so concatenei eles e corri pro abraço, ainda da pra ordenar isso antes de salvar, mas pra como estou usando n é necessário. vlw pessoal