diff --git a/src/app/components/group-chat/group-chat.component.html b/src/app/components/group-chat/group-chat.component.html new file mode 100644 index 0000000..eea1547 --- /dev/null +++ b/src/app/components/group-chat/group-chat.component.html @@ -0,0 +1,3 @@ +

+ group-chat works! +

diff --git a/src/app/components/group-chat/group-chat.component.scss b/src/app/components/group-chat/group-chat.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/group-chat/group-chat.component.ts b/src/app/components/group-chat/group-chat.component.ts new file mode 100644 index 0000000..76b514c --- /dev/null +++ b/src/app/components/group-chat/group-chat.component.ts @@ -0,0 +1,14 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-group-chat', + templateUrl: './group-chat.component.html', + styleUrls: ['./group-chat.component.scss'], +}) +export class GroupChatComponent implements OnInit { + + constructor() { } + + ngOnInit() {} + +} diff --git a/src/app/components/group-info/group-info.component.html b/src/app/components/group-info/group-info.component.html new file mode 100644 index 0000000..f6815d7 --- /dev/null +++ b/src/app/components/group-info/group-info.component.html @@ -0,0 +1,75 @@ +
+
+ +
+ + {{ group().label }} + {{ date() }} +
+ + +
+ @for (user of group().users; track user.id; let i = $index) { + @if (group().users.length - 1 == i) { + +

{{ user.username }}

+ @if (user.grade === 'Admin') { + + } +
+ + + +
+
+ } @else { + +

{{ user.username }}

+ @if (user.grade === 'Admin') { + + } +
+ + + +
+
+ } + } +
+ + +
+ + @for (n of options; track n) { + @if (n == options.length) { + +

Quitter le groupe

+ +
+ } @else { + @switch (n) { + @case (1) { + +

Ajouter un membre

+ +
+ } + @case (2) { + +

Supprimer le groupe

+ +
+ } + } + } + } +
+
diff --git a/src/app/components/group-info/group-info.component.scss b/src/app/components/group-info/group-info.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/group-info/group-info.component.ts b/src/app/components/group-info/group-info.component.ts new file mode 100644 index 0000000..f6863bf --- /dev/null +++ b/src/app/components/group-info/group-info.component.ts @@ -0,0 +1,152 @@ +import {Component, computed, inject, input, OnInit, signal} from '@angular/core'; +import {GetGroupDetailsDto, GroupsService} from "../../services/api"; +import {addIcons} from "ionicons"; +import {peopleOutline, banOutline, arrowUpCircleOutline} from "ionicons/icons"; +import {IonicModule, LoadingController, ToastController} from "@ionic/angular"; +import moment from 'moment'; +import {TitlePartComponent} from "../title-part/title-part.component"; +import {firstValueFrom} from "rxjs"; +import {PipeComponent} from "../pipe/pipe.component"; + +addIcons({ + 'avatars': peopleOutline, + 'ban': banOutline, + 'arrow-up-circle-outline': arrowUpCircleOutline, +}) + +@Component({ + selector: 'app-group-info', + templateUrl: './group-info.component.html', + styleUrls: ['./group-info.component.scss'], + imports: [ + IonicModule, + TitlePartComponent, + PipeComponent + ] +}) +export class GroupInfoComponent implements OnInit { + private groupsService = inject(GroupsService); + private toastCtrl = inject(ToastController); + private loadCtrl = inject(LoadingController); + groupSelected = input.required(); + group = signal({}); + + date = computed(() => moment(this.group().creationDate).format('DD/MM/YYYY')); + + options = [1, 2, 3]; + + ngOnInit() { + this.group.set(this.groupSelected()); + } + + async deleteUser(id: number) { + const loading = await this.loadCtrl.create({ + message: 'Suppression...', + spinner: 'lines-sharp-small' + }); + await loading.present(); + + try { + await firstValueFrom(this.groupsService.deleteUserFromGroupEndpoint(this.group().id, id)); + this.group.update(x => ({ + ...x, + users: x.users.filter(u => u.id != id) + })); + const toast = await this.toastCtrl.create({ + message: 'Utilisateur retiré du groupe', + duration: 2000, + color: 'success' + }); + await toast.present(); + } catch (e) { + const toast = await this.toastCtrl.create({ + message: 'Vous devez être administrateur pour faire cela', + duration: 2000, + color: 'danger' + }); + await toast.present(); + } + await loading.dismiss(); + } + + async leaveGroup(){ + const loading = await this.loadCtrl.create({ + message: 'Chargement...', + spinner: 'lines-sharp-small' + }); + await loading.present(); + + try { + await firstValueFrom(this.groupsService.leaveGroupEndpoint(this.group().id)); + const toast = await this.toastCtrl.create({ + message: 'Vous avez quitter ce groupe', + duration: 2000, + color: 'success' + }); + await toast.present(); + } catch { + const toast = await this.toastCtrl.create({ + message: 'Impossible de quitter le groupe', + duration: 2000, + color: 'danger' + }); + await toast.present(); + } + await loading.dismiss(); + } + + addToGroup(){} + + async deleteGroup(){ + const loading = await this.loadCtrl.create({ + message: 'Suppression...', + spinner: 'lines-sharp-small' + }); + await loading.present(); + + try { + await firstValueFrom(this.groupsService.deleteGroupEndpoint(this.group().id)); + const toast = await this.toastCtrl.create({ + message: 'Groupe supprimé', + duration: 2000, + color: 'success' + }); + await toast.present(); + } catch (e) { + const toast = await this.toastCtrl.create({ + message: 'Vous devez être administrateur pour faire cela', + duration: 2000, + color: 'danger' + }); + await toast.present(); + } + await loading.dismiss(); + } + + async promoteUser(id: number){ + const loading = await this.loadCtrl.create({ + message: 'Promotion...', + spinner: 'lines-sharp-small' + }); + await loading.present(); + + try { + const group = await firstValueFrom(this.groupsService.patchGroupUserRoleEndpoint(this.group().id, id)); + this.group.set(group); + const toast = await this.toastCtrl.create({ + message: 'Utilisateur promu avec succès', + duration: 2000, + color: 'success' + }); + await toast.present(); + } catch (e) { + const toast = await this.toastCtrl.create({ + message: 'Vous devez être administrateur pour faire cela', + duration: 2000, + color: 'danger' + }); + await toast.present(); + } + await loading.dismiss(); + } +} \ No newline at end of file diff --git a/src/app/components/message-form/message-form.component.html b/src/app/components/message-form/message-form.component.html new file mode 100644 index 0000000..0939229 --- /dev/null +++ b/src/app/components/message-form/message-form.component.html @@ -0,0 +1,3 @@ +

+ message-form works! +

diff --git a/src/app/components/message-form/message-form.component.scss b/src/app/components/message-form/message-form.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/message-form/message-form.component.ts b/src/app/components/message-form/message-form.component.ts new file mode 100644 index 0000000..6fc3bcb --- /dev/null +++ b/src/app/components/message-form/message-form.component.ts @@ -0,0 +1,14 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-message-form', + templateUrl: './message-form.component.html', + styleUrls: ['./message-form.component.scss'], +}) +export class MessageFormComponent implements OnInit { + + constructor() { } + + ngOnInit() {} + +} diff --git a/src/app/components/message/message.component.html b/src/app/components/message/message.component.html new file mode 100644 index 0000000..9bee74c --- /dev/null +++ b/src/app/components/message/message.component.html @@ -0,0 +1,3 @@ +

+ message works! +

diff --git a/src/app/components/message/message.component.scss b/src/app/components/message/message.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/message/message.component.ts b/src/app/components/message/message.component.ts new file mode 100644 index 0000000..7b435fd --- /dev/null +++ b/src/app/components/message/message.component.ts @@ -0,0 +1,14 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-message', + templateUrl: './message.component.html', + styleUrls: ['./message.component.scss'], +}) +export class MessageComponent implements OnInit { + + constructor() { } + + ngOnInit() {} + +}