@@ -2,6 +2,7 @@ import React, { useState, useEffect } from 'react';
2
2
import shortid from 'shortid' ;
3
3
import { explode } from '../libs/strings'
4
4
import type { IAPIInfo } from '../libs/types'
5
+ import ApiInfoRules from './elements/ApiInfoRules'
5
6
import { ChevronRightIcon , LinkIcon , EnvelopeIcon } from '@heroicons/react/24/outline'
6
7
7
8
interface Props {
@@ -28,66 +29,6 @@ export default function ApiInfo(props: Props) {
28
29
setHasFile ( files . length > 0 )
29
30
} , [ ] )
30
31
31
- const StyledRule = ( theRule : any ) : JSX . Element => {
32
- theRule = theRule . rule
33
- const split = theRule . split ( ':' )
34
-
35
- if ( theRule == 'url' ) {
36
- return (
37
- < div className = "block" >
38
- < LinkIcon className = 'inline-block w-4 h-4' /> { theRule }
39
- </ div >
40
- )
41
- }
42
- if ( theRule == 'email' ) {
43
- return (
44
- < div className = "block" >
45
- < EnvelopeIcon className = 'inline-block w-4 h-4' /> { theRule }
46
- </ div >
47
- )
48
- }
49
-
50
- if ( split . length < 2 ) {
51
- return (
52
- < div className = '' dangerouslySetInnerHTML = { { __html : explode ( theRule , 50 , "<br/>" ) } } />
53
- )
54
- }
55
-
56
- const keyPart = split [ 0 ]
57
- const valuePart = split . slice ( 1 ) . join ( ' ' )
58
- if ( keyPart == 'max' ) {
59
- return (
60
- < div className = "block badge badge-primary badge-outline mt-1 mb-1 rounded-sm" > { `<= ${ valuePart } ` } </ div >
61
- )
62
- }
63
- if ( keyPart == 'min' ) {
64
- return (
65
- < div className = "block badge badge-primary badge-outline mt-1 mb-1 rounded-sm" > { `>= ${ valuePart } ` } </ div >
66
- )
67
- }
68
- if ( keyPart == 'date_format' ) {
69
- return (
70
- < div className = "block badge badge-info badge-outline mt-1 mb-1 rounded-sm" >
71
- { `Format: ${ valuePart } ` }
72
- </ div >
73
- )
74
- }
75
- if ( keyPart == 'regex' ) {
76
- return (
77
- < >
78
- < div className = "inline-block badge badge-info badge-outline mt-1 mb-1 mr-2 rounded-sm" >
79
- Regexp
80
- </ div >
81
- < code > ${ valuePart } </ code >
82
- </ >
83
- )
84
- }
85
-
86
- return (
87
- < div className = '' dangerouslySetInnerHTML = { { __html : explode ( theRule , 50 , "<br/>" ) } } />
88
- )
89
- }
90
-
91
32
return (
92
33
< >
93
34
< h2 className = 'text-lg' id = { method + lrdDocsItem . uri } >
@@ -96,105 +37,44 @@ export default function ApiInfo(props: Props) {
96
37
</ h2 >
97
38
< h3 className = 'pt-4' >
98
39
< span className = 'text-sm text-slate-500' > REQUEST SCHEMA</ span >
99
- < code className = 'pl-2 text-xs' >
40
+ < br />
41
+ < code className = 'text-xs' >
100
42
{ hasFile ? (
101
43
'multipart/form-data'
102
44
) : (
103
45
'application/json'
104
46
) }
105
47
</ code >
106
48
</ h3 >
49
+ { ( Object . keys ( lrdDocsItem . path_parameters ) . length > 0 ) && (
50
+ < h3 className = 'pt-4' >
51
+ < span className = 'text-sm text-slate-500' >
52
+ PATH PARAMETERS
53
+ </ span >
54
+ { ( Object . keys ( lrdDocsItem . path_parameters ) . map ( ( rule ) => (
55
+ < div key = { shortid . generate ( ) } >
56
+ < ApiInfoRules key = { shortid . generate ( ) } mainRule = { rule } lrdDocsItem = { lrdDocsItem } />
57
+ </ div >
58
+ ) ) ) }
59
+ </ h3 >
60
+ ) }
61
+
62
+ < h3 className = 'pt-4' >
63
+ < span className = 'text-sm text-slate-500' >
64
+ { ( method == 'POST' || method == 'PUT' || method == 'PATCH' ) ? 'REQUEST BODY PARAMETERS' : 'QUERY PARAMETERS' }
65
+ </ span >
66
+ { ( lrdDocsItem . rules && Object . keys ( lrdDocsItem . rules ) . length == 0 ) && (
67
+ < div className = 'text-sm text-slate-500' >
68
+ No Rules Defined
69
+ </ div >
70
+ ) }
71
+ </ h3 >
107
72
< div className = 'pt-4' >
108
73
109
74
< table className = "table table-fixed table-compact w-full" >
110
75
< tbody >
111
- { lrdDocsItem . rules && Object . keys ( lrdDocsItem . rules ) . map ( ( key ) => (
112
-
113
- < tr key = { shortid . generate ( ) } >
114
- < th className = 'param-cell' >
115
- < span className = 'text-blue-500 pr-1' > ¬</ span >
116
- < code className = 'pl-1' >
117
- { key }
118
- { ( key . endsWith ( ".*" ) ) ? (
119
- < ChevronRightIcon key = { shortid . generate ( ) } className = 'inline-block w-4 h-4' />
120
- ) : ( < span key = { shortid . generate ( ) } > </ span > ) }
121
- </ code >
122
- { lrdDocsItem . rules [ key ] . map ( ( rule ) => (
123
- rule . split ( '|' ) . map ( ( theRule ) => (
124
- ( theRule == "file" || theRule == "image" ) ? (
125
- < div key = { shortid . generate ( ) } className = "block badge badge-success badge-outline ml-4 mt-1 mb-1 rounded-sm title" > { theRule } </ div >
126
- ) : ( < span key = { shortid . generate ( ) } > </ span > )
127
- ) )
128
- ) ) }
129
- { lrdDocsItem . rules [ key ] . map ( ( rule ) => (
130
- rule . split ( '|' ) . map ( ( theRule ) => (
131
- ( theRule == "required" ) ? (
132
- < div className = 'block ml-6' key = { shortid . generate ( ) } >
133
- < code className = 'text-error font-normal' > { theRule } </ code >
134
- </ div >
135
- ) : ( < span key = { shortid . generate ( ) } > </ span > )
136
- ) )
137
- ) ) }
138
- { lrdDocsItem . rules [ key ] . map ( ( rule ) => (
139
- rule . split ( '|' ) . map ( ( theRule ) => (
140
- ( theRule . startsWith ( "required_if" ) ) ? (
141
- < div className = 'block ml-6' key = { shortid . generate ( ) } >
142
- < code className = 'text-red-300 font-normal' > required_if</ code >
143
- </ div >
144
- ) : ( < span key = { shortid . generate ( ) } > </ span > )
145
- ) )
146
- ) ) }
147
- </ th >
148
- < td >
149
- { lrdDocsItem . rules [ key ] . map ( ( rule ) => (
150
- rule . split ( '|' ) . map ( ( theRule ) => {
151
- if ( theRule == "required" ) {
152
- return ( < span key = { shortid . generate ( ) } > </ span > )
153
- }
154
- if ( theRule == "integer"
155
- || theRule == "string"
156
- || theRule == "bool"
157
- || theRule == "date"
158
- || theRule == "file"
159
- || theRule == "image"
160
- || theRule == "array"
161
- || theRule == "nullable" ) {
162
- return (
163
- < div key = { shortid . generate ( ) } className = 'capitalize text-slate-500' >
164
- { theRule }
165
- </ div > )
166
- }
167
- return ( < span key = { shortid . generate ( ) } > </ span > )
168
- } )
169
- ) ) }
170
- { lrdDocsItem . rules [ key ] . map ( ( rule ) => (
171
- rule . split ( '|' ) . map ( ( theRule ) => {
172
- if ( theRule == "required" ) {
173
- return ( < span key = { shortid . generate ( ) } > </ span > )
174
- }
175
- return ( < span key = { shortid . generate ( ) } > </ span > )
176
- } )
177
- ) ) }
178
- { lrdDocsItem . rules [ key ] . map ( ( rule ) => (
179
- rule . split ( '|' ) . map ( ( theRule ) => {
180
- if ( theRule == "required"
181
- || theRule == "integer"
182
- || theRule == "string"
183
- || theRule == "bool"
184
- || theRule == "date"
185
- || theRule == "file"
186
- || theRule == "image"
187
- || theRule == "array"
188
- || theRule == "nullable" ) {
189
- return ( < span key = { shortid . generate ( ) } > </ span > )
190
- }
191
- return ( < span key = { shortid . generate ( ) } >
192
- < StyledRule rule = { theRule } />
193
- </ span > )
194
- } )
195
- ) ) }
196
- </ td >
197
- </ tr >
76
+ { lrdDocsItem . rules && Object . keys ( lrdDocsItem . rules ) . map ( ( rule ) => (
77
+ < ApiInfoRules key = { shortid . generate ( ) } mainRule = { rule } lrdDocsItem = { lrdDocsItem } />
198
78
) ) }
199
79
</ tbody >
200
80
</ table >
0 commit comments