feat: redesign project sharing & initial registration
redesigned the project sharing popup to be a multi select dropdown that populates the options by using the input as a fuzzy search filter on the current users & invited users. users can now also be directly invited by email from the project share window. if invited this way, then the user will receive an email that sends them to a registration page, then a confirmation page. the initial registration was always redone so that it uses a similar system to the above in that it now will accept the first registered user if there are no other accounts (besides 'system').
This commit is contained in:
@ -86,6 +86,13 @@ type UserAccount {
|
||||
member: MemberList!
|
||||
}
|
||||
|
||||
type InvitedUserAccount {
|
||||
id: ID!
|
||||
email: String!
|
||||
invitedOn: Time!
|
||||
member: MemberList!
|
||||
}
|
||||
|
||||
type Team {
|
||||
id: ID!
|
||||
createdAt: Time!
|
||||
@ -93,6 +100,12 @@ type Team {
|
||||
members: [Member!]!
|
||||
}
|
||||
|
||||
|
||||
type InvitedMember {
|
||||
email: String!
|
||||
invitedOn: Time!
|
||||
}
|
||||
|
||||
type Project {
|
||||
id: ID!
|
||||
createdAt: Time!
|
||||
@ -100,6 +113,7 @@ type Project {
|
||||
team: Team
|
||||
taskGroups: [TaskGroup!]!
|
||||
members: [Member!]!
|
||||
invitedMembers: [InvitedMember!]!
|
||||
labels: [ProjectLabel!]!
|
||||
}
|
||||
|
||||
@ -158,6 +172,11 @@ type TaskChecklist {
|
||||
items: [TaskChecklistItem!]!
|
||||
}
|
||||
|
||||
enum ShareStatus {
|
||||
INVITED
|
||||
JOINED
|
||||
}
|
||||
|
||||
enum RoleLevel {
|
||||
ADMIN
|
||||
MEMBER
|
||||
@ -184,6 +203,7 @@ directive @hasRole(roles: [RoleLevel!]!, level: ActionLevel!, type: ObjectType!)
|
||||
type Query {
|
||||
organizations: [Organization!]!
|
||||
users: [UserAccount!]!
|
||||
invitedUsers: [InvitedUserAccount!]!
|
||||
findUser(input: FindUser!): UserAccount!
|
||||
findProject(input: FindProject!):
|
||||
Project! @hasRole(roles: [ADMIN, MEMBER], level: PROJECT, type: PROJECT)
|
||||
@ -338,22 +358,41 @@ input UpdateProjectLabelColor {
|
||||
}
|
||||
|
||||
extend type Mutation {
|
||||
createProjectMember(input: CreateProjectMember!):
|
||||
CreateProjectMemberPayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
|
||||
inviteProjectMembers(input: InviteProjectMembers!):
|
||||
InviteProjectMembersPayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
|
||||
deleteProjectMember(input: DeleteProjectMember!):
|
||||
DeleteProjectMemberPayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
|
||||
updateProjectMemberRole(input: UpdateProjectMemberRole!):
|
||||
UpdateProjectMemberRolePayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
|
||||
|
||||
deleteInvitedProjectMember(input: DeleteInvitedProjectMember!):
|
||||
DeleteInvitedProjectMemberPayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
|
||||
}
|
||||
|
||||
input CreateProjectMember {
|
||||
input DeleteInvitedProjectMember {
|
||||
projectID: UUID!
|
||||
userID: UUID!
|
||||
email: String!
|
||||
}
|
||||
|
||||
type CreateProjectMemberPayload {
|
||||
type DeleteInvitedProjectMemberPayload {
|
||||
invitedMember: InvitedMember!
|
||||
}
|
||||
|
||||
input MemberInvite {
|
||||
userID: UUID
|
||||
email: String
|
||||
}
|
||||
|
||||
input InviteProjectMembers {
|
||||
projectID: UUID!
|
||||
members: [MemberInvite!]!
|
||||
}
|
||||
|
||||
type InviteProjectMembersPayload {
|
||||
ok: Boolean!
|
||||
member: Member!
|
||||
projectID: UUID!
|
||||
members: [Member!]!
|
||||
invitedMembers: [InvitedMember!]!
|
||||
}
|
||||
|
||||
input DeleteProjectMember {
|
||||
@ -723,6 +762,8 @@ extend type Mutation {
|
||||
UserAccount! @hasRole(roles: [ADMIN], level: ORG, type: ORG)
|
||||
deleteUserAccount(input: DeleteUserAccount!):
|
||||
DeleteUserAccountPayload! @hasRole(roles: [ADMIN], level: ORG, type: ORG)
|
||||
deleteInvitedUserAccount(input: DeleteInvitedUserAccount!):
|
||||
DeleteInvitedUserAccountPayload! @hasRole(roles: [ADMIN], level: ORG, type: ORG)
|
||||
|
||||
logoutUser(input: LogoutUser!): Boolean!
|
||||
clearProfileAvatar: UserAccount!
|
||||
@ -734,6 +775,31 @@ extend type Mutation {
|
||||
UpdateUserInfoPayload! @hasRole(roles: [ADMIN], level: ORG, type: ORG)
|
||||
}
|
||||
|
||||
extend type Query {
|
||||
searchMembers(input: MemberSearchFilter!): [MemberSearchResult!]!
|
||||
}
|
||||
|
||||
input DeleteInvitedUserAccount {
|
||||
invitedUserID: UUID!
|
||||
}
|
||||
|
||||
type DeleteInvitedUserAccountPayload {
|
||||
invitedUser: InvitedUserAccount!
|
||||
}
|
||||
|
||||
input MemberSearchFilter {
|
||||
searchFilter: String!
|
||||
projectID: UUID
|
||||
}
|
||||
|
||||
|
||||
type MemberSearchResult {
|
||||
similarity: Int!
|
||||
id: String!
|
||||
user: UserAccount
|
||||
status: ShareStatus!
|
||||
}
|
||||
|
||||
type UpdateUserInfoPayload {
|
||||
user: UserAccount!
|
||||
}
|
||||
@ -790,3 +856,4 @@ type DeleteUserAccountPayload {
|
||||
ok: Boolean!
|
||||
userAccount: UserAccount!
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user