2
0
mirror of https://github.com/tenrok/vue-meta.git synced 2026-06-18 13:30:33 +03:00
Files
vue-meta/src/useApi.ts
T
pimlie 27aaf4744a test: add render tests
fix: webpack dev server

chore: use eslint not prettier

unfeat: remove support for comments (its brokenn in Vue, maybe later)
2020-07-26 00:11:28 +02:00

56 lines
1.3 KiB
TypeScript

import { inject, getCurrentInstance, onUnmounted } from 'vue'
import { setByObject, remove } from './info'
import { Manager } from './manager'
import { createProxy, createHandler } from './proxy'
import { metaInfoKey, PolySymbol } from './symbols'
import { MetaContext, MetainfoActive, MetainfoInput } from './types'
let contextCounter: number = 0
export function useMeta (obj: MetainfoInput, manager?: Manager) {
const vm = getCurrentInstance()
if (vm) {
console.log(vm)
manager = vm.appContext.config.globalProperties.$metaManager
}
if (!manager) {
// oopsydoopsy
throw new Error('No manager or current instance')
}
const context: MetaContext = {
id: PolySymbol(`context ${contextCounter++}`),
vm,
manager
}
const unmount = <T extends Function = () => any>() => remove(context)
if (vm) {
onUnmounted(unmount)
}
if (manager.resolver.setup) {
manager.resolver.setup(context)
}
setByObject(context, obj)
const handler = /* #__PURE__ */ createHandler(context)
const meta = createProxy(obj, handler)
return {
meta,
unmount
}
}
export function useMetainfo (): MetainfoActive {
return inject(metaInfoKey)!
}
export function getCurrentManager (): Manager {
const vm = getCurrentInstance()!
return vm.appContext.config.globalProperties.$metaManager
}