Added proofs gallery in the app
This commit is contained in:
@@ -0,0 +1,26 @@
|
|||||||
|
@if (!modal) {
|
||||||
|
<div class="bg-white rounded-lg p-2 shadow-sm border border-gray-200 overflow-scroll max-h-full">
|
||||||
|
<div class="grid grid-cols-4 gap-3">
|
||||||
|
@for (p of proofs(); track p) {
|
||||||
|
<img [src]="'data:image/jpeg;base64,' + p.proof"
|
||||||
|
class="w-20 h-20 object-cover"
|
||||||
|
alt=""
|
||||||
|
(click)="openProof(p.proof)"
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
} @else {
|
||||||
|
<div class="fixed inset-0 flex items-center justify-center z-50" (click)="closeProof()">
|
||||||
|
<button class="absolute top-15 right-1 text-gray-300 text-4xl font-bold p-5 bg-transparent"
|
||||||
|
(click)="closeProof()">
|
||||||
|
<ion-icon name="close-circle-outline"></ion-icon>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<img [src]="'data:image/jpeg;base64,' + selectedProof()"
|
||||||
|
class="w-[90%] h-[90%] object-cover rounded-md mt-10"
|
||||||
|
alt=""
|
||||||
|
/>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
import {Component, inject, OnInit, signal} from '@angular/core';
|
||||||
|
import {IonicModule, LoadingController, ToastController} from "@ionic/angular";
|
||||||
|
import {GetUserProofDto, UsersService} from "../../services/api";
|
||||||
|
import {firstValueFrom} from "rxjs";
|
||||||
|
import {addIcons} from "ionicons";
|
||||||
|
import {closeCircleOutline} from "ionicons/icons";
|
||||||
|
|
||||||
|
addIcons({
|
||||||
|
'close-circle-outline': closeCircleOutline
|
||||||
|
})
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-gallery',
|
||||||
|
templateUrl: './gallery.component.html',
|
||||||
|
styleUrls: ['./gallery.component.scss'],
|
||||||
|
imports: [
|
||||||
|
IonicModule
|
||||||
|
]
|
||||||
|
})
|
||||||
|
export class GalleryComponent implements OnInit {
|
||||||
|
private loadCtrl = inject(LoadingController);
|
||||||
|
private usersService = inject(UsersService);
|
||||||
|
private toastCtrl = inject(ToastController);
|
||||||
|
|
||||||
|
proofs = signal<GetUserProofDto[]>([]);
|
||||||
|
selectedProof = signal<string>("");
|
||||||
|
|
||||||
|
modal = false;
|
||||||
|
|
||||||
|
async ngOnInit() {
|
||||||
|
const loading = await this.loadCtrl.create({
|
||||||
|
message: 'Chargement...',
|
||||||
|
spinner: 'lines-sharp-small'
|
||||||
|
});
|
||||||
|
await loading.present();
|
||||||
|
|
||||||
|
try {
|
||||||
|
const proofs = await firstValueFrom(this.usersService.getAllUserProofsEndpoint());
|
||||||
|
this.proofs.set(proofs);
|
||||||
|
|
||||||
|
await loading.dismiss();
|
||||||
|
} catch {
|
||||||
|
const toast = await this.toastCtrl.create({
|
||||||
|
message: 'Impossible de charger la galerie photos',
|
||||||
|
duration: 2000,
|
||||||
|
color: 'danger'
|
||||||
|
});
|
||||||
|
await loading.dismiss();
|
||||||
|
await toast.present();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async openProof(proof: string) {
|
||||||
|
const loading = await this.loadCtrl.create({
|
||||||
|
message: 'Chargement...',
|
||||||
|
spinner: 'lines-sharp-small'
|
||||||
|
});
|
||||||
|
await loading.present();
|
||||||
|
|
||||||
|
this.selectedProof.set(proof);
|
||||||
|
this.modal = true;
|
||||||
|
|
||||||
|
await loading.dismiss();
|
||||||
|
}
|
||||||
|
|
||||||
|
closeProof() {
|
||||||
|
this.modal = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -109,9 +109,7 @@
|
|||||||
}
|
}
|
||||||
@case ('gallery') {
|
@case ('gallery') {
|
||||||
<app-modal>
|
<app-modal>
|
||||||
<div class="p-4">
|
<app-gallery></app-gallery>
|
||||||
<p>Photos</p>
|
|
||||||
</div>
|
|
||||||
</app-modal>
|
</app-modal>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import {ModalComponent} from "../../components/modal/modal.component";
|
|||||||
import {ProfilFormComponent} from "../../components/profil-form/profil-form.component";
|
import {ProfilFormComponent} from "../../components/profil-form/profil-form.component";
|
||||||
import {PasswordFormComponent} from "../../components/password-form/password-form.component";
|
import {PasswordFormComponent} from "../../components/password-form/password-form.component";
|
||||||
import {DesignationFormComponent} from "../../components/designation-form/designation-form.component";
|
import {DesignationFormComponent} from "../../components/designation-form/designation-form.component";
|
||||||
|
import {GalleryComponent} from "../../components/gallery/gallery.component";
|
||||||
|
|
||||||
addIcons({
|
addIcons({
|
||||||
'profile': personOutline,
|
'profile': personOutline,
|
||||||
@@ -49,7 +50,8 @@ type View = 'menu' | 'profile' | 'password' | 'designation' | 'gallery';
|
|||||||
ProfilFormComponent,
|
ProfilFormComponent,
|
||||||
PasswordFormComponent,
|
PasswordFormComponent,
|
||||||
PasswordFormComponent,
|
PasswordFormComponent,
|
||||||
DesignationFormComponent
|
DesignationFormComponent,
|
||||||
|
GalleryComponent
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
export class HomeComponent implements OnInit {
|
export class HomeComponent implements OnInit {
|
||||||
|
|||||||
@@ -10,7 +10,6 @@
|
|||||||
|
|
||||||
|
|
||||||
export interface GetUserProofDto {
|
export interface GetUserProofDto {
|
||||||
id?: number;
|
|
||||||
proof?: string | null;
|
proof?: string | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user