diff --git a/src/app/_modules/layout/header/header.component.ts b/src/app/_modules/layout/header/header.component.ts index a34174c..0670a18 100644 --- a/src/app/_modules/layout/header/header.component.ts +++ b/src/app/_modules/layout/header/header.component.ts @@ -3,6 +3,7 @@ import {PagesService} from "@app/_services/pages.service"; import {AuthenticationService, ListsService} from "@app/_services"; import {Router} from "@angular/router"; import {Subscription} from "rxjs"; +import { MenuService } from '@app/_services/menu.service'; @Component({ selector: 'header', @@ -24,7 +25,8 @@ export class HeaderComponent { private router: Router, private pagesService: PagesService, public authenticationService: AuthenticationService, - private listsService: ListsService + private listsService: ListsService, + private menuService: MenuService ) { } @@ -36,13 +38,11 @@ export class HeaderComponent { this.listsService.result('showSettingSite').next(false); } this.controlsSubscriptionMenu = this.listsService.controls('headerMenu').subscribe(controls => { - - this.fetchMenu(); }); this.resultSubscriptionMenu = this.listsService.result('headerMenu').subscribe(res => { this.menuItems = res?.data || []; }); - this.listsService.changed.subscribe(event=>this.fetchMenu()) + this.menuService.setPagesTree() } ngOnDestroy() { @@ -51,14 +51,6 @@ export class HeaderComponent { this.resultSubscriptionMenu?.unsubscribe(); } - - fetchMenu() { - let include = ['children.children.children.children','parents','children.parents']; - this.pagesService.root({include: include.join(',')}).subscribe(res => { - this.menuItems = res.data; - }); - } - settingsSite() { let showSettingSite = localStorage.getItem('showSettingSite'); showSettingSite = showSettingSite === 'yes' ? 'no' : 'yes'; diff --git a/src/app/_modules/layout/left-content/left-content.component.ts b/src/app/_modules/layout/left-content/left-content.component.ts index dc4fc0f..28bead7 100644 --- a/src/app/_modules/layout/left-content/left-content.component.ts +++ b/src/app/_modules/layout/left-content/left-content.component.ts @@ -29,48 +29,30 @@ export class LeftContentComponent { } ngOnInit(){ - this.routeSubscription = this.router.events.subscribe(event => { - if (event instanceof NavigationEnd) this.onNavigationEnd(event); - }); this.pagesService.editMode.subscribe( mode => { this.editMode = mode; } + ); + this.pagesService.currentPage.subscribe( + page => this.fetch(page) ) } - onNavigationEnd(event: NavigationEnd) { - let url = event.url.split('(')[0]; - url = url.split('?')[0]; - if (url !== this.url) { - this.url = url; - this.fetch() + fetch(page:any){ + if (page){ + this.background = page.image?.data?.links?.full; + if (this.background) this.background = `url(${this.background})`; + this.pageName = (page.parents?.data[2]||page).name; + this.editable = page.permissions?.edit || page.permissions?.anything; + this.pageID = page.id + }else{ + this.pageName = null; + this.editable = null; + this.pagesService.editMode.next(false) } } - fetch(){ - let include = [ - 'permissions', - 'parents' - ]; - this.pagesService.find(this.url, {include: include.join(',')}).subscribe( - resp => { - let page = resp?.data; - if (page){ - this.background = page.image?.data?.links?.full; - if (this.background) this.background = `url(${this.background})`; - this.pageName = (page.parents.data[2]||page).name; - this.editable = page.permissions.edit || page.permissions.anything; - this.pageID = page.id - }else{ - this.pageName = null; - this.editable = null; - this.pagesService.editMode.next(false) - } - } - ) - } - toggleEditMode(){ this.pagesService.editMode.next(!this.editMode) } diff --git a/src/app/_modules/objects/form/slider/slider-form.component.ts b/src/app/_modules/objects/form/slider/slider-form.component.ts index e1c12a2..b77c414 100644 --- a/src/app/_modules/objects/form/slider/slider-form.component.ts +++ b/src/app/_modules/objects/form/slider/slider-form.component.ts @@ -2,7 +2,8 @@ import {Component} from '@angular/core'; import {ActivatedRoute, Router} from "@angular/router"; import {FormControl, FormGroup} from "@angular/forms"; import {FormsService, ListsService} from "@app/_services"; -import {WindowScrollingService} from "@app/_services/window-scrolling.service"; +import { MenuService } from '@app/_services/menu.service'; + import { PagesService } from '@app/_services/pages.service'; @@ -32,7 +33,7 @@ export class SliderFormComponent { private formsService: FormsService, private listsService: ListsService, private pagesService: PagesService, - private windowScrollingService: WindowScrollingService + private menuService: MenuService ) { } @@ -57,7 +58,6 @@ export class SliderFormComponent { this.initFormGroup(JSON.parse(this.route.snapshot.queryParamMap.get('extraProps'))); this.formParams = JSON.parse(this.route.snapshot.queryParamMap.get('formParams')) || {}; this.fetch(); - this.windowScrollingService.disable(); } fetch() { @@ -132,7 +132,7 @@ export class SliderFormComponent { window.open(res.asset.data.links[res.action || 'download'], "_blank"); } else { this.listsService.refresh(this.list); - if(this.type=='page')this.pagesService.changedPages(); + if(this.type=='page')this.menuService.setPagesTree(); this.close(); } }, error => { @@ -146,7 +146,6 @@ export class SliderFormComponent { } close() { - this.windowScrollingService.enable(); this.router.navigate([{outlets: {slider: null}}]).then(); } } diff --git a/src/app/_modules/pages/menu/pages-menu.component.ts b/src/app/_modules/pages/menu/pages-menu.component.ts index b0b0f81..d8c2d9c 100644 --- a/src/app/_modules/pages/menu/pages-menu.component.ts +++ b/src/app/_modules/pages/menu/pages-menu.component.ts @@ -1,6 +1,6 @@ import {Component, EventEmitter, Input, Output, OnInit} from '@angular/core'; import { Router } from '@angular/router'; -import { PagesService } from '@app/_services/pages.service'; +import { MenuService } from '@app/_services/menu.service'; @Component({ selector: 'pages-menu', @@ -16,7 +16,7 @@ export class PagesMenuComponent implements OnInit { private root = false; constructor( - private pagesService: PagesService, + private menuService: MenuService, private router: Router, ){ @@ -38,7 +38,7 @@ export class PagesMenuComponent implements OnInit { if (!this.items){ this.root = true; - this.pagesService.pagesTree.subscribe(res=>{ + this.menuService.pagesTree.subscribe(res=>{ this.items = res.data }); } diff --git a/src/app/_modules/pages/page/page.component.html b/src/app/_modules/pages/page/page.component.html index f9c2569..86ad120 100644 --- a/src/app/_modules/pages/page/page.component.html +++ b/src/app/_modules/pages/page/page.component.html @@ -2,14 +2,14 @@ -
- - - - - -

Page type {{page?.type?.name}} is undefined

-
+
+ + + + + +

Page type {{page?.type?.name}} is undefined

+
diff --git a/src/app/_modules/pages/page/page.component.ts b/src/app/_modules/pages/page/page.component.ts index 72b0d9f..4063f21 100644 --- a/src/app/_modules/pages/page/page.component.ts +++ b/src/app/_modules/pages/page/page.component.ts @@ -12,11 +12,8 @@ export class PageComponent { public page: any; public editMode: boolean; public loading = false; - public menuItems:any[] private url: string; private inited = false; - public subMenu:any; - public pageTopName:string; routeSubscription?: Subscription; subscription: Subscription; @@ -77,32 +74,13 @@ export class PageComponent { ]; this.pagesService.find(this.url, {include: include.join(',')}).subscribe(res => { this.page = res?.data; - this.loading = false; - this.fetchMenu(); + console.log('NextPage', this.page) + this.pagesService.currentPage.next(this.page); + this.page = res?.data; this.pagesService.setMetaFromPage(this.page); + this.loading = false; }, error => { this.loading = false; }); } - - fetchMenu() { - let include = ['children.children.children.children']; - this.pagesService.root({include: include.join(',')}).subscribe(res => { - this.menuItems = res.data; - let topItem:any = null; - this.subMenu = []; - this.pageTopName = this.page.name; - - topItem = this.menuItems.find(item=>this.page.link.startsWith(item.link)); - this.subMenu = topItem?.children.data; - this.pageTopName = topItem?.name || this.pageTopName; - - topItem = this.subMenu?.find(item=>this.page.link.startsWith(item.link)); - this.pageTopName = topItem?.name || this.pageTopName; - this.subMenu = topItem?.children.data - }); - } - - - } diff --git a/src/app/_modules/viget/slider/slider.component.ts b/src/app/_modules/viget/slider/slider.component.ts index 3990bbf..a921bdc 100644 --- a/src/app/_modules/viget/slider/slider.component.ts +++ b/src/app/_modules/viget/slider/slider.component.ts @@ -1,5 +1,6 @@ import { AfterViewInit, Component, Input, OnInit } from '@angular/core'; import { Router } from '@angular/router'; +import {WindowScrollingService} from "@app/_services/window-scrolling.service"; @Component({ selector: 'slider', @@ -13,7 +14,8 @@ export class SliderComponent implements OnInit { css:any; constructor( - private router:Router + private router:Router, + private windowScrollingService: WindowScrollingService ){} ngOnInit(){ @@ -21,6 +23,10 @@ export class SliderComponent implements OnInit { 'left-side': this.side=='left', 'right-side': this.side=='right' } + this.windowScrollingService.disable(); + } + ngOnDestroy(){ + this.windowScrollingService.enable(); } diff --git a/src/app/_services/menu.service.ts b/src/app/_services/menu.service.ts new file mode 100644 index 0000000..c33b849 --- /dev/null +++ b/src/app/_services/menu.service.ts @@ -0,0 +1,27 @@ +import {Injectable} from '@angular/core'; +import {HttpClient} from '@angular/common/http'; +import {environment} from '@environments/environment'; +import {Observable, BehaviorSubject} from "rxjs"; + + +@Injectable({providedIn: 'root'}) +export class MenuService { + constructor( + private http: HttpClient + ){} + + public pagesTree = new BehaviorSubject({data:[]}); + + + setPagesTree(){ + let include = ['children.children.children.children.children.children.children']; + this.root({include: include.join(',')}).subscribe(res => { + this.pagesTree.next(res) + }); + } + + root(params?: {}): Observable { + return this.http.get(`${environment.apiUrl}/api/pages/root`, {params: params}); + } + +} \ No newline at end of file diff --git a/src/app/_services/pages.service.ts b/src/app/_services/pages.service.ts index f227a79..1e38bf9 100644 --- a/src/app/_services/pages.service.ts +++ b/src/app/_services/pages.service.ts @@ -12,6 +12,7 @@ export class PagesService { this.changedPages() } + public currentPage = new BehaviorSubject({data:[]}); public pagesTree: BehaviorSubject; public editMode = new BehaviorSubject(false); public pageMeta: BehaviorSubject; @@ -24,6 +25,7 @@ export class PagesService { } + root(params?: {}): Observable { return this.http.get(`${environment.apiUrl}/api/pages/root`, {params: params}); }