Mise à jour articles et produits

This commit is contained in:
Rampeur
2025-08-19 05:12:16 +02:00
parent 977104aac2
commit ed6104ed21
137 changed files with 1498 additions and 681 deletions
@@ -106,67 +106,75 @@
</mat-menu>
</div>
<mat-nav-list appAccordion>
@for (menuitem of menuItems.getMenuItems(); track menuitem) {
@for (menuitem of getMenuItems(); track menuitem) {
<mat-list-item appAccordionLink routerLinkActive="selected" group="{{menuitem.state}}">
@if (menuitem.type === 'link') {
@if (!menuitem.parent && menuitem.type === 'link') {
<a appAccordionToggle [routerLink]="['/', menuitem.state]">
<mat-icon [fontIcon]="menuitem.icon" class="mt-0 mr-2"></mat-icon>
@if (menuitem.icontype === 'mat') {
<mat-icon [fontIcon]="menuitem.icon" class="mt-0 me-2"></mat-icon>
}
@else {
<i class="icosvg-{{menuitem.icon}} fs-3 mt-0 me-3"></i>
}
<span>{{ menuitem.name }}</span>
<span class="flex-spacer"></span>
@for (badge of menuitem.badge; track badge) {
<span matBadge="{{ badge.value }}" matBadgeColor="warn" matBadgeOverlap="false"></span>
}
</a>
}
@if (menuitem.type === 'menu') {
<a role="button" aria-hidden="true" (click)="toggleShowQCMMenu()" (keyup)="true">
<mat-icon [fontIcon]="menuitem.icon" class="mt-0 mr-2"></mat-icon>
}
@if (menuitem.type === 'menu') {
<a role="button" aria-hidden="true" (click)="toggleShowMenu(menuitem.state)" (keyup)="true">
@if (menuitem.icontype === 'mat') {
<mat-icon [fontIcon]="menuitem.icon" class="mt-0 me-2"></mat-icon>
}
@else {
<i class="icosvg-{{menuitem.icon}} fs-3 mt-0 me-3"></i>
}
<span>{{ menuitem.name }}</span>
<span class="flex-spacer"></span>
@for (badge of menuitem.badge; track badge) {
<span matBadge="{{ badge.value }}" matBadgeColor="warn" matBadgeOverlap="false"></span>
}
</a>
}
}
</mat-list-item>
}
@if (showQCMMenu) {
<div>
@for (menuqcm of menuItems.getMenuQCM(); track menuqcm) {
<mat-list-item appAccordionLink routerLinkActive="selected" group="{{ menuqcm.state}}">
@if ( menuqcm.type === 'link') {
<a class="ps-4" appAccordionToggle [routerLink]="['/qcm', menuqcm.state]">
<mat-icon [fontIcon]="menuqcm.icon" class="mt-0 mr-2"></mat-icon>
<span>{{ menuqcm.name }}</span>
<span class="flex-spacer"></span>
</a>
@if (menuitem.type === 'menu') {
@for (submenuitem of getMenuItems(); track submenuitem) {
@if ( isVisibleMenu(menuitem.state) === true && submenuitem.parent === menuitem.state && submenuitem.type === 'link') {
<mat-list-item appAccordionLink routerLinkActive="selected" group="{{ submenuitem.state}}">
<a class="ps-4" appAccordionToggle [routerLink]="['/' + submenuitem.parent, submenuitem.state]">
@if (menuitem.icontype === 'mat') {
<mat-icon [fontIcon]="submenuitem.icon" class="mt-0 me-2"></mat-icon>
}
@else {
<i class="icosvg-{{submenuitem.icon}} fs-2 mt-0 me-2"></i>
}
<span>{{ submenuitem.name }}</span>
<span class="flex-spacer"></span>
</a>
</mat-list-item>
}
</mat-list-item>
}
</div>
}
}
</mat-nav-list>
</ng-container>
<ng-container *appShowAuthed="false">
<div class="user-profile">
<!-- <div class="profile-img"> <img src="/assets/images/users/user.jpg" alt="user"> </div> -->
<!-- <div class="profile-img"> <img src="/assets/images/avatars/default.jpg" alt="user"> </div> -->
</div>
<mat-nav-list appAccordion>
@for (menuitem of menuItems.getMenuAuth(); track menuitem) {
<mat-list-item appAccordionLink routerLinkActive="selected" group="{{menuitem.state}}">
@if (menuitem.type === 'link') {
<a appAccordionToggle [routerLink]="['/', menuitem.state]">
<mat-icon [fontIcon]="menuitem.icon" class="mt-0 mr-2"></mat-icon>
<span>{{ menuitem.name }}</span>
<span class="flex-spacer"></span>
@for (badge of menuitem.badge; track badge) {
<span matBadge="{{ badge.value }}" matBadgeColor="warn" matBadgeOverlap="false"></span>
@if (menuitem.icontype === 'mat') {
<mat-icon [fontIcon]="menuitem.icon" class="mt-0 me-2"></mat-icon>
}
@else {
<i class="icosvg-{{menuitem.icon}} fs-2 mt-0 me-2"></i>
}
</a>
}
@if (menuitem.type === 'menu') {
<a role="button" aria-hidden="true" (click)="showQCMMenu = !showQCMMenu">
<mat-icon [fontIcon]="menuitem.icon" class="mt-0 mr-2"></mat-icon>
<span>{{ menuitem.name }}</span>
<span class="flex-spacer"></span>
@for (badge of menuitem.badge; track badge) {
@@ -176,21 +184,6 @@
}
</mat-list-item>
}
@if (showQCMMenu) {
<div>
@for (menuqcm of menuItems.getMenuQCM(); track menuqcm) {
<mat-list-item appAccordionLink routerLinkActive="selected" group="{{ menuqcm.state}}">
@if ( menuqcm.type === 'link') {
<a class="ps-4" appAccordionToggle [routerLink]="['/', menuqcm.state]">
<mat-icon [fontIcon]="menuqcm.icon" class="mt-0 mr-2"></mat-icon>
<span>{{ menuqcm.name }}</span>
<span class="flex-spacer"></span>
</a>
}
</mat-list-item>
}
</div>
}
</mat-nav-list>
</ng-container>
<app-layout-footer></app-layout-footer>
@@ -11,7 +11,7 @@ import { MatToolbarModule } from '@angular/material/toolbar';
import { MatMenuModule } from '@angular/material/menu';
import { Observable, Subscription } from 'rxjs';
import { User } from 'src/app/core/models';
import { Menu, User } from 'src/app/core/models';
import { UserService } from 'src/app/core/services';
import { MenuItems, ShowAuthedDirective, AccordionAnchorDirective, AccordionLinkDirective, AccordionDirective } from 'src/app/components/shared';
//import { SpinnerComponent } from 'src/app/components/shared';
@@ -43,10 +43,12 @@ export class FullComponent implements OnInit, OnDestroy {
private _mobileQueryListener: () => void;
mobileQuery: MediaQueryList;
currentUser: User = {} as User;
showQCMMenu = false;
today: number = Date.now();
siteLink = 'https://www.rampeur.com';
author = 'Solide Apps';
siteLink = 'https://www.adastra-cbd.com';
author = 'Ad Astra';
links: Menu[] = [];
visibleMenu: string[] = ['products', 'page'];
//visibleMenu: string[] = ['products'];
constructor(
private router: Router,
@@ -65,10 +67,29 @@ export class FullComponent implements OnInit, OnDestroy {
this._currentUser = user$.subscribe(
(userData) => {
this.currentUser = userData;
if (this.currentUser.role === 'Admin') {
//this.links = this.menuItems.getMenuItemsAdmin();
this.links = this.menuItems.getMenuItems();
} else {
this.links = this.menuItems.getMenuItems();
}
}
);
}
getMenuItems(): Menu[] {
return this.links;
}
isVisibleMenu(state: string): boolean {
const indexOf: number = this.visibleMenu.indexOf(state);
if (indexOf !== -1) {
return true;
} else {
return false;
}
}
ngOnDestroy(): void {
this._currentUser.unsubscribe();
this.mobileQuery.removeListener(this._mobileQueryListener);
@@ -78,8 +99,13 @@ export class FullComponent implements OnInit, OnDestroy {
window.open('https://github.com/rampeur', '_blank');
}
toggleShowQCMMenu() {
this.showQCMMenu = !this.showQCMMenu;
toggleShowMenu(state: string) {
const indexOf: number = this.visibleMenu.indexOf(state);
if (indexOf !== -1) {
this.visibleMenu.splice(indexOf, 1);
} else {
this.visibleMenu.push(state);
}
}
logout() {
+49 -32
View File
@@ -3,50 +3,67 @@ import { Injectable } from '@angular/core';
import { Menu } from 'src/app/core/models/menu.model';
const MENUAUTH: Menu[] = [
{ state: 'home', type: 'link', name: 'Accueil', icon: 'home', desc: '' },
{ state: 'login', type: 'link', name: 'Se connecter', icon: 'fingerprint', desc: '' },
{ state: 'register', type: 'link', name: 'Créer un compte', icon: 'person_add_alt', desc: '' }
{ state: 'home', type: 'link', name: 'Accueil', icon: 'home', icontype: 'mat', desc: '' },
{ state: 'login', type: 'link', name: 'Se connecter', icon: 'fingerprint', icontype: 'mat', desc: '' },
{ state: 'register', type: 'link', name: 'Créer un compte', icon: 'person_add_alt', icontype: 'mat', desc: '' }
];
const MENUITEMSADMIN: Menu[] = [
{ state: 'home', type: 'link', name: 'Accueil', icon: 'home', icontype: 'mat', desc: '' },
{ state: 'products', type: 'menu', name: 'Produits', icon: 'barcode', desc: '' },
{ parent: 'products', state: 'les-fleurs', type: 'link', name: 'Fleurs', icon: 'marijuana', desc: '' },
{ parent: 'products', state: 'les-resines', type: 'link', name: 'Résines', icon: 'butter', desc: '' },
{ parent: 'products', state: 'les-molecules', type: 'link', name: 'Molécules', icon: 'molecule', desc: '' },
{ state: 'page', type: 'menu', name: 'Documentation', icon: 'books', desc: '' },
{ parent: 'page', state: 'les-fleurs', type: 'link', name: 'Fleurs', icon: 'marijuana', desc: '' },
{ parent: 'page', state: 'les-resines', type: 'link', name: 'Résines', icon: 'butter', desc: '' },
{ parent: 'page', state: 'les-molecules', type: 'link', name: 'Molécules', icon: 'molecule', desc: '' },
{ state: 'dashboard', type: 'link', name: 'Dashboard', icon: 'dashboard', icontype: 'mat', desc: '' },
{ state: 'logbook', type: 'link', name: 'Carnet de saut', icon: 'assignment_turned_in', icontype: 'mat', desc: '' },
{ state: 'aeronefs', type: 'link', name: 'Aéronefs', icon: 'flight', icontype: 'mat', desc: '' },
{ state: 'dropzones', type: 'link', name: 'Drop Zones', icon: 'flight_takeoff', icontype: 'mat', desc: '' },
{ state: 'canopies', type: 'link', name: 'Voiles', icon: 'paragliding', icontype: 'mat', desc: '' },
{ state: 'jumps', type: 'link', name: 'Sauts', icon: 'filter_drama', icontype: 'mat', desc: '' },
{ state: 'calculator', type: 'link', name: 'Taille de voile', icon: 'calculate', icontype: 'mat', desc: '' },
{ state: 'qcm', type: 'menu', name: 'QCM Brevets', icon: 'rule_folder', icontype: 'mat', desc: '' },
{ parent: 'qcm', state: 'bpa', type: 'link', name: 'BPA', icon: 'rule', icontype: 'mat' },
{ parent: 'qcm', state: 'c', type: 'link', name: 'Brevet C', icon: 'rule', icontype: 'mat' },
{ parent: 'qcm', state: 'd', type: 'link', name: 'Brevet D', icon: 'rule', icontype: 'mat' }
];
const MENUITEMS: Menu[] = [
{ state: 'home', type: 'link', name: 'Accueil', icon: 'home', desc: '' },
{ state: 'dashboard', type: 'link', name: 'Dashboard', icon: 'dashboard', desc: '' },
{ state: 'logbook', type: 'link', name: 'Carnet de saut', icon: 'assignment_turned_in', desc: '' },
{ state: 'aeronefs', type: 'link', name: 'Aéronefs', icon: 'flight', desc: '' },
{ state: 'dropzones', type: 'link', name: 'Drop Zones', icon: 'flight_takeoff', desc: '' },
{ state: 'canopies', type: 'link', name: 'Voiles', icon: 'paragliding', desc: '' },
{ state: 'jumps', type: 'link', name: 'Sauts', icon: 'filter_drama', desc: '' },
{ state: 'calculator', type: 'link', name: 'Taille de voile', icon: 'calculate', desc: '' },
{ state: 'qcm', type: 'menu', name: 'QCM Brevets', icon: 'rule_folder', desc: '' }
{ state: 'home', type: 'link', name: 'Accueil', icon: 'home', icontype: 'mat', desc: '' },
{ state: 'products', type: 'menu', name: 'Produits', icon: 'barcode', desc: '' },
{ parent: 'products', state: 'les-fleurs', type: 'link', name: 'Fleurs', icon: 'marijuana', desc: '' },
{ parent: 'products', state: 'les-resines', type: 'link', name: 'Résines', icon: 'butter', desc: '' },
{ parent: 'products', state: 'les-molecules', type: 'link', name: 'Molécules', icon: 'molecule', desc: '' },
{ state: 'page', type: 'menu', name: 'Documentation', icon: 'books', desc: '' },
{ parent: 'page', state: 'les-fleurs', type: 'link', name: 'Fleurs', icon: 'marijuana', desc: '' },
{ parent: 'page', state: 'les-resines', type: 'link', name: 'Résines', icon: 'butter', desc: '' },
{ parent: 'page', state: 'les-molecules', type: 'link', name: 'Molécules', icon: 'molecule', desc: '' }
];
const MENUPJUMP: Menu[] = [
{ state: '#', type: 'link', name: 'Modifier', icon: 'edit', desc: '', color: 'primary' },
{ state: '#', type: 'link', name: 'Supprimer', icon: 'delete', desc: '', color: 'raspberry' }
];
const MENUQCM: Menu[] = [
{ state: 'bpa', type: 'link', name: 'BPA', icon: 'rule' },
{ state: 'c', type: 'link', name: 'Brevet C', icon: 'rule' },
{ state: 'd', type: 'link', name: 'Brevet D', icon: 'rule' }
{ state: '#', type: 'link', name: 'Modifier', icon: 'edit', icontype: 'mat', desc: '', color: 'primary' },
{ state: '#', type: 'link', name: 'Supprimer', icon: 'delete', icontype: 'mat', desc: '', color: 'raspberry' }
];
const MENUPANEL: Menu[] = [
{ state: '#', type: 'link', name: 'Retirer du dashboard', icon: 'add_notes', desc: '' },
{ state: '#', type: 'link', name: 'Paramètres d\'affichage', icon: 'display_settings', desc: '' }
{ state: '#', type: 'link', name: 'Retirer du dashboard', icon: 'add_notes', icontype: 'mat', desc: '' },
{ state: '#', type: 'link', name: 'Paramètres d\'affichage', icon: 'display_settings', icontype: 'mat', desc: '' }
];
const MENUCALCULATOR: Menu[] = [
{ state: '#', type: 'link', name: 'Recherche avancée', icon: 'search', desc: '' },
{ state: '#', type: 'link', name: 'Paramètres d\'affichage', icon: 'display_settings', desc: '' },
{ state: '#', type: 'link', name: 'Partager', icon: 'share', desc: '' }
{ state: '#', type: 'link', name: 'Recherche avancée', icon: 'search', icontype: 'mat', desc: '' },
{ state: '#', type: 'link', name: 'Paramètres d\'affichage', icon: 'display_settings', icontype: 'mat', desc: '' },
{ state: '#', type: 'link', name: 'Partager', icon: 'share', icontype: 'mat', desc: '' }
];
const MENULOGBOOK: Menu[] = [
{ state: '#', type: 'link', name: 'Recherche avancée', icon: 'search', desc: '' },
{ state: '#', type: 'link', name: 'Recherche par participant', icon: 'person_search', desc: '' },
{ state: '#', type: 'link', name: 'Paramètres d\'affichage', icon: 'display_settings', desc: '' },
{ state: '#', type: 'link', name: 'Import CSV', icon: 'upload_file', desc: '' }
{ state: '#', type: 'link', name: 'Recherche avancée', icon: 'search', icontype: 'mat', desc: '' },
{ state: '#', type: 'link', name: 'Recherche par participant', icon: 'person_search', icontype: 'mat', desc: '' },
{ state: '#', type: 'link', name: 'Paramètres d\'affichage', icon: 'display_settings', icontype: 'mat', desc: '' },
{ state: '#', type: 'link', name: 'Import CSV', icon: 'upload_file', icontype: 'mat', desc: '' }
];
@Injectable()
@@ -60,12 +77,12 @@ export class MenuItems {
getMenuItems(): Menu[] {
return MENUITEMS;
}
getMenuItemsAdmin(): Menu[] {
return MENUITEMSADMIN;
}
getMenuLogbook(): Menu[] {
return MENULOGBOOK;
}
getMenuQCM(): Menu[] {
return MENUQCM;
}
getMenuPanel(): Menu[] {
return MENUPANEL;
}