diff --git a/packages/web-app-preview/src/App.vue b/packages/web-app-preview/src/App.vue index ebece82f165..53ba0dde723 100644 --- a/packages/web-app-preview/src/App.vue +++ b/packages/web-app-preview/src/App.vue @@ -119,7 +119,7 @@ import AppTopBar from 'web-pkg/src/components/AppTopBar.vue' import { loadPreview } from 'web-pkg/src/helpers' import { configurationManager } from 'web-pkg/src/configuration' import { unref } from '@vue/composition-api' -import { createFileRouteOptions } from 'web-pkg/src/helpers/router' +import { createFileRouteOptions, mergeFileRouteOptions } from 'web-pkg/src/helpers/router' export default defineComponent({ name: 'Preview', @@ -264,22 +264,11 @@ export default defineComponent({ // update route and url updateLocalHistory() { - const routeOptions = createFileRouteOptions( - unref(this.currentFileContext.space), - this.activeFilteredFile + const routeOptions = mergeFileRouteOptions( + this.$route, + createFileRouteOptions(unref(this.currentFileContext.space), this.activeFilteredFile) ) - Object.assign(this.$route, { - params: { - ...this.$route.params, - ...routeOptions.params - }, - query: { - ...this.$route.query, - ...routeOptions.query - } - }) - - history.pushState({}, document.title, this.$router.resolve(this.$route).href) + history.pushState({}, document.title, this.$router.resolve(routeOptions).href) }, loadMedium() { diff --git a/packages/web-pkg/src/composables/router/useFileRouteReplace.ts b/packages/web-pkg/src/composables/router/useFileRouteReplace.ts index 156becd8257..ffde3f9b2fe 100644 --- a/packages/web-pkg/src/composables/router/useFileRouteReplace.ts +++ b/packages/web-pkg/src/composables/router/useFileRouteReplace.ts @@ -1,7 +1,7 @@ import { useRouter } from './useRouter' import { useConfigurationManager } from '../configuration' import { Resource, SpaceResource } from 'web-client/src/helpers' -import { createFileRouteOptions } from '../../helpers/router' +import { createFileRouteOptions, mergeFileRouteOptions } from '../../helpers/router' import Router from 'vue-router' import { ConfigurationManager } from '../../configuration' @@ -32,21 +32,13 @@ export const useFileRouteReplace = (options: FileRouteReplaceOptions = {}) => { return false } - const routeOptions = createFileRouteOptions(space, resource, { - configurationManager - }) - const oldRoute = router.currentRoute - const newRoute = Object.assign({}, oldRoute, { - params: { - ...oldRoute.params, - ...routeOptions.params - }, - query: { - ...oldRoute.query, - ...routeOptions.query - } - }) - router.replace(newRoute) + const routeOptions = mergeFileRouteOptions( + router.currentRoute, + createFileRouteOptions(space, resource, { + configurationManager + }) + ) + router.replace(routeOptions) return true } diff --git a/packages/web-pkg/src/helpers/router/routeOptions.ts b/packages/web-pkg/src/helpers/router/routeOptions.ts index 57e5a2969ac..acb399fdb7c 100644 --- a/packages/web-pkg/src/helpers/router/routeOptions.ts +++ b/packages/web-pkg/src/helpers/router/routeOptions.ts @@ -2,6 +2,7 @@ import { isShareSpaceResource, Resource, SpaceResource } from 'web-client/src/he import { configurationManager, ConfigurationManager } from '../../configuration' import { LocationParams, LocationQuery } from '../../composables' import { isUndefined } from 'lodash-es' +import { Route } from 'vue-router' /** * Creates route options for routing into a file location: @@ -32,3 +33,19 @@ export const createFileRouteOptions = ( } } } + +export const mergeFileRouteOptions = ( + originalRoute: Route, + routeOptions: { params: LocationParams; query: LocationQuery } +): Route => { + return Object.assign({}, originalRoute, { + params: { + ...originalRoute.params, + ...routeOptions.params + }, + query: { + ...originalRoute.query, + ...routeOptions.query + } + }) +}