muerwre.github.io/api/_content/query/2vMf3x3doM.json
muerwre 1f068b4685 commit 4247aff7889ba00c575befe5f73932d9eedbad0e
Author: Fedor Katurov <gotham48@gmail.com>
Date:   Thu Nov 3 20:46:37 2022 +0600

    fixed buttons placement
2022-11-03 14:48:34 +00:00

1 line
No EOL
41 KiB
JSON

{"_path":"/graphql/apollo-client-pagination","_dir":"graphql","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Apollo Client Pagination","description":"Say, we have gql response like this and we wan't to have pagination with it. Let's merge it as it specified in official documentation","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say, we have "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gql"}]},{"type":"text","value":" response like this and we wan't to have pagination with it. Let's merge it as it specified in "},{"type":"element","tag":"a","props":{"href":"https://www.apollographql.com/docs/react/caching/cache-field-behavior/#the-merge-function","rel":["nofollow"]},"children":[{"type":"text","value":"official documentation"}]}]},{"type":"element","tag":"code","props":{"code":"query listItems(\n filter: Filter, \n sort: String,\n limit: Number,\n offset: Number,\n): ItemList!\n\ninput Filter {\n name: String!\n type: String!\n}\n\ntype ItemList {\n items: [Item!]!\n totalCount: Int!\n}\n","language":"graphql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"query listItems(\n filter: Filter, \n sort: String,\n limit: Number,\n offset: Number,\n): ItemList!\n\ninput Filter {\n name: String!\n type: String!\n}\n\ntype ItemList {\n items: [Item!]!\n totalCount: Int!\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We will setup "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"ApolloClient"}]},{"type":"text","value":" with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"typePolicies"}]},{"type":"text","value":" to merge incoming data in cache:"}]},{"type":"element","tag":"code","props":{"code":"import { ApolloClient, InMemoryCache } from '@apollo/client';\n\nconst client = new ApolloClient({\n // ...\n cache: new InMemoryCache({ typePolicies }),\n // ...\n});\n\nexport const typePolicies: TypePolicies = {\n Query: {\n fields: {\n // query name\n listItems: {\n // apollo will serialize and use keyArgs as unique\n // identifier in cache for every query\n // consider choosing the right fields, \n // i.e. limit and offset won't work here\n keyArgs: [\n 'sort', // primitive type\n 'filter', ['name', 'type'] // nested fields of `filter`\n ],\n merge: mergeItemsWithTotalCount,\n },\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { ApolloClient, InMemoryCache } from '@apollo/client';\n\nconst client = new ApolloClient({\n // ...\n cache: new InMemoryCache({ typePolicies }),\n // ...\n});\n\nexport const typePolicies: TypePolicies = {\n Query: {\n fields: {\n // query name\n listItems: {\n // apollo will serialize and use keyArgs as unique\n // identifier in cache for every query\n // consider choosing the right fields, \n // i.e. limit and offset won't work here\n keyArgs: [\n 'sort', // primitive type\n 'filter', ['name', 'type'] // nested fields of `filter`\n ],\n merge: mergeItemsWithTotalCount,\n },\n }\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We will need merge function "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"mergeItemsWithTotalCount"}]},{"type":"text","value":", which will join results of query and cached data for specific key:"}]},{"type":"element","tag":"code","props":{"code":"/** merges all sources with { items: unknown[], totalCount: number } */\nconst mergeItemsWithTotalCount = (existing, incoming, { args }) => {\n // no existing data\n if (!existing || !args?.offset || args.offset < existing.length) {\n return incoming || [];\n }\n\n // If hook was called multiple times\n if (existing?.items?.length && args?.offset < existing.items.length) {\n return existing || [];\n }\n\n // merge cache and incoming data\n const items = [...(existing?.items || []), ...(incoming?.items || [])];\n\n // apply latest result for totalCount\n const totalCount = incoming?.totalCount || existing?.totalCount;\n\n return {\n ...(incoming || existing || {}),\n items,\n totalCount,\n };\n };\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"/** merges all sources with { items: unknown[], totalCount: number } */\nconst mergeItemsWithTotalCount = (existing, incoming, { args }) => {\n // no existing data\n if (!existing || !args?.offset || args.offset < existing.length) {\n return incoming || [];\n }\n\n // If hook was called multiple times\n if (existing?.items?.length && args?.offset < existing.items.length) {\n return existing || [];\n }\n\n // merge cache and incoming data\n const items = [...(existing?.items || []), ...(incoming?.items || [])];\n\n // apply latest result for totalCount\n const totalCount = incoming?.totalCount || existing?.totalCount;\n\n return {\n ...(incoming || existing || {}),\n items,\n totalCount,\n };\n };\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say, we have "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gql"}]},{"type":"text","value":" response like this and we wan't to have pagination with it. Let's merge it as it specified in "},{"type":"element","tag":"a","props":{"href":"https://www.apollographql.com/docs/react/caching/cache-field-behavior/#the-merge-function","rel":["nofollow"]},"children":[{"type":"text","value":"official documentation"}]}]},{"type":"element","tag":"code","props":{"code":"query listItems(\n filter: Filter, \n sort: String,\n limit: Number,\n offset: Number,\n): ItemList!\n\ninput Filter {\n name: String!\n type: String!\n}\n\ntype ItemList {\n items: [Item!]!\n totalCount: Int!\n}\n","language":"graphql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"query"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfd68a"},"children":[{"type":"text","value":"listItems"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9cf198"},"children":[{"type":"text","value":"filter"}]},{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-2f3749"},"children":[{"type":"text","value":"Filter"}]},{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9cf198"},"children":[{"type":"text","value":"sort"}]},{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-2f3749"},"children":[{"type":"text","value":"String"}]},{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9cf198"},"children":[{"type":"text","value":"limit"}]},{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-2f3749"},"children":[{"type":"text","value":"Number"}]},{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9cf198"},"children":[{"type":"text","value":"offset"}]},{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-2f3749"},"children":[{"type":"text","value":"Number"}]},{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":"): "}]},{"type":"element","tag":"span","props":{"class":"ct-dfd68a"},"children":[{"type":"text","value":"ItemList"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"input"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-46a8c1"},"children":[{"type":"text","value":"Filter"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9cf198"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-2f3749"},"children":[{"type":"text","value":"String"}]},{"type":"element","tag":"span","props":{"class":"ct-db8e9b"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9cf198"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-2f3749"},"children":[{"type":"text","value":"String"}]},{"type":"element","tag":"span","props":{"class":"ct-db8e9b"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-46a8c1"},"children":[{"type":"text","value":"ItemList"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9cf198"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":": ["}]},{"type":"element","tag":"span","props":{"class":"ct-2f3749"},"children":[{"type":"text","value":"Item"}]},{"type":"element","tag":"span","props":{"class":"ct-db8e9b"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":"]"}]},{"type":"element","tag":"span","props":{"class":"ct-db8e9b"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9cf198"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-2f3749"},"children":[{"type":"text","value":"Int"}]},{"type":"element","tag":"span","props":{"class":"ct-db8e9b"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We will setup "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"ApolloClient"}]},{"type":"text","value":" with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"typePolicies"}]},{"type":"text","value":" to merge incoming data in cache:"}]},{"type":"element","tag":"code","props":{"code":"import { ApolloClient, InMemoryCache } from '@apollo/client';\n\nconst client = new ApolloClient({\n // ...\n cache: new InMemoryCache({ typePolicies }),\n // ...\n});\n\nexport const typePolicies: TypePolicies = {\n Query: {\n fields: {\n // query name\n listItems: {\n // apollo will serialize and use keyArgs as unique\n // identifier in cache for every query\n // consider choosing the right fields, \n // i.e. limit and offset won't work here\n keyArgs: [\n 'sort', // primitive type\n 'filter', ['name', 'type'] // nested fields of `filter`\n ],\n merge: mergeItemsWithTotalCount,\n },\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"ApolloClient"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"InMemoryCache"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad6806"},"children":[{"type":"text","value":"'@apollo/client'"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6ee42b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-61fbaf"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfd68a"},"children":[{"type":"text","value":"ApolloClient"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-465298"},"children":[{"type":"text","value":"// ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" cache: "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfd68a"},"children":[{"type":"text","value":"InMemoryCache"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":"({ "}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"typePolicies"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-465298"},"children":[{"type":"text","value":"// ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":"});"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6ee42b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-61fbaf"},"children":[{"type":"text","value":"typePolicies"}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a69b4b"},"children":[{"type":"text","value":"TypePolicies"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" Query: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" fields: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-465298"},"children":[{"type":"text","value":"// query name"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" listItems: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-465298"},"children":[{"type":"text","value":"// apollo will serialize and use keyArgs as unique"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-465298"},"children":[{"type":"text","value":"// identifier in cache for every query"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-465298"},"children":[{"type":"text","value":"// consider choosing the right fields, "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-465298"},"children":[{"type":"text","value":"// i.e. limit and offset won't work here"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" keyArgs: ["}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad6806"},"children":[{"type":"text","value":"'sort'"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-465298"},"children":[{"type":"text","value":"// primitive type"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad6806"},"children":[{"type":"text","value":"'filter'"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":", ["}]},{"type":"element","tag":"span","props":{"class":"ct-ad6806"},"children":[{"type":"text","value":"'name'"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-ad6806"},"children":[{"type":"text","value":"'type'"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":"] "}]},{"type":"element","tag":"span","props":{"class":"ct-465298"},"children":[{"type":"text","value":"// nested fields of `filter`"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" ],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" merge: "}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"mergeItemsWithTotalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We will need merge function "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"mergeItemsWithTotalCount"}]},{"type":"text","value":", which will join results of query and cached data for specific key:"}]},{"type":"element","tag":"code","props":{"code":"/** merges all sources with { items: unknown[], totalCount: number } */\nconst mergeItemsWithTotalCount = (existing, incoming, { args }) => {\n // no existing data\n if (!existing || !args?.offset || args.offset < existing.length) {\n return incoming || [];\n }\n\n // If hook was called multiple times\n if (existing?.items?.length && args?.offset < existing.items.length) {\n return existing || [];\n }\n\n // merge cache and incoming data\n const items = [...(existing?.items || []), ...(incoming?.items || [])];\n\n // apply latest result for totalCount\n const totalCount = incoming?.totalCount || existing?.totalCount;\n\n return {\n ...(incoming || existing || {}),\n items,\n totalCount,\n };\n };\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-465298"},"children":[{"type":"text","value":"/** merges all sources with { items: unknown[], totalCount: number } */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-118109"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-39d7a7"},"children":[{"type":"text","value":"mergeItemsWithTotalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-db8e9b"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-9cf198"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-9cf198"},"children":[{"type":"text","value":"incoming"}]},{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":", { "}]},{"type":"element","tag":"span","props":{"class":"ct-9cf198"},"children":[{"type":"text","value":"args"}]},{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":" }) "}]},{"type":"element","tag":"span","props":{"class":"ct-118109"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-4338bd"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-465298"},"children":[{"type":"text","value":"// no existing data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"args"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"offset"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"args"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"offset"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"existing"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"incoming"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" [];"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-465298"},"children":[{"type":"text","value":"// If hook was called multiple times"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":"?."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" [];"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-465298"},"children":[{"type":"text","value":"// merge cache and incoming data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6ee42b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-61fbaf"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" ["}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-465298"},"children":[{"type":"text","value":"// apply latest result for totalCount"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6ee42b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-61fbaf"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"incoming"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"incoming"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ab0cdc"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-757263"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-108737"},"children":[{"type":"text","value":" };"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-39d7a7{color:#D2A8FF}.ct-118109{color:#FF7B72}.ct-a69b4b{color:#FFA657}.ct-465298{color:#8B949E}.ct-61fbaf{color:#79C0FF}.ct-6ee42b{color:#FF7B72}.ct-ad6806{color:#A5D6FF}.ct-757263{color:#C9D1D9}.ct-db8e9b{color:#FF7B72}.ct-46a8c1{color:#79C0FF}.ct-2f3749{color:#79C0FF}.ct-9cf198{color:#FFA657}.ct-4338bd{color:#C9D1D9}.ct-dfd68a{color:#D2A8FF}.ct-108737{color:#C9D1D9}.ct-ab0cdc{color:#FF7B72}.light .ct-ab0cdc{color:#859900}.light .ct-108737{color:#657B83}.light .ct-dfd68a{color:#268BD2}.light .ct-4338bd{color:#657B83}.light .ct-9cf198{color:#657B83}.light .ct-2f3749{color:#859900}.light .ct-46a8c1{color:#859900}.light .ct-db8e9b{color:#859900}.light .ct-757263{color:#268BD2}.light .ct-ad6806{color:#2AA198}.light .ct-6ee42b{color:#073642}.light .ct-61fbaf{color:#268BD2}.light .ct-465298{color:#93A1A1}.light .ct-a69b4b{color:#268BD2}.light .ct-118109{color:#073642}.light .ct-39d7a7{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:GraphQL:Apollo Client pagination.md","_source":"content","_file":"GraphQL/Apollo Client pagination.md","_extension":"md"}