Não precisa agradecer :). Agora sim creio que achei uma solução, vou te mandar aqui e você testa por aí quando puder.
- 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
- 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!