diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-09-19 01:45:44 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-09-19 01:45:44 +0000 |
commit | 85dc423f7090da0a52c73eb66faf22ddb20efff9 (patch) | |
tree | 9160f299afd8c80c038f08e1545be119f5e3f1e1 /app/assets/javascripts/releases/util.js | |
parent | 15c2c8c66dbe422588e5411eee7e68f1fa440bb8 (diff) | |
download | gitlab-ce-85dc423f7090da0a52c73eb66faf22ddb20efff9.tar.gz |
Add latest changes from gitlab-org/gitlab@13-4-stable-ee
Diffstat (limited to 'app/assets/javascripts/releases/util.js')
-rw-r--r-- | app/assets/javascripts/releases/util.js | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/app/assets/javascripts/releases/util.js b/app/assets/javascripts/releases/util.js index 842a423b142..d7fac7a9b65 100644 --- a/app/assets/javascripts/releases/util.js +++ b/app/assets/javascripts/releases/util.js @@ -1,3 +1,6 @@ +import { pick } from 'lodash'; +import createGqClient, { fetchPolicies } from '~/lib/graphql'; +import { truncateSha } from '~/lib/utils/text_utility'; import { convertObjectPropsToCamelCase, convertObjectPropsToSnakeCase, @@ -39,3 +42,89 @@ export const apiJsonToRelease = json => { return release; }; + +export const gqClient = createGqClient({}, { fetchPolicy: fetchPolicies.NO_CACHE }); + +const convertScalarProperties = graphQLRelease => + pick(graphQLRelease, [ + 'name', + 'tagName', + 'tagPath', + 'descriptionHtml', + 'releasedAt', + 'upcomingRelease', + ]); + +const convertAssets = graphQLRelease => ({ + assets: { + count: graphQLRelease.assets.count, + sources: [...graphQLRelease.assets.sources.nodes], + links: graphQLRelease.assets.links.nodes.map(l => ({ + ...l, + linkType: l.linkType?.toLowerCase(), + })), + }, +}); + +const convertEvidences = graphQLRelease => ({ + evidences: graphQLRelease.evidences.nodes.map(e => e), +}); + +const convertLinks = graphQLRelease => ({ + _links: { + ...graphQLRelease.links, + self: graphQLRelease.links?.selfUrl, + }, +}); + +const convertCommit = graphQLRelease => { + if (!graphQLRelease.commit) { + return {}; + } + + return { + commit: { + shortId: truncateSha(graphQLRelease.commit.sha), + title: graphQLRelease.commit.title, + }, + commitPath: graphQLRelease.commit.webUrl, + }; +}; + +const convertAuthor = graphQLRelease => ({ author: graphQLRelease.author }); + +const convertMilestones = graphQLRelease => ({ + milestones: graphQLRelease.milestones.nodes.map(m => ({ + ...m, + webUrl: m.webPath, + webPath: undefined, + issueStats: { + total: m.stats.totalIssuesCount, + closed: m.stats.closedIssuesCount, + }, + stats: undefined, + })), +}); + +/** + * Converts the response from the GraphQL endpoint into the + * same shape as is returned from the Releases REST API. + * + * This allows the release components to use the response + * from either endpoint interchangeably. + * + * @param response The response received from the GraphQL endpoint + */ +export const convertGraphQLResponse = response => { + const releases = response.data.project.releases.nodes.map(r => ({ + ...convertScalarProperties(r), + ...convertAssets(r), + ...convertEvidences(r), + ...convertLinks(r), + ...convertCommit(r), + ...convertAuthor(r), + ...convertMilestones(r), + })); + + return { data: releases }; +}; |