@@ -5,13 +5,15 @@ import styles from './Snippet.module.css'
5
5
import Tag from './Tag'
6
6
import TextArea from './TextArea'
7
7
import { FilterContext , FilterTypes } from '../Context'
8
+ import Pulldown from './Pulldown'
8
9
9
10
interface SippetProps {
10
11
apiName : string
11
12
version : string
12
13
docUrl : string
13
14
needRequestPayload ?: boolean
14
15
defaultRequestPayload ?: string
16
+ pulldownOptions ?: { label : string ; value : string } [ ]
15
17
useTextareaForResponse ?: boolean
16
18
skipAutoRun ?: boolean
17
19
hideResponse ?: boolean
@@ -26,9 +28,9 @@ interface RunnerError extends Error {
26
28
message : string
27
29
}
28
30
29
- const primaryRed = '#eb4e3d' ;
30
- const primaryBlue = '#6fedd6' ;
31
- const primaryOrange = '#ff9551' ;
31
+ const primaryRed = '#eb4e3d'
32
+ const primaryBlue = '#6fedd6'
33
+ const primaryOrange = '#ff9551'
32
34
33
35
export default function Snippet ( {
34
36
apiName,
@@ -40,10 +42,11 @@ export default function Snippet({
40
42
needRequestPayload,
41
43
useTextareaForResponse,
42
44
defaultRequestPayload,
45
+ pulldownOptions,
43
46
loginRequired,
44
47
inClientOnly,
45
48
isInLIFF = true ,
46
- isInMINI = true
49
+ isInMINI = true ,
47
50
} : SippetProps ) {
48
51
const [ response , setResponse ] = useState ( '' )
49
52
const [ payload , setPayload ] = useState ( defaultRequestPayload || '' )
@@ -71,64 +74,84 @@ export default function Snippet({
71
74
72
75
return (
73
76
< FilterContext . Consumer >
74
- {
75
- ( filter ) =>
76
- ( ( filter === FilterTypes . LIFF && isInLIFF ) || ( filter === FilterTypes . MINI && isInMINI ) )
77
- && < div className = { styles . snippet } >
78
- < div className = { styles . head } >
79
- < h2 className = { styles . title } >
80
- < span className = { styles . text } > { apiName } </ span >
81
- < Tag > ≥{ version } </ Tag >
82
- { loginRequired && < Tag backgroundColor = { primaryRed } > Login Required</ Tag > } { inClientOnly && < Tag backgroundColor = { primaryRed } > LINE Client only</ Tag > }
83
- { isInLIFF && < Tag backgroundColor = { primaryBlue } > LIFF</ Tag > }
84
- { isInMINI && < Tag backgroundColor = { primaryOrange } > MINI</ Tag > }
85
- </ h2 >
86
- < div className = { styles . action } >
87
- < Button
88
- appearance = "outlined"
89
- variant = "primary"
90
- size = "S"
91
- aria-disabled = "false"
92
- onClick = { openDoc } >
93
- DOCUMENT
94
- </ Button > { ' ' }
95
- < Button
96
- variant = "primary"
97
- size = "S"
98
- onClick = { ( ) => {
99
- callRunner ( )
100
- } } >
101
- RUN
102
- </ Button >
77
+ { ( filter ) =>
78
+ ( ( filter === FilterTypes . LIFF && isInLIFF ) ||
79
+ ( filter === FilterTypes . MINI && isInMINI ) ) && (
80
+ < div className = { styles . snippet } >
81
+ < div className = { styles . head } >
82
+ < h2 className = { styles . title } >
83
+ < span className = { styles . text } > { apiName } </ span >
84
+ < Tag > ≥{ version } </ Tag >
85
+ { loginRequired && (
86
+ < Tag backgroundColor = { primaryRed } > Login Required</ Tag >
87
+ ) } { ' ' }
88
+ { inClientOnly && (
89
+ < Tag backgroundColor = { primaryRed } > LINE Client only</ Tag >
90
+ ) }
91
+ { isInLIFF && < Tag backgroundColor = { primaryBlue } > LIFF</ Tag > }
92
+ { isInMINI && < Tag backgroundColor = { primaryOrange } > MINI</ Tag > }
93
+ </ h2 >
94
+ < div className = { styles . action } >
95
+ < Button
96
+ appearance = "outlined"
97
+ variant = "primary"
98
+ size = "S"
99
+ aria-disabled = "false"
100
+ onClick = { openDoc } >
101
+ DOCUMENT
102
+ </ Button > { ' ' }
103
+ < Button
104
+ variant = "primary"
105
+ size = "S"
106
+ onClick = { ( ) => {
107
+ callRunner ( )
108
+ } } >
109
+ RUN
110
+ </ Button >
111
+ </ div >
103
112
</ div >
104
- </ div >
105
- { needRequestPayload && (
106
- < TextArea
107
- label = "Arguments"
108
- helpText = "Enter the request payload for API request"
109
- value = { payload }
110
- onChange = { ( e ) => setPayload ( e ?. currentTarget ?. value ) }
111
- rows = { 4 }
112
- />
113
- ) }
114
- { ! hideResponse &&
115
- ( useTextareaForResponse ? (
113
+ { needRequestPayload && pulldownOptions ? (
114
+ < >
115
+ < Pulldown
116
+ label = "Arguments"
117
+ helpText = "Choose the request payload for API request"
118
+ value = { payload }
119
+ onChange = { ( e ) => setPayload ( e . currentTarget . value ) }
120
+ options = { pulldownOptions . map ( ( { label, value } ) => ( {
121
+ label,
122
+ value,
123
+ } ) ) }
124
+ />
125
+ < TextArea value = { payload } readonly = { true } rows = { 4 } />
126
+ </ >
127
+ ) : (
116
128
< TextArea
117
- label = "Response"
118
- helpText = "Run this API to get the response"
119
- value = { response }
129
+ label = "Arguments"
130
+ helpText = "Enter the request payload for API request"
131
+ value = { payload }
132
+ onChange = { ( e ) => setPayload ( e ?. currentTarget ?. value ) }
120
133
rows = { 4 }
121
- readonly = { true }
122
134
/>
123
- ) : (
124
- < Input
125
- label = "Response"
126
- helpText = "Run this API to get the response"
127
- readonly = { true }
128
- value = { response }
129
- />
130
- ) ) }
131
- </ div >
135
+ ) }
136
+ { ! hideResponse &&
137
+ ( useTextareaForResponse ? (
138
+ < TextArea
139
+ label = "Response"
140
+ helpText = "Run this API to get the response"
141
+ value = { response }
142
+ rows = { 4 }
143
+ readonly = { true }
144
+ />
145
+ ) : (
146
+ < Input
147
+ label = "Response"
148
+ helpText = "Run this API to get the response"
149
+ readonly = { true }
150
+ value = { response }
151
+ />
152
+ ) ) }
153
+ </ div >
154
+ )
132
155
}
133
156
</ FilterContext . Consumer >
134
157
)
0 commit comments