tachybase_todo/packages/plugins/api-doc/src/client/index.tsx
Dunqing 1e0bedca86
feat: api documentation plugin (#2255)
* feat: api doc plugin

* fix: merge

* chore: upgrade swagger ui to latest

* feat: get paths from recourser

* feat: configure security

* feat: add models

* feat: reimplement resource action

* feat: support render schemas correctly

* feat: support load swagger documentation

* refactor: implement `SwaggerManager`

* fix: re import

* feat: update info

* refactor: do not use the cache strategy for the time being

* feat: support collection builtin actions

* fix: incorrect tag

* feat: support different swagger json for different plugins

* feat: support load server package

* feat: support visit from plugin center

* feat: add schemas for mapConfiguration

* feat: update

* fix: update tags

* feat: support only render plugin that has swagger content

* refactor: use swagger-ui-react instead of swagger-ui-dist

* fix: clean

* fix: reset

* refactor: update plugin place

* fix: revert

* fix: remove version

* fix: type error

* feat: swagger doc

* refactor: improve apis

* feat: add doc

* feat: support destination cache

* fix: avoid authorization override

* fix: auth bug

* feat: update documentation

* fix: typo

* feat: support json

* fix: key

* fix: update yarn.lock

* feat: update swagger doc

* feat: swagger doc

* docs: add auth swagger files (#2341)

* docs: add auth swagger files

* fix: yarn.lock

* fix: skip core

* feat: swagger doc

* docs: improve auth docs

* fix(theme-editor): avoid crashing

* feat(theme-editor): improve api doc

* docs: add localization-management swagger

* docs(plugin-workflow): add api doc (#2379)

* fix: remove files

* fix: aaa

* fix: dist

* fix: load swagger

* feat: acl api doc (#2494)

* chore: acl api doc

* feat: ui schema api doc

* feat: multi apps api doc

* chore: ui schema doc

* feat: collection api doc

* chore: association api doc

* chore: single association doc

* feat: move action doc

* chore: list parameters

* feat: update swagger doc

* chore: collectionIndex to first

* fix: test error

* fix: ref

* chore: doc tags

* chore: template

* chore: doc with association options

* chore: single association doc

* chore: relation type

* chore: filter single association params

* chore: m2m api doc

* chore: params

* fix: 0.12.0-alpha.5

* fix: update yarn.lock

* chore: data wrap

---------

Co-authored-by: chenos <chenlinxh@gmail.com>
Co-authored-by: YANG QIA <2013xile@gmail.com>
Co-authored-by: Rain <958414905@qq.com>
Co-authored-by: Junyi <mytharcher@users.noreply.github.com>
Co-authored-by: ChengLei Shao <chareice@live.com>
2023-08-24 00:27:57 +08:00

75 lines
1.8 KiB
TypeScript

import { RightOutlined } from '@ant-design/icons';
import { Plugin, SettingsCenterProvider } from '@nocobase/client';
import { Button, Tooltip } from 'antd';
import React from 'react';
import { useTranslation } from '../locale';
import Documentation from './Document';
import { createStyles } from 'antd-style';
const DOCUMENTATION_PATH = '/api-documentation';
export const useStyles = createStyles(({ css, token }) => {
return css`
position: relative;
background: ${token.colorBgContainer};
padding: ${token.paddingMD}px;
.open-tab {
position: absolute;
right: 0;
top: 0;
}
`;
});
const SCDocumentation = () => {
const { styles } = useStyles();
return (
<div className={styles}>
<div className="open-tab">
<Tooltip title="open in new tab">
<a href={DOCUMENTATION_PATH} target="_blank" rel="noreferrer">
<Button size="small" icon={<RightOutlined />} />
</a>
</Tooltip>
</div>
<Documentation />
</div>
);
};
const APIDocumentationProvider = React.memo((props) => {
const { t } = useTranslation();
return (
<SettingsCenterProvider
settings={{
['api-doc']: {
title: t('API documentation'),
icon: 'BookOutlined',
tabs: {
documentation: {
title: t('Documentation'),
component: SCDocumentation,
},
},
},
}}
>
{props.children}
</SettingsCenterProvider>
);
});
APIDocumentationProvider.displayName = 'APIDocumentationProvider';
export class APIDocumentationPlugin extends Plugin {
async load() {
this.app.use(APIDocumentationProvider);
this.app.router.add('api-documentation', {
path: DOCUMENTATION_PATH,
Component: Documentation,
});
}
}
export default APIDocumentationPlugin;