|
1 | | -import React from 'react' |
2 | | -import { render } from 'react-dom' |
3 | | -import Styles from './Styles' |
4 | | -import Spinner from './Spinner' |
5 | | -import { Form, Field } from 'react-final-form' |
| 1 | +import React from "react"; |
| 2 | +import { render } from "react-dom"; |
| 3 | +import Styles from "./Styles"; |
| 4 | +import Spinner from "./Spinner"; |
| 5 | +import { Form, Field } from "react-final-form"; |
6 | 6 |
|
7 | | -const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)) |
| 7 | +const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); |
8 | 8 |
|
9 | | -const onSubmit = async values => { |
10 | | - await sleep(300) |
11 | | - window.alert(JSON.stringify(values, undefined, 2)) |
12 | | -} |
| 9 | +const onSubmit = async (values) => { |
| 10 | + await sleep(300); |
| 11 | + window.alert(JSON.stringify(values, undefined, 2)); |
| 12 | +}; |
13 | 13 |
|
14 | | -const required = value => (value ? undefined : 'Required') |
15 | | -const mustBeNumber = value => (isNaN(value) ? 'Must be a number' : undefined) |
16 | | -const minValue = min => value => |
17 | | - isNaN(value) || value >= min ? undefined : `Should be greater than ${min}` |
18 | | -const composeValidators = (...validators) => value => |
19 | | - validators.reduce((error, validator) => error || validator(value), undefined) |
| 14 | +const required = (value) => (value ? undefined : "Required"); |
| 15 | +const mustBeNumber = (value) => (isNaN(value) ? "Must be a number" : undefined); |
| 16 | +const minValue = (min) => (value) => |
| 17 | + isNaN(value) || value >= min ? undefined : `Should be greater than ${min}`; |
| 18 | +const composeValidators = |
| 19 | + (...validators) => |
| 20 | + (value) => |
| 21 | + validators.reduce( |
| 22 | + (error, validator) => error || validator(value), |
| 23 | + undefined, |
| 24 | + ); |
20 | 25 |
|
21 | | -const simpleMemoize = fn => { |
22 | | - let lastArg |
23 | | - let lastResult |
24 | | - return arg => { |
| 26 | +const simpleMemoize = (fn) => { |
| 27 | + let lastArg; |
| 28 | + let lastResult; |
| 29 | + return (arg) => { |
25 | 30 | if (arg !== lastArg) { |
26 | | - lastArg = arg |
27 | | - lastResult = fn(arg) |
| 31 | + lastArg = arg; |
| 32 | + lastResult = fn(arg); |
28 | 33 | } |
29 | | - return lastResult |
30 | | - } |
31 | | -} |
| 34 | + return lastResult; |
| 35 | + }; |
| 36 | +}; |
32 | 37 |
|
33 | | -const usernameAvailable = simpleMemoize(async value => { |
| 38 | +const usernameAvailable = simpleMemoize(async (value) => { |
34 | 39 | if (!value) { |
35 | | - return 'Required' |
| 40 | + return "Required"; |
36 | 41 | } |
37 | | - await sleep(400) |
| 42 | + await sleep(400); |
38 | 43 | if ( |
39 | | - ~['john', 'paul', 'george', 'ringo'].indexOf(value && value.toLowerCase()) |
| 44 | + ~["john", "paul", "george", "ringo"].indexOf(value && value.toLowerCase()) |
40 | 45 | ) { |
41 | | - return 'Username taken!' |
| 46 | + return "Username taken!"; |
42 | 47 | } |
43 | | -}) |
| 48 | +}); |
44 | 49 |
|
45 | 50 | const App = () => ( |
46 | 51 | <Styles> |
47 | 52 | <h1> |
48 | 53 | <span role="img" aria-label="final form flag"> |
49 | 54 | 🏁 |
50 | | - </span>{' '} |
| 55 | + </span>{" "} |
51 | 56 | React Final Form Example |
52 | 57 | </h1> |
53 | 58 | <h2>Asynchronous Field-Level Validation</h2> |
@@ -107,6 +112,6 @@ const App = () => ( |
107 | 112 | )} |
108 | 113 | /> |
109 | 114 | </Styles> |
110 | | -) |
| 115 | +); |
111 | 116 |
|
112 | | -render(<App />, document.getElementById('root')) |
| 117 | +render(<App />, document.getElementById("root")); |
0 commit comments