Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature: Render example JSON response #696

Merged
merged 13 commits into from Nov 2, 2021
5 changes: 0 additions & 5 deletions data/sidebars/references.yml
Expand Up @@ -13,11 +13,6 @@
- title: API Reference
link: /references/aquarius/

- group: Aquarius Py Module
items:
- title: API Reference
link: /references/read-the-docs/aquarius/

- group: provider REST API
items:
- title: API Reference
Expand Down
2 changes: 0 additions & 2 deletions gatsby-node.js
Expand Up @@ -162,12 +162,10 @@ exports.createPages = ({ graphql, actions }) => {

const markdowns = result.data.allRepoMarkdown.edges
const oceanPyList = filterMarkdownList(markdowns, 'ocean.py')
const aquariusList = filterMarkdownList(markdowns, 'aquarius')
const providerList = filterMarkdownList(markdowns, 'provider')
const subgraphList = filterMarkdownList(markdowns, 'ocean-subgraph')

await createReadTheDocsPage(createPage, 'ocean-py', oceanPyList)
await createReadTheDocsPage(createPage, 'aquarius', aquariusList)
await createReadTheDocsPage(createPage, 'provider', providerList)
await createReadTheDocsPage(createPage, 'ocean-subgraph', subgraphList)

Expand Down
129 changes: 129 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Expand Up @@ -56,6 +56,7 @@
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-helmet": "^6.1.0",
"react-json-view": "^1.21.3",
"react-scrollspy": "^3.4.3",
"rehype-react": "^7.0.2",
"remark": "^13.0.0",
Expand Down
35 changes: 23 additions & 12 deletions src/templates/Swagger/Paths.jsx
Expand Up @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'
import slugify from 'slugify'
import styles from './Paths.module.scss'
import stylesDoc from '../Doc.module.scss'

const ResponseExample = React.lazy(() => import('./ResponseExample'))
const ParameterExample = ({ properties }) => (
//
// HEADS UP!
Expand Down Expand Up @@ -87,24 +87,35 @@ Parameters.propTypes = {
parameters: PropTypes.array.isRequired
}

const Responses = ({ responses }) => (
<>
<h4 className={styles.subHeading}>Responses</h4>
{Object.keys(responses).map((key) => (
<div key={key} className={styles.response}>
<code>{key}</code> {responses[key].description}
</div>
))}
</>
)
const Responses = ({ responses }) => {
const isSSR = typeof window === 'undefined'

return (
<>
<h4 className={styles.subHeading}>Responses</h4>
{Object.keys(responses).map((key) => (
<div key={key} className={styles.response}>
<code>{key}</code> {responses[key].description}
<br />
<>
{!isSSR && (
<React.Suspense fallback={<div />}>
<ResponseExample examples={responses[key].example} />
</React.Suspense>
)}
</>
</div>
))}
</>
)
}

Responses.propTypes = {
responses: PropTypes.object.isRequired
}

const Method = ({ keyName, value }) => {
const { summary, description, parameters, responses } = value

return (
<div className={styles.method}>
<h3 className={styles.pathMethod} data-type={keyName}>
Expand Down
45 changes: 45 additions & 0 deletions src/templates/Swagger/ResponseExample.jsx
@@ -0,0 +1,45 @@
import React from 'react'
import PropTypes from 'prop-types'
import ReactJson from 'react-json-view'

const ResponseExample = ({ examples }) => {
if (!examples) return null
const jsonExample = examples['application/json']
const plainText = examples['text/plain']

if (jsonExample) {
return (
<div>
<b>Example</b>
<br />
<code>
{typeof jsonExample === 'boolean' ? (
<code>{JSON.stringify(jsonExample)}</code>
) : (
<ReactJson
name={null}
src={jsonExample}
collapsed
enableClipboard={false}
/>
)}
</code>
</div>
)
} else if (plainText) {
return (
<div>
<b>Example</b>
<code>{plainText}</code>
</div>
)
}

return null
}

ResponseExample.propTypes = {
examples: PropTypes.object
}

export default ResponseExample