import { useState } from 'react' import { useSendRate, useUserRating } from '../hooks/api' import { gotError, gotResponse } from '../hooks/useFetch' import styles from '../styles/StarRating.module.css' type StarProps = { filled: boolean, selected: boolean, selectRate?: () => void, sendMyRate?: () => void, disabled: boolean } function Star({ filled, selected, selectRate, disabled }: StarProps) { return ( // star ) } type StarRatingProps = { userId: number, dynamic?: boolean, } function StarRating({ userId, dynamic = false }: StarRatingProps) { const rating = useUserRating(userId) const [selectedRate, setSelectedRate] = useState(0) const [myRate, setMyRate] = useState(0) const rated = myRate > 0 const { doSendRate } = useSendRate() async function sendMyRate() { const res = await doSendRate(selectedRate, userId) if (res) { rating.refetch() setMyRate(selectedRate) } } if (!gotResponse(rating)) { return ( Загрузка... ) } if (gotError(rating)) { return ( {rating.error} ) } return ( dynamic && !rated && void sendMyRate()} onMouseEnter={() => rated && setSelectedRate(myRate)} onMouseLeave={() => setSelectedRate(0)} onFocus={() => rated && setSelectedRate(myRate)} onBlur={() => setSelectedRate(0)} onTouchStart={() => rated && setSelectedRate(myRate)} onTouchEnd={() => setSelectedRate(0)} title={`Пользователи: ${Math.round(rating.data)}\nВы: ${myRate}`} tabIndex={0} > {...Array(5).fill(5).map((_, i) => ( dynamic && !rated && setSelectedRate(i + 1)} disabled={!dynamic || rated} /> ))} ) } export default StarRating