Skip to content

Commit de39e39

Browse files
author
Benjamim Sonntag
committed
Add example application
1 parent 108df77 commit de39e39

File tree

4 files changed

+129
-0
lines changed

4 files changed

+129
-0
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
/coverage
22
/node_modules
3+
.parcel-cache
4+
.parcel-dist

example/index.html

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8" />
5+
<title>Example app</title>
6+
</head>
7+
<body>
8+
<div id="app"></div>
9+
<script type="module" src="index.tsx"></script>
10+
</body>
11+
</html>

example/index.tsx

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
2+
/**
3+
* Module dependencies.
4+
*/
5+
6+
import { FormProvider, useField, useFormState } from '../src';
7+
import ReactDOM from 'react-dom';
8+
9+
/**
10+
* `Input` component.
11+
*/
12+
13+
function Input({ label, name, type = 'text' }) {
14+
const { meta, onBlur, onChange, onFocus, value } = useField(name);
15+
16+
return (
17+
<label>
18+
<span
19+
style={{
20+
color: meta.active ? 'rebeccapurple' : 'initial'
21+
}}
22+
>
23+
{label}
24+
</span>
25+
26+
<input
27+
name={name}
28+
onBlur={onBlur}
29+
onChange={event => onChange(event.target.value)}
30+
onFocus={onFocus}
31+
type={type}
32+
value={value ?? ''}
33+
/>
34+
</label>
35+
);
36+
}
37+
38+
/**
39+
* `RerenderTester` component.
40+
*/
41+
42+
function RerenderTester() {
43+
console.log('RerenderTester rendered'); // eslint-disable-line no-console
44+
45+
return (
46+
<div>
47+
{'Re-render tester'}
48+
</div>
49+
);
50+
}
51+
52+
/**
53+
* `SubmitButton` component.
54+
*/
55+
56+
function SubmitButton() {
57+
const { isSubmitting } = useFormState();
58+
59+
return (
60+
<button
61+
disabled={isSubmitting}
62+
type={'submit'}
63+
>
64+
{isSubmitting ? 'Submitting' : 'Submit'}
65+
</button>
66+
);
67+
}
68+
69+
/**
70+
* `App` component.
71+
*/
72+
73+
function App() {
74+
return (
75+
<div>
76+
<h1>{'Hello world!'}</h1>
77+
78+
<FormProvider
79+
initialValues={{}}
80+
jsonSchema={{}}
81+
onSubmit={values => {
82+
console.log('submit', values); // eslint-disable-line no-console
83+
84+
return new Promise(resolve => {
85+
setTimeout(() => resolve, 5000);
86+
});
87+
}}
88+
>
89+
{({ submit }) => (
90+
<form onSubmit={submit}>
91+
<RerenderTester />
92+
93+
<Input
94+
label={'Name'}
95+
name={'name'}
96+
/>
97+
98+
<Input
99+
label={'Email'}
100+
name={'email'}
101+
/>
102+
103+
<SubmitButton />
104+
</form>
105+
)}
106+
</FormProvider>
107+
</div>
108+
);
109+
}
110+
111+
/**
112+
* Render app.
113+
*/
114+
115+
ReactDOM.render(<App />, document.getElementById('app'));

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"coverage": "jest --coverage",
2525
"lint": "eslint --ext .js,.ts,.tsx .",
2626
"lint-staged": "lint-staged",
27+
"start-example": "parcel --dist-dir=.parcel-dist example/index.html",
2728
"test": "jest",
2829
"test-watch": "jest --watch --notify --onlyChanged",
2930
"version": "NODE_ENV=production npm run bundle && npm run changelog --future-release=$npm_package_version && git add -A CHANGELOG.md dist"

0 commit comments

Comments
 (0)