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() {}
+
+}