tachybase_todo/packages/plugins/@nocobase/plugin-api-doc/src/client/Document.tsx

106 lines
2.7 KiB
TypeScript
Raw Normal View History

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
import { css, useAPIClient, useRequest } from '@nocobase/client';
import { Select, Space, Spin, Typography } from 'antd';
import React, { useEffect, useRef, useState } from 'react';
import SwaggerUIBundle from 'swagger-ui-dist/swagger-ui-bundle';
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
import 'swagger-ui-dist/swagger-ui.css';
import { useTranslation } from '../locale';
const DESTINATION_URL_KEY = 'API_DOC:DESTINATION_URL_KEY';
const getUrl = () => localStorage.getItem(DESTINATION_URL_KEY);
const Documentation = () => {
const apiClient = useAPIClient();
const { t } = useTranslation();
const swaggerUIRef = useRef();
const { data: urls } = useRequest<{ data: { name: string; url: string }[] }>({ url: 'swagger:getUrls' });
const requestInterceptor = (req) => {
if (!req.headers['Authorization']) {
req.headers['Authorization'] = `Bearer ${apiClient.auth.getToken()}`;
}
return req;
};
const [destination, onDestinationChange] = useState<string>(getUrl());
useEffect(() => {
if (destination) {
localStorage.setItem(DESTINATION_URL_KEY, destination);
}
}, [destination]);
useEffect(() => {
if (!urls?.data?.length) return;
if (!destination || !urls.data.find((item) => item.url === getUrl())) {
onDestinationChange(urls.data[0].url);
}
}, [destination, urls]);
useEffect(() => {
SwaggerUIBundle({
requestInterceptor,
url: destination,
domNode: swaggerUIRef.current,
});
}, [destination]);
if (!destination) {
return <Spin />;
}
return (
<Space
direction="vertical"
style={{
width: '100%',
}}
>
<div
style={{
display: 'flex',
justifyContent: 'center',
width: '100%',
}}
>
<div
className={css`
display: flex;
align-items: center;
gap: 8px;
max-width: 1460px;
width: 100%;
padding: 16px 20px;
`}
>
<Typography.Text
style={{
whiteSpace: 'nowrap',
}}
strong
>
{t('Select a definition')}
</Typography.Text>
<Select
feat: support e2e (#2624) * chore: upgrade vitest to v0.34.3 * feat: setup NocoBase * chore: preparing test env * test: add a test of rigster * refactor: rename test dir to testUtils * chore: add tests * chore: add ci for e2e * chore: fix ci * chore: avoid error in CI * chore: add some utils for test * chore: make more stable * chore: should not close server in CI * chore: add comments * chore: change output dir * fix: should use current branch to run tests * chore: should request systemSettings by api in e2e * chore: should build first in e2e CI * chore: remove key * chore: use execa to replace execSync * refactor: extract test suite * chore: add gotoPage * chore: update uid of pageSchema * chore: update collection name * chore: use faker.js to generate data * refactor: extract page config * chore: ignore for association fields in faker * chore: add testid * chore: optimize action designer * chore: associationFilter.Item designer * chore: AssiciationFilter & BlockItem * Revert "chore: AssiciationFilter & BlockItem" This reverts commit b418df650e106fd0c8e23035d2f75acf60dcafe4. * Revert "chore: associationFilter.Item designer" This reverts commit 7aa4d35c1af7f3a780b370d8b1b44aac01697be3. * Revert "chore: optimize action designer" This reverts commit ff717b972ffd64f7968d565a3a84ad617ff889e2. * chore: optimize Designer * chore: compat with older browsers * chore: use describe to avoid hooks is not run * chore: add no-floating-promises to eslint rules * chore: support argv * chore: demo * chore: better testId * chore: change .e2e.ts to .test.ts * fix(SchemaInitializer): avoid error * refactor: move e2eUtils.ts to @nocobase/test * fix: move e2eUtils to client * chore: remove uselesscode * refactor: add .env.e2e.example * chore: optimize log * refactor: use mockPage to replace gotoPage * chore: update env.e2e * chore: add APP_BASE_URL * chore: gitigore * test: add test related of menu * chore: add SOCKET_PATH in env * fix(vscode): load env when using vscode plugin
2023-09-27 20:00:17 +08:00
data-testid="antd-select"
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
showSearch
value={destination}
options={urls?.data}
style={{
width: '100%',
}}
fieldNames={{
label: 'name',
value: 'url',
}}
onChange={onDestinationChange}
/>
</div>
</div>
<div ref={swaggerUIRef}></div>
{/* <SwaggerUI url={destination} requestInterceptor={requestInterceptor} persistAuthorization deepLinking /> */}
</Space>
);
};
export default Documentation;