import {characterCategories, CharacterProps} from "@/lib/models/Character"; import InputField from "@/components/form/InputField"; import TextInput from "@/components/form/TextInput"; import {faChevronRight, faPlus, faUser} from "@fortawesome/free-solid-svg-icons"; import {SelectBoxProps} from "@/shared/interface"; import CollapsableArea from "@/components/CollapsableArea"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {useState} from "react"; import {useTranslations} from "next-intl"; interface CharacterListProps { characters: CharacterProps[]; handleCharacterClick: (character: CharacterProps) => void; handleAddCharacter: () => void; } export default function CharacterList( { characters, handleCharacterClick, handleAddCharacter, }: CharacterListProps) { const t = useTranslations(); const [searchQuery, setSearchQuery] = useState(''); function getFilteredCharacters( characters: CharacterProps[], searchQuery: string, ): CharacterProps[] { return characters.filter( (char: CharacterProps) => char.name.toLowerCase().includes(searchQuery.toLowerCase()) || (char.lastName && char.lastName.toLowerCase().includes(searchQuery.toLowerCase())), ); } const filteredCharacters: CharacterProps[] = getFilteredCharacters( characters, searchQuery, ); return (
setSearchQuery(e.target.value)} placeholder={t("characterList.search")} /> } actionIcon={faPlus} actionLabel={t("characterList.add")} addButtonCallBack={async () => handleAddCharacter()} />
{characterCategories.map((category: SelectBoxProps) => { const categoryCharacters = filteredCharacters.filter( (char: CharacterProps) => char.category === category.value ); if (categoryCharacters.length === 0) { return null; } return ( {categoryCharacters.map(char => (
handleCharacterClick(char)} className="group flex items-center p-4 bg-secondary/30 rounded-xl border-l-4 border-primary border border-secondary/50 cursor-pointer hover:bg-secondary hover:shadow-md hover:scale-102 transition-all duration-200 hover:border-primary/50" >
{char.image ? ( {char.name} ) : (
{char.name?.charAt(0)?.toUpperCase() || '?'}
)}
{char.name || t("characterList.unknown")}
{char.lastName || t("characterList.noLastName")}
{char.title || t("characterList.noTitle")}
{char.role || t("characterList.noRole")}
))}
} /> ); })}
) }