{"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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"}