diff options
Diffstat (limited to 'app/assets/javascripts/graphql_shared')
-rw-r--r-- | app/assets/javascripts/graphql_shared/issuable_client.js | 41 | ||||
-rw-r--r-- | app/assets/javascripts/graphql_shared/possible_types.json | 3 |
2 files changed, 42 insertions, 2 deletions
diff --git a/app/assets/javascripts/graphql_shared/issuable_client.js b/app/assets/javascripts/graphql_shared/issuable_client.js index 15e7ef7d62c..01cc2fc3018 100644 --- a/app/assets/javascripts/graphql_shared/issuable_client.js +++ b/app/assets/javascripts/graphql_shared/issuable_client.js @@ -5,6 +5,7 @@ import { concatPagination } from '@apollo/client/utilities'; import getIssueStateQuery from '~/issues/show/queries/get_issue_state.query.graphql'; import createDefaultClient from '~/lib/graphql'; import typeDefs from '~/work_items/graphql/typedefs.graphql'; +import { WIDGET_TYPE_NOTES } from '~/work_items/constants'; export const config = { typeDefs, @@ -22,10 +23,30 @@ export const config = { }, }, }, + WorkItemWidgetNotes: { + fields: { + // If we add any key args, the discussions field becomes discussions({"filter":"ONLY_ACTIVITY","first":10}) and + // kills any possibility to handle it on the widget level without hardcoding a string. + discussions: { + keyArgs: false, + }, + }, + }, + WorkItemWidgetProgress: { + fields: { + progress: { + // We want to show null progress as 0 as per https://gitlab.com/gitlab-org/gitlab/-/issues/386117 + read(existing) { + return existing === null ? 0 : existing; + }, + }, + }, + }, WorkItem: { fields: { + // widgets policy because otherwise the subscriptions invalidate the cache widgets: { - merge(existing = [], incoming) { + merge(existing = [], incoming, context) { if (existing.length === 0) { return incoming; } @@ -33,6 +54,24 @@ export const config = { const incomingWidget = incoming.find( (w) => w.type && w.type === existingWidget.type, ); + // We don't want to override existing notes with empty widget on work item updates + if (incomingWidget?.type === WIDGET_TYPE_NOTES && !context.variables.pageSize) { + return existingWidget; + } + // we want to concat next page of discussions to the existing ones + if (incomingWidget?.type === WIDGET_TYPE_NOTES && context.variables.after) { + // concatPagination won't work because we were placing new widget here so we have to do this manually + return { + ...incomingWidget, + discussions: { + ...incomingWidget.discussions, + nodes: [ + ...existingWidget.discussions.nodes, + ...incomingWidget.discussions.nodes, + ], + }, + }; + } return incomingWidget || existingWidget; }); }, diff --git a/app/assets/javascripts/graphql_shared/possible_types.json b/app/assets/javascripts/graphql_shared/possible_types.json index 5467105ac3c..a622b342c0a 100644 --- a/app/assets/javascripts/graphql_shared/possible_types.json +++ b/app/assets/javascripts/graphql_shared/possible_types.json @@ -153,8 +153,9 @@ "WorkItemWidgetMilestone", "WorkItemWidgetNotes", "WorkItemWidgetProgress", + "WorkItemWidgetRequirementLegacy", "WorkItemWidgetStartAndDueDate", "WorkItemWidgetStatus", "WorkItemWidgetWeight" ] -}
\ No newline at end of file +} |