From 3dce31f6a1973c179ed20d4bc7a6c688cee2f98e Mon Sep 17 00:00:00 2001 From: chenos Date: Fri, 24 Jun 2022 21:19:57 +0800 Subject: [PATCH] refactor: client application (#533) * refactor: client application * feat: application * fix: improve code * fix: app plugin * fix: app plugin * fix: china region plugin --- packages/app/client/package.json | 3 +- packages/app/client/src/pages/apiClient.ts | 10 - packages/app/client/src/pages/index.less | 3 - packages/app/client/src/pages/index.tsx | 132 +-------- packages/app/client/src/pages/mock.ts | 172 ------------ packages/app/client/tsconfig.json | 1 + packages/core/cli/src/commands/start.js | 1 - packages/core/client/package.json | 3 - .../core/client/src/api-client/APIClient.ts | 25 ++ .../client/src/application/Application.tsx | 131 +++++++++ .../application/__tests__/compose.test.tsx | 4 +- .../core/client/src/application/index.tsx | 2 + packages/core/client/src/index.tsx | 3 +- .../antd/action/Action.Designer.tsx | 3 +- .../schema-component/antd/form-v2/Form.tsx | 2 +- .../src/schema-initializer/items/index.tsx | 25 +- packages/core/client/src/slate/RichText.tsx | 258 ------------------ packages/core/client/src/slate/Slate.tsx | 32 --- packages/core/client/src/slate/components.tsx | 172 ------------ .../core/client/src/slate/demos/demo1.tsx | 27 -- .../core/client/src/slate/demos/demo2.tsx | 79 ------ .../core/client/src/slate/demos/demo3.tsx | 44 --- packages/core/client/src/slate/index.less | 51 ---- packages/core/client/src/slate/index.md | 22 -- packages/core/client/src/slate/index.ts | 1 - .../core/client/src/slate/materialicons.woff2 | Bin 124372 -> 0 bytes .../core/client/src/workflow/nodes/index.tsx | 6 +- .../client/src/workflow/triggers/index.tsx | 8 +- packages/core/sdk/src/APIClient.ts | 4 +- packages/core/utils/client.d.ts | 2 + packages/core/utils/client.js | 12 + packages/core/utils/server.d.ts | 2 + packages/core/utils/server.js | 12 + packages/core/utils/src/client.ts | 4 + packages/core/utils/src/index.ts | 1 + packages/core/utils/src/server.ts | 7 + .../plugins/audit-logs/src/client/index.ts | 1 + packages/plugins/china-region/client.d.ts | 2 + packages/plugins/china-region/client.js | 12 + packages/plugins/china-region/package.json | 2 + packages/plugins/china-region/server.d.ts | 2 + packages/plugins/china-region/server.js | 12 + .../plugins/china-region/src/client/index.tsx | 79 ++++++ .../{ => server}/collections/chinaRegions.ts | 0 .../src/{server.ts => server/index.ts} | 4 +- packages/plugins/export/src/client/index.ts | 1 + tsconfig.json | 3 + yarn.lock | 67 ----- 48 files changed, 360 insertions(+), 1089 deletions(-) delete mode 100644 packages/app/client/src/pages/apiClient.ts delete mode 100644 packages/app/client/src/pages/index.less delete mode 100644 packages/app/client/src/pages/mock.ts create mode 100644 packages/core/client/src/application/Application.tsx delete mode 100644 packages/core/client/src/slate/RichText.tsx delete mode 100644 packages/core/client/src/slate/Slate.tsx delete mode 100644 packages/core/client/src/slate/components.tsx delete mode 100644 packages/core/client/src/slate/demos/demo1.tsx delete mode 100644 packages/core/client/src/slate/demos/demo2.tsx delete mode 100644 packages/core/client/src/slate/demos/demo3.tsx delete mode 100644 packages/core/client/src/slate/index.less delete mode 100644 packages/core/client/src/slate/index.md delete mode 100644 packages/core/client/src/slate/index.ts delete mode 100644 packages/core/client/src/slate/materialicons.woff2 create mode 100644 packages/core/utils/client.d.ts create mode 100644 packages/core/utils/client.js create mode 100644 packages/core/utils/server.d.ts create mode 100644 packages/core/utils/server.js create mode 100644 packages/core/utils/src/client.ts create mode 100644 packages/core/utils/src/server.ts create mode 100755 packages/plugins/china-region/client.d.ts create mode 100755 packages/plugins/china-region/client.js create mode 100755 packages/plugins/china-region/server.d.ts create mode 100755 packages/plugins/china-region/server.js create mode 100644 packages/plugins/china-region/src/client/index.tsx rename packages/plugins/china-region/src/{ => server}/collections/chinaRegions.ts (100%) rename packages/plugins/china-region/src/{server.ts => server/index.ts} (95%) diff --git a/packages/app/client/package.json b/packages/app/client/package.json index f3fdbfa37..2b3aaade5 100644 --- a/packages/app/client/package.json +++ b/packages/app/client/package.json @@ -3,8 +3,7 @@ "version": "0.7.0-alpha.83", "license": "MIT", "devDependencies": { - "@nocobase/client": "0.7.0-alpha.83", - "@nocobase/plugin-export": "0.7.0-alpha.83" + "@nocobase/client": "0.7.0-alpha.83" }, "repository": { "type": "git", diff --git a/packages/app/client/src/pages/apiClient.ts b/packages/app/client/src/pages/apiClient.ts deleted file mode 100644 index e80c0fa8e..000000000 --- a/packages/app/client/src/pages/apiClient.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { APIClient } from '@nocobase/client'; - -const apiClient = new APIClient({ - baseURL: process.env.API_BASE_URL, - headers: { - 'X-Hostname': window?.location?.hostname, - }, -}); - -export default apiClient; diff --git a/packages/app/client/src/pages/index.less b/packages/app/client/src/pages/index.less deleted file mode 100644 index 586302bfc..000000000 --- a/packages/app/client/src/pages/index.less +++ /dev/null @@ -1,3 +0,0 @@ -.title { - background: rgb(121, 242, 157); -} diff --git a/packages/app/client/src/pages/index.tsx b/packages/app/client/src/pages/index.tsx index 473aaae58..99d0bab45 100644 --- a/packages/app/client/src/pages/index.tsx +++ b/packages/app/client/src/pages/index.tsx @@ -1,128 +1,14 @@ -import { - ACLProvider, - ACLShortcut, - AdminLayout, - AntdConfigProvider, - AntdSchemaComponentProvider, - APIClientProvider, - AuthLayout, - BlockSchemaComponentProvider, - BlockTemplateDetails, - BlockTemplatePage, - ChinaRegionProvider, - CollectionManagerShortcut, - compose, - DesignableSwitch, - FileStorageShortcut, - i18n, - MenuItemInitializers, - PluginManagerProvider, - RemoteDocumentTitleProvider, - RemoteRouteSwitchProvider, - // RemoteCollectionManagerProvider, - RouteSchemaComponent, - RouteSwitch, - SchemaComponentProvider, - SchemaInitializerProvider, - SchemaTemplateShortcut, - SigninPage, - SignupPage, - Slate, - SystemSettingsProvider, - SystemSettingsShortcut, - useRoutes, - WorkflowPage, - WorkflowRouteProvider, - WorkflowShortcut -} from '@nocobase/client'; -import { AuditLogsProvider } from '@nocobase/plugin-audit-logs/client'; -import { ExportPluginProvider } from '@nocobase/plugin-export/client'; -import { notification } from 'antd'; -import 'antd/dist/antd.css'; -import React from 'react'; -import { I18nextProvider } from 'react-i18next'; -import { Link, NavLink } from 'react-router-dom'; -import apiClient from './apiClient'; +import { Application } from '@nocobase/client'; -apiClient.axios.interceptors.response.use( - (response) => response, - (error) => { - const redirectTo = error?.response?.data?.redirectTo; - if (redirectTo) { - return (window.location.href = redirectTo); - } - notification.error({ - message: error?.response?.data?.errors?.map?.((error: any) => { - return
{error.message}
; - }), - }); - throw error; +export const app = new Application({ + apiClient: { + baseURL: process.env.API_BASE_URL, }, -); - -const providers = [ - // [HashRouter], - // [MemoryRouter, { initialEntries: ['/'] }], - [APIClientProvider, { apiClient }], - [I18nextProvider, { i18n }], - [AntdConfigProvider, { remoteLocale: true }], - [ - RemoteRouteSwitchProvider, - { - components: { - AuthLayout, - AdminLayout, - RouteSchemaComponent, - SigninPage, - SignupPage, - WorkflowPage, - BlockTemplatePage, - BlockTemplateDetails, - }, - }, + plugins: [ + require('@nocobase/plugin-china-region/client').default, + require('@nocobase/plugin-export/client').default, + require('@nocobase/plugin-audit-logs/client').default, ], - SystemSettingsProvider, - [ - PluginManagerProvider, - { - components: { - ACLShortcut, - DesignableSwitch, - CollectionManagerShortcut, - WorkflowShortcut, - SystemSettingsShortcut, - SchemaTemplateShortcut, - FileStorageShortcut, - }, - }, - ], - [SchemaComponentProvider, { components: { Slate, Link, NavLink } }], - // RemoteCollectionManagerProvider, - [ - SchemaInitializerProvider, - { - initializers: { - MenuItemInitializers, - }, - }, - ], - ExportPluginProvider, - AuditLogsProvider, - BlockSchemaComponentProvider, - AntdSchemaComponentProvider, - ACLProvider, - ChinaRegionProvider, - WorkflowRouteProvider, - RemoteDocumentTitleProvider, -]; - -const App = compose(...providers)(() => { - const routes = useRoutes(); - return ( -
- -
- ); }); -export default App; +export default app.render(); diff --git a/packages/app/client/src/pages/mock.ts b/packages/app/client/src/pages/mock.ts deleted file mode 100644 index 5b05e1178..000000000 --- a/packages/app/client/src/pages/mock.ts +++ /dev/null @@ -1,172 +0,0 @@ -import { uid } from '@formily/shared'; -import { APIClient } from '@nocobase/client'; -import MockAdapter from 'axios-mock-adapter'; - -export default (apiClient: APIClient) => { - const mock = new MockAdapter(apiClient.axios); - - mock.onGet('/app:getLang').reply(200, { - data: { lang: 'en-US' }, - }); - - mock.onGet('/systemSettings:get/1').reply(200, { - data: { - title: 'NocoBase', - }, - }); - - const jsonSchema: any = { - qqzzjakwkwl: { - name: 'qqzzjakwkwl', - type: 'void', - 'x-component': 'Menu', - 'x-component-props': { - mode: 'mix', - theme: 'dark', - // defaultSelectedUid: 'u8', - onSelect: '{{ onSelect }}', - sideMenuRefScopeKey: 'sideMenuRef', - }, - properties: { - item3: { - type: 'void', - title: 'SubMenu u3', - 'x-uid': 'u3', - 'x-component': 'Menu.SubMenu', - 'x-component-props': {}, - properties: { - item6: { - type: 'void', - title: 'SubMenu u6', - 'x-uid': 'u6', - 'x-component': 'Menu.SubMenu', - 'x-component-props': {}, - properties: { - item7: { - type: 'void', - title: 'Menu Item u7', - 'x-uid': 'u7', - 'x-component': 'Menu.Item', - 'x-component-props': {}, - }, - item8: { - type: 'void', - title: 'Menu Item u8', - 'x-uid': 'u8', - 'x-component': 'Menu.Item', - 'x-component-props': {}, - }, - }, - }, - item4: { - type: 'void', - title: 'Menu Item u4', - 'x-uid': 'u4', - 'x-component': 'Menu.Item', - 'x-component-props': {}, - }, - item5: { - type: 'void', - title: 'Menu Item u5', - 'x-uid': 'u5', - 'x-component': 'Menu.Item', - 'x-component-props': {}, - }, - }, - }, - item1: { - type: 'void', - title: 'Menu Item u1', - 'x-uid': 'u1', - 'x-component': 'Menu.Item', - 'x-component-props': {}, - }, - item2: { - type: 'void', - title: 'Menu Item u2', - 'x-uid': 'u2', - 'x-component': 'Menu.Item', - 'x-component-props': {}, - }, - item9: { - type: 'void', - title: 'SubMenu u9', - 'x-uid': 'u9', - 'x-component': 'Menu.SubMenu', - 'x-component-props': {}, - properties: { - item10: { - type: 'void', - title: 'Menu Item u10', - 'x-uid': 'u10', - 'x-component': 'Menu.Item', - 'x-component-props': {}, - }, - }, - }, - }, - }, - }; - - mock.onGet(/\/uiSchemas\:getJsonSchema\/(\w+)/).reply(function (config) { - const name = config?.url?.split('/')?.pop(); - - if (name && jsonSchema[name]) { - return [200, { data: jsonSchema[name] }]; - } - - const response = { - data: { - type: 'void', - name: name, - 'x-uid': name, - 'x-component': 'Page', - properties: { - [uid()]: { - type: 'void', - name: 'grid1', - 'x-component': 'Grid', - 'x-item-initializer': 'Grid.AddBlockItem', - 'x-uid': uid(), - properties: {}, - }, - }, - }, - }; - return [200, response]; - }); - - mock.onGet('/routes:getAccessible').reply(200, { - data: [ - { - type: 'redirect', - from: '/', - to: '/admin', - exact: true, - }, - { - type: 'route', - uiSchemaUid: 'qqzzjakwkwl', - path: '/admin/:name(.+)?', - component: 'AdminLayout', - title: 'NocoBase Admin', - }, - { - type: 'route', - component: 'AuthLayout', - routes: [ - { - type: 'route', - path: '/signin', - component: 'SigninPage', - }, - { - type: 'route', - path: '/signup', - component: 'SignupPage', - }, - ], - }, - ], - }); -}; diff --git a/packages/app/client/tsconfig.json b/packages/app/client/tsconfig.json index 3b95db8d8..bbcb12f1d 100644 --- a/packages/app/client/tsconfig.json +++ b/packages/app/client/tsconfig.json @@ -12,6 +12,7 @@ "strict": true, "paths": { "@nocobase/plugin-*/client": ["../../plugins/*/src/client"], + "@nocobase/utils/client": ["../../core/utils/src/client"], "@nocobase/*": ["../../core/*/src/"], "@/*": ["src/*"], "@@/*": ["src/.umi/*"] diff --git a/packages/core/cli/src/commands/start.js b/packages/core/cli/src/commands/start.js index f06ba510b..ee6976a6a 100644 --- a/packages/core/cli/src/commands/start.js +++ b/packages/core/cli/src/commands/start.js @@ -39,7 +39,6 @@ module.exports = (cli) => { return; } await postCheck(opts); - await run('node', [`./packages/${APP_PACKAGE_ROOT}/server/lib/index.js`, 'install', '--silent']); if (opts.dbSync) { await run('node', [`./packages/${APP_PACKAGE_ROOT}/server/lib/index.js`, 'db:sync']); } diff --git a/packages/core/client/package.json b/packages/core/client/package.json index 5ea0baac5..a146f2ead 100644 --- a/packages/core/client/package.json +++ b/packages/core/client/package.json @@ -39,9 +39,6 @@ "react-js-cron": "^1.4.0", "react-quill": "^1.3.5", "react-router-dom": "^5.2.0", - "slate": "^0.76.1", - "slate-history": "^0.66.0", - "slate-react": "^0.76.1", "use-deep-compare-effect": "^1.8.1" }, "peerDependencies": { diff --git a/packages/core/client/src/api-client/APIClient.ts b/packages/core/client/src/api-client/APIClient.ts index f154176d9..58045f6a2 100644 --- a/packages/core/client/src/api-client/APIClient.ts +++ b/packages/core/client/src/api-client/APIClient.ts @@ -1,6 +1,31 @@ import { APIClient as APIClientSDK } from '@nocobase/sdk'; import { Result } from 'ahooks/lib/useRequest/src/types'; +import { notification } from 'antd'; +import React from 'react'; export class APIClient extends APIClientSDK { services: Record>; + + interceptors() { + super.interceptors(); + this.notification(); + } + + notification() { + this.axios.interceptors.response.use( + (response) => response, + (error) => { + const redirectTo = error?.response?.data?.redirectTo; + if (redirectTo) { + return (window.location.href = redirectTo); + } + notification.error({ + message: error?.response?.data?.errors?.map?.((error: any) => { + return React.createElement('div', { children: error.message }); + }), + }); + throw error; + }, + ); + } } diff --git a/packages/core/client/src/application/Application.tsx b/packages/core/client/src/application/Application.tsx new file mode 100644 index 000000000..1603df4a8 --- /dev/null +++ b/packages/core/client/src/application/Application.tsx @@ -0,0 +1,131 @@ +import { i18n as i18next } from 'i18next'; +import React from 'react'; +import { I18nextProvider } from 'react-i18next'; +import { Link, NavLink } from 'react-router-dom'; +import { ACLProvider, ACLShortcut } from '../acl'; +import { AntdConfigProvider } from '../antd-config-provider'; +import { APIClient, APIClientProvider } from '../api-client'; +import { BlockSchemaComponentProvider } from '../block-provider'; +import { CollectionManagerShortcut } from '../collection-manager'; +import { RemoteDocumentTitleProvider } from '../document-title'; +import { FileStorageShortcut } from '../file-manager'; +import { i18n } from '../i18n'; +import { PluginManagerProvider } from '../plugin-manager'; +import { + AdminLayout, + AuthLayout, + RemoteRouteSwitchProvider, + RouteSchemaComponent, + RouteSwitch, + useRoutes +} from '../route-switch'; +import { + AntdSchemaComponentProvider, + DesignableSwitch, + MenuItemInitializers, + SchemaComponentProvider +} from '../schema-component'; +import { SchemaInitializerProvider } from '../schema-initializer'; +import { BlockTemplateDetails, BlockTemplatePage, SchemaTemplateShortcut } from '../schema-templates'; +import { SystemSettingsProvider, SystemSettingsShortcut } from '../system-settings'; +import { SigninPage, SignupPage } from '../user'; +import { WorkflowPage, WorkflowRouteProvider, WorkflowShortcut } from '../workflow'; +import { compose } from './compose'; + +export interface ApplicationOptions { + apiClient?: any; + i18n?: any; + plugins?: any[]; +} + +export type PluginCallback = () => Promise; + +export class Application { + providers = []; + mainComponent = null; + apiClient: APIClient; + i18n: i18next; + plugins: PluginCallback[] = []; + + constructor(options: ApplicationOptions) { + this.apiClient = new APIClient({ + baseURL: process.env.API_BASE_URL, + headers: { + 'X-Hostname': window?.location?.hostname, + }, + ...options.apiClient, + }); + this.i18n = options.i18n || i18n; + this.use(APIClientProvider, { apiClient: this.apiClient }); + this.use(I18nextProvider, { i18n: this.i18n }); + this.use(AntdConfigProvider, { remoteLocale: true }); + this.use(RemoteRouteSwitchProvider, { + components: { + AuthLayout, + AdminLayout, + RouteSchemaComponent, + SigninPage, + SignupPage, + WorkflowPage, + BlockTemplatePage, + BlockTemplateDetails, + }, + }); + this.use(SystemSettingsProvider); + this.use(PluginManagerProvider, { + components: { + ACLShortcut, + DesignableSwitch, + CollectionManagerShortcut, + WorkflowShortcut, + SystemSettingsShortcut, + SchemaTemplateShortcut, + FileStorageShortcut, + }, + }); + this.use(SchemaComponentProvider, { components: { Link, NavLink } }); + this.use(SchemaInitializerProvider, { + initializers: { + MenuItemInitializers, + }, + }); + this.use(BlockSchemaComponentProvider); + this.use(AntdSchemaComponentProvider); + this.use(ACLProvider); + this.use(RemoteDocumentTitleProvider); + this.use(WorkflowRouteProvider); + for (const plugin of options.plugins) { + const [component, props] = Array.isArray(plugin) ? plugin : [plugin]; + this.use(component, props); + } + } + + use(component, props?: any) { + this.providers.push(props ? [component, props] : component); + } + + main(mainComponent: any) { + this.mainComponent = mainComponent; + } + + /** + * TODO + */ + plugin(plugin: PluginCallback) { + this.plugins.push(plugin); + } + + render() { + return compose(...this.providers)( + this.mainComponent || + (() => { + const routes = useRoutes(); + return ( +
+ +
+ ); + }), + ); + } +} diff --git a/packages/core/client/src/application/__tests__/compose.test.tsx b/packages/core/client/src/application/__tests__/compose.test.tsx index fc91b801d..2d3077ca0 100644 --- a/packages/core/client/src/application/__tests__/compose.test.tsx +++ b/packages/core/client/src/application/__tests__/compose.test.tsx @@ -1,6 +1,6 @@ -import React from 'react'; import { render } from '@testing-library/react'; -import { compose } from '../'; +import React from 'react'; +import { compose } from '../compose'; describe('compose', () => { it('case 1', () => { diff --git a/packages/core/client/src/application/index.tsx b/packages/core/client/src/application/index.tsx index ce4e4b8a5..a9b63148b 100644 --- a/packages/core/client/src/application/index.tsx +++ b/packages/core/client/src/application/index.tsx @@ -1 +1,3 @@ +export * from './Application'; export * from './compose'; + diff --git a/packages/core/client/src/index.tsx b/packages/core/client/src/index.tsx index 7959329bf..f36a684cc 100644 --- a/packages/core/client/src/index.tsx +++ b/packages/core/client/src/index.tsx @@ -1,3 +1,4 @@ +import 'antd/dist/antd.css'; import './global.less'; export * from './acl'; @@ -22,7 +23,7 @@ export * from './schema-initializer'; export * from './schema-settings'; export * from './schema-templates'; export * from './settings-form'; -export * from './slate'; export * from './system-settings'; export * from './user'; export * from './workflow'; + diff --git a/packages/core/client/src/schema-component/antd/action/Action.Designer.tsx b/packages/core/client/src/schema-component/antd/action/Action.Designer.tsx index dd17f03af..dedb80c28 100644 --- a/packages/core/client/src/schema-component/antd/action/Action.Designer.tsx +++ b/packages/core/client/src/schema-component/antd/action/Action.Designer.tsx @@ -1,6 +1,5 @@ import { ISchema, useField, useFieldSchema } from '@formily/react'; -import { isValid } from '@formily/shared'; -import { uid } from '@nocobase/utils'; +import { isValid, uid } from '@formily/shared'; import { Menu } from 'antd'; import React, { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; diff --git a/packages/core/client/src/schema-component/antd/form-v2/Form.tsx b/packages/core/client/src/schema-component/antd/form-v2/Form.tsx index 828b953df..a8433a686 100644 --- a/packages/core/client/src/schema-component/antd/form-v2/Form.tsx +++ b/packages/core/client/src/schema-component/antd/form-v2/Form.tsx @@ -1,7 +1,7 @@ import { FormLayout } from '@formily/antd'; import { createForm, Field, onFormInputChange } from '@formily/core'; import { FieldContext, FormContext, observer, RecursionField, useField, useFieldSchema } from '@formily/react'; -import { uid } from '@nocobase/utils'; +import { uid } from '@formily/shared'; import { Spin } from 'antd'; import React, { useEffect, useMemo } from 'react'; import { useActionContext } from '..'; diff --git a/packages/core/client/src/schema-initializer/items/index.tsx b/packages/core/client/src/schema-initializer/items/index.tsx index 1191e8c2b..470f784cf 100644 --- a/packages/core/client/src/schema-initializer/items/index.tsx +++ b/packages/core/client/src/schema-initializer/items/index.tsx @@ -373,11 +373,28 @@ export const CreateActionInitializer = (props) => { className: 'nb-action-popup', }, properties: { - grid: { + tabs: { type: 'void', - 'x-component': 'Grid', - 'x-initializer': 'CreateFormBlockInitializers', - properties: {}, + 'x-component': 'Tabs', + 'x-component-props': {}, + 'x-initializer': 'TabPaneInitializers', + properties: { + tab1: { + type: 'void', + title: '{{t("Add new")}}', + 'x-component': 'Tabs.TabPane', + 'x-designer': 'Tabs.Designer', + 'x-component-props': {}, + properties: { + grid: { + type: 'void', + 'x-component': 'Grid', + 'x-initializer': 'CreateFormBlockInitializers', + properties: {}, + }, + }, + }, + }, }, }, }, diff --git a/packages/core/client/src/slate/RichText.tsx b/packages/core/client/src/slate/RichText.tsx deleted file mode 100644 index 64b738923..000000000 --- a/packages/core/client/src/slate/RichText.tsx +++ /dev/null @@ -1,258 +0,0 @@ -import { css, cx } from '@emotion/css'; -import isHotkey from 'is-hotkey'; -import React, { useCallback, useMemo } from 'react'; -import { createEditor, Editor, Element as SlateElement, Node, Transforms } from 'slate'; -import { withHistory } from 'slate-history'; -import type { ReactEditor } from 'slate-react'; -import { Editable, Slate, useSlate, withReact } from 'slate-react'; -import { EllipsisWithTooltip } from '../schema-component/antd/input/EllipsisWithTooltip'; -import { Button, Icon, Toolbar } from './components'; - -const HOTKEYS = { - 'mod+b': 'bold', - 'mod+i': 'italic', - 'mod+u': 'underline', - 'mod+`': 'code', -}; - -const LIST_TYPES = ['numbered-list', 'bulleted-list']; -const TEXT_ALIGN_TYPES = ['left', 'center', 'right', 'justify']; -const DEFAULT_VALUE = [ - { - type: 'paragraph', - children: [{ text: '' }], - }, -]; - -export const RichText = (props: any) => { - const { value, placeholder = '', className, readOnly, autop = true, ellipsis, onChange } = props; - const renderElement = useCallback((props) => , []); - const renderLeaf = useCallback((props) => , []); - const editor = useMemo(() => withHistory(withReact(createEditor() as ReactEditor)), []); - const slateValue = useMemo(() => { - editor.children = JSON.parse(JSON.stringify(value || DEFAULT_VALUE)); - Editor.normalize(editor, { force: true }); - return editor.children; - }, [editor, value]); - if (readOnly) { - const slateContent = ( - - - - ); - const slatePlainText = serialize(slateValue); - const content = ( - - {ellipsis ? slatePlainText : slateContent} - - ); - return content; - } - return ( -
- - - - - - - - - - -
- { - for (const hotkey in HOTKEYS) { - if (isHotkey(hotkey, event as any)) { - event.preventDefault(); - const mark = HOTKEYS[hotkey]; - toggleMark(editor, mark); - } - } - }} - /> -
-
-
- ); -}; - -const serialize = (nodes) => { - return nodes.map((n) => Node.string(n)).join('\n'); -}; -const toggleBlock = (editor, format) => { - const isActive = isBlockActive(editor, format, TEXT_ALIGN_TYPES.includes(format) ? 'align' : 'type'); - const isList = LIST_TYPES.includes(format); - - Transforms.unwrapNodes(editor, { - match: (n: Node) => - !Editor.isEditor(n) && - SlateElement.isElement(n) && - LIST_TYPES.includes((n as any).type) && - !TEXT_ALIGN_TYPES.includes(format), - split: true, - }); - let newProperties: Partial; - if (TEXT_ALIGN_TYPES.includes(format)) { - newProperties = { - align: isActive ? undefined : format, - }; - } else { - newProperties = { - type: isActive ? 'paragraph' : isList ? 'list-item' : format, - }; - } - Transforms.setNodes(editor, newProperties); - - if (!isActive && isList) { - const block = { type: format, children: [] }; - Transforms.wrapNodes(editor, block); - } -}; - -const toggleMark = (editor, format) => { - const isActive = isMarkActive(editor, format); - - if (isActive) { - Editor.removeMark(editor, format); - } else { - Editor.addMark(editor, format, true); - } -}; - -const isBlockActive = (editor, format, blockType = 'type') => { - const { selection } = editor; - if (!selection) return false; - - const [match] = Array.from( - Editor.nodes(editor, { - at: Editor.unhangRange(editor, selection), - match: (n) => !Editor.isEditor(n) && SlateElement.isElement(n) && n[blockType] === format, - }), - ); - - return !!match; -}; - -const isMarkActive = (editor, format) => { - const marks = Editor.marks(editor); - return marks ? marks[format] === true : false; -}; - -const Element = ({ attributes, children, element }) => { - const style = { textAlign: element.align }; - switch (element.type) { - case 'block-quote': - return ( -
- {children} -
- ); - case 'bulleted-list': - return ( -
    - {children} -
- ); - case 'heading-one': - return ( -

- {children} -

- ); - case 'heading-two': - return ( -

- {children} -

- ); - case 'list-item': - return ( -
  • - {children} -
  • - ); - case 'numbered-list': - return ( -
      - {children} -
    - ); - default: - return ( -

    - {children} -

    - ); - } -}; - -const Leaf = ({ attributes, children, leaf }) => { - if (leaf.bold) { - children = {children}; - } - - if (leaf.code) { - children = {children}; - } - - if (leaf.italic) { - children = {children}; - } - - if (leaf.underline) { - children = {children}; - } - - return {children}; -}; - -const BlockButton = ({ format, icon }) => { - const editor = useSlate(); - return ( - - ); -}; - -const MarkButton = ({ format, icon }) => { - const editor = useSlate(); - return ( - - ); -}; diff --git a/packages/core/client/src/slate/Slate.tsx b/packages/core/client/src/slate/Slate.tsx deleted file mode 100644 index 271be3dc8..000000000 --- a/packages/core/client/src/slate/Slate.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { Field } from '@formily/core'; -import { connect, mapProps, mapReadPretty } from '@formily/react'; -import React from 'react'; -import { Node } from 'slate'; -import './index.less'; -import { RichText } from './RichText'; - -export const Slate = () => null; - -const serialize = (nodes) => { - return nodes?.map?.((n) => Node.string(n)).join(''); -}; -const DEFAULT_VALUE = [ - { - type: 'paragraph', - children: [{ text: '' }], - }, -]; - -Slate.RichText = connect( - RichText, - mapProps((props, field: Field) => { - // const fieldValue = serialize(field.value)?.trim(); - // if (!fieldValue) { - // field.value = undefined; - // } - return { - ...props, - }; - }), - mapReadPretty((props: any) => ), -); diff --git a/packages/core/client/src/slate/components.tsx b/packages/core/client/src/slate/components.tsx deleted file mode 100644 index 2d14ce69c..000000000 --- a/packages/core/client/src/slate/components.tsx +++ /dev/null @@ -1,172 +0,0 @@ -import { css, cx } from '@emotion/css'; -import React, { PropsWithChildren, Ref } from 'react'; -import ReactDOM from 'react-dom'; - -interface BaseProps { - className: string; - [key: string]: unknown; -} -type OrNull = T | null; - -export const Button = React.forwardRef( - ( - { - className, - active, - reversed, - ...props - }: PropsWithChildren< - { - active: boolean; - reversed: boolean; - } & BaseProps - >, - ref: Ref>, - ) => ( - - ), -); - -export const EditorValue = React.forwardRef( - ( - { - className, - value, - ...props - }: PropsWithChildren< - { - value: any; - } & BaseProps - >, - ref: Ref>, - ) => { - const textLines = value.document.nodes - .map((node) => node.text) - .toArray() - .join('\n'); - return ( -
    -
    - Slate's value as text -
    -
    - {textLines} -
    -
    - ); - }, -); - -export const Icon = React.forwardRef( - ({ className, ...props }: PropsWithChildren, ref: Ref>) => ( - - ), -); - -export const Instruction = React.forwardRef( - ({ className, ...props }: PropsWithChildren, ref: Ref>) => ( -
    - ), -); - -export const Menu = React.forwardRef( - ({ className, ...props }: PropsWithChildren, ref: Ref>) => ( -
    * { - display: inline-block; - } - & > * + * { - margin-left: 15px; - } - `, - )} - /> - ), -); - -export const Portal = ({ children }) => { - return typeof document === 'object' ? ReactDOM.createPortal(children, document.body) : null; -}; - -export const Toolbar = React.forwardRef( - ({ className, ...props }: PropsWithChildren, ref: Ref>) => ( - - ), -); diff --git a/packages/core/client/src/slate/demos/demo1.tsx b/packages/core/client/src/slate/demos/demo1.tsx deleted file mode 100644 index 4a40380e5..000000000 --- a/packages/core/client/src/slate/demos/demo1.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { FormItem } from '@formily/antd'; -import { SchemaComponent, SchemaComponentProvider, Slate } from '@nocobase/client'; -import React from 'react'; - -const schema = { - type: 'object', - properties: { - slate: { - type: 'string', - 'x-decorator': 'FormItem', - 'x-component': 'Slate.RichText', - 'x-component-props': { - onChange: (value) => { - console.log(value); - }, - }, - }, - }, -}; - -export default () => { - return ( - - - - ); -}; diff --git a/packages/core/client/src/slate/demos/demo2.tsx b/packages/core/client/src/slate/demos/demo2.tsx deleted file mode 100644 index 219947fcc..000000000 --- a/packages/core/client/src/slate/demos/demo2.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import { FormItem } from '@formily/antd'; -import { SchemaComponent, SchemaComponentProvider, Slate } from '@nocobase/client'; -import React from 'react'; - -let value = [ - { - type: 'heading-one', - children: [ - { - text: 'Slate Rich Text Editor', - }, - ], - }, - { - type: 'block-quote', - children: [ - { - text: 'this is based in Slate', - }, - ], - }, - { - type: 'bulleted-list', - children: [ - { - type: 'list-item', - children: [ - { - text: 'The editor\'s "schema" was hardcoded and hard to customize. ', - }, - ], - }, - { - type: 'list-item', - children: [ - { - text: 'Transforming the documents programmatically was very convoluted. ', - }, - ], - }, - { - type: 'list-item', - children: [ - { - text: 'Serializing to HTML, Markdown, etc. seemed like an afterthought. ', - }, - ], - }, - { - type: 'list-item', - children: [ - { - text: 'Re-inventing the view layer seemed inefficient and limiting.', - }, - ], - }, - ], - }, -]; -const schema = { - type: 'object', - properties: { - read: { - type: 'string', - 'x-read-pretty': true, - 'x-decorator': 'FormItem', - 'x-component': 'Slate.RichText', - default: value, - }, - }, -}; - -export default () => { - return ( - - - - ); -}; diff --git a/packages/core/client/src/slate/demos/demo3.tsx b/packages/core/client/src/slate/demos/demo3.tsx deleted file mode 100644 index b9f3e72d4..000000000 --- a/packages/core/client/src/slate/demos/demo3.tsx +++ /dev/null @@ -1,44 +0,0 @@ -/** - * title: Input - */ -import { FormItem } from '@formily/antd'; -import { SchemaComponent, SchemaComponentProvider, Slate } from '@nocobase/client'; -import React from 'react'; - -const schema = { - type: 'object', - properties: { - input: { - title: `Editable1`, - 'x-decorator': 'FormItem', - 'x-component': 'Slate.RichText', - 'x-reactions': { - target: '*(input2,read)', - fulfill: { - state: { - value: '{{$self.value}}', - }, - }, - }, - }, - input2: { - title: `Editable2`, - 'x-decorator': 'FormItem', - 'x-component': 'Slate.RichText', - }, - read: { - title: `Read pretty`, - 'x-read-pretty': true, - 'x-decorator': 'FormItem', - 'x-component': 'Slate.RichText', - }, - }, -}; - -export default () => { - return ( - - - - ); -}; diff --git a/packages/core/client/src/slate/index.less b/packages/core/client/src/slate/index.less deleted file mode 100644 index eca78068f..000000000 --- a/packages/core/client/src/slate/index.less +++ /dev/null @@ -1,51 +0,0 @@ -@font-face { - font-family: 'Material Icons'; - font-style: normal; - font-weight: 400; - src: url(./materialicons.woff2) format('woff2'); -} - -.material-icons { - font-family: 'Material Icons'; - font-weight: normal; - font-style: normal; - font-size: 24px; - line-height: 1; - letter-spacing: normal; - text-transform: none; - display: inline-block; - white-space: nowrap; - word-wrap: normal; - direction: ltr; - -webkit-font-feature-settings: 'liga'; - -webkit-font-smoothing: antialiased; -} -.ant-formily-item-error .slate { - border-color: #ff4d4f !important; -} -.slate:focus-within { - border-color: #40a9ff; - box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); - border-right-width: 1px; - outline: 0; -} -:not(pre) > code { - font-family: monospace; - background-color: #eee; - padding: 3px; -} -blockquote { - border-left: 2px solid #ddd; - margin-left: 0; - margin-right: 0; - padding-left: 10px; - color: #aaa; - font-style: italic; -} - -blockquote[dir='rtl'] { - border-left: none; - padding-left: 0; - padding-right: 10px; - border-right: 2px solid #ddd; -} diff --git a/packages/core/client/src/slate/index.md b/packages/core/client/src/slate/index.md deleted file mode 100644 index 3f3d49059..000000000 --- a/packages/core/client/src/slate/index.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -nav: - path: /client -group: - path: /client ---- - -# Slate - -基于 [slate](https://github.com/ianstormtaylor/slate) 封装。 - -## Examples - -### Slate Rich Text Editor - - - -### Slate Rich Text Editor is Read Pretty - - - - diff --git a/packages/core/client/src/slate/index.ts b/packages/core/client/src/slate/index.ts deleted file mode 100644 index 743b59536..000000000 --- a/packages/core/client/src/slate/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Slate'; diff --git a/packages/core/client/src/slate/materialicons.woff2 b/packages/core/client/src/slate/materialicons.woff2 deleted file mode 100644 index 82937b9108ab7d7c70531f65d3d500e1c89f0b8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124372 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 diff --git a/packages/core/client/src/workflow/nodes/index.tsx b/packages/core/client/src/workflow/nodes/index.tsx index ceacbcad1..8f817ff0d 100644 --- a/packages/core/client/src/workflow/nodes/index.tsx +++ b/packages/core/client/src/workflow/nodes/index.tsx @@ -1,11 +1,11 @@ import { CloseOutlined, DeleteOutlined } from '@ant-design/icons'; import { css, cx } from '@emotion/css'; import { ISchema, useForm } from '@formily/react'; -import { Registry } from '@nocobase/utils'; +import { Registry } from '@nocobase/utils/client'; import { Button, message, Modal, Tag } from 'antd'; import React, { useContext } from 'react'; import { useTranslation } from 'react-i18next'; -import { SchemaComponent, useActionContext, useAPIClient, useCollection, useCompile, useRecord, useRequest, useResourceActionContext } from '../..'; +import { SchemaComponent, useActionContext, useAPIClient, useCompile, useRequest, useResourceActionContext } from '../..'; import { nodeBlockClass, nodeCardClass, nodeClass, nodeHeaderClass, nodeMetaClass, nodeTitleClass } from '../style'; import { AddButton, useFlowContext } from '../WorkflowCanvas'; @@ -17,8 +17,6 @@ import parallel from './parallel'; import query from './query'; import update from './update'; - - export interface Instruction { title: string; type: string; diff --git a/packages/core/client/src/workflow/triggers/index.tsx b/packages/core/client/src/workflow/triggers/index.tsx index 05878de5a..433d443c7 100644 --- a/packages/core/client/src/workflow/triggers/index.tsx +++ b/packages/core/client/src/workflow/triggers/index.tsx @@ -1,9 +1,9 @@ -import React from "react"; -import { ISchema, useForm } from "@formily/react"; import { css, cx } from "@emotion/css"; -import { Registry } from "@nocobase/utils"; -import { useTranslation } from "react-i18next"; +import { ISchema, useForm } from "@formily/react"; +import { Registry } from "@nocobase/utils/client"; import { message, Tag } from "antd"; +import React from "react"; +import { useTranslation } from "react-i18next"; import { SchemaComponent, useActionContext, useAPIClient, useCompile, useResourceActionContext } from '../../'; diff --git a/packages/core/sdk/src/APIClient.ts b/packages/core/sdk/src/APIClient.ts index a921c88d4..8847744e6 100644 --- a/packages/core/sdk/src/APIClient.ts +++ b/packages/core/sdk/src/APIClient.ts @@ -181,7 +181,7 @@ export class APIClient { if (!this.auth) { this.auth = new Auth(this); } - this.paramsSerializer(); + this.interceptors(); } private initStorage(storage?: any) { @@ -194,7 +194,7 @@ export class APIClient { } } - paramsSerializer() { + interceptors() { this.axios.interceptors.request.use((config) => { config.paramsSerializer = (params) => { return qs.stringify(params, { diff --git a/packages/core/utils/client.d.ts b/packages/core/utils/client.d.ts new file mode 100644 index 000000000..d472744e5 --- /dev/null +++ b/packages/core/utils/client.d.ts @@ -0,0 +1,2 @@ +// @ts-nocheck +export * from './lib/client'; diff --git a/packages/core/utils/client.js b/packages/core/utils/client.js new file mode 100644 index 000000000..5effcafee --- /dev/null +++ b/packages/core/utils/client.js @@ -0,0 +1,12 @@ +var _useExportClient = require("./lib/client"); + +Object.keys(_useExportClient).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _useExportClient[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function get() { + return _useExportClient[key]; + } + }); +}); diff --git a/packages/core/utils/server.d.ts b/packages/core/utils/server.d.ts new file mode 100644 index 000000000..d8ed31d87 --- /dev/null +++ b/packages/core/utils/server.d.ts @@ -0,0 +1,2 @@ +// @ts-nocheck +export * from './lib/server'; diff --git a/packages/core/utils/server.js b/packages/core/utils/server.js new file mode 100644 index 000000000..c93247d51 --- /dev/null +++ b/packages/core/utils/server.js @@ -0,0 +1,12 @@ +var _useExportServer = require("./lib/server"); + +Object.keys(_useExportServer).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _useExportServer[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function get() { + return _useExportServer[key]; + } + }); +}); diff --git a/packages/core/utils/src/client.ts b/packages/core/utils/src/client.ts new file mode 100644 index 000000000..66beec492 --- /dev/null +++ b/packages/core/utils/src/client.ts @@ -0,0 +1,4 @@ +export * from './merge'; +export * from './registry'; +export * from './uid'; + diff --git a/packages/core/utils/src/index.ts b/packages/core/utils/src/index.ts index 3982d5b96..7990ed798 100644 --- a/packages/core/utils/src/index.ts +++ b/packages/core/utils/src/index.ts @@ -4,3 +4,4 @@ export * from './mixin/AsyncEmitter'; export * from './registry'; export * from './requireModule'; export * from './uid'; + diff --git a/packages/core/utils/src/server.ts b/packages/core/utils/src/server.ts new file mode 100644 index 000000000..7990ed798 --- /dev/null +++ b/packages/core/utils/src/server.ts @@ -0,0 +1,7 @@ +export * from './merge'; +export * from './mixin'; +export * from './mixin/AsyncEmitter'; +export * from './registry'; +export * from './requireModule'; +export * from './uid'; + diff --git a/packages/plugins/audit-logs/src/client/index.ts b/packages/plugins/audit-logs/src/client/index.ts index 42cefcafa..1ead0210a 100644 --- a/packages/plugins/audit-logs/src/client/index.ts +++ b/packages/plugins/audit-logs/src/client/index.ts @@ -1,3 +1,4 @@ export * from './AuditLogsBlockInitializer'; export * from './AuditLogsProvider'; +export { AuditLogsProvider as default } from './AuditLogsProvider'; diff --git a/packages/plugins/china-region/client.d.ts b/packages/plugins/china-region/client.d.ts new file mode 100755 index 000000000..d472744e5 --- /dev/null +++ b/packages/plugins/china-region/client.d.ts @@ -0,0 +1,2 @@ +// @ts-nocheck +export * from './lib/client'; diff --git a/packages/plugins/china-region/client.js b/packages/plugins/china-region/client.js new file mode 100755 index 000000000..5effcafee --- /dev/null +++ b/packages/plugins/china-region/client.js @@ -0,0 +1,12 @@ +var _useExportClient = require("./lib/client"); + +Object.keys(_useExportClient).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _useExportClient[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function get() { + return _useExportClient[key]; + } + }); +}); diff --git a/packages/plugins/china-region/package.json b/packages/plugins/china-region/package.json index da5cebff3..32ca1c2a5 100644 --- a/packages/plugins/china-region/package.json +++ b/packages/plugins/china-region/package.json @@ -10,6 +10,8 @@ } ], "dependencies": { + "@nocobase/client": "0.7.0-alpha.83", + "@nocobase/server": "0.7.0-alpha.83", "china-division": "^2.4.0" }, "devDependencies": { diff --git a/packages/plugins/china-region/server.d.ts b/packages/plugins/china-region/server.d.ts new file mode 100755 index 000000000..d8ed31d87 --- /dev/null +++ b/packages/plugins/china-region/server.d.ts @@ -0,0 +1,2 @@ +// @ts-nocheck +export * from './lib/server'; diff --git a/packages/plugins/china-region/server.js b/packages/plugins/china-region/server.js new file mode 100755 index 000000000..b4a699dc6 --- /dev/null +++ b/packages/plugins/china-region/server.js @@ -0,0 +1,12 @@ +var _useExportServer = require('./lib/server'); + +Object.keys(_useExportServer).forEach(function (key) { + if (key === 'default' || key === '__esModule') return; + if (key in exports && exports[key] === _useExportServer[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function get() { + return _useExportServer[key]; + }, + }); +}); diff --git a/packages/plugins/china-region/src/client/index.tsx b/packages/plugins/china-region/src/client/index.tsx new file mode 100644 index 000000000..659cec969 --- /dev/null +++ b/packages/plugins/china-region/src/client/index.tsx @@ -0,0 +1,79 @@ +import { ArrayField } from '@formily/core'; +import { useField } from '@formily/react'; +import { SchemaComponentOptions, useAPIClient, useRequest } from '@nocobase/client'; +import React from 'react'; + +const useChinaRegionDataSource = (options) => { + const field = useField(); + const maxLevel = field.componentProps.maxLevel; + return useRequest( + { + resource: 'chinaRegions', + action: 'list', + params: { + sort: 'code', + paginate: false, + filter: { + level: 1, + }, + }, + }, + { + ...options, + onSuccess(data) { + options?.onSuccess({ + data: + data?.data?.map((item) => { + if (maxLevel !== 1) { + item.isLeaf = false; + } + return item; + }) || [], + }); + }, + }, + ); +}; + +const useChinaRegionLoadData = () => { + const api = useAPIClient(); + const field = useField(); + const maxLevel = field.componentProps.maxLevel; + return (selectedOptions) => { + const targetOption = selectedOptions[selectedOptions.length - 1]; + if (targetOption?.children?.length > 0) { + return; + } + targetOption.loading = true; + api + .resource('chinaRegions') + .list({ + sort: 'code', + paginate: false, + filter: { + parentCode: targetOption.code, + }, + }) + .then(({ data }) => { + targetOption.loading = false; + targetOption.children = + data?.data?.map((item) => { + if (maxLevel > item.level) { + item.isLeaf = false; + } + return item; + }) || []; + field.dataSource = [...field.dataSource]; + }); + }; +}; + +export const ChinaRegionProvider = (props) => { + return ( + + {props.children} + + ); +}; + +export default ChinaRegionProvider; diff --git a/packages/plugins/china-region/src/collections/chinaRegions.ts b/packages/plugins/china-region/src/server/collections/chinaRegions.ts similarity index 100% rename from packages/plugins/china-region/src/collections/chinaRegions.ts rename to packages/plugins/china-region/src/server/collections/chinaRegions.ts diff --git a/packages/plugins/china-region/src/server.ts b/packages/plugins/china-region/src/server/index.ts similarity index 95% rename from packages/plugins/china-region/src/server.ts rename to packages/plugins/china-region/src/server/index.ts index 35610eb6b..aea022720 100644 --- a/packages/plugins/china-region/src/server.ts +++ b/packages/plugins/china-region/src/server/index.ts @@ -2,7 +2,7 @@ import { Plugin } from '@nocobase/server'; import { areas, cities, provinces } from 'china-division'; import { resolve } from 'path'; -export class ChinaRegionPlugin extends Plugin { +export class PluginChinaRegion extends Plugin { async install() { await this.importData(); } @@ -69,4 +69,4 @@ export class ChinaRegionPlugin extends Plugin { } } -export default ChinaRegionPlugin; +export default PluginChinaRegion; diff --git a/packages/plugins/export/src/client/index.ts b/packages/plugins/export/src/client/index.ts index 45a1aed80..95939e176 100644 --- a/packages/plugins/export/src/client/index.ts +++ b/packages/plugins/export/src/client/index.ts @@ -2,5 +2,6 @@ export * from './ExportActionInitializer'; export * from './ExportDesigner'; export * from './ExportInitializerProvider'; export * from './ExportPluginProvider'; +export { ExportPluginProvider as default } from './ExportPluginProvider'; export * from './useExportAction'; diff --git a/tsconfig.json b/tsconfig.json index b58d45b6f..9ab0840ae 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -23,6 +23,9 @@ "@nocobase/plugin-*": [ "packages/plugins/*/src" ], + "@nocobase/utils/client": [ + "packages/core/utils/src/client" + ], "@nocobase/*": [ "packages/core/*/src" ] diff --git a/yarn.lock b/yarn.lock index 9f0242c99..c1c842d71 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5024,11 +5024,6 @@ resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.1.tgz#e81ad28a60bee0328c6d2384e029aec626f1ae67" integrity sha512-e+2rjEwK6KDaNOm5Aa9wNGgyS9oSZU/4pfSMMPYNOfjvFI0WVXm29+ITRFr6aKDvvKo7uU1jV68MW4ScsfDi7Q== -"@types/is-hotkey@^0.1.1": - version "0.1.7" - resolved "https://registry.npmmirror.com/@types/is-hotkey/-/is-hotkey-0.1.7.tgz#30ec6d4234895230b576728ef77e70a52962f3b3" - integrity sha512-yB5C7zcOM7idwYZZ1wKQ3pTfjA9BbvFqRWvKB46GFddxnJtHwi/b9y84ykQtxQPg5qhdpg4Q/kWU3EGoCTmLzQ== - "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.3" resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" @@ -5129,11 +5124,6 @@ "@types/koa-compose" "*" "@types/node" "*" -"@types/lodash@^4.14.149": - version "4.14.181" - resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.181.tgz#d1d3740c379fda17ab175165ba04e2d03389385d" - integrity sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag== - "@types/lodash@^4.14.177": version "4.14.177" resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.177.tgz#f70c0d19c30fab101cad46b52be60363c43c4578" @@ -9275,11 +9265,6 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -direction@^1.0.3: - version "1.0.4" - resolved "https://registry.npmmirror.com/direction/-/direction-1.0.4.tgz#2b86fb686967e987088caf8b89059370d4837442" - integrity sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ== - discontinuous-range@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" @@ -11910,11 +11895,6 @@ image-size@~0.5.0: resolved "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= -immer@^9.0.6: - version "9.0.12" - resolved "https://registry.npmmirror.com/immer/-/immer-9.0.12.tgz#2d33ddf3ee1d247deab9d707ca472c8c942a0f20" - integrity sha512-lk7UNmSbAukB5B6dh9fnh5D0bJTOFKxVg2cyJWTYrWRfhLrLMBquONcUs3aFq507hNoIZEDDh8lb8UtOizSMhA== - import-cwd@^2.0.0, import-cwd@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" @@ -12422,11 +12402,6 @@ is-hexadecimal@^1.0.0: resolved "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== -is-hotkey@^0.1.6: - version "0.1.8" - resolved "https://registry.npmmirror.com/is-hotkey/-/is-hotkey-0.1.8.tgz#6b1f4b2d0e5639934e20c05ed24d623a21d36d25" - integrity sha512-qs3NZ1INIS+H+yeo7cD9pDfwYV/jqRh1JG9S9zYrNudkoUQg7OL7ziXqRKu+InFjUIDoP2o6HIkLYMh1pcWgyQ== - is-installed-globally@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" @@ -20065,13 +20040,6 @@ screenfull@^5.0.0: resolved "https://registry.npmjs.org/screenfull/-/screenfull-5.2.0.tgz#6533d524d30621fc1283b9692146f3f13a93d1ba" integrity sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA== -scroll-into-view-if-needed@^2.2.20: - version "2.2.29" - resolved "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.29.tgz#551791a84b7e2287706511f8c68161e4990ab885" - integrity sha512-hxpAR6AN+Gh53AdAimHM6C8oTN1ppwVZITihix+WqalywBeFcQ6LdQP5ABNl26nX8GTEL7VT+b8lKpdqq65wXg== - dependencies: - compute-scroll-into-view "^1.0.17" - scroll-into-view-if-needed@^2.2.25: version "2.2.28" resolved "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.28.tgz#5a15b2f58a52642c88c8eca584644e01703d645a" @@ -20362,36 +20330,6 @@ slash@^3.0.0: resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slate-history@^0.66.0: - version "0.66.0" - resolved "https://registry.npmmirror.com/slate-history/-/slate-history-0.66.0.tgz#ac63fddb903098ceb4c944433e3f75fe63acf940" - integrity sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng== - dependencies: - is-plain-object "^5.0.0" - -slate-react@^0.76.1: - version "0.76.1" - resolved "https://registry.npmmirror.com/slate-react/-/slate-react-0.76.1.tgz#a92915b204d84d59cb42d7818dcf48891d072016" - integrity sha512-deIhlGp8jUd5eZ8fodJ+Os3Eznk2bGJ4T6FPxzX04gFDCFVgXaYLfy9pObkQHW5XGnHwV3rniAyAtHBxNzrm9Q== - dependencies: - "@types/is-hotkey" "^0.1.1" - "@types/lodash" "^4.14.149" - direction "^1.0.3" - is-hotkey "^0.1.6" - is-plain-object "^5.0.0" - lodash "^4.17.4" - scroll-into-view-if-needed "^2.2.20" - tiny-invariant "1.0.6" - -slate@^0.76.1: - version "0.76.1" - resolved "https://registry.npmmirror.com/slate/-/slate-0.76.1.tgz#6bc46cb923f3b26fdddb80b2a28142c2d7aa9a0b" - integrity sha512-ALsAInU8vUEL65IGWttc1xOzq7KmNtn4XIDxylJnbGXWziKZxxRpL4nL8QHZX553Q1EPmi0w+kWOG+hnLFfcgw== - dependencies: - immer "^9.0.6" - is-plain-object "^5.0.0" - tiny-warning "^1.0.3" - slice-ansi@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" @@ -21470,11 +21408,6 @@ tiny-emitter@^2.1.0: resolved "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== -tiny-invariant@1.0.6: - version "1.0.6" - resolved "https://registry.npmmirror.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" - integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== - tiny-invariant@^1.0.2, tiny-invariant@^1.0.6: version "1.2.0" resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9"