From 0562331edc22514e2afa29aeffc768a544d130ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Herceg?= Date: Sat, 12 Mar 2022 11:55:24 +0100 Subject: [PATCH] Information about current route is sent to the client --- .../Framework/Resources/Scripts/dotvvm-base.ts | 15 ++++++++++++--- .../Framework/Resources/Scripts/dotvvm-root.ts | 4 +++- .../Serialization/DefaultViewModelSerializer.cs | 6 ++++++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/Framework/Framework/Resources/Scripts/dotvvm-base.ts b/src/Framework/Framework/Resources/Scripts/dotvvm-base.ts index bd02db317c..2e695befd6 100644 --- a/src/Framework/Framework/Resources/Scripts/dotvvm-base.ts +++ b/src/Framework/Framework/Resources/Scripts/dotvvm-base.ts @@ -16,6 +16,10 @@ type DotvvmCoreState = { _viewModelCacheId?: string _virtualDirectory: string _initialUrl: string, + _routeName: string, + _routeParameters: { + [name: string]: any + }, _stateManager: StateManager } @@ -60,7 +64,8 @@ export function clearViewModelCache() { delete getCoreState()._viewModelCache; } export function getCulture(): string { return getCoreState()._culture; } - +export function getRouteName(): string { return getCoreState()._routeName; } +export function getRouteParameters(): { [name: string]: any } { return getCoreState()._routeParameters; } export function getStateManager(): StateManager { return getCoreState()._stateManager } let initialViewModelWrapper: any; @@ -85,7 +90,9 @@ export function initCore(culture: string): void { _culture: culture, _initialUrl: thisViewModel.url, _virtualDirectory: thisViewModel.virtualDirectory!, - _stateManager: manager + _stateManager: manager, + _routeName: thisViewModel.routeName, + _routeParameters: thisViewModel.routeParameters } // store cached viewmodel @@ -106,7 +113,9 @@ export function initCore(culture: string): void { _culture: currentCoreState!._culture, _initialUrl: a.serverResponseObject.url, _virtualDirectory: a.serverResponseObject.virtualDirectory!, - _stateManager: currentCoreState!._stateManager + _stateManager: currentCoreState!._stateManager, + _routeName: a.serverResponseObject.routeName, + _routeParameters: a.serverResponseObject.routeParameters } }); } diff --git a/src/Framework/Framework/Resources/Scripts/dotvvm-root.ts b/src/Framework/Framework/Resources/Scripts/dotvvm-root.ts index 1064edfdef..d58c262bb4 100644 --- a/src/Framework/Framework/Resources/Scripts/dotvvm-root.ts +++ b/src/Framework/Framework/Resources/Scripts/dotvvm-root.ts @@ -1,4 +1,4 @@ -import { initCore, getViewModel, getViewModelObservable, initBindings, getCulture, getState, getStateManager } from "./dotvvm-base" +import { initCore, getViewModel, getViewModelObservable, initBindings, getCulture, getState, getStateManager, getRouteName, getRouteParameters } from "./dotvvm-base" import * as events from './events' import * as spa from "./spa/spa" import * as validation from './validation/validation' @@ -86,6 +86,8 @@ const dotvvmExports = { get viewModel() { return getViewModel() } } }, + get routeName() { return getRouteName() }, + get routeParameters() { return getRouteParameters() }, get state() { return getState() }, patchState(a: any) { getStateManager().patchState(a) diff --git a/src/Framework/Framework/ViewModel/Serialization/DefaultViewModelSerializer.cs b/src/Framework/Framework/ViewModel/Serialization/DefaultViewModelSerializer.cs index ce78606f16..5e74056ea1 100644 --- a/src/Framework/Framework/ViewModel/Serialization/DefaultViewModelSerializer.cs +++ b/src/Framework/Framework/ViewModel/Serialization/DefaultViewModelSerializer.cs @@ -149,6 +149,12 @@ public void BuildViewModel(IDotvvmRequestContext context, object? commandResult) result["renderedResources"] = JArray.FromObject(context.ResourceManager.GetNamedResourcesInOrder().Select(r => r.Name)); } + if (context.Route != null) + { + result["routeName"] = context.Route.RouteName; + result["routeParameters"] = new JObject(context.Parameters.Select(p => new JProperty(p.Key, p.Value)).ToArray()); + } + // TODO: do not send on postbacks if (validationRules?.Count > 0) result["validationRules"] = validationRules;