From a55179c199d74a78af607d0814cc85cd6a6092d2 Mon Sep 17 00:00:00 2001 From: Boris Voropaev Date: Sun, 12 Nov 2023 15:19:04 +0300 Subject: [PATCH] pages menu logic --- .../menu/item/pages-menu-item.component.html | 4 +- .../menu/item/pages-menu-item.component.ts | 61 +++++++++++++------ src/app/_modules/pages/page/page.component.ts | 1 - src/app/_services/menu.service.ts | 38 ++++++++---- src/environments/environment.ts | 1 + src/vniigaz-v2/css/_main-menu.scss | 4 +- src/vniigaz-v2/vniigaz-v2.env.dev.ts | 2 +- 7 files changed, 72 insertions(+), 39 deletions(-) diff --git a/src/app/_modules/pages/menu/item/pages-menu-item.component.html b/src/app/_modules/pages/menu/item/pages-menu-item.component.html index cc5443d..f468575 100644 --- a/src/app/_modules/pages/menu/item/pages-menu-item.component.html +++ b/src/app/_modules/pages/menu/item/pages-menu-item.component.html @@ -1,6 +1,6 @@
- + {{item.name}} diff --git a/src/app/_modules/pages/menu/item/pages-menu-item.component.ts b/src/app/_modules/pages/menu/item/pages-menu-item.component.ts index c9be605..dcd26d2 100644 --- a/src/app/_modules/pages/menu/item/pages-menu-item.component.ts +++ b/src/app/_modules/pages/menu/item/pages-menu-item.component.ts @@ -1,6 +1,7 @@ import {Component, EventEmitter, Input, Output,OnInit} from '@angular/core'; import { Router} from '@angular/router'; -import {Subscription} from 'rxjs'; +import { MenuService } from '@app/_services/menu.service'; +import { PagesService } from '@app/_services/pages.service'; @Component({ selector: 'pages-menu-item', @@ -13,7 +14,11 @@ export class PagesMenuItemComponent { public toggle=false; currentURL:string; - constructor(private router: Router) { + constructor( + private router: Router, + private menuService: MenuService, + private pagesService: PagesService + ) { } @@ -23,44 +28,60 @@ export class PagesMenuItemComponent { } ngOnInit(){ - this.currentURL = this.router.url; this.toggle = this.current||this.parent; - this.router.events.subscribe((event:any)=>{ - if (event.url){ - this.currentURL = event.url; - this.toggle = this.current||this.parent; - } - }) + if (this.toggle) this.menuService.findChildren(this.item) } rout(link:string){ - console.log(link) - this.router.navigate([{outlets: {slider: null}}]).then( - ()=>this.router.navigate([link]) - ) + this.menuService.navURL = link; + if (this.item.type.name=='nav-page'){ + this.toggle=!this.toggle; + this.menuService.findChildren(link) + }else{ + this.router.navigate([{outlets: {slider: null}}]).then( + ()=>this.router.navigate([link]) + ) + } + } + + switching(event:boolean){ + this.menuService.navURL = this.item.link; + this.toggle=event; + this.menuService.findChildren(this.item) } get parent(){ - return this.currentURL.startsWith(this.item.link) + let parents:any; + let resp = false; + parents = this.pagesService.currentPage.value.parents?.data; + if (parents) { + resp = parents.map((item:any)=>item.link).includes(this.item.link) + } + return resp } get current(){ - return this.currentURL==this.item.link + return this.pagesService.currentPage.value.link == this.item.link + } + + get active(){ + return this.menuService.navURL == this.item.link; } get menuClass(){ - let menuClass = { - selected: this.toggle - } + let menuClass = {} menuClass['level-'+(this.level+1)] = true; return menuClass } get itemClass(){ let itemClass = { - selected: this.toggle, + unlock: this.toggle, parent: this.parent&&!this.current, - current: this.current + current: this.current, + nav: this.item.type.name == "nav-page", + active: this.active, + } itemClass['level-'+(this.level+1)] = true; return itemClass diff --git a/src/app/_modules/pages/page/page.component.ts b/src/app/_modules/pages/page/page.component.ts index 4063f21..770f252 100644 --- a/src/app/_modules/pages/page/page.component.ts +++ b/src/app/_modules/pages/page/page.component.ts @@ -74,7 +74,6 @@ export class PageComponent { ]; this.pagesService.find(this.url, {include: include.join(',')}).subscribe(res => { this.page = res?.data; - console.log('NextPage', this.page) this.pagesService.currentPage.next(this.page); this.page = res?.data; this.pagesService.setMetaFromPage(this.page); diff --git a/src/app/_services/menu.service.ts b/src/app/_services/menu.service.ts index cc83163..911e8f5 100644 --- a/src/app/_services/menu.service.ts +++ b/src/app/_services/menu.service.ts @@ -1,33 +1,45 @@ import {Injectable} from '@angular/core'; -import {HttpClient} from '@angular/common/http'; -import {Observable, BehaviorSubject} from "rxjs"; +import {BehaviorSubject} from "rxjs"; import { PagesService } from './pages.service'; -import {environment} from '@environments/environment'; @Injectable({providedIn: 'root'}) export class MenuService { - constructor( - private http: HttpClient, + constructor( private pagesService: PagesService ){} public pagesTree = new BehaviorSubject({data:[]}); - private currentPage:any; + public navURL:string; - setPagesTree(){ - let include = ['children.children.children.children.children.children.children']; - this.root({include: include.join(',')}).subscribe(res => { - this.pagesTree.next(res) - }); + setPagesTree(pageURL?:any){ + let include = {include: 'hasChildren, children.hasChildren'}; + if (pageURL){ + this.pagesService.find(pageURL,include).subscribe( + res => { + this.pagesTree.next({data:[res.data]}) + } + ) + }else{ + this.pagesService.root(include).subscribe( + res => { + this.pagesTree.next(res) + } + ); + } } - root(params?: {}): Observable { - return this.http.get(`${environment.apiUrl}/api/pages/root`, {params: params}); + findChildren(item){ + let include = {include: 'hasChildren, children.hasChildren'}; + if (!item.children && item.hasChildren) this.pagesService.find(item.link,include).subscribe( + res=>{ + item.children = res.data.children + } + ) } } \ No newline at end of file diff --git a/src/environments/environment.ts b/src/environments/environment.ts index 982bdc4..97f5634 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -7,6 +7,7 @@ export const environment = { apiUrl: 'http://api.vniigazv2.lc', clientId: 4, clientSecret: 'QC09jOPEU7mpfFerpLyAJRshFUW1T28GfhsYzJHc', + project: null }; /* diff --git a/src/vniigaz-v2/css/_main-menu.scss b/src/vniigaz-v2/css/_main-menu.scss index fc09451..aba110b 100644 --- a/src/vniigaz-v2/css/_main-menu.scss +++ b/src/vniigaz-v2/css/_main-menu.scss @@ -52,12 +52,12 @@ a.logo{ gap:24px; pages-menu-item{ font-size: 20px; - .item{ + .item:not(.nav){ drop-down{ display: none; } } - .sub-menu:not(.current){ + .sub-menu:not(.active.unlock){ display:none; } .sub-menu>pages-menu{ diff --git a/src/vniigaz-v2/vniigaz-v2.env.dev.ts b/src/vniigaz-v2/vniigaz-v2.env.dev.ts index 8491685..d2cf64d 100644 --- a/src/vniigaz-v2/vniigaz-v2.env.dev.ts +++ b/src/vniigaz-v2/vniigaz-v2.env.dev.ts @@ -6,7 +6,7 @@ export const environment = { production: false, apiUrl: 'http://api.nircms.lc', clientId: 2, - clientSecret: 'm2xpjoyMM2sSAO20BpcFyPaAs4h50J4tz6so3qM2', + clientSecret: 'z1QAYw4VxcRLXyspskb4LiA2dS9Lx1WAvEzxQPR1', project: 'vniigaz-v2' };