"use strict";

var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
exports.__esModule = true;
exports.default = void 0;
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _swaggerUi = _interopRequireDefault(require("#swagger-ui"));
class SwaggerUI extends _react.default.Component {
  constructor(props) {
    super(props);
    this.SwaggerUIComponent = null;
    this.system = null;
  }
  componentDidMount() {
    const ui = (0, _swaggerUi.default)({
      plugins: this.props.plugins,
      spec: this.props.spec,
      url: this.props.url,
      layout: this.props.layout,
      defaultModelsExpandDepth: this.props.defaultModelsExpandDepth,
      defaultModelRendering: this.props.defaultModelRendering,
      presets: [_swaggerUi.default.presets.apis, ...this.props.presets],
      requestInterceptor: this.props.requestInterceptor,
      responseInterceptor: this.props.responseInterceptor,
      onComplete: this.onComplete,
      docExpansion: this.props.docExpansion,
      supportedSubmitMethods: this.props.supportedSubmitMethods,
      queryConfigEnabled: this.props.queryConfigEnabled,
      defaultModelExpandDepth: this.props.defaultModelExpandDepth,
      displayOperationId: this.props.displayOperationId,
      tryItOutEnabled: this.props.tryItOutEnabled,
      displayRequestDuration: this.props.displayRequestDuration,
      requestSnippetsEnabled: this.props.requestSnippetsEnabled,
      requestSnippets: this.props.requestSnippets,
      showMutatedRequest: this.props.showMutatedRequest,
      deepLinking: this.props.deepLinking,
      showExtensions: this.props.showExtensions,
      showCommonExtensions: this.props.showCommonExtensions,
      filter: this.props.filter,
      persistAuthorization: this.props.persistAuthorization,
      withCredentials: this.props.withCredentials,
      ...(typeof this.props.oauth2RedirectUrl === "string" ? {
        oauth2RedirectUrl: this.props.oauth2RedirectUrl
      } : {})
    });
    this.system = ui;
    this.SwaggerUIComponent = ui.getComponent("App", "root");
    this.forceUpdate();
  }
  render() {
    return this.SwaggerUIComponent ? /*#__PURE__*/_react.default.createElement(this.SwaggerUIComponent, null) : null;
  }
  componentDidUpdate(prevProps) {
    const prevStateUrl = this.system.specSelectors.url();
    if (this.props.url !== prevStateUrl || this.props.url !== prevProps.url) {
      // flush current content
      this.system.specActions.updateSpec("");
      if (this.props.url) {
        // update the internal URL
        this.system.specActions.updateUrl(this.props.url);
        // trigger remote definition fetch
        this.system.specActions.download(this.props.url);
      }
    }
    const prevStateSpec = this.system.specSelectors.specStr();
    if (this.props.spec && (this.props.spec !== prevStateSpec || this.props.spec !== prevProps.spec)) {
      if (typeof this.props.spec === "object") {
        this.system.specActions.updateSpec(JSON.stringify(this.props.spec));
      } else {
        this.system.specActions.updateSpec(this.props.spec);
      }
    }
  }
  onComplete = () => {
    if (typeof this.props.onComplete === "function") {
      return this.props.onComplete(this.system);
    }
  };
}
SwaggerUI.defaultProps = {
  spec: "",
  url: "",
  layout: "BaseLayout",
  requestInterceptor: req => req,
  responseInterceptor: res => res,
  supportedSubmitMethods: ["get", "put", "post", "delete", "options", "head", "patch", "trace"],
  queryConfigEnabled: false,
  plugins: [],
  displayOperationId: false,
  showMutatedRequest: true,
  docExpansion: "list",
  defaultModelExpandDepth: 1,
  defaultModelsExpandDepth: 1,
  defaultModelRendering: "example",
  presets: [],
  deepLinking: false,
  showExtensions: false,
  showCommonExtensions: false,
  filter: false,
  requestSnippetsEnabled: false,
  requestSnippets: {
    generators: {
      "curl_bash": {
        title: "cURL (bash)",
        syntax: "bash"
      },
      "curl_powershell": {
        title: "cURL (PowerShell)",
        syntax: "powershell"
      },
      "curl_cmd": {
        title: "cURL (CMD)",
        syntax: "bash"
      }
    },
    defaultExpanded: true,
    languages: null // e.g. only show curl bash = ["curl_bash"]
  },
  tryItOutEnabled: false,
  displayRequestDuration: false,
  withCredentials: false,
  persistAuthorization: false,
  oauth2RedirectUrl: undefined
};
SwaggerUI.System = _swaggerUi.default.System;
SwaggerUI.presets = _swaggerUi.default.presets;
SwaggerUI.plugins = _swaggerUi.default.plugins;
var _default = exports.default = SwaggerUI;

