File

src/app/@core/services/menu-loader.service.ts

Index

Properties
Methods

Constructor

constructor(httpClient: HttpClient, directionService: NbLayoutDirectionService, translate: TranslateService)
Parameters :
Name Type Optional
httpClient HttpClient no
directionService NbLayoutDirectionService no
translate TranslateService no

Methods

loadFormByLang
loadFormByLang(lang: string, menuType: string)
Parameters :
Name Type Optional
lang string no
menuType string no
Returns : any
resolve
resolve(route: ActivatedRouteSnapshot)
Parameters :
Name Type Optional
route ActivatedRouteSnapshot no
Returns : any

Properties

currentDirection
currentDirection: NbLayoutDirection
Type : NbLayoutDirection
currentLang
currentLang: string
Type : string
Default value : 'fa'
Private JSON_DIR
JSON_DIR: string
Type : string
Default value : '/assets/data/menus'
ngxMenuConfig
ngxMenuConfig: any
Type : any
Default value : {}
requestList
requestList: any[]
Type : any[]
Default value : []
Public translate
translate: TranslateService
Type : TranslateService
import {Injectable} from "@angular/core";
import {ActivatedRouteSnapshot, Resolve} from "@angular/router";
import {Observable} from "rxjs/Rx";
import {HttpClient} from "@angular/common/http";
import {NbLayoutDirection, NbLayoutDirectionService} from "@nebular/theme";
import {TranslateService} from "@ngx-translate/core";
import * as _ from 'lodash';

@Injectable()
export class MenuLoaderService implements Resolve<Observable<any>> {
  private JSON_DIR = '/assets/data/menus';
  currentDirection: NbLayoutDirection;
  currentLang: string = 'fa';
  requestList: any[] = [];
  ngxMenuConfig: any = {};

  constructor(private httpClient: HttpClient,
              private directionService: NbLayoutDirectionService,
              public translate: TranslateService) {
    this.currentDirection = this.directionService.getDirection();
    // @FIXME: get current lang better ex: from browser lang
    this.currentLang = this.translate.currentLang || 'fa';
  }


  loadFormByLang(lang: string, menuType: string) {
    return this.httpClient.get(`${this.JSON_DIR}/${this.ngxMenuConfig[menuType][lang]}`);
  }

  resolve(route: ActivatedRouteSnapshot) {
    this.requestList.push(this.httpClient.get('/assets/config/menu/menu.config.json'));
    return Observable.forkJoin(this.requestList)
      .map(results => {
        return results;
      })
      .flatMap((formConfig) => {
        this.requestList = [];
        let appMenuConfig = _.first(formConfig);
        for (let menu_key of Object.keys(appMenuConfig)) {
          route.data.menus.forEach(_menuKey => {
            if (menu_key === _menuKey) {
              this.requestList.push(this.httpClient.get(`${this.JSON_DIR}/${appMenuConfig[menu_key][this.currentLang]}`).map(res => res));
            }
          });
        }
        return Observable.forkJoin(this.requestList).map(menusResult => {
          let obj = {};
          Object.keys(appMenuConfig).forEach((menu_key, index) => {
            route.data.menus.forEach(_menuKey => {
              if (menu_key === _menuKey) {
                obj[menu_key] = appMenuConfig[menu_key];
                obj[menu_key].menuItems = {};
                obj[menu_key].menuItems[this.currentLang] = menusResult[index];
              }
            });
          });
          this.ngxMenuConfig = obj;
          return obj;
        });
      })
      .catch(error => {
        return Observable.throw(error);
      })
  }
}

results matching ""

    No results matching ""