UNPKG

@nsmp/js-api

Version:

Types for jsApi

613 lines (564 loc) 30.3 kB
import { AttributeOrParamMap, Callback, CommonArgs, CommonTransferFormatTypes, FormType, IframeLayoutInfo, JsonOptions, JsonPromiseReject, MakeOptions, RestCallOptions } from './jsApiProps'; import {DeepPartial} from './utils'; import { DialogBuilder, EventActionExecutor, Frame, UtilsParams } from './classes'; export type JsApiComponentProps<Props extends {} = {}> = { context?: UIContext } & Props; export type PartialJsApi = DeepPartial<IJsApi>; export type JsApiSettings<Api = IJsApi> = { mock?: PartialJsApi & DeepPartial<Api>, getContext?: () => UIContext | undefined, getExtension?: (environment?: UIEnvironment, context?: UIContext) => Api }; export type UIUserInfo = { uuid: string }; export type UIAppContext = { classFqn?: string, objectId?: string }; export type UIAppSettings = { baseUIPath: string }; export type UIContext = { appContext: UIAppContext, appSettings: UIAppSettings, contentCode: string, moduleCode?: string, userInfo: UIUserInfo }; export type UIFrameContext = Omit<UIContext, 'contentCode' | 'moduleCode'>; export type UIEnvironment = 'smp4' | 'uiFrame' | 'ui'; export interface ICommands { /** * Команда для перехода на форму редактирования объекта. * @param {string} uuid - UUID объекта, на чью форму редактирования будет совершен переход * @returns {void} */ editObject (uuid: string): void, /** * Команда для вызова модальной формы быстрого добавления объекта. * @param {string} classFqn - FQN класса или типа, в котором настроена форма быстрого добавления * @param {string} formCode - Код формы быстрого добавления * @param {{[key: string]: any}} properties - Значения атрибутов, которые необходимо предварительно заполнить на форме * @param {(uuid: string, exception: Error | null) => void} callback - Функция, которая будет вызвана по результату работы формы * @returns {void} */ quickAddObject ( classFqn: string, formCode: string, properties: {[key: string]: any}, callback?: (uuid: string | null, exception: Error | null) => void ): void, /** * Команда для вызова модальной формы быстрого редактирования объекта. * @param {string} uuid - UUID редактируемого объекта * @param {string} formCode - Код формы быстрого редактирования * @param {{[key: string]: any}} properties - Значения атрибутов, которые необходимо предварительно заполнить на форме * @param {(uuid: string, exception: Error | null) => void} callback - Функция, которая будет вызвана по результату работы формы * @returns {void} */ quickEditObject ( uuid: string, formCode: string, properties: {[key: string]: any}, callback?: (uuid: string | null, exception: Error | null) => void ): void, /** * Команда для открытия сложной формы добавления связи и выбора объекта. * @param {string} classFqn - FQN класса объектов, которые будут доступны на форме * @param {string} presentAttributesGroupCode - Код группы атрибутов, которая будет отображаться на форме * @returns {Promise<string | null>} Возвращает UUID если выбран */ selectObjectDialog ( classFqn: string, presentAttributesGroupCode: string ): Promise<string | null> } export interface IConfiguration { /** * Метод служит для конфигурирования встроенного приложения через скриптовый модуль в SMP. * Вызывает функцию в скриптовом модуле, имя которой равняется коду контента, * в котором выведено встроенное приложение. * @param {string} moduleCode - Код модуля, функция которого будут вызываться * @param {CommonArgs[]} args - Аргументы, которые необходимо передать в функцию * @template T - Возвращаемые данные * @returns {Promise<T | JsonPromiseReject>} */ byContentCode <T>( moduleCode: string, ...args: CommonArgs[] ): Promise<T | JsonPromiseReject>, /** * Метод служит для конфигурирования встроенного приложения через скриптовый модуль в SMP. * Вызывает функцию в скриптовом модуле, имя которой равняется getConfiguration. * @param {string} moduleCode - Код модуля, функция которого будут вызываться * @param {CommonArgs[]} args - Аргументы, которые необходимо передать в функцию * @template T - Возвращаемые данные * @returns {Promise<T | JsonPromiseReject>} */ byDefault <T>( moduleCode: string, ...args: CommonArgs[] ): Promise<T | JsonPromiseReject> } export interface IContents { /** * Возвращает текущую высоту встроенного приложения в px. * Метод доступен с версии 4.16.0 * @returns {number} */ getHeight (): number, /** * Возвращает текущие размеры элемента iframe. * Метод доступен с версии 4.17.5 * @returns {Promise<IframeLayoutInfo>} */ getIframeLayoutInfo (): Promise<IframeLayoutInfo>, /** * Возвращает исходную высоту встроенного приложения в px. * Метод доступен с версии 4.16.0 * @returns {number} */ getInitialHeight (): number, /** * Возвращает параметры, сохраненные в метаинформации контента, * в котором находится встроенное приложение. * Метод доступен с версий 4.11.0.23, 4.11.5.4, 4.12.0 * @returns {Promise<AttributeOrParamMap>} */ getParameters (): Promise<AttributeOrParamMap>, /** * Задает высоту встроенного приложения в px. * Метод доступен с версий 4.15.5.11.6, 4.16.0 * @param {number} height - Требуемая высота ВП в px * @returns {Promise<{}>} */ setHeight (height: number): Promise<{}> } export interface IEventActions { /** * Возвращает класс, который позволяет вызвать пользовательское действие по событию. * Метод доступен с версии 4.16.5 * @param {string} eventUuid - Идентификатор пользовательского действия по событию для выполнения * @returns {EventActionExecutor} */ getEventActionExecutor (eventUuid: string): EventActionExecutor } export interface IEvents { /** * Подписывается на изменения значения атрибута на форме добавления\редактирования объекта * или параметра формы пользовательского действия по событию. * Метод доступен с версий 4.11.0.23, 4.11.5.4, 4.12.0 * @param {string} attrCode - Код атрибута/параметра, на изменения которого выполняется подписка * @param {(result: {attribute: string, newValue: T | CommonTransferFormatTypes}) => void} callback - Функция, которая будет вызвана при изменении атрибута/параметра * @template T - Новое значение атрибута/параметра * @returns {void} */ addFieldChangeListener ( attrCode: string, callback: <T>(result: {attribute: string, newValue: T | CommonTransferFormatTypes}) => void ): void, /** * Подписывается на изменения текущего объекта на карточке через формы быстрого добавления\редактирования объекта. * Метод доступен с версий 4.11.0.23, 4.11.5.4, 4.12.0 * @param {string} attrCode - Код атрибута, значение которого необходимо получать при изменении объекта * @param {(result: AttributeOrParamMap) => void} callback - Функция, которая будет вызвана при изменении атрибута * @returns {void} */ addSubjectChangeListener ( attrCode: string, callback: (result: AttributeOrParamMap) => void ): void, /** * Подписаться на событие скрытия контента по условиям отображения на формах добавления и редактирования. * Метод доступен с версий 4.12.5.3.10, 4.13.5.2, 4.14.0 * @param {Callback} callback - Функция, которая будет вызвана при скрытии контента по условиям отображения * @returns {void} */ onContentHide (callback: Callback): void, /** * Подписаться на событие показа контента по условиям отображения на формах добавления и редактирования. * Метод доступен с версий 4.12.5.3.10, 4.13.5.2, 4.14.0 * @param {Callback} callback - Функция, которая будет вызвана при показе контента по условиям отображения * @returns {void} */ onContentShow (callback: Callback): void, /** * Подписаться на событие выхода из полноэкранного режима приложения. * Метод доступен с версий 4.10.0.18.1, 4.11.0 * @param {Callback} callback - Функция, которая будет вызвана при выходе из полноэкранного режима * @returns {void} */ onFullscreenDisabled (callback: Callback): void, /** * Подписаться на событие разворачивания приложения на весь экран. * Метод доступен с версий 4.10.0.18.1, 4.11.0 * @param {Callback} callback - Функция, которая будет вызвана при разворачивании приложения на весь экран * @returns {void} */ onFullscreenEnabled (callback: Callback): void, /** * Подписаться на событие обновления прав на элементы карточки объекта. * Метод доступен с версий 4.13.0.20, 4.13.5.2.11, 4.13.5.3, 4.14.0.3, 4.14.5 * @param {Callback} callback - Функция, которая будет вызвана при обновлении прав * @returns {void} */ onUpdatePermissions (callback: Callback): void } export interface IForms { /** * Команда отмены всех форм открытых ранее из jsApi. * Метод доступен с версий 4.11.0.9.16, 4.12.0.36, 4.12.5.10, 4.13.0.14, 4.13.5 * @returns {void} */ cancel (): void, /** * Команда вызова формы смены ответственного. * Метод доступен с версий 4.12.0.7, 4.12.5 * @param {string} uuid - Идентификатор объекта, для которого необходимо вызвать форму * @returns {Promise<null | undefined | AttributeOrParamMap>} */ changeResponsible ( uuid: string ): Promise<null | undefined | AttributeOrParamMap>, /** * Команда для вызова формы смены статуса объекта. * Метод доступен с версий 4.12.0.7, 4.12.5 * @param {string} uuid - Идентификатор объекта, чей статус нужно поменять * @param {string[]} states - Коды целевых статусов * @param {boolean?} requiredConfirm - Нужно ли подтверждение перехода, по умолчанию - true */ changeState ( uuid: string, states: string[], requiredConfirm?: boolean ): Promise<null | undefined | AttributeOrParamMap>, /** * Возвращает тип формы, на которой находится встроенное приложение. * Метод доступен с версий 4.14.0.6.1.1, 4.15.5 * @returns {FormType} */ getType (): FormType, /** * Возвращает объект из текущего GWT контекста. * Метод доступен с версий 4.11.0.23, 4.11.5.4, 4.12.0 * @template T - Объект, чьи ключи являются кодами атрибутов/параметров, а значения - значениями соответствующего атрибута/параметра объекта из текущего контекста * @returns {Promise<T>} */ getValues <T>(): Promise<T>, /** * Проверяет, находится ли встроенное приложение на модальной форме или нет. * Метод доступен с версий 4.14.0.6.1.1, 4.15.5 * @returns {boolean} */ isModal (): boolean } export interface IModals { /** * Возвращает информацию о текущей модальной форме. * Метод доступен с версии 4.17.5 * @returns {Promise<{top: number} | null>} */ getBodyLayoutInfo (): Promise<{top: number} | null>, /** * Возвращает класс для открытия модального диалогового окна. Если на окно не выведено никаких кнопок, то по умолчанию будет выведена кнопка "ОК". * Метод доступен с версии 4.18.0 * @param {string} content - Содержание диалогового окна * @returns {DialogBuilder} */ getDialogBuilder (content: string): DialogBuilder } export interface IPage { /** * Возвращает информацию о текущих размерах "шапки" страницы. * Метод доступен с версии 4.17.5 * @returns {Promise<{height: number}>} */ getHeaderLayoutInfo (): Promise<{height: number}>, /** * Возвращает информацию о размерах страницы браузера. * Метод доступен с версии 4.17.5 * @returns {Promise<{innerHeight: number, innerWidth: number}>} */ getWindowLayoutInfo (): Promise<{innerHeight: number, innerWidth: number}> } export interface IRequests { /** * Делает запрос на указанный URL * @param {JsonOptions} options - Опции для конфигурации запроса * @template T - Возвращаемые данные * @returns {Promise<T>} - Ответ сервера, разобранный методом JSON.parse */ json <T>(options: JsonOptions): Promise<T>, /** * Делает запрос на указанный URL. Является оберткой над XmlHttpRequest * @param {MakeOptions} options - Опции для конфигурации запроса * @returns {Promise<string>} - Ответ сервера в виде строки */ make (options: MakeOptions): Promise<string> } export interface IUrls { /** * Возвращает URL интерфейса оператора * @returns {string} */ base (): string, /** * Вызывает переход по переданному URL. * Метод доступен с версий 4.13.0.4, 4.13.5 * @param {string} link - Ссылка для перехода * @returns {void} */ goTo (link: string): void, /** * Возвращает URL на форму добавления объекта * @param {string} fqn - FQN класса, на форму добавления которого нужно сгенерировать ссылку * @returns {string} */ objectAddForm (fqn: string): string, /** * Возвращает URL на карточку объекта * @param {string} uuid - UUID объекта, на карточку которого нужно сгенерировать ссылку * @returns {string} */ objectCard (uuid: string): string, /** * Возвращает URL на форму редактирования объекта * @param {string} uuid - UUID объекта, на форму редактирования которого нужно сгенерировать ссылку * @returns {string} */ objectEditForm (uuid: string): string } export interface IUtils { /** * Метод позволяет определить опциональные параметры для поиска и получения объектов. * Метод доступен с версии 4.13.0.7.5, 4.13.5 * @returns {UtilsParams} */ buildParams (): UtilsParams, /** * Метод для создания объекта с указанными значениями атрибутов. * Метод доступен с версии 4.13.0.7.5, 4.13.5 * @param {string} fqn - Код типа создаваемого объекта * @param {AttributeOrParamMap} attributes - Значения атрибутов создаваемого объекта * @param {UtilsParams} params - Позволяет задать список возвращаемых атрибутов, является результатом работы метода jsApi.utils.buildParams(). Если не задан, возвращаются все атрибуты объекта * @returns {Promise<AttributeOrParamMap>} */ create (fqn: string, attributes: AttributeOrParamMap, params?: UtilsParams): Promise<AttributeOrParamMap>, /** * Метод для удаления конкретного объекта по его идентификатору. * Метод доступен с версии 4.13.0.7.5, 4.13.5 * @param {string} uuid - Идентификатор объекта, который нужно удалить * @returns {Promise<string>} */ delete (uuid: string): Promise<string>, /** * Метод для редактирования конкретного объекта по его идентификатору. * Метод доступен с версии 4.13.0.7.5, 4.13.5 * @param {string} uuid - Идентификатор объекта, который нужно получить * @param {AttributeOrParamMap} attributes - Значения изменяемых атрибутов объекта * @param {UtilsParams} params - Позволяет задать список возвращаемых атрибутов, является результатом работы метода jsApi.utils.buildParams(). Если не задан, возвращаются все атрибуты объекта * @returns {Promise<AttributeOrParamMap>} */ edit (uuid: string, attributes: AttributeOrParamMap, params?: UtilsParams): Promise<AttributeOrParamMap>, /** * Метод для поиска объектов по значениям их атрибутов. * Метод доступен с версии 4.13.0.7.5, 4.13.5 * @param {string} uuid - Идентификатор объекта, который нужно получить * @param {AttributeOrParamMap} attributes - Значения атрибутов, с которыми выполняется поиск объектов * @param {UtilsParams?} params - Позволяет задать список возвращаемых атрибутов, является результатом работы метода jsApi.utils.buildParams(). Если не задан, возвращаются все атрибуты объекта * @returns {Promise<AttributeOrParamMap[]>} */ find (uuid: string, attributes: AttributeOrParamMap, params?: UtilsParams): Promise<AttributeOrParamMap[]>, /** * Метод для поиска первого подходящего объекта по значению их атрибутов. * Метод доступен с версии 4.13.0.7.5, 4.13.5 * @param {string} uuid - Идентификатор объекта, который нужно получить * @param {AttributeOrParamMap} attributes - Значения атрибутов, с которыми выполняется поиск объектов * @param {UtilsParams?} params - Позволяет задать список возвращаемых атрибутов, является результатом работы метода jsApi.utils.buildParams(). Если не задан, возвращаются все атрибуты объекта * @returns {Promise<AttributeOrParamMap>} */ findFirst (uuid: string, attributes: AttributeOrParamMap, params?: UtilsParams): Promise<AttributeOrParamMap>, /** * Метод для получения конкретного объекта по его идентификатору. * Метод доступен с версии 4.13.0.7.5, 4.13.5 * @param {string} uuid - Идентификатор объекта, который нужно получить * @param {UtilsParams} params - Позволяет задать список возвращаемых атрибутов, является результатом работы метода jsApi.utils.buildParams(). Если не задан, возвращаются все атрибуты объекта * @returns {Promise<AttributeOrParamMap>} */ get (uuid: string, params?: UtilsParams): Promise<AttributeOrParamMap> } export interface IWebsockets { /** * Подключиться к брокеру сообщений, передаваемых через websocket-канал. * Метод доступен с версии 4.11.5 * @param {() => void} callback - Функция, которая будет вызвана после подключения к брокеру сообщений * @returns {void} */ connect (callback: () => void): void, /** * Отключиться от брокера сообщений, передаваемых через websocket-канал. * Метод доступен с версии 4.11.5 * @returns {void} */ disconnect (): void, /** * Отправить сообщение в определенный адрес через websocket-канал. * Автоматически подключается к брокеру сообщений перед отправкой, если еще не подключены. * Метод доступен с версии 4.11.5 * @param {string} destination - Адрес в websocket-канале, в который отправляем сообщение * @param {string} message - Отправляемое сообщение * @returns {void} */ send (destination: string, message: string): void, /** * Подписаться на сообщения, передаваемые через websocket-канал. * Автоматически подключается к брокеру сообщений перед подпиской, если еще не подключены. * Метод доступен с версии 4.11.5 * @param {string} destination - Адрес в websocket-канале, на который подписываемся * @param {(message: Frame) => void} callback - Функция, которая будет вызвана при приходе сообщения через websocket-канал, на адрес destination * @returns {void} */ subscribe (destination: string, callback: (message: Frame) => void): void, /** * Отписаться от получения сообщений, передаваемых через websocket-канал. * Метод доступен с версии 4.11.5 * @param {string} destination - Адрес в websocket-канале, от рассылки на который отписываемся * @returns {void} */ unsubscribe (destination: string): void } export interface IJsApi { commands: ICommands, configuration: IConfiguration, contents: IContents, eventActions: IEventActions, events: IEvents, /** * Метод возвращает идентификатор объекта, чья карточка открыта в данный момент * @returns {string | null} */ extractSubjectUuid (): string | null, /** * Метод позволяет найти код текущего встроенного приложения * @returns {string} */ findApplicationCode (): string, /** * Метод позволяет найти код контента, в котором выведено текущее приложение * @returns {string} */ findContentCode (): string, forms: IForms, /** * Возвращает значение, заданное в свойстве baseurl в dbaccess.properties * @returns {string} */ getAppBaseUrl (): string, /** * Возвращает URL до REST API для использования в ВП * @returns {string} */ getAppRestBaseUrl (): string, /** * Возвращает тип браузера, в котором осуществляется запуск встроенного приложения. * Метод доступен с версии 4.17.0 * @returns {'browser' | 'webView'} */ getBrowserType (): 'browser' | 'webView', /** * Возвращает текущую локаль пользователя * @returns {string} */ getCurrentLocale (): string, /** * Возвращает объект, соответствующий текущему пользователю * @returns {UIUserInfo} */ getCurrentUser (): UIUserInfo, /** * Возвращает режим отображения встроенного приложения: развернуто на весь экран или нормальный режим * @returns {'fullScreen' | 'normal'} */ getViewMode (): 'fullScreen' | 'normal', /** * Команда для получения типа WebView, в котором запущено встроенное приложение. * Метод доступен с версии 4.17.0 * @returns {'Android' | 'iOS' | null} */ getWebViewType (): 'Android' | 'iOS' | null, /** * Определяет, находится ли приложение на форме добавления * @returns {boolean} */ isAddForm (): boolean, /** * Определяет, находится ли приложение на форме редактирования * @returns {boolean} */ isEditForm () : boolean, /** * Определяет, находится ли приложение на карточке объекта * @returns {boolean} */ isOnObjectCard (): boolean, modals: IModals, page: IPage, /** * Уведомляет SMP о том, что атрибут/параметр редактируется встроенным приложением * @param {string} attributeCode - Код атрибута/параметра, значение которого редактируется встроенным приложением * @param {<T>() => T} resultCallback - Функция, которая вызывается во время сохранения формы. Результат выполнения функции принимается за значение атрибута/параметра * @template T - Результат выполнения функции обратного вызова * @returns {void} */ registerAttributeToModification (attributeCode: string, resultCallback: <T>() => T): void, requests: IRequests, /** * Выполняет REST запрос на сервер SMP * @param {string} url - Весь URL, начиная с имени REST метода * @param {RestCallOptions} options - Опции для конфигурации запроса * @returns {Promise<string>} - Ответ сервера в виде строки */ restCall (url: string, options: RestCallOptions): Promise<string>, /** * Выполняет REST запрос на сервер SMP * @param {string} url - Весь URL, начиная с имени REST метода * @param {RestCallOptions} options - Опции для конфигурации запроса * @template T - Возвращаемые данные * @returns {Promise<T>} - Ответ сервера, разобранный методом JSON.parse или объект ошибки */ restCallAsJson <T>(url: string, options?: RestCallOptions): Promise<T>, /** * Вызывает произвольный метод любого скриптового модуля * @param {string} moduleCode - Код скриптового модуля * @param {string} methodName - Имя метода в скриптовом модуле * @param {Array<number | string | boolean | {[key: string]: any}>} args - Аргументы, которые необходимо передать в функцию * @template T - Возвращаемые данные * @returns {Promise<T>} - Ответ сервера, разобранный методом JSON.parse */ restCallModule <T>( moduleCode: string, methodName: string, ...args: Array<number | string | boolean | {[key: string]: any}> ): Promise<T>, urls: IUrls, utils: IUtils, ws: IWebsockets }