From 9ec0e1869d6d3e56bf8c442b8a188e9f81eda1b3 Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Sun, 22 Sep 2024 03:04:03 +0200 Subject: [PATCH] Handle cache update when creating new global metadata Can't be handled exactly the same way as the other meta fields --- src/lib/requests/RequestManager.ts | 31 +++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/src/lib/requests/RequestManager.ts b/src/lib/requests/RequestManager.ts index 743ed471..b2cd4650 100644 --- a/src/lib/requests/RequestManager.ts +++ b/src/lib/requests/RequestManager.ts @@ -1108,15 +1108,32 @@ export class RequestManager { }, update(cache, { data }) { cache.modify({ - id: cache.identify({ __typename: 'GlobalMetaType', key }), fields: { - meta(existingMetas, { readField }) { - return updateMetadata(key, existingMetas, readField, () => - cache.writeFragment({ - data: data!.setGlobalMeta!.meta, - fragment: GLOBAL_METADATA, - }), + metas(existingMetas, { readField }) { + if (!existingMetas) { + return existingMetas; + } + + if (!data?.setGlobalMeta) { + return existingMetas; + } + + const exists = existingMetas.nodes.some( + (meta: Reference) => readField('key', meta) === key, ); + if (exists) { + return existingMetas; + } + + const newMetaRef = cache.writeFragment({ + data: data!.setGlobalMeta.meta, + fragment: GLOBAL_METADATA, + }); + + return { + ...existingMetas, + nodes: [...existingMetas.nodes, newMetaRef], + }; }, }, });