@finos/legend-application
Version:
Legend application core
115 lines • 4.73 kB
TypeScript
/**
* Copyright (c) 2020-present, Goldman Sachs
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export type NavigationAddress = string;
export type NavigationLocationParameterValue = string | undefined;
export type NavigationLocation = string;
export type NavigationZone = string;
export declare const NAVIGATION_ZONE_SEPARATOR = ".";
export declare const NAVIGATION_ZONE_PREFIX = "#";
/**
* This is an initial attempt to generalize the application navigation to other platforms
*
* NOTE: this might **NOT** be the right way to do this. Our intention here is to make
* app navigator something generic enough so we are somewhat platform-agnostic
* i.e. browser, electron, PC, UNIX, etc.
*
* We should design a more advanced concept `Location` to pass around.
* Also, we should also generalize Router so it handles more than just
* URLs. If we make `router` and `navigator` work together, we can potentially generalize
* application navigation
*
* However, this depends on how and when we move to another platform, like `electron` for example
* See https://github.com/finos/legend-studio/issues/718
*/
export interface ApplicationNavigator {
/**
* Reload the application using the same address
*/
reload(options?: {
ignoreBlocking?: boolean | undefined;
}): void;
/**
* Navigate to the specified location
*
* NOTE: this will reload the application
* so application states will not be preserved
* after navigation
*/
goToLocation(location: NavigationLocation, options?: {
ignoreBlocking?: boolean | undefined;
}): void;
/**
* Visit the specified address
*/
goToAddress(address: NavigationAddress, options?: {
ignoreBlocking?: boolean | undefined;
}): void;
/**
* Visit the specified address in a new window
*/
visitAddress(address: NavigationAddress): void;
/**
* Generate the address from the current base address and the specified location
*/
generateAddress(location: NavigationLocation): NavigationAddress;
/**
* Update the current location
*
* NOTE: any navigation actions: reload, go to address, go to location, etc.
* explicitly updates the current location, this action will just update the
* location without doing any navigation.
*
* NOTE: we need to reset zone when changing location
*/
updateCurrentLocation(location: NavigationLocation): void;
/**
* Update the current zone
*
* Changing the address and location might potentially already included changing
* the zone, this action will just update the zone.
*/
updateCurrentZone(zone: NavigationZone): void;
resetZone(): void;
/**
* Get the current address base
*/
getCurrentBaseAddress(): NavigationAddress;
getCurrentAddress(): NavigationAddress;
getCurrentLocation(): NavigationLocation;
getCurrentLocationParameters<T extends Record<string, NavigationLocationParameterValue>>(): T;
getCurrentLocationParameterValue(key: string): NavigationLocationParameterValue;
getCurrentZone(): NavigationZone;
/**
* Block all kinds of navigation, including going to another location,
* changing address, and native platform navigation (e.g. in web browser, we will
* block back/forward buttons), etc.
*/
blockNavigation(blockCheckers: (() => boolean)[], onBlock?: ((onProceed: () => void) => void) | undefined, onNativePlatformNavigationBlock?: (() => void) | undefined): void;
unblockNavigation(): void;
get isNavigationBlocked(): boolean;
/**
* Remove a transient parameter, i.e. parameter that the application reads in and internalize
* as a state and then remove from the address as it's no longer needed and would dirty the address.
*
* NOTE: This is somewhat a non-standard and hacky behavior, please avoid using this unless you know what you are doing.
*/
INTERNAL__internalizeTransientParameter(key: string): void;
}
export declare class NavigationService {
readonly navigator: ApplicationNavigator;
constructor(navigator: ApplicationNavigator);
}
//# sourceMappingURL=NavigationService.d.ts.map