website refactor
This commit is contained in:
30
apps/website/hooks/useDriverSearch.ts
Normal file
30
apps/website/hooks/useDriverSearch.ts
Normal file
@@ -0,0 +1,30 @@
|
||||
import { useState, useMemo } from 'react';
|
||||
import type { DriverLeaderboardItemViewModel } from '@/lib/view-models/DriverLeaderboardItemViewModel';
|
||||
|
||||
/**
|
||||
* useDriverSearch
|
||||
*
|
||||
* Client-side hook for UX-only search filtering.
|
||||
* This is view-only transformation, not business logic.
|
||||
*/
|
||||
export function useDriverSearch(drivers: DriverLeaderboardItemViewModel[]) {
|
||||
const [searchQuery, setSearchQuery] = useState('');
|
||||
|
||||
const filteredDrivers = useMemo(() => {
|
||||
if (!searchQuery) return drivers;
|
||||
|
||||
const query = searchQuery.toLowerCase();
|
||||
return drivers.filter(driver => {
|
||||
return (
|
||||
driver.name.toLowerCase().includes(query) ||
|
||||
driver.nationality.toLowerCase().includes(query)
|
||||
);
|
||||
});
|
||||
}, [drivers, searchQuery]);
|
||||
|
||||
return {
|
||||
searchQuery,
|
||||
setSearchQuery,
|
||||
filteredDrivers,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user