diff --git a/package.json b/package.json index 226209634..5af38ae51 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hawk.so", - "version": "1.3.1", + "version": "1.4.0", "private": true, "packageManager": "yarn@4.18.0", "scripts": { diff --git a/schema.graphql b/schema.graphql index 34e34b328..1d71bbed6 100644 --- a/schema.graphql +++ b/schema.graphql @@ -392,6 +392,18 @@ type Event { """Release data""" release: Release + """Release of the original event, regardless of the selected repetition""" + firstSeenInRelease: String + + """Whether the event first appeared in the latest valid registered project release""" + isNew: Boolean! + + """Release in which the event was resolved""" + resolvedInRelease: String + + """Release in which the event regressed""" + regressionInRelease: String + """Event repetitions portion""" repetitionsPortion(cursor: String = null, limit: Int = 10): RepetitionsPortion! @@ -1095,6 +1107,7 @@ type Project { """User who created project""" uidAdded: User! + """Project's Event""" event(eventId: ID!, originalEventId: ID!): Event diff --git a/src/api/events/index.ts b/src/api/events/index.ts index c3e6d8282..bb10bb10f 100644 --- a/src/api/events/index.ts +++ b/src/api/events/index.ts @@ -70,7 +70,7 @@ export const getEvent = withDemoMock( originalEventId, })).project; - if (!project) { + if (!project?.event) { return null; } diff --git a/src/api/fragments.ts b/src/api/fragments.ts index a3b0b4d81..4aba5673b 100644 --- a/src/api/fragments.ts +++ b/src/api/fragments.ts @@ -55,6 +55,10 @@ export const EVENT_FRAGMENT = ` timestamp originalTimestamp originalEventId + firstSeenInRelease + isNew + resolvedInRelease + regressionInRelease payload { title type diff --git a/src/api/projects/index.js b/src/api/projects/index.js index 49b8d4a51..66f2a5032 100644 --- a/src/api/projects/index.js +++ b/src/api/projects/index.js @@ -288,13 +288,14 @@ export const fetchChartData = withDemoMock( */ export const fetchProjectReleases = withDemoMock( async function fetchProjectReleases(projectId) { - const response = await api.call(QUERY_PROJECT_RELEASES, { projectId }); - - if (response.errors?.length) { - response.errors.forEach(console.error); - } + const response = await api.call(QUERY_PROJECT_RELEASES, { projectId }, undefined, { + allowErrors: true, + }); - return response.data.project.releases; + /* + * GraphQL may return usable release data alongside field-level errors. + */ + return response.data?.project?.releases ?? []; }, '/src/api/projects/mocks/fetchProjectReleases.mock.ts' ); diff --git a/src/components/event/EventHeader.vue b/src/components/event/EventHeader.vue index 652d6a469..cc28abda0 100644 --- a/src/components/event/EventHeader.vue +++ b/src/components/event/EventHeader.vue @@ -55,7 +55,14 @@