export function useLogOpen()

in studio/components/log/use-log-open.ts [21:83]


export function useLogOpen() {
  const logRef = ref()
  let logWindow: Window | null = null
  const { toggleFloatingLogHeight } = useLogHeight()
  const fileStore = useFileStore()

  const onMessage = (ev: MessageEvent) => {
    const { type } = ev.data
    if (type === 'close') {
      closeWindow()
    }
  }

  const openNewWindow = () => {
    logWindow = window.open(`/log`, '_blank')
    if (!logWindow) return
    logWindow.addEventListener('load', () => {
      postLog(fileStore.getCurrentFile?.log || '')
    })
  }

  const postLog = (value: string) => {
    window.postMessage({
      type: 'log',
      data: value
    })
  }

  const closeWindow = () => {
    toggleFloatingLogHeight(false)
    logWindow = null
  }

  const onDragEnd = (ev: DragEvent) => {
    if (
      ev.clientX > window.innerWidth - 50 ||
      ev.clientY > window.innerHeight - 50 ||
      ev.clientX < 50 ||
      ev.clientY < 50
    ) {
      if (logWindow) {
        logWindow.focus()
      } else {
        openNewWindow()
      }
      toggleFloatingLogHeight(true)
    }
  }

  watch(
    () => fileStore.getCurrentFile?.log,
    (value) => {
      postLog(value || '')
    }
  )

  onMounted(() => {
    logRef.value.addEventListener('dragend', onDragEnd)
    window.addEventListener('message', onMessage)
  })

  return { logRef }
}