import React from 'react'; import 'codemirror/theme/duotone-light.css'; import specJson from './spec3.json'; import DOMPurify from 'dompurify'; import SelectSearch, { fuzzySearch } from 'react-select-search'; const operationColorMapping = { get: 'azure', post: 'green', delete: 'red', put: 'yellow' }; class Stripe extends React.Component { constructor(props) { super(props); this.state = {}; } componentDidMount() { this.setState({ options: { params: { path: {}, query: {}, request: {} } } }); } 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: 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 } = 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 (