import React from 'react'; import 'codemirror/theme/duotone-light.css'; import DOMPurify from 'dompurify'; import SelectSearch, { fuzzySearch } from 'react-select-search'; import { openapiService } from '@/_services'; import { CodeHinter } from '../../CodeBuilder/CodeHinter'; const operationColorMapping = { get: 'azure', post: 'green', delete: 'red', put: 'yellow', }; class Stripe extends React.Component { constructor(props) { super(props); this.state = { loadingSpec: true, }; } componentDidMount() { this.setState({ loadingSpec: true, options: { params: { path: {}, query: {}, request: {}, }, }, }); this.fetchOpenApiSpec(); } fetchOpenApiSpec = () => { this.setState({ loadingSpec: true }); openapiService .fetchSpecFromUrl('https://raw.githubusercontent.com/stripe/openapi/master/openapi/spec3.json') .then((response) => { response.text().then((text) => { const data = JSON.parse(text); this.setState({ specJson: data, loadingSpec: false }); }); }); }; changeOption(option, value) { this.setState({ options: { ...this.state.options, [option]: value, }, }); } changeOperation = (value) => { const operation = value.split(',')[0]; const path = value.split(',')[1]; this.setState( { selectedOperation: this.state.specJson.paths[path][operation], options: { ...this.state.options, path, operation, }, }, () => { this.props.optionsChanged(this.state.options); } ); }; changeParam = (paramType, paramName, value) => { const options = this.state.options; const newOptions = { ...options, params: { ...options.params, [paramType]: { ...options.params[paramType], [paramName]: value, }, }, }; this.setState({ options: newOptions, }); this.props.optionsChanged(newOptions); }; renderOperationOption = (props, option, snapshot, className) => { return ( ); }; computeOperationSelectionOptions = (paths) => { let options = []; for (const path of Object.keys(paths)) { for (const operation of Object.keys(paths[path])) { options.push({ value: `${operation},${path}`, name: path, operation: operation, }); } } return options; }; render() { const { options, selectedOperation, specJson, loadingSpec } = this.state; let pathParams = []; let queryParams = []; let requestBody = []; if (selectedOperation) { if (selectedOperation.parameters) { pathParams = selectedOperation.parameters.filter((param) => param.in === 'path'); queryParams = selectedOperation.parameters.filter((param) => param.in === 'query'); } if (selectedOperation.requestBody) { const requestType = Object.keys(selectedOperation.requestBody.content)[0]; requestBody = selectedOperation.requestBody.content[requestType]; } } return (