import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {faArrowDown, faArrowUp, faCheck, faPen, faTrash, faX, IconDefinition} from "@fortawesome/free-solid-svg-icons"; import React, {ChangeEvent, useState} from "react"; import TextInput from "@/components/form/TextInput"; interface ListItemProps { onClick: () => void; selectedId: number | string; id: number | string; icon?: IconDefinition; numericalIdentifier?: number; isEditable?: boolean; text: string; handleDelete?: (itemId: string) => void; handleUpdate?: (itemId: string, newValue: string, subNewValue: number) => void; } export default function ListItem( { text, selectedId, id, icon, onClick, isEditable = false, handleDelete, numericalIdentifier, handleUpdate }: ListItemProps) { const [itemHover, setItemHover] = useState(false); const [editMode, setEditMode] = useState(false); const [newName, setNewName] = useState(''); const [newChapterOrder, setNewChapterOrder] = useState(numericalIdentifier ?? 0); function handleEdit(itemName: string): void { setNewName(itemName) setEditMode(true) } function handleSave(): void { if (!handleUpdate) return; handleUpdate(id as string, newName, newChapterOrder) setEditMode(false); } function moveItem(direction: "up" | "down"): void { switch (direction) { case "up": if (newChapterOrder > 0) { setNewChapterOrder(newChapterOrder - 1) } break; case "down": if (newChapterOrder < 100) { setNewChapterOrder(newChapterOrder + 1) } break; default: break; } } return (
  • setItemHover(true)} onMouseLeave={(): void => setItemHover(false)} className={`group relative flex items-center p-3 rounded-xl transition-colors duration-200 border-l-4 ${ selectedId === id ? 'bg-secondary border-primary' : 'bg-secondary/50 hover:bg-secondary border-transparent' }`}> { (numericalIdentifier != null && newChapterOrder >= 0) && ( {newChapterOrder >= 0 ? newChapterOrder : numericalIdentifier}. ) } { icon && (
    ) }
    { editMode ? (
    ): void => setNewName(e.target.value)} placeholder="" />
    ) : ( {text} ) } { !editMode && isEditable && (
    ) } { editMode && isEditable && (
    ) }
  • ) }