UNPKG

@bitrix24/b24jssdk

Version:

Bitrix24 REST API JavaScript SDK

1 lines 9.04 kB
{"version":3,"file":"slider.mjs","sources":["../../../src/frame/slider.ts"],"sourcesContent":["import type { AppFrame } from './frame'\nimport type { MessageManager } from './message'\nimport { MessageCommands } from './message'\nimport type { StatusClose } from '../types/slider'\n\n/**\n * Sliders Manager\n */\nexport class SliderManager {\n #appFrame: AppFrame\n #messageManager: MessageManager\n\n constructor(appFrame: AppFrame, messageManager: MessageManager) {\n this.#appFrame = appFrame\n this.#messageManager = messageManager\n }\n\n /**\n * Returns the URL relative to the domain name and path\n */\n getUrl(path: string = '/'): URL {\n return new URL(path, this.#appFrame.getTargetOrigin())\n }\n\n /**\n * Get the account address BX24\n */\n getTargetOrigin(): string {\n return this.#appFrame.getTargetOrigin()\n }\n\n /**\n * When the method is called, a pop-up window with the application frame will be opened.\n *\n * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/additional-functions/bx24-open-application.html\n */\n async openSliderAppPage(params: any = {}): Promise<any> {\n return this.#messageManager.send(MessageCommands.openApplication, params)\n }\n\n /**\n * The method closes the open modal window with the application\n *\n * @return {Promise<void>}\n *\n * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/additional-functions/bx24-close-application.html\n */\n async closeSliderAppPage(): Promise<void> {\n return this.#messageManager.send(MessageCommands.closeApplication, {\n /**\n * @memo There is no point - everything will be closed, and timeout will not be able to do anything\n */\n isSafely: false\n })\n }\n\n /**\n * Defines the base path for width sampling.\n *\n * @param width\n * @private\n */\n #getBaseUrlByWidth(width: number = 1640): string {\n if (width > 0) {\n // region Init baseUrl by Width ////\n if (width > 1200 && width <= 1640) {\n return '/crm/type/0/details/0/../../../../..'\n } else if (width > 950 && width <= 1200) {\n return '/company/personal/user/0/groups/create/../../../../../..'\n } else if (width > 900 && width <= 950) {\n return '/crm/company/requisite/0/../../../..'\n } else if (width <= 900) {\n return '/workgroups/group/0/card/../../../..'\n } else {\n // 1640 /////\n return '/crm/deal/../..'\n }\n // endregion ////\n } else {\n return '/crm/deal/../..'\n }\n }\n\n /**\n * Opens the specified path inside the portal in the slider.\n * @param {URL} url\n * @param {number} width - Number in the range from 1640 to 1200, from 1200 to 950, from 950 to 900, from 900 ...\n * @return {Promise<StatusClose>}\n *\n * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/additional-functions/bx24-open-path.html\n * @memo /^\\/(crm\\/(deal|lead|contact|company|type)|marketplace|company\\/personal\\/user\\/[0-9]+|workgroups\\/group\\/[0-9]+)\\//\n */\n async openPath(url: URL, width: number = 1640): Promise<StatusClose> {\n const openSliderUrl = new URL(url)\n openSliderUrl.searchParams.set('IFRAME', 'Y')\n openSliderUrl.searchParams.set('IFRAME_TYPE', 'SIDE_SLIDER')\n\n /**\n * We are trying to open the slider\n */\n return this.#messageManager\n .send(MessageCommands.openPath, {\n path: [\n this.#getBaseUrlByWidth(width),\n openSliderUrl.pathname,\n openSliderUrl.search\n ].join('')\n })\n .then((response) => {\n /**\n * Error handling\n */\n if (response?.result === 'error') {\n /**\n * If the error is related to using a mobile device, we will open it in a new tab\n * Let's wait 5 minutes - and return the promise to open and not close\n */\n if (response?.errorCode === 'METHOD_NOT_SUPPORTED_ON_DEVICE') {\n return new Promise((resolve, reject) => {\n const windowObjectReference = window.open(url, '_blank')\n if (!windowObjectReference) {\n reject(new Error('Error open window'))\n return\n }\n\n let iterator = 0\n // 5 min ////\n const iteratorMax = 1_000 * 60 * 5\n const waitCloseWindow = window.setInterval(() => {\n iterator = iterator + 1\n\n if (windowObjectReference.closed) {\n clearInterval(waitCloseWindow)\n resolve({\n isOpenAtNewWindow: true,\n isClose: true\n })\n } else if (iterator > iteratorMax) {\n clearInterval(waitCloseWindow)\n resolve({\n isOpenAtNewWindow: true,\n isClose: false\n })\n }\n }, 1_000)\n })\n } else {\n /**\n * If the error is different, we will return it.\n */\n return Promise.reject(new Error(response?.errorCode))\n }\n } else if (response?.result === 'close') {\n /**\n * Processing a successful close\n */\n return Promise.resolve({\n isOpenAtNewWindow: false,\n isClose: true\n })\n }\n\n return Promise.resolve({\n isOpenAtNewWindow: false,\n isClose: false\n })\n })\n }\n\n /**\n * @todo test this and remove\n */\n // async showAppForm(params: any): Promise<void> {\n // console.warn(`deprecated showAppForm`)\n // return this.#messageManager.send(MessageCommands.showAppForm, {\n // params: params,\n // isSafely: true\n // })\n // }\n}\n"],"names":[],"mappings":"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"}