Estoy tratando de usar la función de combinación para cada recuperación (filtrando una lista), pero el valor existente siempre está indefinido.
Escriba Política de consulta que devuelva y filtre una lista:
Query: { fields: { accounts: { keyArgs: false, merge( existing, incoming, {args: {page = 1, pageSize = 20}, readField} ) { const offset = (page - 1) * pageSize; if (!existing?.items) { return incoming; } const mergedItems = [...existing.items]; const existingIdSet = new Set( mergedItems.map((item) => readField('externalReferenceCode', item) ) ); const incomingItems = [...incoming.items].filter( (item) => !existingIdSet.has(readField('externalReferenceCode', item)) ); for (let i = 0; i < incomingItems.length; ++i) { mergedItems[offset + i] = incomingItems[i]; } return { ...existing, items: mergedItems, }; }, read(existing, {args: {page = 1, pageSize = 20}}) { const offset = (page - 1) * pageSize; if (!existing) { return; } return { ...existing, items: existing.items?.slice(offset, offset + pageSize), }; }, }, }, },¿Estoy haciendo algo mal? Al verificar mediante la función de lectura, los valores pasan como se esperaba, pero cuando se llama a una recuperación, se vacían.
Para fusionar, el primero es el valor existente. Y en lectura, el valor impreso era el valor existente.
typePolicy.js:34 merge undefined {__typename: 'AccountPage', items: Array(20), totalCount: 235} typePolicy.js:108 read {__typename: 'AccountPage', items: Array(20), totalCount: 235} typePolicy.js:34 merge undefined {__typename: 'AccountPage', items: Array(2), totalCount: 2} typePolicy.js:108 read {__typename: 'AccountPage', items: Array(2), totalCount: 2}Y esta es la consulta:
const GET_ACCOUNTS = gql` query getAccounts($filter: String, $pageSize: Int = 20, $page: Int = 1) { accounts(filter: $filter, pageSize: $pageSize, page: $page) { items { id externalReferenceCode name } totalCount } } `;