Skip to content

Commit 69284e4

Browse files
Alban BaillyGitHub Enterprise
authored andcommitted
Merge pull request linode#260 from abailly/DLC-136
DLC-136 - update missing info on API/Docs
2 parents 3ee2991 + c63b0bb commit 69284e4

File tree

11 files changed

+1272
-551
lines changed

11 files changed

+1272
-551
lines changed

gatsby-node.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ exports.sourceNodes = async ({ actions }) => {
3939
put: res.paths[path].put,
4040
delete: res.paths[path].delete,
4141
responses: res.paths[path].responses,
42+
requestBody: res.paths[path].requestBody,
43+
parameters: res.paths[path].parameters,
4244
tagGroup:
4345
(res.paths[path]["get"] && res.paths[path]["get"].tags) ||
4446
(res.paths[path]["put"] && res.paths[path]["put"].tags) ||
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
import React from "react";
2+
import Markdown from "react-markdown/with-html";
3+
4+
import CharDisplay from "./charDisplay";
5+
6+
export const BodySchema = props => {
7+
const { data } = props;
8+
9+
return (
10+
<>
11+
<div className="my-8">
12+
<h3>Request Body Schema</h3>
13+
</div>
14+
{data.requestBody.content.application_json &&
15+
data.requestBody.content.application_json.schema &&
16+
data.requestBody.content.application_json.schema.properties &&
17+
Object.keys(
18+
data.requestBody.content.application_json.schema.properties
19+
).map((p, i) => {
20+
const b =
21+
data.requestBody.content.application_json.schema.properties[p];
22+
return (
23+
b &&
24+
b.readOnly !== true && (
25+
<div key={i} className="response-wrapper">
26+
<div className="flex mb-4 pt-2 initResponse">
27+
<div className="w-1/4">
28+
<div>
29+
<b className={b.deprecated && "line-through"}>{p}</b>
30+
</div>
31+
<div className="leading-xs">
32+
{data.requestBody.content.application_json.schema
33+
.required &&
34+
data.requestBody.content.application_json.schema.required.map(
35+
(req, i) => {
36+
if (p === req) {
37+
return (
38+
<span className="text-BaseRed text-sm" key={i}>
39+
Required
40+
</span>
41+
);
42+
}
43+
return false;
44+
}
45+
)}
46+
</div>
47+
{b.x_linode_filterable && (
48+
<div className="leading-xs">
49+
<span className="text-grey-dark text-sm">
50+
Filterable
51+
</span>
52+
</div>
53+
)}
54+
</div>
55+
<div className="w-3/4">
56+
<div className="text-sm leading-text-sm text-grey-darkest">
57+
{b.type} <CharDisplay data={b} />
58+
{b.pattern && <span className="tag">{b.pattern}</span>}
59+
</div>
60+
{b.deprecated && (
61+
<div>
62+
<span className="tag tag-deprecated">Deprecated</span>
63+
</div>
64+
)}
65+
<Markdown
66+
source={b.description}
67+
escapeHtml={false}
68+
className="api-desc"
69+
/>
70+
</div>
71+
</div>
72+
</div>
73+
)
74+
);
75+
})}
76+
{data.requestBody.content.application_json &&
77+
data.requestBody.content.application_json.schema &&
78+
data.requestBody.content.application_json.schema.allOf &&
79+
Object.keys(data.requestBody.content.application_json.schema.allOf).map(
80+
a => {
81+
const s = data.requestBody.content.application_json.schema.allOf[a];
82+
return (
83+
s.properties &&
84+
Object.keys(s.properties).map((p, i) => {
85+
const b = s.properties[p];
86+
return (
87+
b &&
88+
b.readOnly === undefined && (
89+
<div key={i} className="response-wrapper">
90+
<div className="flex pt-2 mb-4 initResponse">
91+
<div className="w-1/4">
92+
<div>
93+
<b>{p}</b>
94+
</div>
95+
<div className="leading-xs">
96+
{s.required &&
97+
s.required.map((req, i) => {
98+
if (p === req) {
99+
return (
100+
<span
101+
className="text-BaseRed text-sm"
102+
key={i}
103+
>
104+
Required
105+
</span>
106+
);
107+
}
108+
return false;
109+
})}
110+
</div>
111+
<div className="leading-xs">
112+
{data.requestBody.content.application_json.schema
113+
.required &&
114+
data.requestBody.content.application_json.schema.required.map(
115+
(req, i) => {
116+
if (p === req) {
117+
return (
118+
<span
119+
className="text-BaseRed text-sm"
120+
key={i}
121+
>
122+
Required
123+
</span>
124+
);
125+
}
126+
return false;
127+
}
128+
)}
129+
</div>
130+
<div className="leading-xs mt-1">
131+
{b.x_linode_filterable && (
132+
<span className="text-grey-dark text-sm">
133+
Filterable
134+
</span>
135+
)}
136+
</div>
137+
</div>
138+
<div className="w-3/4">
139+
<div className="text-sm leading-text-sm text-grey-darkest">
140+
{b.type} <CharDisplay data={b} />
141+
{b.pattern && (
142+
<span className="tag">{b.pattern}</span>
143+
)}
144+
</div>
145+
<Markdown
146+
source={b.description}
147+
escapeHtml={false}
148+
className="api-desc"
149+
/>
150+
</div>
151+
</div>
152+
</div>
153+
)
154+
);
155+
})
156+
);
157+
}
158+
)}
159+
</>
160+
);
161+
};
162+
163+
export default BodySchema;

src/components/2_molecules/ResponseItem.js

Lines changed: 8 additions & 200 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import React from "react";
2-
import Markdown from "react-markdown/with-html";
2+
3+
import ResponseItemElements from "../2_molecules/ResponseItemElements";
34

45
export const ResponseItem = props => {
5-
const { response, r, m } = props;
6+
const { response, r, m, mode } = props;
67
return (
78
r && (
89
<div className="mt-8">
@@ -18,204 +19,11 @@ export const ResponseItem = props => {
1819
>
1920
<b>{response.replace(/[_]/g, " ")}</b>: {r.description}
2021
</p>
21-
<div className="mt-6">
22-
{r.content &&
23-
r.content.application_json &&
24-
r.content.application_json.schema &&
25-
r.content.application_json.schema.properties &&
26-
Object.keys(r.content.application_json.schema.properties).map(
27-
(p, i) => {
28-
const l = r.content.application_json.schema.properties[p];
29-
return (
30-
l && (
31-
<div key={i} className="response-wrapper">
32-
<div className="flex mb-2 pt-2 initResponse">
33-
<div className="w-1/4">
34-
<div>
35-
<b>{p}</b>
36-
</div>
37-
{m.requestBody &&
38-
m.requestBody.content &&
39-
m.requestBody.content.application_json &&
40-
m.requestBody.content.application_json.schema &&
41-
m.requestBody.content.application_json.schema
42-
.required &&
43-
m.requestBody.content.application_json.schema.required.map(
44-
(req, i) => {
45-
if (p === req) {
46-
return (
47-
<div className="leading-xs" key={i}>
48-
<span className="text-BaseRed text-sm">
49-
Required
50-
</span>
51-
</div>
52-
);
53-
}
54-
return false;
55-
}
56-
)}
57-
</div>
58-
<div className="w-3/4">
59-
<div>
60-
<div className="text-sm leading-text-sm text-grey-darkest">
61-
{r.content.application_json.schema.properties
62-
.errors || l.items
63-
? "array of objects"
64-
: l.type}{" "}
65-
{l.type === "string" &&
66-
l.maxLength &&
67-
!l.minLength && (
68-
<span className="tag">
69-
{`${l.maxLength}${" "}<= characters`}
70-
</span>
71-
)}
72-
{l.type === "string" &&
73-
l.maxLength &&
74-
l.minLength && (
75-
<span className="tag">
76-
{`${" ["} ${l.minLength}${" .. "}${
77-
l.maxLength
78-
}${"] "} characters`}{" "}
79-
</span>
80-
)}
81-
{l.pattern && (
82-
<span className="tag">{l.pattern}</span>
83-
)}
84-
</div>
85-
</div>
86-
{l.enum && (
87-
<div className="flex flex-wrap mb-2">
88-
<span className="text-sm">Enum: </span>
89-
{l.enum.map((e, i) => {
90-
return (
91-
<span
92-
className="tag mr-2 mb-1 inline-block"
93-
key={i}
94-
>
95-
"{e}"
96-
</span>
97-
);
98-
})}
99-
</div>
100-
)}
101-
<div>
102-
<Markdown
103-
source={l.description}
104-
escapeHtml={false}
105-
className="api-desc"
106-
/>
107-
</div>
108-
</div>
109-
</div>
110-
{l.properties && (
111-
<div className="px-4 mt-4 mb-4 ml-4 subResponse">
112-
{Object.keys(l.properties).map((e, i) => {
113-
const data = l.properties[e];
114-
return (
115-
<div key={i} className="flex mb-4">
116-
<div className="w-1/4">
117-
<b>{e}</b>
118-
</div>
119-
<div className="w-3/4">
120-
<div>
121-
<div className="text-sm text-grey-darkest">
122-
{data.type}{" "}
123-
{data.pattern && (
124-
<span className="tag">
125-
{data.pattern}
126-
</span>
127-
)}
128-
</div>
129-
{data.enum && (
130-
<div className="flex flex-wrap mb-2">
131-
<span className="text-sm mr-2">
132-
Enum:
133-
</span>
134-
{data.enum.map((e, i) => {
135-
return (
136-
<span
137-
className="tag mr-2 mb-1 inline-block"
138-
key={i}
139-
>
140-
"{e}"
141-
</span>
142-
);
143-
})}
144-
</div>
145-
)}
146-
<div>
147-
<Markdown
148-
source={data.description}
149-
escapeHtml={false}
150-
className="api-desc"
151-
/>
152-
</div>
153-
</div>
154-
</div>
155-
</div>
156-
);
157-
})}
158-
</div>
159-
)}
160-
{l.items && (
161-
<div className="px-4 mt-4 mb-4 ml-4 subResponse">
162-
{l.items.properties &&
163-
Object.keys(l.items.properties).map((e, i) => {
164-
const data = l.items.properties[e];
165-
return (
166-
data && (
167-
<div key={i} className="flex mb-4">
168-
<div className="w-1/4">
169-
<b>{e}</b>
170-
</div>
171-
<div className="w-3/4">
172-
<div>
173-
<div className="text-sm text-grey-darkest leading-text-sm">
174-
{data.type}
175-
{data.pattern && (
176-
<span className="tag">
177-
{data.pattern}
178-
</span>
179-
)}
180-
</div>
181-
{data.enum && (
182-
<div className="flex flex-wrap mb-2">
183-
<span className="text-sm mr-2">
184-
Enum:
185-
</span>
186-
{data.enum.map((e, i) => {
187-
return (
188-
<span
189-
className="tag mr-2 mb-1 inline-block"
190-
key={i}
191-
>
192-
"{e}"
193-
</span>
194-
);
195-
})}
196-
</div>
197-
)}
198-
<div>
199-
<Markdown
200-
source={data.description}
201-
escapeHtml={false}
202-
className="api-desc"
203-
/>
204-
</div>
205-
</div>
206-
</div>
207-
</div>
208-
)
209-
);
210-
})}
211-
</div>
212-
)}
213-
</div>
214-
)
215-
);
216-
}
217-
)}
218-
</div>
22+
{(mode === "put" || mode === "post") && response !== "default" ? (
23+
<ResponseItemElements context={m.requestBody} />
24+
) : (
25+
<ResponseItemElements context={r} />
26+
)}
21927
</div>
22028
)
22129
);

0 commit comments

Comments
 (0)