/// import { ApiPayload, ComponentPayload, GqlError, MutationError, SdkError, UpdateCompassComponent, UpdateCompassComponentInput, UpdateComponentOptions, } from '@atlassian/forge-graphql-types'; import { CompassRequests } from '../../compass-requests'; import { hasChanged, mapGqlErrors, mapMutationErrors, parsingResponseError, } from '../../helpers'; import { fgqlActionSubjects, fgqlActions, fgqlSources, } from '../../helpers/analyticTypes'; declare module '../../compass-requests' { interface CompassRequests { updateBaseComponent( input: UpdateCompassComponentInput & { options?: UpdateComponentOptions }, ): Promise>; } } CompassRequests.prototype.updateBaseComponent = async function updateBaseComponent(this: CompassRequests, input) { let component = null; let gqlErrors: Array; let mutationErrors: Array; let errorsResp: Array = []; let data; try { const { id, name, description, ownerId, fields, customFields } = input; const { data: componentData } = await this.getComponent({ componentId: id, options: { includeCustomFields: true, }, }); const currentComponent = componentData.component; const analyticHeaders: Record = {}; if (input.options?.updatedFromFile) { const updatedFromFileMetadata = { action: fgqlActions.updated, actionSubject: fgqlActionSubjects.component, actionSubjectId: id, source: fgqlSources.configAsCode, } as Record; if (hasChanged(name, currentComponent?.name)) { updatedFromFileMetadata.name = 'true'; } if (hasChanged(description, currentComponent?.description)) { updatedFromFileMetadata.description = 'true'; } if (hasChanged(ownerId, currentComponent?.ownerId)) { updatedFromFileMetadata.ownerId = 'true'; } if (hasChanged(fields, currentComponent?.fields)) { updatedFromFileMetadata.fields = 'true'; } if (hasChanged(customFields, currentComponent?.customFields)) { updatedFromFileMetadata.customFields = 'true'; } analyticHeaders.updatedFromFile = JSON.stringify( updatedFromFileMetadata, ); } const resp = await this.api.requestGraph( UpdateCompassComponent, { input }, 'updateBaseComponent', analyticHeaders, ); ({ errors: gqlErrors, data } = await resp.json()); errorsResp = errorsResp.concat(mapGqlErrors(gqlErrors)); ({ updateComponent: { errors: mutationErrors, componentDetails: component, }, } = data.compass); errorsResp = errorsResp.concat(mapMutationErrors(mutationErrors)); } catch (e) { if (errorsResp.length === 0) { errorsResp.push(parsingResponseError(e)); } } return { errors: errorsResp, success: errorsResp.length === 0, data: { component }, }; };