import { Core } from '@pdftron/webviewer'; import { FuturableOrLazy } from './futurable'; import { MemoizedPromise } from './memoizedPromise'; export interface FileDetails { /** * The name of the file. */ name: string; /** * Optional ID for file. If falsy, will generate a unique ID. */ id?: string; /** * The original name of the file. * @default name */ originalName?: string; /** * File extension. For example, `'pdf'`. If not provided, will be parsed from * `name`. */ extension?: string; /** * File object, or function to get it. One of `fileObj` or `documentObj` must * be given. */ fileObj?: MemoizedPromise | FuturableOrLazy; /** * Document object, or function to get it. One of `fileObj` or `documentObj` * must be given. */ documentObj?: MemoizedPromise | FuturableOrLazy; /** * Thumbnail data URL string, or function to get it. */ thumbnail?: MemoizedPromise | FuturableOrLazy; /** * Set the WebViewer license key for only this file. If you wish to set for * all files, use the static `File.setGlobalLicense` method. This local * license will take priority over the global license. */ license?: string; /** * A reference to the document that was used to create this File class. Used * as an optimization where applicable. If passed, `pageNumber` must also be * passed. */ fullDocumentObj?: Core.Document; /** * Used in conjunction with `fullDocumentObj`. Represents the page number of * `fullDocumentObj` that this file belongs too. */ pageNumber?: number; } export interface FileLike { id: string; name: string; originalName: string; extension: string; thumbnail: MemoizedPromise; fileObj: MemoizedPromise; documentObj: MemoizedPromise; subscribe: (...args: any) => () => void; fullDocumentObj?: Core.Document; pageNumber?: number; } export declare type FileEventType = /** Triggered when the documentObj is updated. */ 'onrotate' /** Triggered when the documentObj is updated. */ | 'ondocumentobjchange' /** Triggered when the fileObj is updated. */ | 'onfileobjchange' /** Triggered when the thumbnail is updated. */ | 'onthumbnailchange' /** Triggered when the name is updated. */ | 'onnamechange' /** Triggered when the thumbnail is frozen. */ | 'onfreezethumbnail' /** Triggered when the thumbnail is unfrozen. */ | 'onunfreezethumbnail' /** Change is always fired after every other event, unless stopPropagation was called. */ | 'onchange'; export declare type FileEventListener = () => void; export declare type FileEventListenersObj = Partial<{ [type in FileEventType]: FileEventListener[]; }>; /** A representation of the data within a file. */ export declare class File implements FileLike { private _id; private _name; private _originalName; private _extension; private _fileObj; private _documentObj; private _thumbnail; private _freezeThumbnail; private _subscribers; private _license?; private _fullDocumentObj?; private _pageNumber?; /** * Initialize the `File`. * @param fileDetails The file details object or file-like class to initialize * this `File` with. */ constructor(fileDetails: FileDetails); /** * Set the license key in order to use full WebViewer features. This only * needs to be done once, and will be used globally by all files. * @param license The license key for WebViewer. */ static setGlobalLicense(license: string): void; /** A unique ID generated for the file. */ get id(): string; /** The original name of the file. */ get originalName(): string; /** The extension of the file (for example `'pdf'`). */ get extension(): string; /** A memoized promise for the thumbnail. */ get thumbnail(): MemoizedPromise; /** A memoized promise for the fileObj. */ get fileObj(): MemoizedPromise; /** A memoized promise for the documentObj. */ get documentObj(): MemoizedPromise; /** Gets the full document object if provided during initialization. */ get fullDocumentObj(): Core.Document | undefined; /** Gets the page index if provided during initialization. */ get pageNumber(): number | undefined; /** The name of the file. */ get name(): string; set name(name: string); /** Freeze to prevent thumbnail from changing. */ get freezeThumbnail(): boolean; set freezeThumbnail(freezeThumbnail: boolean); /** * Set the thumbnail or give a futurable or getter. * @param thumbnail The thumbnail, promise, or getter for the thumbnail. */ setThumbnail(thumbnail?: FuturableOrLazy): void; /** * Set the fileObj or give a futurable or getter. * @param fileObj The fileObj, promise, or getter for the fileObj. */ setFileObj(fileObj?: FuturableOrLazy): void; /** * Set the documentObj or give a futurable or getter. * @param documentObj The documentObj, promise, or getter for the documentObj. */ setDocumentObj(documentObj?: FuturableOrLazy): void; /** * Use this file to make updates to `documentObj` that you want reflected in * `fileObj` and `thumbnail`. Since mutations directly to `documentObj` will * not be detected, using this function tells `File` to trigger an update. */ updateDocumentObj(updater: (documentObj: Core.Document | undefined) => Promise): Promise; /** * Rotate 90 degrees clockwise unless `counterclockwise` is true. * @param counterclockwise Rotate 90 degrees counterclockwise. */ rotate(counterclockwise?: boolean): Promise; /** * Creates a clone of the file with a new `documentObj`. This is the * recommended way of duplicating files, as it will prevent them both * referencing the same documentObj. * @param overrides Override any of the `FileDetails` that initialize `File`. * Note that `fileObj` will be overridden by the `documentObj` in overrides, * or cloned from this file. */ clone(overrides?: Partial): File; /** * Appends an subscriber for events whose type attribute value is type. * The callback argument sets the callback that will be invoked when the event * is dispatched. * @param type The event type that will invoke the listener. * @param subscriber The listener function that will be invoked. */ subscribe(type: FileEventType, subscriber: FileEventListener): () => FileEventListener[] | undefined; /** * Dispatch an event for this file. Once all subscribers have been called for * the dispatched type, it will complete by calling all onchange subscribers. * @param type The file event type to dispatch. */ dispatchEvent(type: FileEventType): void; /** * Removes the event listener in target's event listener list with the same * type and callback. * @param type The event type that the listener is registered for. * @param subscriber The listener to remove. */ private _unsubscribe; /** Generate a thumbnail from document object. */ private _generateThumbnail; /** Generate a file object from document object. */ private _generateFileObj; /** Generate a document object from file object and extension. */ private _generateDocumentObj; }