resources/assets/js/composables/useRouter.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { RouterKey } from '@/symbols'
import { requireInjection } from '@/utils'
import Router from '@/router'

let router: Router

export const useRouter = () => {
  router = router || requireInjection(RouterKey)

  const getRouteParam = (name: string) => router.$currentRoute.value?.params?.[name]
  const getCurrentScreen = () => router.$currentRoute.value?.screen
  const isCurrentScreen = (...screens: ScreenName[]) => screens.includes(router.$currentRoute.value?.screen!)

  const onScreenActivated = (screen: ScreenName, cb: Closure) => {
    isCurrentScreen(screen) && cb()
    router.onRouteChanged(route => route.screen === screen && cb())
  }

  return {
    getRouteParam,
    getCurrentScreen,
    isCurrentScreen,
    onScreenActivated,
    go: router.go.bind(router),
    onRouteChanged: router.onRouteChanged.bind(router),
    resolveRoute: router.resolve.bind(router),
    triggerNotFound: router.triggerNotFound.bind(router)
  }
}