/* eslint-disable no-nested-ternary */ /* eslint-disable no-undef */ /* eslint-disable max-len */ /* eslint-disable import/order */ /* eslint-disable react/button-has-type */ /* eslint-disable react/no-array-index-key */ /* eslint-disable jsx-a11y/click-events-have-key-events */ /* eslint-disable no-unused-vars */ /* eslint-disable react/prop-types */ /* eslint-disable jsx-a11y/label-has-associated-control */ import React, { useState, useEffect } from 'react'; import { Accordion, AccordionHeader, AccordionBody } from '@material-tailwind/react'; // import { MdKeyboardArrowDown, MdKeyboardArrowUp } from 'react-icons/md'; import { fetchFilterParameters, fetchFilteredCourses } from '../api'; import { connect } from 'react-redux'; import { setMultipleCategoryValues } from '../actions/categoryActions'; import { setMultipleSortValues } from '../actions/sortActions'; import { setClearFilters } from '../actions/filterActions'; function Icon({ id, open }) { return ( ); } const CUSTOM_ANIMATION = { mount: { scale: 1 }, unmount: { scale: 0.9 } }; const Sidebar = ({ onCategoryClick, handleSortClick, handleClearFilter }) => { const [checkedCategories, setCheckedCategories] = useState([]); const [courses, setCourses] = useState([]); const [categories, setCategories] = useState([]); const [tags, setTags] = useState([]); const [sortByValue, setSortByValue] = useState('total_users'); // -------------from filterComponent.js const [open, setOpen] = useState([]); // const [alwaysOpen, setAlwaysOpen] = useState(true); const sorts = [ { id: 1, name: 'popular', title: 'Popular', value: 'total_users', ariaDescribedby: 'popular-description' }, { id: 2, name: 'new', title: 'New', value: 'created_at', ariaDescribedby: 'new-description' } ]; // const handleSortChange = async orderBy => { // console.log('handle sort cahnge calisti'); // console.log(orderBy); // onSortClick(orderBy); // }; const handleCategoryChange = (categoryName, value, checked) => { if (checked) { onCategoryClick({ [categoryName]: [...(checkedCategories[categoryName] || []), value] }); setCheckedCategories(prevState => ({ ...prevState, [categoryName]: [...(prevState[categoryName] || []), value] })); } else { const filteredValues = (checkedCategories[categoryName] || []).filter(item => item !== value); onCategoryClick({ [categoryName]: filteredValues }); setCheckedCategories(prevState => ({ ...prevState, [categoryName]: filteredValues })); } }; useEffect(() => { const fetchData = async () => { await fetchFilterParameters().then(response => { if (response) { setCategories(response.categories); setTags(response.tags); } }).catch(error => console.error('Failed to fetch filter parameters:', error)); }; fetchData(); }, []); useEffect(() => { const fetchData = async () => { await fetchFilterParameters().then(response => { if (response) { setCategories(response.categories); setTags(response.tags); } }).catch(error => console.error('Failed to fetch filter parameters:', error)); }; fetchData(); }, []); const handleOpen = value => { if (open.includes(value)) { setOpen(prevState => prevState.filter(item => item !== value)); } else { setOpen(prevState => [...prevState, value]); } }; const countSelectedCategories = categoryName => { return (checkedCategories[categoryName] || []).length; }; return ( <> } > handleOpen(1)} className='flex justify-between items-center w-full border-b border-b-navy-50'>
SORT BY
{sortByValue === 'created_at' ? 'New' : 'Popular'}
{sorts.map(sort => (
))}
{categories !== undefined && (categories.map((category, idx) => ( } > handleOpen(idx + 2)} className='flex font-cırcular justify-between items-center w-full border-b border-b-navy-50'>
{category.name.toUpperCase()}
{ countSelectedCategories(category.name) === 0 ? '' : countSelectedCategories(category.name) === categories[idx].values.length ? ( All ) : ( {countSelectedCategories(category.name)} ) }
{categories[idx].values.map((value, _idx) => (
))}
)))} ); }; const mapDispatchToProps = dispatch => ({ onCategoryClick: category => dispatch(setMultipleCategoryValues(category)), onSortClick: orderBy => dispatch(setMultipleSortValues(orderBy)), onClearFilter: () => dispatch(setClearFilters()) }); export default connect(null, mapDispatchToProps)(Sidebar);