vue-golden-layout
Version:
Integration of the golden-layout to Vue
53 lines (52 loc) • 1.51 kB
text/typescript
import {Component, Model, Watch, Emit} from 'vue-property-decorator'
import {goldenChild} from './gl-roles'
import group from './gl-group.vue'
//We have to re-define : ts is lost with Vue files
class glGroup extends group {
closable: boolean
config: any
}
export class glRow extends glGroup {
get childConfig() { return {
isClosable: this.closable,
type: 'row',
...this.config
}; }
}
export class glCol extends glGroup {
get childConfig() { return {
isClosable: this.closable,
type: 'column',
...this.config
}; }
}
export class glStack extends glGroup {
type = 'stack'
activeTab: string
tabChange(tabId) { }
progTabChange(tabId) {
for(var child of this.glChildren)
if((<goldenChild>child).tabId === tabId)
(<any>this).glObject.setActiveContentItem((<any>child).container.parent);
}
get childConfig() {
(<any>this).onGlInitialise(()=> {
this.$watch(()=> {
var ci : any = (<any>this).glObject;
return ci && ci.config.activeItemIndex;
}, v=> {
if('number'=== typeof v)
this.tabChange((<goldenChild>this.glChildren[v]).tabId);
});
});
return {
//TODO: initialisation with an activeItemIndex different from 0 makes a bug (renders wrongly tab 0)
activeItemIndex: Math.max(0, (<any>this.$children).findIndex(c => c.tabId === this.activeTab)),
isClosable: this.closable,
type: 'stack',
...this.config};
}
}