Skip to content

Commit 86a19b0

Browse files
committed
Prototype UI
This is a prototype UI (no testing, no proper architecture), just to exercise the data model.
1 parent b7895ca commit 86a19b0

5 files changed

Lines changed: 84 additions & 19 deletions

File tree

src/WordStore.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class WordStore {
2626
(a, b) =>
2727
(a.word.length - b.word.length)
2828
|| (a.word.localeCompare(b.word))
29-
);
29+
).map(W => ({...W}));
3030
}
3131

3232
/**

src/Worksheet.css

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
pointer-events: none;
88
}
99

10-
.worksheet-header {
10+
.worksheet-content {
1111
background-color: navajowhite;
1212
min-height: 100vh;
1313
display: flex;
@@ -21,3 +21,18 @@
2121
.worksheet-link {
2222
color: #61dafb;
2323
}
24+
25+
26+
.wordlist {
27+
display: table;
28+
}
29+
30+
.word {
31+
display: table-row;
32+
}
33+
34+
.word span {
35+
display: table-cell;
36+
padding-left: 10px;
37+
padding-right: 10px;
38+
}

src/Worksheet.js

Lines changed: 63 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,68 @@
1-
import React from 'react';
1+
import React, {useState} from 'react';
22
import './Worksheet.css';
33

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+
);
1566
}
1667

1768
export default Worksheet;

src/Worksheet.test.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ import React from 'react';
22
import { render } from '@testing-library/react';
33
import Worksheet from './Worksheet';
44

5-
test('renders learn react link', () => {
6-
const { getByText } = render(<Worksheet />);
7-
const linkElement = getByText(/learn react/i);
8-
expect(linkElement).toBeInTheDocument();
5+
test('to do...', () => {
6+
expect(1).toEqual(1);
97
});

src/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ import ReactDOM from 'react-dom';
33
import './index.css';
44
import Worksheet from './Worksheet';
55
import * as serviceWorker from './serviceWorker';
6+
import WordStore from "./WordStore";
67

78
ReactDOM.render(
89
<React.StrictMode>
9-
<Worksheet />
10+
<Worksheet model={new WordStore()} />
1011
</React.StrictMode>,
1112
document.getElementById('root')
1213
);

0 commit comments

Comments
 (0)