UNPKG

@docsvision/webclient

Version:

Type definitions for DocsVision WebClient scripts and extensions.

168 lines (167 loc) 8.43 kB
import { $LayoutFileController } from "@docsvision/webclient/Generated/DocsVision.WebClient.Controllers"; import { GenModels } from '@docsvision/webclient/Generated/DocsVision.WebClient.Models'; import { $FileController } from "@docsvision/webclient/Legacy/FileController"; import { IFilePreviewModel } from "@docsvision/webclient/Legacy/IFilePreviewModel"; import { $CardId, $EditOperationStore } from '@docsvision/webclient/System/LayoutServices'; import React from "react"; import { RequestHelper } from '@docsvision/webclient/System/RequestHelper'; /** @internal Свойства для {@link FilePreview} */ export interface IFilePreviewProps { /** Идентификатор файла. */ fileId: string; /** Идентификатор карточки файла. */ fileCardId: string; /** Расширение файла */ fileExtension?: string; /** Имя файла */ fileName?: string; ownerCardId?: string; focusTrap?: boolean; /** Идентификатор версии файла */ versionId: string; /** Текущий номер страницы (начинается с 1, по умолчанию - 1). */ currentPage?: number; /** Уникальный идентификатор превью файла, нужный, если между открытиями одного и того же превью оно может поменяться, а браузер его кэширует. */ fileCacheId?: string; /** Вызывается при закрытии FilePreview. */ onClose?: () => void; /** Показывать ли комментарии */ showComments?: boolean; canDownload?: () => boolean; /** Можно ли создать новый комментарий. */ canCreateComment?: () => boolean; /** Можно ли изменить последний комментарий. */ canEditLastComment?: () => boolean; /** Можно ли удалить последний комментарий. */ canDeleteLastComment?: () => boolean; onDownloadClick?: (ev: React.MouseEvent) => void; onCommentsChanged?: (comments: GenModels.VersionedFileCommentModel[]) => void; services: $FileController & $LayoutFileController & $CardId & Partial<$FilePreviewService> & $EditOperationStore; } /** @internal */ export interface IFilePreviewState { /** Информацию о файле и его превью. */ preview: IFilePreviewModel; /** Содержит ли поле ввода страницу ошибку. */ isPageInputError: boolean; /** Редактируется ли поле ввода страницы в данный момент. */ isEditingPageInput: boolean; isEditingTop: boolean; /** Загружаются ли в данный момент данные для предпросмотра файла. */ isLoading: boolean; /** Загружается ли в данный момент изображения для предпросмотра по ссылке . */ isImageLoading: boolean; /** Включено ли масштабирование. */ isScaling: boolean; /** Является ли файл PDF и выставлен ли режим прредпросмотра через pdf.js */ idPdfJSMode: boolean; /** Загрузка библиотеки pdf.js по требованию */ loadPdfJsHelper: RequestHelper; /** Загрузка файла */ loadPdfFileHelper: RequestHelper; /** Документ для PDF.js просмотра */ pdfJSDoc: any; /** Текущий номер страницы (начинается с 1). */ currentPage: number; pageInputValue: string; pageInput: HTMLInputElement; } export interface IFilePreviewService { focusTrapDisabled: boolean; } export declare type $FilePreviewService = { filePreviewService: IFilePreviewService; }; export declare const $FilePreviewService: string | ((model?: $FilePreviewService) => IFilePreviewService); export declare class FilePreview extends React.Component<IFilePreviewProps, IFilePreviewState> { /** TODO: To refresh on edit this file by webdav. Remove it after removing tasks's razor templates. */ private cacheId; private canvas; private canvasContext; private pageNumPending; private pageRendering; private maxCanvasPixels; private canvasWrapper; private CSS_UNITS; private SCROLLBAR_PADDING; private pages; private hasRestrictedScaling; constructor(props: IFilePreviewProps); /** @internal */ UNSAFE_componentWillReceiveProps(nextProps: IFilePreviewProps): void; /** @internal */ UNSAFE_componentWillMount(): void; componentDidMount(): void; protected attachCanvas(element: HTMLCanvasElement): void; protected attachCanvasWrapper(element: HTMLElement): void; /** * Закрузить данные о файле для нужной страницы. * @param page Номер загружаемой страницы */ protected load(page: number): Promise<IFilePreviewModel>; private loadPdfJS; private loadPdfJSData; protected renderPage: (pageNumber: any) => Promise<void>; private paintOnCanvas; private getPageWidthScale; private getOutputScale; private getMaxCanvasPixels; private approximateFraction; private roundToDivide; protected queueRenderPage: (pageNumber: any) => Promise<void>; /** При закрытии FilePreview. */ protected onClose: () => void; /** URL изображения для текущей страницы. */ protected getCurrentImageUrl: () => string; /** URL для скачивания файла. */ protected getDownloadFileUrl: () => string; protected get canDownload(): boolean; /** Перейти на первую страницу. */ protected goToFirstPage: () => void; /** Перейти на последнюю страницу. */ protected goToLastPage: () => void; /** Перейти на предыдущую страницу. */ protected goToPrevPage: () => void; /** Перейти на следующую страницу. */ protected goToNextPage: () => void; /** * Перейти на указанную страницу. * @param pageNumber Номер страницы для перехода */ protected goToPage: (pageNumber: number) => void; /** * Можно ли перейти на указанную страницу. * @param pageNumber Номер страницы для перехода */ protected canGoToPage: (pageNumber: number) => boolean; /** * Проверка на ввод только целочисленного номера страницы * @param event Событие клавиатуры */ protected onPageInputKeyDown: (event: React.KeyboardEvent<any>) => void; /** * При изменении текущего номера страницы в текстовом поле ввода элемента управления * @param event Событие изменения */ protected onPageInputChange: (event: React.FormEvent<any>) => void; /** * При потери фокуса элементом управления. * @param event Событие изменения фокуса */ protected onPageInputBlur: (event: React.FocusEvent<any>) => void; /** Переключение режима масштабирования. */ protected toggleScaleMode: () => void; protected selectInput: (input: HTMLInputElement) => void; private preloadImage; /** Отрисовка заголовка предпросмотра файла. */ protected renderHeader(): JSX.Element; /** Отрисовка элементов управления (навигация по страницам, скачивания и т.д.). */ protected renderControls(top: boolean): JSX.Element; /** Отрисовка блока с комментариями. */ protected renderComments(): JSX.Element; protected renderCanvas(): JSX.Element; protected renderStandardImage(isLoading: boolean): JSX.Element; protected renderPreviewImage(isLoading: boolean): JSX.Element; /** @internal */ render(): JSX.Element; }