@paperbits/core
Version:
Paperbits core components.
78 lines (62 loc) • 2.69 kB
text/typescript
import * as ko from "knockout";
import template from "./navigationItemSelector.html";
import { NavigationItemViewModel } from "./navigationItemViewModel";
import { NavigationItemContract, INavigationService, NavigationItemModel } from "@paperbits/common/navigation";
import { Component, Event, Param, OnMounted } from "@paperbits/common/ko/decorators";
import { NavigationModelBinder } from "../navigationModelBinder";
import { NavigationViewModelBinder } from "./navigationViewModelBinder";
export class NavigationItemSelector {
public readonly working: ko.Observable<boolean>;
public readonly root: ko.Observable<NavigationItemViewModel>;
constructor(
private readonly navigationService: INavigationService,
private readonly navigationModelBinder: NavigationModelBinder,
private readonly navigationViewModelBinder: any // NavigationViewModelBinder
) {
// rebinding...
this.selectNavigationItem = this.selectNavigationItem.bind(this);
this.selectedNavigationItem = ko.observable<NavigationItemViewModel>();
this.working = ko.observable(true);
this.root = ko.observable();
this.initialize();
}
public selectedNavigationItem: ko.Observable<NavigationItemViewModel>;
public onSelect: (selection: NavigationItemModel) => void;
public async initialize(): Promise<void> {
this.working(true);
const navigationItems = await this.navigationService.getNavigationItems();
const lang: NavigationItemContract = {
key: "@locales",
label: "Languages"
};
navigationItems.push(lang);
const root: NavigationItemContract = {
key: null,
label: "Root",
navigationItems: navigationItems
};
const rootModel = await this.navigationModelBinder.contractToModel(root);
const rootViewModel = await this.navigationViewModelBinder.modelToViewModel(rootModel);
this.root(rootViewModel);
this.working(false);
}
public async selectNavigationItem(navigationItem: NavigationItemViewModel): Promise<void> {
this.selectedNavigationItem(navigationItem);
if (this.onSelect) {
const rootModel = this.navigationViewModelBinder.viewModelToModel(navigationItem);
this.onSelect(rootModel);
}
}
public selectNone(): void {
if (this.onSelect) {
this.onSelect(null);
}
}
}