/**
 * Vue Router support
 */

import { RenderContext } from 'vue/types';
import VueRouter, { RawLocation } from 'vue-router/types';

export type RouteConfig = {
  url?: string;
  to?: RawLocation;
  replace?: boolean;
};

export function route(router: VueRouter, config: RouteConfig) {
  const { to, url, replace } = config;
  if (to && router) {
    router[replace ? 'replace' : 'push'](to);
  } else if (url) {
    replace ? location.replace(url) : (location.href = url);
  }
}

export function functionalRoute(context: RenderContext) {
  route(context.parent && context.parent.$router, context.props);
}

export type RouteProps = {
  url?: string,
  replace?: boolean;
  to?: RawLocation;
}

export const routeProps = {
  url: String,
  replace: Boolean,
  to: [String, Object]
};