import { useEffect } from "react"; export default function useFilter(data, selectedOption, search, setExData, sortMode) { useEffect(() => { if ( data && (selectedOption == null || (selectedOption != null ? selectedOption.length == 0 : false)) ) { setExData && setExData( data.filter((s) => { return search .toLowerCase() .sansAccent() .split(" ") .every((n) => s.name.toLowerCase().sansAccent().includes(n)); }) ); } else if ( data && (selectedOption != null || (selectedOption != null ? selectedOption.length != 0 : false)) && sortMode == false && search == "" ) { setExData && setExData( data.filter((s) => { return s.tags .map((t) => t.id_code) .some((r) => selectedOption.map((tt) => tt.value).includes(r)); }) ); } else if ( data && (selectedOption != null || (selectedOption != null ? selectedOption.length != 0 : false)) && sortMode == true && search == "" ) { setExData && setExData( data.filter((s) => { return selectedOption .map((opt) => opt.value) .every((r) => s.tags.map((tt) => tt.id_code).includes(r)); }) ); } else if ( data && (selectedOption != null || (selectedOption != null ? selectedOption.length != 0 : false)) && sortMode == false && search != "" ) { setExData && setExData( data .filter((s) => { return search .toLowerCase() .sansAccent() .split(" ") .every((n) => s.name.toLowerCase().sansAccent().includes(n)); }) .filter((s) => { return s.tags .map((t) => t.id_code) .some((r) => selectedOption.map((tt) => tt.value).includes(r)); }) ); } else if ( data && (selectedOption != null || (selectedOption != null ? selectedOption.length != 0 : false)) && sortMode == true && search != "" ) { setExData && setExData( data .filter((s) => { return search .toLowerCase() .sansAccent() .split(" ") .every((n) => s.name.toLowerCase().sansAccent().includes(n)); }) .filter((s) => { return selectedOption .map((opt) => opt.value) .every((r) => s.tags.map((tt) => tt.id_code).includes(r)); }) ); } return () => { setExData && setExData([]); }; }, [data, selectedOption, search, sortMode]); }