Skip to content

Commit 5e66780

Browse files
authored
Merge pull request linode#58 from alioso/CT-864
CT-864 Request BodySchema updates
2 parents 620f68a + 0f2c88c commit 5e66780

File tree

3 files changed

+87
-65
lines changed

3 files changed

+87
-65
lines changed

src/components/2_molecules/BodySchema.js

Lines changed: 84 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ import { getOr } from "lodash/fp";
22
import React from "react";
33
import Markdown from "react-markdown/with-html";
44

5+
import Filterable from "./Filterable";
6+
import Nullable from "./Nullable";
7+
import SubResponse from "./SubResponse";
58
import CharDisplay from "./charDisplay";
69

710
export const BodySchema = props => {
@@ -44,6 +47,11 @@ export const BodySchema = props => {
4447
</div>
4548
{properties &&
4649
Object.keys(properties)
50+
.filter(
51+
v =>
52+
data.requestBody.content.application_json.schema.properties[v] !==
53+
null
54+
)
4755
.sort(sortByRequired)
4856
.map((p, i) => {
4957
const b =
@@ -76,13 +84,8 @@ export const BodySchema = props => {
7684
}
7785
)}
7886
</div>
79-
{b.x_linode_filterable && (
80-
<div className="leading-xs mt-1">
81-
<span className="text-grey-dark text-sm">
82-
Filterable
83-
</span>
84-
</div>
85-
)}
87+
{b.x_linode_filterable && <Filterable />}
88+
{b.nullable && <Nullable />}
8689
</div>
8790
<div className="w-full lg:w-3/4">
8891
<div className="text-sm leading-text-sm text-grey-darkest">
@@ -101,6 +104,11 @@ export const BodySchema = props => {
101104
/>
102105
</div>
103106
</div>
107+
{b.properties && (
108+
<div className="px-4 mt-4 mb-4 ml-4 subResponse">
109+
<SubResponse dataSource={b.properties} />
110+
</div>
111+
)}
104112
</div>
105113
)
106114
);
@@ -113,38 +121,29 @@ export const BodySchema = props => {
113121
const s = data.requestBody.content.application_json.schema.allOf[a];
114122
return (
115123
s.properties &&
116-
Object.keys(s.properties).map((p, i) => {
117-
const b = s.properties[p];
118-
return (
119-
b &&
120-
b.x_linode_cli_display !== 1 && (
121-
<div key={i} className="response-wrapper">
122-
<div className="lg:flex pt-2 mb-4 initResponse">
123-
<div className="w-full lg:w-1/4">
124-
<div>
125-
<b>{p}</b>
126-
</div>
127-
<div className="leading-xs">
128-
{s.required &&
129-
s.required.map((req, i) => {
130-
if (p === req) {
131-
return (
132-
<span
133-
className="text-BaseRed text-sm"
134-
key={i}
135-
>
136-
Required
137-
</span>
138-
);
139-
}
140-
return false;
141-
})}
142-
</div>
143-
<div className="leading-xs">
144-
{data.requestBody.content.application_json.schema
145-
.required &&
146-
data.requestBody.content.application_json.schema.required.map(
147-
(req, i) => {
124+
Object.keys(s.properties)
125+
.filter(
126+
v =>
127+
data.requestBody.content.application_json.schema.allOf[
128+
v
129+
] !== null
130+
)
131+
.sort(sortByRequired)
132+
.map((p, i) => {
133+
const b = s.properties[p];
134+
return (
135+
b &&
136+
b.x_linode_cli_display !== 1 &&
137+
b.readOnly !== true && (
138+
<div key={i} className="response-wrapper">
139+
<div className="lg:flex pt-2 mb-4 initResponse">
140+
<div className="w-full lg:w-1/4">
141+
<div>
142+
<b>{p}</b>
143+
</div>
144+
<div className="leading-xs">
145+
{s.required &&
146+
s.required.map((req, i) => {
148147
if (p === req) {
149148
return (
150149
<span
@@ -156,35 +155,58 @@ export const BodySchema = props => {
156155
);
157156
}
158157
return false;
159-
}
158+
})}
159+
</div>
160+
<div className="leading-xs">
161+
{data.requestBody.content.application_json.schema
162+
.required &&
163+
data.requestBody.content.application_json.schema.required.map(
164+
(req, i) => {
165+
if (p === req) {
166+
return (
167+
<span
168+
className="text-BaseRed text-sm"
169+
key={i}
170+
>
171+
Required
172+
</span>
173+
);
174+
}
175+
return false;
176+
}
177+
)}
178+
</div>
179+
<div className="leading-xs mt-1">
180+
{b.x_linode_filterable && (
181+
<span className="text-grey-dark text-sm">
182+
Filterable
183+
</span>
160184
)}
185+
</div>
161186
</div>
162-
<div className="leading-xs mt-1">
163-
{b.x_linode_filterable && (
164-
<span className="text-grey-dark text-sm">
165-
Filterable
166-
</span>
167-
)}
187+
<div className="w-full lg:w-3/4">
188+
<div className="text-sm leading-text-sm text-grey-darkest">
189+
{b.type} <CharDisplay data={b} />
190+
{b.pattern && (
191+
<span className="tag">{b.pattern}</span>
192+
)}
193+
</div>
194+
<Markdown
195+
source={b.description}
196+
escapeHtml={false}
197+
className="api-desc"
198+
/>
168199
</div>
169200
</div>
170-
<div className="w-full lg:w-3/4">
171-
<div className="text-sm leading-text-sm text-grey-darkest">
172-
{b.type} <CharDisplay data={b} />
173-
{b.pattern && (
174-
<span className="tag">{b.pattern}</span>
175-
)}
201+
{b.properties && (
202+
<div className="px-4 mt-4 mb-4 ml-4 subResponse">
203+
<SubResponse dataSource={b.properties} />
176204
</div>
177-
<Markdown
178-
source={b.description}
179-
escapeHtml={false}
180-
className="api-desc"
181-
/>
182-
</div>
205+
)}
183206
</div>
184-
</div>
185-
)
186-
);
187-
})
207+
)
208+
);
209+
})
188210
);
189211
}
190212
)}

src/components/2_molecules/ResponseSampleBody.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export const ResponseSampleBody = props => {
3232
: `${JSON.stringify(l.example ? l.example : "")}`
3333
}`
3434
: `"${p}" : [`) +
35-
(l.example && l.type === "array"
35+
(l.example && l.type === "array" && !l.items
3636
? Object.keys(l.example).map(v => {
3737
const va = l.example[v];
3838
return `"${va}"`;
@@ -139,7 +139,7 @@ export const ResponseSampleBody = props => {
139139
}
140140

141141
const finalSource = JSON.stringify(parsed, null, 2);
142-
//const finalSource = sanitized;
142+
// const finalSource = sanitized;
143143

144144
return (
145145
context &&

src/components/2_molecules/SubResponse.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const SubResponseMarkup = props => {
1313
<div className="w-full lg:w-1/4">
1414
<b className={property.deprecated && "line-through"}>{value}</b>
1515
{property.x_linode_filterable && <Filterable />}
16+
{property.nullable && <Nullable />}
1617
</div>
1718
<div className="w-full lg:w-3/4">
1819
<div>
@@ -24,7 +25,6 @@ const SubResponseMarkup = props => {
2425
</div>
2526
{property.enum && <Enum dataSource={property} />}
2627
{property.deprecated && <Deprecated />}
27-
{property.nullable && <Nullable />}
2828
<div>
2929
<Markdown
3030
source={property.description}

0 commit comments

Comments
 (0)