import { useMemo } from 'react'; export function normalizeGreek(text) { text = text .replace(/Ά|Α|ά/g, 'α') .replace(/Έ|Ε|έ/g, 'ε') .replace(/Ή|Η|ή/g, 'η') .replace(/Ί|Ϊ|Ι|ί|ΐ|ϊ/g, 'ι') .replace(/Ό|Ο|ό/g, 'ο') .replace(/Ύ|Ϋ|Υ|ύ|ΰ|ϋ/g, 'υ') .replace(/Ώ|Ω|ώ/g, 'ω') .replace(/Σ|ς/g, 'σ'); return text; } export function fullTextSearch(data: object, search: string): boolean { if (!search) { return true; } const q = normalizeGreek( search .normalize('NFC') .replace(/[\u0300-\u036f]/g, '') .toLowerCase() ); const index = Object.keys(data) .map((k) => { return data[k] ? data[k].toString().toLowerCase() : ''; }) .join(''); return normalizeGreek( index.normalize('NFC').replace(/[\u0300-\u036f]/g, '') ).includes(q); } export function useSearch(data: object[], query?: string) { return useMemo(() => { if (!query) return data; return data.filter((t) => fullTextSearch(t, query)); }, [data, query]); } export default useSearch;