ApiDocsPage.tsx 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import { useMemo } from 'react';
  2. import { ConfigProvider, Layout } from 'antd';
  3. import SwaggerUI from 'swagger-ui-react';
  4. import 'swagger-ui-react/swagger-ui.css';
  5. import { useTheme } from '@/hooks/useTheme';
  6. import AppSidebar from '@/layouts/AppSidebar';
  7. import './ApiDocsPage.css';
  8. const basePath = window.X_UI_BASE_PATH || '';
  9. const openApiUrl = `${basePath}panel/api/openapi.json`;
  10. export default function ApiDocsPage() {
  11. const { isDark, isUltra, antdThemeConfig } = useTheme();
  12. const pageClass = useMemo(() => {
  13. const classes = ['api-docs-page'];
  14. if (isDark) classes.push('is-dark');
  15. if (isUltra) classes.push('is-ultra');
  16. return classes.join(' ');
  17. }, [isDark, isUltra]);
  18. return (
  19. <ConfigProvider theme={antdThemeConfig}>
  20. <Layout className={pageClass}>
  21. <AppSidebar />
  22. <Layout className="content-shell">
  23. <Layout.Content className="content-area">
  24. <div className="docs-wrapper">
  25. <SwaggerUI
  26. url={openApiUrl}
  27. docExpansion="list"
  28. deepLinking={false}
  29. tryItOutEnabled
  30. />
  31. </div>
  32. </Layout.Content>
  33. </Layout>
  34. </Layout>
  35. </ConfigProvider>
  36. );
  37. }