From 1c2ee10ce7a32df892604846279c7e199ce0ccea Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Wed, 22 May 2019 21:46:43 +0200 Subject: graphql: Implement `Authored` whenever possible webui: Use a fragment for Authored nodes --- bug/bug.go | 3 +++ bug/op_add_comment.go | 3 +++ bug/op_create.go | 3 +++ bug/op_label_change.go | 3 +++ bug/op_set_status.go | 3 +++ bug/op_set_title.go | 3 +++ bug/snapshot.go | 3 +++ graphql/graph/gen_graph.go | 40 ++++++++++++++++++++++++++-------------- graphql/schema/bug.graphql | 3 +-- graphql/schema/timeline.graphql | 10 +++++----- graphql/schema/types.graphql | 2 +- webui/src/Author.js | 12 ++++++++++++ webui/src/bug/Bug.js | 7 ++----- webui/src/bug/LabelChange.js | 8 +++----- webui/src/bug/Message.js | 18 ++++++------------ webui/src/bug/SetStatus.js | 8 +++----- webui/src/bug/SetTitle.js | 8 +++----- webui/src/list/BugRow.js | 8 ++++---- 18 files changed, 87 insertions(+), 58 deletions(-) diff --git a/bug/bug.go b/bug/bug.go index f1bd1114..0604d11d 100644 --- a/bug/bug.go +++ b/bug/bug.go @@ -681,3 +681,6 @@ func (bug *Bug) Compile() Snapshot { return snap } + +// Sign post method for gqlgen +func (bug *Bug) IsAuthored() {} diff --git a/bug/op_add_comment.go b/bug/op_add_comment.go index 8cde20e8..59ea08e0 100644 --- a/bug/op_add_comment.go +++ b/bug/op_add_comment.go @@ -149,3 +149,6 @@ func AddCommentWithFiles(b Interface, author identity.Interface, unixTime int64, b.Append(addCommentOp) return addCommentOp, nil } + +// Sign post method for gqlgen +func (item *AddCommentTimelineItem) IsAuthored() {} diff --git a/bug/op_create.go b/bug/op_create.go index f3757f89..e0e8154b 100644 --- a/bug/op_create.go +++ b/bug/op_create.go @@ -173,3 +173,6 @@ func CreateWithFiles(author identity.Interface, unixTime int64, title, message s return newBug, createOp, nil } + +// Sign post method for gqlgen +func (item *CreateTimelineItem) IsAuthored() {} diff --git a/bug/op_label_change.go b/bug/op_label_change.go index 0e7929b7..c5b3765d 100644 --- a/bug/op_label_change.go +++ b/bug/op_label_change.go @@ -303,3 +303,6 @@ func (l LabelChangeResult) String() string { panic(fmt.Sprintf("unknown label change status %v", l.Status)) } } + +// Sign post method for gqlgen +func (item *LabelChangeTimelineItem) IsAuthored() {} diff --git a/bug/op_set_status.go b/bug/op_set_status.go index 57d4cf22..de7b8526 100644 --- a/bug/op_set_status.go +++ b/bug/op_set_status.go @@ -143,3 +143,6 @@ func Close(b Interface, author identity.Interface, unixTime int64) (*SetStatusOp b.Append(op) return op, nil } + +// Sign post method for gqlgen +func (item *SetStatusTimelineItem) IsAuthored() {} diff --git a/bug/op_set_title.go b/bug/op_set_title.go index ca27adee..dce06014 100644 --- a/bug/op_set_title.go +++ b/bug/op_set_title.go @@ -178,3 +178,6 @@ func SetTitle(b Interface, author identity.Interface, unixTime int64, title stri b.Append(setTitleOp) return setTitleOp, nil } + +// Sign post method for gqlgen +func (item *SetTitleTimelineItem) IsAuthored() {} diff --git a/bug/snapshot.go b/bug/snapshot.go index 53f6873a..a4661b14 100644 --- a/bug/snapshot.go +++ b/bug/snapshot.go @@ -86,3 +86,6 @@ func (snap *Snapshot) addParticipant(participant identity.Interface) { snap.Participants = append(snap.Participants, participant) } + +// Sign post method for gqlgen +func (snap *Snapshot) IsAuthored() {} diff --git a/graphql/graph/gen_graph.go b/graphql/graph/gen_graph.go index 6365d597..8b9221da 100644 --- a/graphql/graph/gen_graph.go +++ b/graphql/graph/gen_graph.go @@ -1601,7 +1601,7 @@ enum Status { CLOSED } -type Bug { +type Bug implements Authored { """The identifier for this bug""" id: String! """The human version (truncated) identifier for this bug""" @@ -1690,7 +1690,6 @@ type BugEdge { """The item at the end of the edge.""" node: Bug! } - `}, &ast.Source{Name: "schema/identity.graphql", Input: `"""Represents an identity""" type Identity { @@ -1911,7 +1910,7 @@ type TimelineItemEdge { # Items """CreateTimelineItem is a TimelineItem that represent the creation of a bug and its message edition history""" -type CreateTimelineItem implements TimelineItem { +type CreateTimelineItem implements TimelineItem & Authored { """The hash of the source operation""" hash: Hash! author: Identity! @@ -1925,7 +1924,7 @@ type CreateTimelineItem implements TimelineItem { } """AddCommentTimelineItem is a TimelineItem that represent a Comment and its edition history""" -type AddCommentTimelineItem implements TimelineItem { +type AddCommentTimelineItem implements TimelineItem & Authored { """The hash of the source operation""" hash: Hash! author: Identity! @@ -1939,7 +1938,7 @@ type AddCommentTimelineItem implements TimelineItem { } """LabelChangeTimelineItem is a TimelineItem that represent a change in the labels of a bug""" -type LabelChangeTimelineItem implements TimelineItem { +type LabelChangeTimelineItem implements TimelineItem & Authored { """The hash of the source operation""" hash: Hash! author: Identity! @@ -1949,7 +1948,7 @@ type LabelChangeTimelineItem implements TimelineItem { } """SetStatusTimelineItem is a TimelineItem that represent a change in the status of a bug""" -type SetStatusTimelineItem implements TimelineItem { +type SetStatusTimelineItem implements TimelineItem & Authored { """The hash of the source operation""" hash: Hash! author: Identity! @@ -1958,7 +1957,7 @@ type SetStatusTimelineItem implements TimelineItem { } """LabelChangeTimelineItem is a TimelineItem that represent a change in the title of a bug""" -type SetTitleTimelineItem implements TimelineItem { +type SetTitleTimelineItem implements TimelineItem & Authored { """The hash of the source operation""" hash: Hash! author: Identity! @@ -2004,7 +2003,8 @@ type PageInfo { interface Authored { """The author of this object.""" author: Identity! -}`}, +} +`}, ) // endregion ************************** generated!.gotpl ************************** @@ -7434,6 +7434,8 @@ func (ec *executionContext) _Authored(ctx context.Context, sel ast.SelectionSet, return ec._Comment(ctx, sel, &obj) case *bug.Comment: return ec._Comment(ctx, sel, obj) + case *bug.Snapshot: + return ec._Bug(ctx, sel, obj) case *bug.CreateOperation: return ec._CreateOperation(ctx, sel, obj) case *bug.SetTitleOperation: @@ -7446,6 +7448,16 @@ func (ec *executionContext) _Authored(ctx context.Context, sel ast.SelectionSet, return ec._SetStatusOperation(ctx, sel, obj) case *bug.LabelChangeOperation: return ec._LabelChangeOperation(ctx, sel, obj) + case *bug.CreateTimelineItem: + return ec._CreateTimelineItem(ctx, sel, obj) + case *bug.AddCommentTimelineItem: + return ec._AddCommentTimelineItem(ctx, sel, obj) + case *bug.LabelChangeTimelineItem: + return ec._LabelChangeTimelineItem(ctx, sel, obj) + case *bug.SetStatusTimelineItem: + return ec._SetStatusTimelineItem(ctx, sel, obj) + case *bug.SetTitleTimelineItem: + return ec._SetTitleTimelineItem(ctx, sel, obj) default: panic(fmt.Errorf("unexpected type %T", obj)) } @@ -7557,7 +7569,7 @@ func (ec *executionContext) _AddCommentOperation(ctx context.Context, sel ast.Se return out } -var addCommentTimelineItemImplementors = []string{"AddCommentTimelineItem", "TimelineItem"} +var addCommentTimelineItemImplementors = []string{"AddCommentTimelineItem", "TimelineItem", "Authored"} func (ec *executionContext) _AddCommentTimelineItem(ctx context.Context, sel ast.SelectionSet, obj *bug.AddCommentTimelineItem) graphql.Marshaler { fields := graphql.CollectFields(ec.RequestContext, sel, addCommentTimelineItemImplementors) @@ -7642,7 +7654,7 @@ func (ec *executionContext) _AddCommentTimelineItem(ctx context.Context, sel ast return out } -var bugImplementors = []string{"Bug"} +var bugImplementors = []string{"Bug", "Authored"} func (ec *executionContext) _Bug(ctx context.Context, sel ast.SelectionSet, obj *bug.Snapshot) graphql.Marshaler { fields := graphql.CollectFields(ec.RequestContext, sel, bugImplementors) @@ -8143,7 +8155,7 @@ func (ec *executionContext) _CreateOperation(ctx context.Context, sel ast.Select return out } -var createTimelineItemImplementors = []string{"CreateTimelineItem", "TimelineItem"} +var createTimelineItemImplementors = []string{"CreateTimelineItem", "TimelineItem", "Authored"} func (ec *executionContext) _CreateTimelineItem(ctx context.Context, sel ast.SelectionSet, obj *bug.CreateTimelineItem) graphql.Marshaler { fields := graphql.CollectFields(ec.RequestContext, sel, createTimelineItemImplementors) @@ -8591,7 +8603,7 @@ func (ec *executionContext) _LabelChangeOperation(ctx context.Context, sel ast.S return out } -var labelChangeTimelineItemImplementors = []string{"LabelChangeTimelineItem", "TimelineItem"} +var labelChangeTimelineItemImplementors = []string{"LabelChangeTimelineItem", "TimelineItem", "Authored"} func (ec *executionContext) _LabelChangeTimelineItem(ctx context.Context, sel ast.SelectionSet, obj *bug.LabelChangeTimelineItem) graphql.Marshaler { fields := graphql.CollectFields(ec.RequestContext, sel, labelChangeTimelineItemImplementors) @@ -9033,7 +9045,7 @@ func (ec *executionContext) _SetStatusOperation(ctx context.Context, sel ast.Sel return out } -var setStatusTimelineItemImplementors = []string{"SetStatusTimelineItem", "TimelineItem"} +var setStatusTimelineItemImplementors = []string{"SetStatusTimelineItem", "TimelineItem", "Authored"} func (ec *executionContext) _SetStatusTimelineItem(ctx context.Context, sel ast.SelectionSet, obj *bug.SetStatusTimelineItem) graphql.Marshaler { fields := graphql.CollectFields(ec.RequestContext, sel, setStatusTimelineItemImplementors) @@ -9149,7 +9161,7 @@ func (ec *executionContext) _SetTitleOperation(ctx context.Context, sel ast.Sele return out } -var setTitleTimelineItemImplementors = []string{"SetTitleTimelineItem", "TimelineItem"} +var setTitleTimelineItemImplementors = []string{"SetTitleTimelineItem", "TimelineItem", "Authored"} func (ec *executionContext) _SetTitleTimelineItem(ctx context.Context, sel ast.SelectionSet, obj *bug.SetTitleTimelineItem) graphql.Marshaler { fields := graphql.CollectFields(ec.RequestContext, sel, setTitleTimelineItemImplementors) diff --git a/graphql/schema/bug.graphql b/graphql/schema/bug.graphql index 8e058ed7..03aa95b8 100644 --- a/graphql/schema/bug.graphql +++ b/graphql/schema/bug.graphql @@ -27,7 +27,7 @@ enum Status { CLOSED } -type Bug { +type Bug implements Authored { """The identifier for this bug""" id: String! """The human version (truncated) identifier for this bug""" @@ -116,4 +116,3 @@ type BugEdge { """The item at the end of the edge.""" node: Bug! } - diff --git a/graphql/schema/timeline.graphql b/graphql/schema/timeline.graphql index 35bb88bf..ccc89b87 100644 --- a/graphql/schema/timeline.graphql +++ b/graphql/schema/timeline.graphql @@ -29,7 +29,7 @@ type TimelineItemEdge { # Items """CreateTimelineItem is a TimelineItem that represent the creation of a bug and its message edition history""" -type CreateTimelineItem implements TimelineItem { +type CreateTimelineItem implements TimelineItem & Authored { """The hash of the source operation""" hash: Hash! author: Identity! @@ -43,7 +43,7 @@ type CreateTimelineItem implements TimelineItem { } """AddCommentTimelineItem is a TimelineItem that represent a Comment and its edition history""" -type AddCommentTimelineItem implements TimelineItem { +type AddCommentTimelineItem implements TimelineItem & Authored { """The hash of the source operation""" hash: Hash! author: Identity! @@ -57,7 +57,7 @@ type AddCommentTimelineItem implements TimelineItem { } """LabelChangeTimelineItem is a TimelineItem that represent a change in the labels of a bug""" -type LabelChangeTimelineItem implements TimelineItem { +type LabelChangeTimelineItem implements TimelineItem & Authored { """The hash of the source operation""" hash: Hash! author: Identity! @@ -67,7 +67,7 @@ type LabelChangeTimelineItem implements TimelineItem { } """SetStatusTimelineItem is a TimelineItem that represent a change in the status of a bug""" -type SetStatusTimelineItem implements TimelineItem { +type SetStatusTimelineItem implements TimelineItem & Authored { """The hash of the source operation""" hash: Hash! author: Identity! @@ -76,7 +76,7 @@ type SetStatusTimelineItem implements TimelineItem { } """LabelChangeTimelineItem is a TimelineItem that represent a change in the title of a bug""" -type SetTitleTimelineItem implements TimelineItem { +type SetTitleTimelineItem implements TimelineItem & Authored { """The hash of the source operation""" hash: Hash! author: Identity! diff --git a/graphql/schema/types.graphql b/graphql/schema/types.graphql index 22447aae..fb94d1e8 100644 --- a/graphql/schema/types.graphql +++ b/graphql/schema/types.graphql @@ -35,4 +35,4 @@ type PageInfo { interface Authored { """The author of this object.""" author: Identity! -} \ No newline at end of file +} diff --git a/webui/src/Author.js b/webui/src/Author.js index 7bb1bf3c..237a7956 100644 --- a/webui/src/Author.js +++ b/webui/src/Author.js @@ -1,3 +1,4 @@ +import gql from 'graphql-tag'; import Tooltip from '@material-ui/core/Tooltip/Tooltip'; import MAvatar from '@material-ui/core/Avatar'; import React from 'react'; @@ -14,6 +15,17 @@ const Author = ({ author, ...props }) => { ); }; +Author.fragment = gql` + fragment authored on Authored { + author { + name + email + displayName + avatarUrl + } + } +`; + export const Avatar = ({ author, ...props }) => { if (author.avatarUrl) { return ; diff --git a/webui/src/bug/Bug.js b/webui/src/bug/Bug.js index 1b19149d..ff57dfa9 100644 --- a/webui/src/bug/Bug.js +++ b/webui/src/bug/Bug.js @@ -94,13 +94,10 @@ Bug.fragment = gql` ...Label } createdAt - author { - email - name - displayName - } + ...authored } ${Label.fragment} + ${Author.fragment} `; export default Bug; diff --git a/webui/src/bug/LabelChange.js b/webui/src/bug/LabelChange.js index 1e05b4a6..2405fdb5 100644 --- a/webui/src/bug/LabelChange.js +++ b/webui/src/bug/LabelChange.js @@ -44,11 +44,7 @@ LabelChange.fragment = gql` fragment LabelChange on TimelineItem { ... on LabelChangeTimelineItem { date - author { - name - email - displayName - } + ...authored added { ...Label } @@ -57,7 +53,9 @@ LabelChange.fragment = gql` } } } + ${Label.fragment} + ${Author.fragment} `; export default LabelChange; diff --git a/webui/src/bug/Message.js b/webui/src/bug/Message.js index ff039444..8a6cac09 100644 --- a/webui/src/bug/Message.js +++ b/webui/src/bug/Message.js @@ -70,32 +70,26 @@ Message.createFragment = gql` fragment Create on TimelineItem { ... on CreateTimelineItem { createdAt - author { - name - email - displayName - avatarUrl - } + ...authored edited message } } + + ${Author.fragment} `; Message.commentFragment = gql` fragment AddComment on TimelineItem { ... on AddCommentTimelineItem { createdAt - author { - name - email - displayName - avatarUrl - } + ...authored edited message } } + + ${Author.fragment} `; export default Message; diff --git a/webui/src/bug/SetStatus.js b/webui/src/bug/SetStatus.js index ab591038..eeff1a7b 100644 --- a/webui/src/bug/SetStatus.js +++ b/webui/src/bug/SetStatus.js @@ -26,14 +26,12 @@ SetStatus.fragment = gql` fragment SetStatus on TimelineItem { ... on SetStatusTimelineItem { date - author { - name - email - displayName - } + ...authored status } } + + ${Author.fragment} `; export default SetStatus; diff --git a/webui/src/bug/SetTitle.js b/webui/src/bug/SetTitle.js index d9a09ad5..9ba5a76e 100644 --- a/webui/src/bug/SetTitle.js +++ b/webui/src/bug/SetTitle.js @@ -32,15 +32,13 @@ SetTitle.fragment = gql` fragment SetTitle on TimelineItem { ... on SetTitleTimelineItem { date - author { - name - email - displayName - } + ...authored title was } } + + ${Author.fragment} `; export default SetTitle; diff --git a/webui/src/list/BugRow.js b/webui/src/list/BugRow.js index cfac4616..c5fc7647 100644 --- a/webui/src/list/BugRow.js +++ b/webui/src/list/BugRow.js @@ -9,6 +9,7 @@ import React from 'react'; import { Link } from 'react-router-dom'; import Date from '../Date'; import Label from '../Label'; +import Author from '../Author'; const Open = ({ className }) => ( @@ -97,12 +98,11 @@ BugRow.fragment = gql` labels { ...Label } - author { - name - displayName - } + ...authored } + ${Label.fragment} + ${Author.fragment} `; export default BugRow; -- cgit