Link measures to third parties

Add a many-to-many relationship between measures and third parties,
surfaced as a measures tab on the third party detail page and a third
parties tab on the measure detail page. Each side gets a paginated
list with a link/unlink dialog.

Also remove the right-hand drawer on the measure detail page and
expose the state as a badge in the page header, mirroring how the
compliance page surfaces its active flag.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
This commit is contained in:
Sacha Al Himdani
2026-05-22 16:07:48 +02:00
parent b6b1e801b1
commit 6dfdd7ca49
35 changed files with 2109 additions and 54 deletions

View File

@@ -95,6 +95,14 @@ type Measure implements Node {
filter: DocumentFilter
): DocumentConnection! @goField(forceResolver: true)
thirdParties(
first: Int
after: CursorKey
last: Int
before: CursorKey
orderBy: ThirdPartyOrder
): ThirdPartyConnection! @goField(forceResolver: true)
createdAt: Datetime!
updatedAt: Datetime!
@@ -126,6 +134,12 @@ extend type Mutation {
deleteMeasureDocumentMapping(
input: DeleteMeasureDocumentMappingInput!
): DeleteMeasureDocumentMappingPayload!
createMeasureThirdPartyMapping(
input: CreateMeasureThirdPartyMappingInput!
): CreateMeasureThirdPartyMappingPayload!
deleteMeasureThirdPartyMapping(
input: DeleteMeasureThirdPartyMappingInput!
): DeleteMeasureThirdPartyMappingPayload!
}
input CreateMeasureInput {
@@ -187,3 +201,23 @@ type DeleteMeasureDocumentMappingPayload {
deletedMeasureId: ID!
deletedDocumentId: ID!
}
input CreateMeasureThirdPartyMappingInput {
measureId: ID!
thirdPartyId: ID!
}
input DeleteMeasureThirdPartyMappingInput {
measureId: ID!
thirdPartyId: ID!
}
type CreateMeasureThirdPartyMappingPayload {
measureEdge: MeasureEdge!
thirdPartyEdge: ThirdPartyEdge!
}
type DeleteMeasureThirdPartyMappingPayload {
deletedMeasureId: ID!
deletedThirdPartyId: ID!
}