import {Component, Parent, Decorator, View as NgView, NgElement} from 'angular2/angular2'
import {Nav} from 'ionic/components/nav/nav'
import {View} from 'ionic/components/view/view'
import {NavPane} from 'ionic/components/nav-pane/nav-pane'
import * as util from 'ionic/util'
// TODO consider more explicit API, a la tabs
/**
* SplitViewportDecorator is temporary until the SplitView is able to query
* its children for viewports.
*/
@Decorator({
selector: 'ion-nav[split-viewport]'
})
class SplitViewportDecorator {
constructor(
@Parent() splitView: SplitView,
navViewport: Nav
) {
splitView.setNav(navViewport)
}
}
@Component({
selector: 'ion-split-view',
properties: {
defaultView: 'defaultView',
navTitle: 'navTitle'
},
})
@NgView({
template: `
`,
directives: [SplitViewportDecorator, Nav, View]
})
export class SplitView {
constructor(
element: NgElement,
@Parent() navPane: NavPane
) {
this.domElement = element.domElement
this.navPane = navPane
// TODO mq.addEventListener() doesn't work with zone.js
// let checkScreen = () => {
// const mq = window.matchMedia('(min-width: 720px)')
// this.setEnabled(mq.matches)
// }
// window.addEventListener('resize', checkScreen)
// checkScreen()
this.setEnabled(true)
}
// Sets the first view to be shown in the viewport to the right of the splitView.
set defaultView(DefaultClass) {
this.splitViewport.push(DefaultClass, {sync: true})
}
isActive(Class) {
for (let item of this.splitViewport._stack) {
if (item.Class === Class) return true
}
return false
}
setNav(viewport) {
this.splitViewport = viewport
this.navPane.__$push = this.navPane.push
this.navPane.push = (Class, opts) => {
if (this.isEnabled) {
opts = opts || {}
util.defaults(opts, { sync: true })
if (this.splitViewport.containsClass(Class)) {
return this.splitViewport.popTo(0)
} else {
this.splitViewport.popAll()
return this.splitViewport.push(Class, opts)
}
} else {
return this.navPane.__$push(Class, opts)
}
};
}
// TODO set enabled depending on some condition (media query in this case)
setEnabled(isEnabled) {
if (isEnabled !== this.isEnabled) {
if (isEnabled) {
this.splitViewport
}
this.isEnabled = isEnabled
}
}
}