UNPKG

@docsvision/webclient

Version:

Type definitions for DocsVision WebClient scripts and extensions.

61 lines (60 loc) 5.15 kB
import { RouteHandleResult } from "@docsvision/webclient/System/RouteHandleResult"; import { RouteType } from "@docsvision/webclient/System/RouteType"; import { RouteSemantics } from '@docsvision/webclient/System/RouteSemantics'; /** * Обработчик роута, который собирает и загружает данные роута, а также отображает содержимое в UI. * * При реализации его методов следует учитывать следующие ньюансы: * * 1. Прежде читать значения каких-либо свойств в RouteData, необходимо проверить, что они там есть. * Если их нет (и они критичны для работы хандлера), то следует вернуть RouteHandleResults.MissingRequiredData. Например: * * if (RouteHelpers.someIsUndefined(routeData.gridModel)) { * return RouteHandleResults.MissingRequiredData; * } * * 2. Прежде чем вычислять и записывать какие-то значения в RouteData, необходимо проверить, нет ли их там. Если они уже есть, то нужно ничего не делать. * Это связано с тем, что хандлер может вызываться многократно, и он не должен выполнять работу, которая уже выполнена. * Например, у нас уже загружено содержимое грида папки, и мы хотим только поменять заголовок. * В этом случае запустятся все хандлеры, но загружать данные папки нет необходимости. * Если нам понадобится обновить содержимое грида, то следует очистить соответствующее свойство в информации о роуте и вызвать setCurrentRoute. * Тогда соответствующий хандлер увидит, что свойство пустое и заново загрузит эти данные. * 3. Хандлер должен выполнять только одну, как можно меньшую задачу. * Должно быть легко сформулировать эту задачу в двух словах, она должна быть понятна из названия. * * Регистрируются хандлеры после объявления класса следующим образом: * * export class MyRouteHandler implements IRouteHandler<IFolderRouteData> { * ... * } * * SammyHelper.RouterInitialization.subscribe((sammy: SammyHelper) => { * sammy.addHandler(StandardRoutes.AllRoutes, new MyRouteHandler()); * }); * * @param T Тип данных роута. Например, {@link IFolderRouteData}. */ export interface IRouteHandler<T> { /** Имя хандлера для отладочных целей. */ name: string; /** Порядок среди других хандлеров. По умолчанию 1. */ order?: number; /** * Подготавливает информацию, которая необходима для загрузки основной информации роута. * Например, при открытии папки в этом обработчике собирается информация о представлении, фильтре, сортировке и т.д. */ prepareRouteDataLoad?(routeData: Partial<T>, routeType: RouteType, routeSemantics?: RouteSemantics): Promise<RouteHandleResult>; /** Загружает основную информацию роута. */ loadRouteData?(routeData: Partial<T>, routeType: RouteType, routeSemantics?: RouteSemantics): Promise<RouteHandleResult>; /** Делает предварительную обработку загруженной информации, перед тем как ее отображать. */ prepareRouteMount?(routeData: T, routeType: RouteType, routeSemantics?: RouteSemantics): Promise<RouteHandleResult>; /** Отображает содержимое роута в UI. */ mountRoute?(data: T, routeType: RouteType, routeSemantics?: RouteSemantics): Promise<RouteHandleResult>; /** Очищает UI от содержимого роута, освобождает все занятые ресурсы (таймеры, подписки на события и т.д.). */ unmountRoute?(data: T, routeType: RouteType, routeSemantics?: RouteSemantics): Promise<{} | void>; /** Содердит логику отмены выполнения обработчика */ cancelRouteProcessing?(): Promise<{}>; } export declare const AFTER_STANDARD_HANDLERS = 1000; export declare const BEFORE_STANDARD_HANDLERS = -1000; export declare const STANDARD_HANDLERS_ORDER = 1;