@docsvision/webclient
Version:
Type definitions for DocsVision WebClient scripts and extensions.
102 lines (101 loc) • 5.5 kB
TypeScript
import { TableCompositionNames, TableCompositions, TableCompositionTypes } from '@docsvision/web/components/table/interfaces';
import { Event, Store } from 'effector';
import { IComposition } from '@docsvision/web/core/composition';
export interface ICustomContextMenuOption {
id: string;
name: string;
action: (context: TableCompositions.Row | TableCompositions.HeaderRow | TableCompositions.Cell) => void;
composition?: string;
iconClassName?: string;
className?: string;
visible?: boolean;
order?: number;
blockId?: string;
/** Операция отключена */
disabled?: boolean;
}
export interface ICustomContextMenuStateData {
isOpened: boolean;
className: string;
eventTarget: CustomMenuEventTarget;
context: CustomMenuCompositions;
items: ICustomContextMenuOption[];
}
export interface ICustomContextMenuBlock {
id: string;
order?: number;
items?: ICustomContextMenuOption[];
}
export interface IParamsItemProvider<TLogic, TView> {
logic?: TLogic;
view?: TView;
}
export declare type CustomMenuCompositions = TableCompositions.Row | TableCompositions.HeaderRow | TableCompositions.Cell;
export declare type CustomMenuEventTarget = {
target: HTMLElement;
userSelection?: string;
};
export declare type CustomMenuStateData = Store<{
isOpened: boolean;
items: ICustomContextMenuOption[];
context: CustomMenuCompositions;
className: string;
eventTarget: CustomMenuEventTarget;
}>;
export declare type ContextMenuItemsManagementData<T> = {
[TableCompositionNames.TableHeaderRow]?: T;
[TableCompositionNames.TableRow]?: T;
[TableCompositionNames.TableCell]?: T;
};
export declare type ContextMenuItemsManagementDataProvider = ContextMenuItemsManagementData<IDataItemProvider[]>;
export declare type ContextMenuItemsManagementDataFilter = ContextMenuItemsManagementData<IDataItemFilter[]>;
export declare type ContextMenuComppositionTypes = TableCompositionTypes.Row | TableCompositionTypes.Cell | TableCompositionTypes.HeaderRow;
export interface IDataItem {
id: string;
composition: string;
}
export interface IDataItemProvider extends IDataItem {
getItemsToAdd: (context?: IComposition<ContextMenuComppositionTypes, unknown, unknown>) => ICustomContextMenuOption[];
}
export interface IDataItemFilter extends IDataItem {
getItemsToHide: (context: IComposition<ContextMenuComppositionTypes, unknown, unknown>) => string[];
}
/** Сервис для создания опций кастомного контекстного меню. */
export interface IContextMenuOptionsService {
/** Состояние контекстного меню */
$stateData: CustomMenuStateData;
/** Устанавлиет значение флага меню открыто/закрыто */
setOpened: Event<boolean>;
/** Устанавливает значение конекста, в котором было открыто меню */
setContext: Event<CustomMenuCompositions>;
/** Устанавливает значение DOM-элемента, на котором было открыто меню */
setEventTarget: Event<CustomMenuEventTarget>;
/** Пользовательский класс контекстного меню */
menuClassName?: string;
/** Данные функций-провайдеров контекстного меню в соответсвии с композицией */
readonly $itemProviders: Store<ContextMenuItemsManagementDataProvider>;
/** Данные функций-фильтров контекстного меню в соответсвии с композицией */
readonly $itemFilters: Store<ContextMenuItemsManagementDataFilter>;
/** Добавляет функцию-провайдер пунктов контекстного меню */
addItemProvider?: (data: IDataItemProvider) => void;
/** Удаляет функцию-провайдер пунктов контекстного меню */
deleteItemProvider?: (functionId?: string) => void;
/** Добавляет функцию-фильтр пунктов контекстного меню */
addItemFilter?: (data: IDataItemFilter) => void;
/** Удаляет функцию-фильтр пунктов контекстного меню */
deleteItemFilter?: (functionId?: string) => void;
/** Регистрирует блоки контекстного меню */
registerBlocks?: (blocks: ICustomContextMenuBlock[]) => void;
/** Удаляет зарегистрированные блоки контекстного меню */
unregisterBlocks?: (blockIds: string[]) => void;
getMenuItems?: (context: IComposition<ContextMenuComppositionTypes, unknown, unknown>) => ICustomContextMenuOption[];
/** Проверка провайдера в заданной композиции */
isAddedProvider?: (id: string, compositionName: string) => boolean;
/** Проверка фильтра в заданной композиции */
isAddedFilter?: (id: string, compositionName: string) => boolean;
}
/** Сервис для создания опций кастомного контекстного меню. */
export declare type $ContextMenuOptions = {
contextMenuOptions: IContextMenuOptionsService;
};
export declare const $ContextMenuOptions: string | ((model?: $ContextMenuOptions) => IContextMenuOptionsService);