mirror of
https://github.com/Redocly/redoc.git
synced 2025-08-09 06:34:53 +03:00
request code samples could fetch the sample files
This commit is contained in:
parent
121bf640fa
commit
2415c2a50e
|
@ -1,6 +1,7 @@
|
||||||
import { observer } from 'mobx-react';
|
import { observer } from 'mobx-react';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { OperationModel, RedocNormalizedOptions } from '../../services';
|
import { OperationModel, RedocNormalizedOptions } from '../../services';
|
||||||
|
import { OpenAPIXCodeSample } from '../../types';
|
||||||
import { PayloadSamples } from '../PayloadSamples/PayloadSamples';
|
import { PayloadSamples } from '../PayloadSamples/PayloadSamples';
|
||||||
import { SourceCodeWithCopy } from '../SourceCode/SourceCode';
|
import { SourceCodeWithCopy } from '../SourceCode/SourceCode';
|
||||||
|
|
||||||
|
@ -11,17 +12,64 @@ export interface RequestSamplesProps {
|
||||||
operation: OperationModel;
|
operation: OperationModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface RequestSamplesState {
|
||||||
|
codeSamples: OpenAPIXCodeSample[];
|
||||||
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
export class RequestSamples extends React.Component<RequestSamplesProps> {
|
export class RequestSamples extends React.Component<RequestSamplesProps, RequestSamplesState> {
|
||||||
static contextType = OptionsContext;
|
static contextType = OptionsContext;
|
||||||
context: RedocNormalizedOptions;
|
context: RedocNormalizedOptions;
|
||||||
operation: OperationModel;
|
operation: OperationModel;
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
const { operation } = this.props;
|
||||||
|
const codeSamples = operation.codeSamples;
|
||||||
|
this.state = {
|
||||||
|
codeSamples,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
componentWillMount() {
|
||||||
|
const { codeSamples } = this.state;
|
||||||
|
codeSamples.forEach(codeSample => {
|
||||||
|
if (codeSample.source && codeSample.source.startsWith('@url:')) {
|
||||||
|
const fileURL = codeSample.source.substr(5);
|
||||||
|
this.fetchOriginSample(fileURL)
|
||||||
|
.then(source => {
|
||||||
|
codeSample.source = source;
|
||||||
|
this.setState({ codeSamples });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
fetchOriginSample = async fileURL => {
|
||||||
|
try {
|
||||||
|
const utf8Decoder = new TextDecoder('utf-8');
|
||||||
|
const response = await fetch(fileURL,
|
||||||
|
{
|
||||||
|
headers: { 'Content-type': 'text/plain' },
|
||||||
|
},
|
||||||
|
);
|
||||||
|
if (response && response.body) {
|
||||||
|
const reader = response.body.getReader();
|
||||||
|
const { value } = await reader.read();
|
||||||
|
const source = value ? utf8Decoder.decode(value) : '';
|
||||||
|
return source ? source : '';
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e.stack);
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { operation } = this.props;
|
const { operation } = this.props;
|
||||||
const requestBodyContent = operation.requestBody && operation.requestBody.content;
|
const requestBodyContent = operation.requestBody && operation.requestBody.content;
|
||||||
const hasBodySample = requestBodyContent && requestBodyContent.hasSample;
|
const hasBodySample = requestBodyContent && requestBodyContent.hasSample;
|
||||||
const samples = operation.codeSamples;
|
const { codeSamples: samples } = this.state;
|
||||||
|
|
||||||
const hasSamples = hasBodySample || samples.length > 0;
|
const hasSamples = hasBodySample || samples.length > 0;
|
||||||
const hideTabList =
|
const hideTabList =
|
||||||
|
|
Loading…
Reference in New Issue
Block a user