@j2inn/app
Version:
J2 Innovations core application framework
246 lines (245 loc) • 7.58 kB
TypeScript
import type { HDict } from 'haystack-core';
import type { App } from './App';
import type { AppAccessLevel } from './AppAccessLevel';
import type { AppView } from './AppView';
import type { CustomHistory } from './CustomHistory';
/**
* The interface for the application's root store.
*/
export interface AppRootStore {
/**
* @returns The current main application being rendered by the shell or undefined
* if there is no application view loaded.
*/
readonly app: {
id: string;
name: string;
app: App;
view: AppView;
} | undefined;
/**
* @returns The current sidebar application being rendered by the shell or
* undefined if there is no sidebar application view loaded.
*/
readonly sidebar: {
id: string;
name: string;
app: App;
view: AppView;
} | undefined;
/**
* The currently installed applications.
*/
readonly apps: App[];
/**
* The current loaded project.
*
* Setting this will change the project currently being used.
*
* ```
* console.log(`The project name is ${appRootStore.project}`)
*
* // Select a different project...
* appRootStore.project = 'foo'
* ```
*/
project: string;
/**
* A boolean flag used to toggle whether the sidebar is open or not.
*
* Changing this will toggle whether the sidebar is showing or not.
*
* ```
* if (appRootStore.sidebarOpen) {
* ...
* }
*
* // Close the sidebar...
* appRootStore.sidebarOpen = false
* ```
*/
sidebarOpen: boolean;
/**
* Opens an application's view in the main view.
*
* ```
* // Open an app's main view
* appRootStore.open('finUi.myApp.main', { param: 'some param' })
* ```
*
* @param appViewId The id of the application view to open.
* This is the application's full id i.e. `myApp.myView`.
* @param state The state to load for the application.
*/
open(appViewId: string, state?: Record<string, unknown>): void;
/**
* Opens an application's view in a new browser window/tab.
*
* ```
* // Open an app's main view in a new browser window/tab
* appRootStore.openAppWindow('finUi.myApp.main', { param: 'some param' })
* ```
*
* @param appViewId The id of the application view to open.
* This is the application's full id i.e. `myApp.myView`.
* @param state The state to load for the application.
*/
openAppInNewWindow(appViewId: string, state?: Record<string, unknown>): void;
/**
* Opens an application in the sidebar view.
*
* ```
* // Open an app's main view
* appRootStore.open('finUi.myApp.main', { param: 'some param' })
* ```
*
* @param appViewId The id of the application view to open.
* This is the application's full id i.e. `myApp.mySidebarView`.
* @param state The state to load for the application.
*/
openSidebar(appViewId: string, state?: Record<string, unknown>): void;
/**
* The current locale being used.
*
* ```
* console.log(`The current user's locale is ${appRootStore.locale}`)
* ```
*/
readonly locale: string;
/**
* All the locales available to use.
*
* ```
* console.log(`All the supported locales are ${appRootStore.allLocales}`)
* ```
*/
readonly allLocales: string[];
/**
* The current context's target. An empty string means no target is
* currently selected.
*
* Changing this will also change the target.
*
* ```
* console.log(`The current target is ${appRootStore.target}`)
*
* // Change the target...
* const ref = HRef.make('p:foo:sometarget')
* appRootStore.target = ref.value
* ```
*/
target: string;
/**
* The current context's target for the sidebar. An empty string means
* the sidebar's target will fallback to the main target.
*
* Changing this will also change the target for the sidebar.
*
* * ```
* console.log(`The current target is ${appRootStore.targetSidebar}`)
*
* // Change the target for the sidebar...
* const ref = HRef.make('p:foo:sometarget')
* appRootStore.targetSidebar = ref.value
*/
targetSidebar: string;
/**
* The shell's history for the main view.
*
* ```
* appRootStore.history.pushState({ query: 'site and geoCity == "Brighton and Hove"' })
* ```
*/
readonly history: CustomHistory;
/**
* The shell's history for the sidebar view.
*
* ```
* appRootStore.history.pushState({ query: 'site and geoCity == "Brighton and Hove"' })
* ```
*/
readonly historySidebar: CustomHistory;
/**
* The record for for the currently logged in user.
*/
readonly currentUser?: HDict;
/**
* Post a message to the system. The message will be received via
* an application's {@link AppStore.onMessage} callback. Please note,
* an application also needs to declare the messages its interested in
* via {@link App.messages}.
*
* ```
* appRootStore.postAppMessage('newMessage', { data: 'some data' })
* ```
*
* @param message The message to dispatch.
* @param params The parameters for the message.
*/
postAppMessage(message: string, params?: Record<string, unknown>): void;
/**
* Register dynamic sidebar application views. This is used to dynamically
* add temporary sidebar application views at runtime. These sidebar views are
* registered from a main application view. They are only available whilst the
* the current main application view is open.
*
* ```
* appRootStore.registerSidebars({
* myDynamicSidebar: {
* // Sidebar AppView content
* }
* })
* ```
*
* @param sidebars The sidebar views to add.
*/
registerSidebars(sidebars: Record<string, AppView>): void;
/**
* Verifies if a sidebar application is currently registered.
* ```
* const sidebars = {
* myDynamicSidebar: {
* // Sidebar AppView content
* }
* }
*
* if (!hasSideBar('myDynamicSidebar')) {
* store.registerSidebars(sidebars)
* }
* ```
*
* @param name The name of the sidebar application to verify registration.
* @returns true if the sidebar application is currently registered.
*/
hasSidebar(name: string): boolean;
/**
* Unregister sidebars for an application. Only dynamic sidebars that were previously
* added via {@link AppRootStore.registerSidebars} will be unregistered.
*
* Please note, all dynamic sidebars are automatically unregistered when the
* current application view unloads.
*
* ```
* const sidebars = {
* myDynamicSidebar: {
* // Sidebar AppView content
* }
* }
*
* store.registerSidebars(sidebars)
* ...
* store.unregisterSidebars(sidebars)
* }
* ```
*
* @param sidebars The sidebars to remove.
*/
unregisterSidebars(sidebars: string[] | Record<string, AppView>): void;
/**
* Return true if the current user has the specified access to an application.
*
* @param app The application's id.
* @param access The application's access level.
*/
hasAppAccess(app: string, access: AppAccessLevel): boolean;
}