|
1 | | -import React from 'react'; |
| 1 | +import React, {useState} from 'react'; |
2 | 2 | import './Worksheet.css'; |
3 | 3 |
|
4 | | -function Worksheet() { |
5 | | - return ( |
6 | | - <div className="worksheet"> |
7 | | - <header className="worksheet-header"> |
8 | | - <img src={process.env.PUBLIC_URL + '/android-chrome-512x512.png'} className="worksheet-logo" alt="" /> |
9 | | - <p> |
10 | | - Coming soon! |
11 | | - </p> |
12 | | - </header> |
13 | | - </div> |
14 | | - ); |
| 4 | +function WorkSheetEdit({submitWord}) { |
| 5 | + return ( |
| 6 | + <form onSubmit={event => { |
| 7 | + event.preventDefault(); |
| 8 | + let word = event.target.querySelector('input[name=word]').value; |
| 9 | + let tag = event.target.querySelector('input[name=tag]').value; |
| 10 | + submitWord(word, tag); |
| 11 | + }}> |
| 12 | + <input |
| 13 | + type="text" |
| 14 | + name = "word" |
| 15 | + className="word-word" |
| 16 | + /> |
| 17 | + <input |
| 18 | + type="text" |
| 19 | + name = "tag" |
| 20 | + className="word-tag" |
| 21 | + /> |
| 22 | + <input type="submit"/> |
| 23 | + </form> |
| 24 | + ); |
| 25 | +} |
| 26 | + |
| 27 | +function WorksheetWords({children}) { |
| 28 | + return ( |
| 29 | + <div className="wordlist"> |
| 30 | + {children.map((W, i) => |
| 31 | + <p className="word" key={i}> |
| 32 | + <span className="word-word">{W.word}</span> |
| 33 | + <span className="word-tag">{W.tag}</span> |
| 34 | + </p> |
| 35 | + )} |
| 36 | + </div> |
| 37 | + ) |
| 38 | +} |
| 39 | + |
| 40 | +function Worksheet({model}) { |
| 41 | + const [words, setWords] = useState(model.words); |
| 42 | + |
| 43 | + return ( |
| 44 | + <div className="worksheet"> |
| 45 | + <header className="worksheet-header"> |
| 46 | + <WorkSheetEdit |
| 47 | + submitWord={(word, tag) => { |
| 48 | + if (word) { |
| 49 | + if (tag.toLowerCase() === 'x') { |
| 50 | + model.removeWords(word); |
| 51 | + } else if (tag !== '') { |
| 52 | + model.tagWord(word, tag); // also adds the word if needed |
| 53 | + } else { |
| 54 | + model.untagWord(word); |
| 55 | + } |
| 56 | + setWords(model.words); |
| 57 | + } |
| 58 | + }} |
| 59 | + /> |
| 60 | + </header> |
| 61 | + <div className="worksheet-content"> |
| 62 | + <WorksheetWords>{words}</WorksheetWords> |
| 63 | + </div> |
| 64 | + </div> |
| 65 | + ); |
15 | 66 | } |
16 | 67 |
|
17 | 68 | export default Worksheet; |
0 commit comments