{"version":3,"file":"parent.mjs","sources":["../../../src/frame/parent.ts"],"sourcesContent":["import type { MessageManager } from './message'\nimport { MessageCommands } from './message'\nimport useScrollSize from '../tools/scroll-size'\n\n/**\n * Parent window manager\n *\n * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/additional-functions/\n */\nexport class ParentManager {\n  #messageManager: MessageManager\n\n  constructor(messageManager: MessageManager) {\n    this.#messageManager = messageManager\n  }\n\n  get message(): MessageManager {\n    return this.#messageManager\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 closeApplication(): 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   * Sets the size of the frame containing the application to the size of the frame's content.\n   *\n   * @return {Promise<void>}\n   *\n   * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/additional-functions/bx24-fit-window.html\n   *\n   * @memo in certain situations it may not be executed (placement of the main window after installing the application), in this case isSafely mode will work\n   */\n  async fitWindow(): Promise<any> {\n    const width = '100%'\n    const height = this.getScrollSize().scrollHeight\n\n    return this.#messageManager.send(MessageCommands.resizeWindow, {\n      width,\n      height,\n      isSafely: true\n    })\n  }\n\n  /**\n   * Sets the size of the frame containing the application to the size of the frame's content.\n   *\n   * @param {number} width\n   * @param {number} height\n   *\n   * @return {Promise<void>}\n   *\n   * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/additional-functions/bx24-resize-window.html\n   *\n   * @memo in certain situations it may not be executed, in this case isSafely mode will be triggered\n   */\n  async resizeWindow(width: number, height: number): Promise<void> {\n    if (width > 0 && height > 0) {\n      return this.#messageManager.send(MessageCommands.resizeWindow, {\n        width,\n        height,\n        isSafely: true\n      })\n    }\n\n    return Promise.reject(\n      new Error(`Wrong width:number = ${width} or height:number = ${height}`)\n    )\n  }\n\n  /**\n   * Automatically resize `document.body` of frame with application according to frame content dimensions\n   * If you pass appNode, the height will be calculated relative to it\n   *\n   * @param {HTMLElement|null} appNode\n   * @param {number} minHeight\n   * @param {number} minWidth\n   *\n   * @return {Promise<void>}\n   */\n  async resizeWindowAuto(\n    appNode: null | HTMLElement = null,\n    minHeight: number = 0,\n    minWidth: number = 0\n  ): Promise<void> {\n    const body = document.body\n    // const html = document.documentElement\n\n    let width = Math.max(\n      body.scrollWidth,\n      body.offsetWidth\n\n      // html.clientWidth,\n      // html.scrollWidth,\n      // html.offsetWidth\n    )\n\n    if (minWidth > 0) {\n      width = Math.max(minWidth, width)\n    }\n\n    let height = Math.max(\n      body.scrollHeight,\n      body.offsetHeight\n\n      // html.clientHeight,\n      // html.scrollHeight,\n      // html.offsetHeight\n    )\n\n    if (appNode) {\n      height = Math.max(appNode.scrollHeight, appNode.offsetHeight)\n    }\n\n    if (minHeight > 0) {\n      height = Math.max(minHeight, height)\n    }\n\n    return this.resizeWindow(width, height)\n  }\n\n  /**\n   * This function returns the inner dimensions of the application frame\n   *\n   * @return {Promise<{scrollWidth: number; scrollHeight: number}>}\n   *\n   * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/additional-functions/bx24-get-scroll-size.html\n   */\n  getScrollSize(): {\n    scrollWidth: number\n    scrollHeight: number\n  } {\n    return useScrollSize()\n  }\n\n  /**\n   * Scrolls the parent window\n   *\n   * @param {number} scroll should specify the vertical scrollbar position (0 - scroll to the very top)\n   * @return {Promise<void>}\n   *\n   * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/additional-functions/bx24-scroll-parent-window.html\n   */\n  async scrollParentWindow(scroll: number): Promise<void> {\n    if (!Number.isInteger(scroll)) {\n      return Promise.reject(new Error('Wrong scroll number'))\n    }\n\n    if (scroll < 0) {\n      scroll = 0\n    }\n\n    return this.#messageManager.send(MessageCommands.setScroll, {\n      scroll,\n      isSafely: true\n    })\n  }\n\n  /**\n   * Reload the page with the application (the whole page, not just the frame).\n   *\n   * @return {Promise<void>}\n   *\n   * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/additional-functions/bx24-reload-window.html\n   */\n  async reloadWindow(): Promise<void> {\n    return this.#messageManager.send(MessageCommands.reloadWindow, {\n      isSafely: true\n    })\n  }\n\n  /**\n   * Set Page Title\n   *\n   * @param {string} title\n   *\n   * @return {Promise<void>}\n   *\n   * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/additional-functions/bx24-set-title.html\n   */\n  async setTitle(title: string): Promise<void> {\n    return this.#messageManager.send(MessageCommands.setTitle, {\n      title: title.toString(),\n      isSafely: true\n    })\n  }\n\n  /**\n   * Initiates a call via internal communication\n   *\n   * @param {number} userId The identifier of the account user\n   * @param {boolean} isVideo true - video call, false - audio call. Optional parameter.\n   *\n   * @return {Promise<void>}\n   *\n   * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/additional-functions/bx24-im-call-to.html\n   */\n  async imCallTo(userId: number, isVideo: boolean = true): Promise<void> {\n    return this.#messageManager.send(MessageCommands.imCallTo, {\n      userId,\n      video: isVideo,\n      isSafely: true\n    })\n  }\n\n  /**\n   * Makes a call to the phone number\n   *\n   * @param {string} phone Phone number. The number can be in the format: `+44 20 1234 5678` or `x (xxx) xxx-xx-xx`\n   *\n   * @return {Promise<void>}\n   *\n   * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/additional-functions/bx24-im-phone-to.html\n   */\n  async imPhoneTo(phone: string): Promise<void> {\n    return this.#messageManager.send(MessageCommands.imPhoneTo, {\n      phone,\n      isSafely: true\n    })\n  }\n\n  /**\n   * Opens the messenger window\n   * userId or chatXXX - chat, where XXX is the chat identifier, which can simply be a number.\n   * sgXXX - group chat, where XXX is the social network group number (the chat must be enabled in this group).\n   *\n   * XXXX** - open line, where XXX is the code obtained via the Rest method imopenlines.network.join.\n   *\n   * If nothing is passed, the chat interface will open with the last opened dialog.\n   *\n   * @param {number|`chat${number}`|`sg${number}`|`imol|${number}`|undefined} dialogId\n   *\n   * @return {Promise<void>}\n   *\n   * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/additional-functions/bx24-im-open-messenger.html\n   * @link https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=93&LESSON_ID=20152&LESSON_PATH=7657.7883.8025.20150.20152\n   *\n   */\n  async imOpenMessenger(\n    dialogId:\n      | number\n      | `chat${number}`\n      | `sg${number}`\n      | `imol|${number}`\n      | undefined\n  ): Promise<void> {\n    return this.#messageManager.send(MessageCommands.imOpenMessenger, {\n      dialogId: dialogId,\n      isSafely: true\n    })\n  }\n\n  /**\n   * Opens the history window\n   * Identifier of the dialog:\n   *\n   * userId or chatXXX - chat, where XXX is the chat identifier, which can simply be a number.\n   * imol|XXXX - open line, where XXX is the session number of the open line.\n   *\n   * @param {number|`chat${number}`|`imol|${number}`} dialogId\n   *\n   * @return {Promise<void>}\n   *\n   * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/additional-functions/bx24-im-open-history.html\n   */\n  async imOpenHistory(\n    dialogId: number | `chat${number}` | `imol|${number}`\n  ): Promise<void> {\n    return this.#messageManager.send(MessageCommands.imOpenHistory, {\n      dialogId: dialogId,\n      isSafely: true\n    })\n  }\n}\n"],"names":[],"mappings":"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"}