Home Reference Source

src/urlapi/controls/MaximizeButton.js

import $ from 'jquery'

import { Control } from '../../controls/Control'
import { cssClasses } from '../../globals'
import { URL } from '../../URLHelper'

import '../../../less/maximizebutton.less'

/**
 * @typedef {g4uControlOptions} MaximizeButtonOptions
 * @property {URLLike} [baseURL]
 * @property {object.<string, string>} [URLParameters]
 */

/**
 * Opens the client in a new maximized window
 */
export class MaximizeButton extends Control {
  /**
   * @param {MaximizeButtonOptions} options
   */
  constructor (options = {}) {
    options.className = options.className || 'g4u-maximize-button'
    options.element = $('<div>').get(0)

    super(options)

    this.setTipLabel(this.getTipLabel() || this.getLocaliser().localiseUsingDictionary('MaximizeButton tipLabel'))

    $('<button>')
      .addClass(cssClasses.mainButton)
      .on('click', () => {
        this.handleClick_()
      })
      .appendTo(this.get$Element())

    this.parameters_ = options.URLParameters
    this.baseURL_ = URL.extractFromConfig(options, 'baseURL')
  }

  setMap (map) {
    if (map && this.baseURL_) {
      this.baseURL_.extractParamsFromMap(map)
    }
    super.setMap(map)
  }

  handleClick_ () {
    const parameters = Object.assign({
      clsBtn: true
    }, this.parameters_)
    const baseURL = (this.baseURL_ !== null) ? this.baseURL_.finalize() : undefined
    const url = this.getMap().get('urlApi').makeURL({
      baseURL,
      parameters
    })
    window.open(url)
  }
}