diff --git a/src/app/components/group/group.component.html b/src/app/components/group/group.component.html index 70f9ff0..ce18071 100644 --- a/src/app/components/group/group.component.html +++ b/src/app/components/group/group.component.html @@ -27,6 +27,14 @@ [disabled]="!isAdmin"> event +
+ +
@@ -107,6 +115,14 @@ (click)="leaveEvent(event)" [disabled]="!event.joined"> event_busy +
+ +
diff --git a/src/app/components/group/group.component.ts b/src/app/components/group/group.component.ts index a8cc934..9476ee9 100644 --- a/src/app/components/group/group.component.ts +++ b/src/app/components/group/group.component.ts @@ -151,7 +151,7 @@ export class GroupComponent implements OnInit { public joinGroup(group: Group) { group.allowedToJoinGroup = false; - this.requestService.joinGroup(group) + this.requestService.joinGroup(group.id) .subscribe(() => { this.datasharingService.addGroupToUser(group); }); @@ -179,4 +179,11 @@ export class GroupComponent implements OnInit { user.allowedToSendRequest = false; this.requestService.sendFriendRequest(user); } + + private deleteGroup() { + this.groupService.deleteGroup(this.groupProfile.id) + .subscribe(response => { + this.router.navigateByUrl(''); + }); + } } diff --git a/src/app/components/search/search.component.ts b/src/app/components/search/search.component.ts index f8f6b7e..461126b 100644 --- a/src/app/components/search/search.component.ts +++ b/src/app/components/search/search.component.ts @@ -78,7 +78,7 @@ export class SearchComponent implements OnInit { public joinGroup(group: GroupInfo) { group.allowedToJoinGroup = false; - this.requestService.joinGroup(group) + this.requestService.joinGroup(group.id) .subscribe(() => { this.data.addGroupToUser(group); }); diff --git a/src/app/components/social/groups/groups.component.html b/src/app/components/social/groups/groups.component.html index aa85510..122a8ed 100644 --- a/src/app/components/social/groups/groups.component.html +++ b/src/app/components/social/groups/groups.component.html @@ -10,13 +10,22 @@
+ [class.selected]="group === selectedGroup"> -
+
+ + + + +
+
- {{group.name}} + {{group.name}}
diff --git a/src/app/components/social/groups/groups.component.sass b/src/app/components/social/groups/groups.component.sass index 3e12dce..06c9d4a 100644 --- a/src/app/components/social/groups/groups.component.sass +++ b/src/app/components/social/groups/groups.component.sass @@ -12,6 +12,9 @@ outline: none user-select: none cursor: pointer + #button-box + text-align: right + margin-left: auto ::ng-deep .mat-card-header-text width: 1000% margin: auto 0 auto 24px diff --git a/src/app/components/social/groups/groups.component.ts b/src/app/components/social/groups/groups.component.ts index 6097462..d5f1c25 100644 --- a/src/app/components/social/groups/groups.component.ts +++ b/src/app/components/social/groups/groups.component.ts @@ -4,6 +4,7 @@ import {MatDialog, MatDialogRef} from '@angular/material/dialog'; import {SocialService} from 'src/app/services/social/social.service'; import {User} from 'src/app/models/user'; import {DatasharingService} from 'src/app/services/datasharing.service'; +import {GroupService} from 'src/app/services/group/group.service'; import {Router} from '@angular/router'; import {IErrorResponse} from '../../../models/interfaces/IErrorResponse'; @@ -50,7 +51,9 @@ export class DialogCreateGroupComponent { export class GroupsComponent implements OnInit { user: User; - constructor(public dialog: MatDialog, private data: DatasharingService, private router: Router) { + constructor(public dialog: MatDialog, private data: DatasharingService, + private router: Router, + private groupService: GroupService) { } ngOnInit() { @@ -68,5 +71,9 @@ export class GroupsComponent implements OnInit { width: '250px' }); } + + deleteGroup(group: GroupInfo) { + this.groupService.deleteGroup(group.id).subscribe(); + } } diff --git a/src/app/models/group.ts b/src/app/models/group.ts index eb0da3d..51be07f 100644 --- a/src/app/models/group.ts +++ b/src/app/models/group.ts @@ -13,6 +13,7 @@ export class Group { events: Event[] = []; joined: boolean; allowedToJoinGroup = false; + deletable: boolean; public assignFromResponse(groupDataResponse: IGroup) { if (!groupDataResponse) { @@ -23,6 +24,7 @@ export class Group { this.picture = this.buildPictureUrl(groupDataResponse.picture); let user = new User(); this.creator = user.assignFromResponse(groupDataResponse.creator); + this.deletable = groupDataResponse.deletable; if (groupDataResponse.members) { for (const member of groupDataResponse.members) { user = new User(); diff --git a/src/app/models/groupinfo.ts b/src/app/models/groupinfo.ts index e9399eb..9db5965 100644 --- a/src/app/models/groupinfo.ts +++ b/src/app/models/groupinfo.ts @@ -4,12 +4,14 @@ export class GroupInfo { id: number; name: string; picture: string; + deletable: boolean; allowedToJoinGroup = false; - constructor(pId: number, pName: string, picture: string) { + constructor(pId: number, pName: string, picture: string, deletable: boolean) { this.id = pId; this.name = pName; this.picture = this.buildPictureUrl(picture); + this.deletable = deletable; } buildPictureUrl(path: string): string { diff --git a/src/app/models/interfaces/IGroup.ts b/src/app/models/interfaces/IGroup.ts index 357a5d6..f6b82e0 100644 --- a/src/app/models/interfaces/IGroup.ts +++ b/src/app/models/interfaces/IGroup.ts @@ -19,4 +19,6 @@ export interface IGroup { events: any; joined: boolean; + + deletable: boolean; } diff --git a/src/app/models/user.ts b/src/app/models/user.ts index 05cf220..528e7ce 100644 --- a/src/app/models/user.ts +++ b/src/app/models/user.ts @@ -62,7 +62,7 @@ export class User { this.groups.push(group_.assignFromResponse(group)); } doesnt work because of circular injection*/ this.groups = userDataResponse.groups - .map(group => new GroupInfo(group.id, group.name, group.picture)); + .map(group => new GroupInfo(group.id, group.name, group.picture, group.deletable)); } if (userDataResponse.chats) { this.chatIDs = userDataResponse.chats.map(chat => chat.id); diff --git a/src/app/services/datasharing.service.ts b/src/app/services/datasharing.service.ts index 9f21f30..b79793c 100644 --- a/src/app/services/datasharing.service.ts +++ b/src/app/services/datasharing.service.ts @@ -21,6 +21,17 @@ export class DatasharingService { this.currentUser.next(user); } + deleteGroup(id: number) { + const user: User = this.currentUser.getValue(); + for (let i = 0; i < user.groups.length; i++) { + if (user.groups[i].id === id) { + user.groups.splice(i, 1); + return; + } + } + this.currentUser.next(user); + } + addGroupToUser(group: GroupInfo) { const user = this.currentUser.getValue(); user.groups.push(group); diff --git a/src/app/services/group/group.service.ts b/src/app/services/group/group.service.ts index 2af61ac..7545a0e 100644 --- a/src/app/services/group/group.service.ts +++ b/src/app/services/group/group.service.ts @@ -8,6 +8,7 @@ import {Group} from 'src/app/models/group'; import {tap} from 'rxjs/operators'; import {BaseService} from '../base.service'; import {IFileUploadResult} from '../../models/interfaces/IFileUploadResult'; +import {DatasharingService} from 'src/app/services/datasharing.service'; const getGroupGraphqlQuery = `query($groupId: ID!) { getGroup(groupId:$groupId){ @@ -15,6 +16,7 @@ const getGroupGraphqlQuery = `query($groupId: ID!) { name joined picture + deletable creator{id name handle} admins{id name handle} members{id name handle profilePicture} @@ -29,7 +31,7 @@ export class GroupService extends BaseService { public group: BehaviorSubject = new BehaviorSubject(new Group()); - constructor(http: HttpClient) { + constructor(http: HttpClient, private data: DatasharingService) { super(http); } @@ -115,4 +117,19 @@ export class GroupService extends BaseService { formData.append('groupId', id); return this.post(environment.greenvironmentUrl + '/upload', formData); } + + public deleteGroup(groupId: number) { + const body = { + query: `mutation($groupId: ID!) { + deleteGroup(groupId: $groupId) { + } + }`, variables: { + groupId + } + }; + return this.postGraphql(body) + .pipe(tap(response => { + this.data.deleteGroup(groupId); + })); + } } diff --git a/src/app/services/login/login.service.ts b/src/app/services/login/login.service.ts index 5cfc9c8..ed1884e 100644 --- a/src/app/services/login/login.service.ts +++ b/src/app/services/login/login.service.ts @@ -34,7 +34,8 @@ const graphqlQuery = `mutation($email: String!, $pwHash: String!) { groups { id, name, - picture + picture, + deletable }, chats{ id diff --git a/src/app/services/request/request.service.ts b/src/app/services/request/request.service.ts index bb949da..f0d97bf 100644 --- a/src/app/services/request/request.service.ts +++ b/src/app/services/request/request.service.ts @@ -126,8 +126,8 @@ export class RequestService extends BaseService { * Joins a group * @param group */ - public joinGroup(group: GroupInfo) { - return this.postGraphql(RequestService.buildJoinGroupBody(group.id)); + public joinGroup(groupId: number) { + return this.postGraphql(RequestService.buildJoinGroupBody(groupId)); } /** diff --git a/src/app/services/search/search.service.ts b/src/app/services/search/search.service.ts index 417cf9a..690dadb 100644 --- a/src/app/services/search/search.service.ts +++ b/src/app/services/search/search.service.ts @@ -32,6 +32,7 @@ const graphqlQuery = `query($query: String!, $first: Int, $offset: Int) { id name picture + deletable creator{id name handle} members{id name handle} } @@ -91,7 +92,7 @@ export class SearchService extends BaseService { public getGroupsForResponse(response: ISearchRequestResult): Array { const groups = new Array(); for (const group of response.data.search.groups) { - groups.push(new GroupInfo(group.id, group.name, group.picture)); + groups.push(new GroupInfo(group.id, group.name, group.picture, group.deletable)); } return groups; } diff --git a/src/app/services/selfservice/self.service.ts b/src/app/services/selfservice/self.service.ts index f89c25b..7c22071 100644 --- a/src/app/services/selfservice/self.service.ts +++ b/src/app/services/selfservice/self.service.ts @@ -27,7 +27,8 @@ const getSelfGraphqlQuery = `{ groups { id, name, - picture + picture, + deletable }, chats{ id