import { useState, useEffect, useRef } from 'react'; import type { DragEvent } from 'react'; import { useGetStickies, useClusterStickies } from '../api/api'; import type { Sticky as StickyType, RankedCluster } from '../types/types'; import Sticky from './sticky'; import Button from './button'; import '../styles/stickies.css'; const scoreLabel = (score: number): string => { if (score >= 0.7) return 'Strong'; if (score >= 0.4) return 'Moderate'; if (score >= 0.1) return 'Weak'; return 'Poor'; }; const Stickies = () => { const { data: stickies, isLoading, error } = useGetStickies(); const { mutate: cluster, data: clusterResponse, isPending } = useClusterStickies(); const [rankedClusters, setRankedClusters] = useState([]); const dragIndex = useRef(null); const [dragOverIndex, setDragOverIndex] = useState(null); useEffect(() => { if (clusterResponse?.clusters) { setRankedClusters( clusterResponse.clusters.map((c, i) => ({ ...c, rank: i + 1 })) ); } }, [clusterResponse]); if (isLoading) return
Loading...
; if (error) return
Error: {error.message}
; const score = clusterResponse?.score; const handleCluster = () => { cluster(); }; const buildStickyMap = (): Map => { const map = new Map(); stickies?.forEach((s) => map.set(s.id, s)); return map; }; const stickyMap = buildStickyMap(); const renderStickies = (items: StickyType[]) => items?.map((sticky) => ); const handleDragStart = (index: number) => { dragIndex.current = index; }; const handleDragOver = (e: DragEvent, index: number) => { e.preventDefault(); setDragOverIndex(index); }; const handleDragLeave = () => { setDragOverIndex(null); }; const handleDrop = (targetIndex: number) => { const sourceIndex = dragIndex.current; if (sourceIndex === null || sourceIndex === targetIndex) { dragIndex.current = null; setDragOverIndex(null); return; } const reordered = [...rankedClusters]; const [moved] = reordered.splice(sourceIndex, 1); reordered.splice(targetIndex, 0, moved); setRankedClusters(reordered.map((c, i) => ({ ...c, rank: i + 1 }))); dragIndex.current = null; setDragOverIndex(null); }; const handleDragEnd = () => { dragIndex.current = null; setDragOverIndex(null); }; return (
); }; export default Stickies;