Sha256: 62dcd6f63baa106c1685e0021cd99ff89a5b36a892d77d3e38da3f4f2da499b3

Contents?: true

Size: 1.95 KB

Versions: 7

Compression:

Stored size: 1.95 KB

Contents

import ApplicationController from "../../../../frontend/controllers/application_controller"
// FIXME: Is this full path really needed?
import { debounce } from "../../../../frontend/utils"

export default class extends ApplicationController {
  static targets = ["link", "indicator", "submenu"]

  connect() {
    super.connect()

    // Primitive, yes
    Array.from(this.element.querySelectorAll('[data-satis-sidebar-menu-item-target="link"]')).forEach((el) => {
      if (el.href.length > 0 && window.location.href.indexOf(el.href) >= 0) {
        el.classList.add("active")
      }
    })

    if (this.isActive) {
      this.linkTarget.classList.add("active")

      if (this.hasSubmenuTarget) {
        this.submenuTarget.classList.remove("hidden")
        this.indicatorTarget.setAttribute("data-fa-transform", "rotate-90")
      } else {
        this.linkTarget.classList.add("focus")
      }
    }
  }

  open(event) {
    if (!this.isActive && this.hasSubmenuTarget) {
      if (this.hasSubmenuTarget) {
        this.submenuTarget.classList.remove("hidden")
        this.indicatorTarget.setAttribute("data-fa-transform", "rotate-90")
      }
      event.preventDefault()
    }
  }

  get linkInUrl() {
    return this.linkTarget.href.length > 0 && window.location.href.indexOf(this.linkTarget.href) >= 0
  }

  get isActive() {
    return this.linkInUrl || this.hasOpenSubmenus || this.hasActiveLinks
  }

  get hasOpenSubmenus() {
    return Array.from(this.element.querySelectorAll('[data-satis-sidebar-menu-item-target="submenu"]')).some((el) => {
      return !el.classList.contains("hidden")
      // return Array.from(el.querySelectorAll('[data-satis-sidebar-menu-item-target="submenu"]')).some((el) => {
      //   return !el.classList.contains("hidden")
      // })
    })
  }

  get hasActiveLinks() {
    return Array.from(this.element.querySelectorAll('[data-satis-sidebar-menu-item-target="link"]')).some((el) => {
      return el.classList.contains("active")
    })
  }
}

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
satis-1.0.75 app/components/satis/sidebar_menu_item/component_controller.js
satis-1.0.74 app/components/satis/sidebar_menu_item/component_controller.js
satis-1.0.70 app/components/satis/sidebar_menu_item/component_controller.js
satis-1.0.69 app/components/satis/sidebar_menu_item/component_controller.js
satis-1.0.68 app/components/satis/sidebar_menu_item/component_controller.js
satis-1.0.67 app/components/satis/sidebar_menu_item/component_controller.js
satis-1.0.66 app/components/satis/sidebar_menu_item/component_controller.js