vue-mobx-finegrained
Version:
Vue 3 composable for a complete MobX state management integration.
54 lines (43 loc) • 1.32 kB
text/typescript
import { inject, injectable } from 'inversify'
import { computed, makeObservable } from 'mobx'
import { NavigationRepository } from './NavigationRepository'
import { RouterRepository } from '../Routing/RouterRepository'
export class NavigationPresenter {
navigationRepository: NavigationRepository
routerRepository: RouterRepository
get viewModel() {
const vm = {
showBack: false,
currentSelectedVisibleName: '',
currentSelectedBackTarget: { visible: false, id: null },
menuItems: [],
}
const currentNode = this.navigationRepository.currentNode
if (currentNode) {
vm.currentSelectedVisibleName = this.visibleName(currentNode)
vm.menuItems = currentNode.children.map((node) => {
return { id: node.model.id, visibleName: node.model.text }
})
if (currentNode.parent) {
vm.currentSelectedBackTarget = {
visible: true,
id: currentNode.parent.model.id,
}
vm.showBack = true
}
}
return vm
}
constructor() {
makeObservable(this, {
viewModel: computed,
})
}
visibleName (node) {
return node.model.text + ' > ' + node.model.id
}
back () {
this.navigationRepository.back()
}
}