maxex59185ckuer's picture
Update src/components/TextSelector.tsx
3f5e81d verified
import React, { useState } from 'react';
interface SelectedWord {
word: string;
}
interface TextSelectorProps {
onWordSelect: React.Dispatch<React.SetStateAction<SelectedWord[]>>;
}
const TextSelector: React.FC<TextSelectorProps> = ({ onWordSelect }) => {
const [text, setText] = useState('');
const [selectedText, setSelectedText] = useState<string[]>([]);
const handleTextChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
setText(e.target.value);
};
const clearSelection = () => {
setSelectedText([]);
onWordSelect([]);
};
const handleWordClick = (word: string) => {
if (selectedText.includes(word)) {
setSelectedText(prev => prev.filter(w => w !== word));
onWordSelect(prev => prev.filter(item => item.word !== word));
} else {
setSelectedText(prev => [...prev, word]);
onWordSelect(prev => [...prev, { word }]);
}
};
return (
<div className="text-selector">
<h2>Input Text Section</h2>
<textarea
value={text}
onChange={handleTextChange}
placeholder="Enter or paste English text here and then select one by one all words that are harder to you..."
/>
<div className="button-group">
<button onClick={clearSelection} className="clear-button">
Clear Selection
</button>
</div>
<div className="words-container">
{text.split(/\s+/).map((word, index) => (
<span
key={index}
className={`word ${selectedText.includes(word) ? 'selected' : ''}`}
onClick={() => handleWordClick(word)}
>
{word}
</span>
))}
</div>
</div>
);
};
export default TextSelector;