utils_settings.js

/**
 * Gets the settings from loacalStorage and parse it as JSON.
 *
 * @returns {object} settings - settings as JSON from localStorage.
 */
const getSettings = () => {
  const data = localStorage.getItem('rmqSettings')
  return JSON.parse(data)
}

/**
 * Sets the current settings in localStorage.
 *
 * @param {object} settings - settings as JSON to set in localStorage.
 */
const setSettings = (settings) => {
  localStorage.setItem('rmqSettings', JSON.stringify(settings))
}

/**
 * Hide and show tab links and the content for it.
 *
 * @param {Object} Event
 */
const changeSettingsTab = (e) => {
  e.preventDefault()
  try {
    const link = document.querySelector(`#settingsTabHref${e.target.innerHTML}`)
    if (link) {
      const tabLinks = document.querySelector('#settingsTabs')
      const liList = tabLinks.getElementsByTagName('li')
      for (const i in liList) {
        if (liList[i].classList) {
          liList[i].classList.remove('selected')
        }
      }

      const tabContent = document.querySelectorAll('#tabContainer > div')
      for (const d in tabContent) {
        if (tabContent[d].classList) {
          tabContent[d].classList.add('tab-hidden')
        }
      }

      link.classList.add('selected')
      document
        .querySelector(`#settingsTab${e.target.innerHTML}`)
        .classList.remove('tab-hidden')
    }
  } catch (err) {
    return
  }
}

/**
 * Display the form to edit settings.
 *
 * @param {Binding} binding - Binding object
 */
const displaySettings = () => {
  document.querySelector('#settingsPanel').classList.add('panel-wrap-out')
  document.querySelector('#settingsErr').innerHTML = ''
  const settings = getSettings()
  if (settings) {
    document.querySelector('#settingsHost').value = settings.host
    document.querySelector('#settingsPort').value = settings.port
    document.querySelector('#settingsManagement').value = settings.management
    document.querySelector('#settingsVHost').value = settings.vhost
    document.querySelector('#settingsUsername').value = settings.username
    document.querySelector('#settingsPassword').value = settings.password
    document.querySelector('#settingsAsyncApiTitle').value =
      settings.asyncapi.title
    document.querySelector('#settingsAsyncApiDescription').value =
      settings.asyncapi.description
    document.querySelector('#settingsAsyncApiVersion').value =
      settings.asyncapi.version
  }
}

/**
 * Sends the form to set settings.
 *
 * @param {object} e - Event object
 */
const sendSettingsForm = (e) => {
  e.preventDefault()
  e.stopPropagation()
  const host = document.querySelector('#settingsHost').value
  let error = false
  if (host === '') {
    error = 'Host is required.'
    document.querySelector('#settingsErr').innerHTML = error
  } else {
    setSettings({
      host,
      port: document.querySelector('#settingsPort').value,
      management: document.querySelector('#settingsManagement').value,
      vhost: document.querySelector('#settingsVHost').value,
      username: document.querySelector('#settingsUsername').value,
      password: document.querySelector('#settingsPassword').value,
      asyncapi: {
        title: document.querySelector('#settingsAsyncApiTitle').value,
        description: document.querySelector('#settingsAsyncApiDescription')
          .value,
        version: document.querySelector('#settingsAsyncApiVersion').value
      }
    })
    hideSettings(e)
  }
}

/**
 * Reset form values and remove CSS class from the settings panel.
 *
 * @param {object} e - Event object
 */
const hideSettings = (e) => {
  e.preventDefault()
  e.stopPropagation()
  const settingsParams = [
    '#settingsHost',
    '#settingsPort',
    '#settingsManagement',
    '#settingsVHost',
    '#settingsUsername',
    '#settingsPassword',
    '#settingsAsyncApiTitle',
    '#settingsAsyncApiDescription',
    '#settingsAsyncApiVersion'
  ]
  settingsParams.forEach((p) => {
    document.querySelector(p).value = ''
  })
  document.querySelector('#settingsPanel').classList.remove('panel-wrap-out')
}

export {
  getSettings,
  setSettings,
  changeSettingsTab,
  displaySettings,
  sendSettingsForm,
  hideSettings
}