Sha256: 836119a9478238058909716e363c474fb5dccf9732af85f2411e23ecd5d99cf6

Contents?: true

Size: 1.43 KB

Versions: 1

Compression:

Stored size: 1.43 KB

Contents

import {controllerFactory} from '@utils/createController'

import '@github/clipboard-copy-element'

const CLIPBOARD_COPY_TIMER_DURATION = 2000

export default class ClipboardCopyController extends controllerFactory<HTMLDetailsElement>()({
  targets: {
    initial: HTMLElement,
    confirmed: null,
  },
}) {
  declare clipboardCopyElementTimers: WeakMap<HTMLElement, number>

  connect() {
    this.clipboardCopyElementTimers = new WeakMap()
  }

  copy(event: Event) {
    const target = event.target as HTMLElement
    const currentTimeout = this.clipboardCopyElementTimers.get(target)

    if (currentTimeout) {
      clearTimeout(currentTimeout)
      this.clipboardCopyElementTimers.delete(target)
    } else {
      this.showConfirm()
    }

    this.clipboardCopyElementTimers.set(
      target,
      window.setTimeout(() => {
        this.showInitial()
        this.clipboardCopyElementTimers.delete(target)
      }, CLIPBOARD_COPY_TIMER_DURATION),
    )
  }

  showConfirm() {
    if (this.hasConfirmedTarget) {
      this.confirmedTarget.classList.remove('ariadne-hidden')
      this.confirmedTarget.classList.add('ariadne-inline-block')
      this.initialTarget.classList.add('ariadne-hidden')
    }
  }

  showInitial() {
    this.initialTarget.classList.remove('ariadne-hidden')
    this.initialTarget.classList.add('ariadne-inline-block')
    if (this.hasConfirmedTarget) {
      this.confirmedTarget.classList.add('ariadne-hidden')
    }
  }
}

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ariadne_view_components-0.0.89 app/components/ariadne/ui/clipboard_copy/component.ts