// components import Spring from '@components/Spring'; import ReviewItem from '@components/ReviewItem'; import TabButton from '@ui/TabButton'; import ScrollContainer from '@components/ScrollContainer'; import AddFormContainer from '@components/AddFormContainer'; import CustomRating from '@ui/CustomRating'; // hooks import {useState, useRef, useEffect} from 'react'; import useMeasure from 'react-use-measure'; import {useForm, Controller} from 'react-hook-form'; // utils import classNames from 'classnames'; import dayjs from 'dayjs'; // data placeholder import reviews from '@db/reviews'; const Reviews = ({standalone, wrapperClass}) => { const Wrapper = standalone ? Spring : 'div'; const [isFormOpen, setIsFormOpen] = useState(false); const {control, handleSubmit, formState: {errors}, register, reset} = useForm({ defaultValues: { title: '', text: '', rating: 5 } }); const [activeTab, setActiveTab] = useState('latest'); const [headerRef, {height: headerHeight}] = useMeasure(); const [footerRef, {height: footerHeight}] = useMeasure(); const trackRef = useRef(null); const onReset = () => { reset(); setIsFormOpen(false); } const onSubmit = (data) => { // do something with data onReset(); } const sortedData = [...reviews]; const getReviews = () => { if (activeTab === 'latest') { return sortedData.sort((a, b) => dayjs(b.date).diff(dayjs(a.date))); } else { return sortedData.sort((a, b) => (a.liked < b.liked) ? 1 : -1); } } useEffect(() => { trackRef.current && trackRef.current.scrollTo(0, 0); }, [activeTab, isFormOpen]); return (

Reviews

setActiveTab('latest')}/> setActiveTab('helpful')}/>
{ standalone &&