MCPcopy Create free account
hub / github.com/ZenNotes/zennotes / startColDrag

Method startColDrag

packages/app-core/src/lib/cm-table.ts:547–592  ·  view source on GitHub ↗

Drag a column to a new position.

(fromCol: number)

Source from the content-addressed store, hash-verified

545
546 /** Drag a column to a new position. */
547 private startColDrag(fromCol: number): void {
548 const dom = this.dom
549 if (!dom) return
550 this.syncFromDom()
551 const wrapper = dom.querySelector<HTMLElement>('.cm-table-wrapper')
552 const headers = Array.from(dom.querySelectorAll<HTMLElement>('thead th'))
553 if (!wrapper || headers.length === 0) return
554 dom.classList.add('is-dragging')
555 const indicator = document.createElement('div')
556 indicator.className = 'cm-table-drop-indicator cm-table-drop-col'
557 wrapper.append(indicator)
558
559 // Drop-onto-column semantics, mirroring rows.
560 const hoveredFor = (x: number): number => {
561 for (let i = 0; i < headers.length; i++) {
562 if (x <= headers[i].getBoundingClientRect().right) return i
563 }
564 return headers.length - 1
565 }
566 const place = (hovered: number): void => {
567 if (hovered === fromCol) {
568 indicator.style.display = 'none'
569 return
570 }
571 indicator.style.display = 'block'
572 const wrect = wrapper.getBoundingClientRect()
573 const rect = headers[hovered].getBoundingClientRect()
574 const left = (hovered > fromCol ? rect.right : rect.left) - wrect.left
575 indicator.style.left = `${left}px`
576 }
577 place(fromCol)
578
579 const onMove = (e: MouseEvent): void => place(hoveredFor(e.clientX))
580 const onUp = (e: MouseEvent): void => {
581 window.removeEventListener('mousemove', onMove)
582 window.removeEventListener('mouseup', onUp)
583 indicator.remove()
584 dom.classList.remove('is-dragging')
585 const hovered = hoveredFor(e.clientX)
586 if (hovered !== fromCol) {
587 this.applyModel(moveColumn(this.model, fromCol, hovered))
588 }
589 }
590 window.addEventListener('mousemove', onMove)
591 window.addEventListener('mouseup', onUp)
592 }
593
594 private onCellKeydown(
595 event: KeyboardEvent,

Callers 1

buildDragHandleMethod · 0.95

Calls 1

syncFromDomMethod · 0.95

Tested by

no test coverage detected