Ниже приведен запрос, который выбирает список продуктов и сохраняет его в локальном кэше apollo-client. Он извлекает список products
и список images
для каждого продукта
const GET_PRODUCTS_QUERY = gql`
query Products($cursor: String, $query: String, $imageCount: Int = 100) {
products(first: 9, after: $cursor, query: $query) {
edges {
cursor
node {
id
selected @client
title
description
images(first: $imageCount) {
edges {
node {
id
originalSrc
selected @client
}
}
}
}
}
}
}
`;
Возвращенные данные используются для визуализации пользовательского интерфейса, в котором пользователь может выбрать любое количество продуктов. Я использую следующую мутацию, чтобы пометить продукт как выбранный
(_root, variables, { getCacheKey, cache }) => {
const id = getCacheKey({
__typename: "Product",
id: variables.id
});
const fragment = gql`
fragment toggleSelected on Product {
selected,
}
`;
const data = cache.readFragment({
id,
fragment
});
cache.writeData({
id,
data: {
...data,
selected: !data.selected
}
});
Вышеуказанная мутация работает нормально, и в соответствующем product
в кэше появляется флаг selected
. Теперь у меня есть требование, чтобы при выборе продукта его первое изображение также отмечалось как выбранное без каких-либо действий со стороны пользователя. В этом случае у меня нет идентификатора изображения со мной. Я просто знаю, что каким бы ни было первое изображение выбранного товара, оно должно быть помечено как выбранное. Как я могу go добиться этого? Если бы у меня был идентификатор, думаю, я смогу создать фрагмент объекта Image и его мутировать.