-
-
Notifications
You must be signed in to change notification settings - Fork 228
/
GdocsSettingsContentField.tsx
100 lines (97 loc) · 2.51 KB
/
GdocsSettingsContentField.tsx
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
93
94
95
96
97
98
99
100
import React from "react"
import { Input, InputProps } from "antd"
import {
OwidGdocPostInterface,
OwidGdocErrorMessage,
OwidGdocErrorMessageType,
OwidGdocDataInsightInterface,
OwidGdocErrorMessageProperty,
get,
OwidGdocHomepageInterface,
OwidGdocAuthorInterface,
} from "@ourworldindata/utils"
import { GdocsEditLink } from "./GdocsEditLink.js"
import { GdocsErrorHelp } from "./GdocsErrorHelp.js"
import { getPropertyMostCriticalError } from "./gdocsValidation.js"
import { TextAreaProps } from "antd/lib/input/TextArea.js"
import { Help } from "./Forms.js"
export const GdocsSettingsContentField = ({
gdoc,
property,
render = (props) => <GdocsSettingsTextField {...props} />,
errors,
description,
}: {
gdoc:
| OwidGdocPostInterface
| OwidGdocDataInsightInterface
| OwidGdocHomepageInterface
| OwidGdocAuthorInterface
property: OwidGdocErrorMessageProperty
render?: (props: {
name: string
value: string
errorType?: OwidGdocErrorMessageType
}) => React.ReactElement
errors?: OwidGdocErrorMessage[]
description?: string
}) => {
const error = getPropertyMostCriticalError(property, errors)
const value = get(gdoc, ["content", property])
return (
<div className="form-group">
<label htmlFor={property}>
<span className="text-capitalize">{property}</span>
</label>
<div className="edit-in-gdocs">
<GdocsEditLink gdocId={gdoc.id} />
{render({
name: property,
value,
errorType: error?.type,
})}
</div>
<GdocsErrorHelp error={error} />
{description ? <Help>{description}</Help> : null}
</div>
)
}
export const GdocsSettingsTextField = ({
name,
value,
errorType,
inputProps,
}: {
name: string
value: string
errorType?: OwidGdocErrorMessageType
inputProps?: InputProps
}) => (
<Input
addonBefore={`${name}:`}
value={value}
status={errorType}
id={name}
readOnly
{...inputProps}
/>
)
export const GdocsSettingsTextArea = ({
name,
value,
errorType,
inputProps,
}: {
name: string
value: string
errorType?: OwidGdocErrorMessageType
inputProps?: TextAreaProps
}) => (
<Input.TextArea
value={value}
status={errorType}
id={name}
readOnly
{...inputProps}
/>
)