|
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; |
|
|