Executando verificação de segurança...
1

boa noite, agradeço muito por voce tirar um pouco do seu tempo para tentar me ajudar de coração !!
fiz o teste que voce sugeriu, eu pondo do jeito que voce sugeriu para de aparecer os items adicionados se eu por id ele volta a funcionar, porem com o mesmo problema que estava antes.
vou mandar uma foto de como fica o meu problema, gostaria que quando eu desse um click la no addToCart só adcionace o item que eu click, mas ele ao o invez ele adiciona todos os outros
https://imgur.com/a/bIPlbIT

Carregando publicação patrocinada...
2

Não precisa agradecer :). Agora sim creio que achei uma solução, vou te mandar aqui e você testa por aí quando puder.

  1. Precisei alterar o arquivo src/pages/lib/queries/getIdsCards.js pelo motivo de ele de fato não ta filtrando nada, por isso ele sempre retornava todos os itens. vou explicar o motivo de cada mudança.
  • $ids: [ID]!: O tipo dessa variável de acordo com a própria documentação do graphql do seu projeto deveria ser um array de ids, essa variável vai ser usada para o filtro.
  • filters: { id: { in: $ids } }: A forma anterior estava incorreta, ele não estava filtrando nada, de acordo novamente com a documentação do graphql do seu projeto, ele diz que a estrutura de filtro tem que ser essa, podendo alterar por exemplo o "in", escolhendo outro tipo de operador que você consegue ver aqui.
import { gql } from '@apollo/client'

const GET_IDS_CARDS = gql`
  query get_idCard($ids: [ID]!) {
    cards(filters: { id: { in: $ids } }) {
      data {
        id
        attributes {
          valor
          description
        }
      }
    }
  }
`
export default GET_IDS_CARDS
  1. Precisei alterar o arquivo src/hooks/use-cart/index.js para alterar como era passado a variável para a query e mudar como os ids são adicionados no carrinho.
  • ids: cartItem: Retirei o objeto filter e renomeei o id para ids, dessa forma no GET_IDS_CARDS, ele pega a variavel normalmente.
  const { data, loading } = useQuery(GET_IDS_CARDS, {
    skip: !cartItem?.length,
    variables: {
      ids: cartItem
    }
  })
  • id.id: Agora no lugar de ele jogar um objeto com id dentro, ele joga o próprio id, já que queremos passar o array de ids para o filtro, certo? Imagino que seja interessante mudar o nome da variável para não ficar redundante também, mas você decide.
  const addToCart = (id) => {
    const itemExiste = cartItem.find((itemId) => itemId === id.id)
    if (!itemExiste) {
      const newItems = [...cartItem, id.id]
      setCartItem(newItems)
    }
  }

Você pode adaptar para o seu projeto da melhor forma que achar, mas eu imagino que o caminho para a solução seja esse que te mandei, fiz pequenos testes localmente e funcionou. Espero que agora consiga resolver seu problema, qualquer coisa pode falar!

2

Meu amigo agradeço a voce do fundo do meu coraçâo, estava muito tempo preso com esse problema, te agradeço mesmo!
postei essa duvida em varios lugares mas ninguem quis tirar um tempo para ajudar, mas graças a Deus voce apareceu, desejo tudo de bom para voce, espro um dia poder te ajudar da forma que voce me ajudou hoje! muito obrigado!!!