-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathDynamicSpreadsheet.js
92 lines (83 loc) · 2.06 KB
/
DynamicSpreadsheet.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import React from 'react'
import Blob from './Blob'
import Field from './Field'
import { GoogleSheet } from '../../'
import Select from './Select'
import Table from './Table'
const RenderChoices = {
table: Table,
blob: Blob,
}
const MyData = ({ data, render }) => {
const Comp = RenderChoices[render]
return <Comp data={data} />
}
// Wraps the GoogleSheet component to provide some basic components
// for display loading & error states
const SimpleGSheet = props => (
<GoogleSheet id={props.id} range={props.range}>
{({ error, data, loading }) =>
loading ? (
'Getting data...'
) : error ? (
JSON.stringify(error, null, 2)
) : data ? (
<MyData data={data} render={props.render} />
) : null
}
</GoogleSheet>
)
class DynamicSpreadsheet extends React.Component {
state = {
id: '',
range: '',
render: 'table',
submitted: null,
}
handleSubmit = event => {
event.preventDefault()
this.setState({
submitted: {
id: this.state.id,
range: this.state.range,
},
})
}
handleChange = (key, value) => this.setState({ [key]: value })
render() {
return (
<div>
<form onSubmit={this.handleSubmit}>
<Field
label="Spreadsheet ID"
name="id"
onChange={this.handleChange}
value={this.state.id}
/>
<Field
label="Range"
name="range"
onChange={this.handleChange}
value={this.state.range}
/>
<Select
label="Display"
name="render"
onChange={this.handleChange}
value={this.state.render}
options={Object.keys(RenderChoices)}
/>
<input type="submit" value="Submit" />
</form>
{this.state.submitted && (
<SimpleGSheet
id={this.state.submitted.id}
range={this.state.submitted.range}
render={this.state.render}
/>
)}
</div>
)
}
}
export default DynamicSpreadsheet