Commit 5599d8b2 authored by Marek Veselý's avatar Marek Veselý
Browse files

Merge branch '1033-add-move-fucntionality-to-the-box-header' into 'main'

Add move fucntionality to the box header

Closes #1033

See merge request inject/frontend!891
parents bbaff4b9 774ac39a
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ export const AssessmentOverlay = () => {
  const containerRef = useRef<HTMLDivElement>(null)

  const handleMouseDown = useCallback(
    (e: React.MouseEvent<HTMLButtonElement>, mode: DragMode) => {
    (e: React.MouseEvent<HTMLElement> | MouseEvent, mode: DragMode) => {
      if (mode === null || !assessment) return
      e.preventDefault()
      dragStartRef.current = {
@@ -129,6 +129,7 @@ export const AssessmentOverlay = () => {
          assessment={assessment}
          pinned
          containerSize={size}
          onHeaderMouseDown={e => handleMouseDown(e, 'move')}
          moveActions={
            <ButtonGroup minimal>
              <Button
+85 −59
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ import { useTranslationFrontend } from '@inject/locale'
import { formattedText } from '@inject/shared'
import type { ReactNode } from '@tanstack/react-router'
import type { FC } from 'react'
import { useEffect, useRef } from 'react'
import type { PinAssessmentEventPayload } from './events'
import { PIN_ASSESSMENT_EVENT_TYPE } from './events'

@@ -13,6 +14,7 @@ interface AssessmentResultProps {
  onPin?: () => void
  containerSize?: { width: number; height: number }
  moveActions?: ReactNode
  onHeaderMouseDown?: (e: React.MouseEvent<HTMLElement> | MouseEvent) => void
}

export const AssessmentResult: FC<AssessmentResultProps> = ({
@@ -21,10 +23,33 @@ export const AssessmentResult: FC<AssessmentResultProps> = ({
  onPin,
  containerSize,
  moveActions,
  onHeaderMouseDown,
}) => {
  const { t } = useTranslationFrontend()
  const sectionRef = useRef<HTMLDivElement>(null)

  useEffect(() => {
    if (!pinned || !onHeaderMouseDown) return
    const header = sectionRef.current?.querySelector(
      '.bp5-section-header'
    ) as HTMLDivElement | null
    if (!header) return

    const handler = (e: MouseEvent) => {
      const target = e.target as HTMLElement | null
      // If im pressing button, turn off moving
      if (target?.closest('button, [role="button"]')) return
      onHeaderMouseDown(e)
    }

    header.addEventListener('mousedown', handler)
    return () => {
      header.removeEventListener('mousedown', handler)
    }
  }, [pinned, onHeaderMouseDown])

  return (
    <div ref={sectionRef}>
      <Section
        title={t('assessment.resultTitle')}
        compact
@@ -89,5 +114,6 @@ export const AssessmentResult: FC<AssessmentResultProps> = ({
          )}
        </SectionCard>
      </Section>
    </div>
  )
}