summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/jobs/components/table/graphql/cache_config.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/jobs/components/table/graphql/cache_config.js')
-rw-r--r--app/assets/javascripts/jobs/components/table/graphql/cache_config.js30
1 files changed, 27 insertions, 3 deletions
diff --git a/app/assets/javascripts/jobs/components/table/graphql/cache_config.js b/app/assets/javascripts/jobs/components/table/graphql/cache_config.js
index b9946925c95..8bcd7ffd10f 100644
--- a/app/assets/javascripts/jobs/components/table/graphql/cache_config.js
+++ b/app/assets/javascripts/jobs/components/table/graphql/cache_config.js
@@ -13,16 +13,40 @@ export default {
merge(existing = {}, incoming, { args = {} }) {
let nodes;
+ const areNodesEqual = isEqual(existing.nodes, incoming.nodes);
+ const statuses = Array.isArray(args.statuses) ? [...args.statuses] : args.statuses;
+ const { pageInfo } = incoming;
+
if (Object.keys(existing).length !== 0 && isEqual(existing?.statuses, args?.statuses)) {
- nodes = [...existing.nodes, ...incoming.nodes];
+ if (areNodesEqual) {
+ if (incoming.pageInfo.hasNextPage) {
+ nodes = [...existing.nodes, ...incoming.nodes];
+ } else {
+ nodes = [...incoming.nodes];
+ }
+ } else {
+ if (!existing.pageInfo?.hasNextPage) {
+ nodes = [...incoming.nodes];
+
+ return {
+ nodes,
+ statuses,
+ pageInfo,
+ count: incoming.count,
+ };
+ }
+
+ nodes = [...existing.nodes, ...incoming.nodes];
+ }
} else {
nodes = [...incoming.nodes];
}
return {
nodes,
- statuses: Array.isArray(args.statuses) ? [...args.statuses] : args.statuses,
- pageInfo: incoming.pageInfo,
+ statuses,
+ pageInfo,
+ count: incoming.count,
};
},
},