From 2a8cf7a5b891e70f6f369c4c5b6784f2c75baa61 Mon Sep 17 00:00:00 2001 From: dream2023 <1098626505@qq.com> Date: Mon, 22 Jan 2024 17:06:27 +0800 Subject: [PATCH] refactor: namespace to dataSource --- .../collection/collection-manager-provider.md | 10 +- .../core/collection/collection-manager.md | 34 +-- .../core/collection/collection-provider.md | 2 +- .../docs/zh-CN/core/collection/collection.md | 2 +- packages/core/client/src/acl/ACLProvider.tsx | 6 +- .../collection/AssociationProvider.tsx | 10 +- .../src/application/collection/Collection.tsx | 2 +- .../collection/CollectionManager.tsx | 216 ++++++++---------- .../collection/CollectionManagerProvider.tsx | 4 +- .../collection/CollectionProvider.tsx | 8 +- .../collection/DeletedPlaceholder.tsx | 2 +- .../src/block-provider/BlockProvider.tsx | 28 +-- .../src/block-provider/TableBlockProvider.tsx | 2 +- .../client/src/block-provider/hooks/index.ts | 4 +- .../collection-manager/CollectionProvider.tsx | 14 +- .../collection-manager/collectionPlugin.ts | 2 +- .../hooks/useCollectionManager.ts | 42 ++-- .../items/CreateFormBlockInitializer.tsx | 4 +- .../items/DataBlockInitializer.tsx | 2 +- .../items/DetailsBlockInitializer.tsx | 4 +- .../items/FilterCollapseBlockInitializer.tsx | 2 +- .../items/FilterFormBlockInitializer.tsx | 2 +- .../items/FormBlockInitializer.tsx | 2 +- .../items/GridCardBlockInitializer.tsx | 4 +- .../items/ListBlockInitializer.tsx | 4 +- .../RecordAssociationBlockInitializer.tsx | 2 +- ...cordAssociationDetailsBlockInitializer.tsx | 2 +- .../RecordAssociationFormBlockInitializer.tsx | 4 +- ...ordAssociationGridCardBlockInitializer.tsx | 2 +- .../RecordAssociationListBlockInitializer.tsx | 2 +- .../items/RecordFormBlockInitializer.tsx | 4 +- ...dPrettyAssociationFormBlockInitializer.tsx | 4 +- .../RecordReadPrettyFormBlockInitializer.tsx | 4 +- .../items/TableBlockInitializer.tsx | 4 +- .../items/TableSelectorInitializer.tsx | 2 +- .../client/src/schema-initializer/utils.ts | 171 +++----------- .../CreateFormBulkEditBlockInitializer.tsx | 4 +- .../items/CalendarBlockInitializer.tsx | 6 +- .../src/client/schema-initializer/utils.ts | 4 +- .../client/block/ChartBlockInitializer.tsx | 2 +- .../client/configure/ChartConfigProvider.tsx | 2 +- .../src/client/configure/ChartConfigure.tsx | 2 +- .../src/client/renderer/ChartRenderer.tsx | 4 +- .../src/client/GanttBlockInitializer.tsx | 4 +- .../src/client/KanbanBlockInitializer.tsx | 4 +- .../src/client/KanbanBlockProvider.tsx | 2 +- .../src/client/block/MapBlockInitializer.tsx | 6 +- .../SnapshotBlock/SnapshotBlockProvider.tsx | 2 +- .../instruction/FormBlockInitializer.tsx | 2 +- .../client/instruction/FormBlockProvider.tsx | 18 +- .../src/client/instruction/forms/create.tsx | 10 +- .../src/client/instruction/forms/update.tsx | 10 +- 52 files changed, 289 insertions(+), 406 deletions(-) diff --git a/packages/core/client/docs/zh-CN/core/collection/collection-manager-provider.md b/packages/core/client/docs/zh-CN/core/collection/collection-manager-provider.md index 2e605a4f74..c8d0cfe67f 100644 --- a/packages/core/client/docs/zh-CN/core/collection/collection-manager-provider.md +++ b/packages/core/client/docs/zh-CN/core/collection/collection-manager-provider.md @@ -37,10 +37,10 @@ const Demo = () => { ```tsx | pure const Demo = () => { const collectionManager = useCollectionManagerV2(); - const collectionNamespaces = useMemo(() => collectionManager.getCollectionNames(), [collectionManager]); + const dataSources = useMemo(() => collectionManager.getCollectionNames(), [collectionManager]); return
- {collectionNamespaces.map((namespace) => { + {dataSources.map((namespace) => { return
{namespace.name}: {namespace.title}
; })}
; @@ -54,10 +54,10 @@ import { Application, useCollectionManagerV2, useCompile } from '@nocobase/clien const Demo = () => { const compile = useCompile(); const collectionManager = useCollectionManagerV2(); - const collectionNamespaces = useMemo(() => collectionManager.getCollectionNamespaces(), [collectionManager]); + const dataSources = useMemo(() => collectionManager.getDataSources(), [collectionManager]); return
- {collectionNamespaces.map((namespace) => { + {dataSources.map((namespace) => { return
{namespace.name}: { compile(namespace.title)}
; })}
; @@ -66,7 +66,7 @@ const Demo = () => { const app = new Application({ providers: [Demo], collectionManager: { - collectionNamespaces: { + dataSources: { 'db2': "DB 2", } } diff --git a/packages/core/client/docs/zh-CN/core/collection/collection-manager.md b/packages/core/client/docs/zh-CN/core/collection/collection-manager.md index 59a751af05..70cdff1822 100644 --- a/packages/core/client/docs/zh-CN/core/collection/collection-manager.md +++ b/packages/core/client/docs/zh-CN/core/collection/collection-manager.md @@ -10,12 +10,12 @@ interface CollectionManagerOptionsV2 { collectionTemplates?: (typeof CollectionTemplateBase)[]; fieldInterfaces?: (typeof CollectionFieldInterfaceBase)[]; fieldGroups?: Record; - collectionNamespaces?: Record; + dataSources?: Record; collectionMixins?: CollectionMixinConstructor[]; } interface GetCollectionOptions { - namespace?: string; + dataSource?: string; } class CollectionManagerV2 { @@ -23,8 +23,8 @@ class CollectionManagerV2 { constructor(options: CollectionManagerOptionsV2 = {}, app: Application); - addCollectionNamespaces(collectionNamespaces: Record): void; - getCollectionNamespaces(): { name: string; title: string }[]; + addDataSources(dataSources: Record): void; + getDataSources(): { name: string; title: string }[]; addCollectionTemplates(templateClasses: (typeof CollectionTemplateBase)[]): void; getCollectionTemplates(): CollectionTemplateBase[]; @@ -173,7 +173,7 @@ interface CollectionManagerOptionsV2 { collectionTemplates?: (typeof CollectionTemplateBase)[]; fieldInterfaces?: (typeof CollectionFieldInterfaceBase)[]; fieldGroups?: Record; - collectionNamespaces?: Record; + dataSources?: Record; collectionMixins?: CollectionMixinConstructor[]; } ``` @@ -224,7 +224,7 @@ const app = new Application({ collections: [userCollectionOptions], collectionTemplates: [TreeCollectionTemplate], fieldInterfaces: [CheckboxFieldInterface], - collectionNamespaces: { + dataSources: { "db2": "DB2" }, fieldGroups: { @@ -241,11 +241,11 @@ const app = new Application({ 2. `collections` 如果是一个对象,则 Key 为命名空间名称,Value 为数据表数组;如果是数组,则会添加到默认命名空间。例如: ```tsx | pure -import { DEFAULT_COLLECTION_NAMESPACE_NAME } from '@nocobase/client'; +import { DEFAULT_DATA_SOURCE_NAME } from '@nocobase/client'; const collectionManager = new CollectionManager({ collections: { - [DEFAULT_COLLECTION_NAMESPACE_NAME]: [postCollection], + [DEFAULT_DATA_SOURCE_NAME]: [postCollection], "db2": [userCollection], } }) @@ -253,7 +253,7 @@ const collectionManager = new CollectionManager({ ```tsx | pure -import { DEFAULT_COLLECTION_NAMESPACE_NAME } from '@nocobase/client'; +import { DEFAULT_DATA_SOURCE_NAME } from '@nocobase/client'; const collectionManager = new CollectionManager({ collections: [userCollection] @@ -262,7 +262,7 @@ const collectionManager = new CollectionManager({ // 等同于 const collectionManager = new CollectionManager({ collections: { - [DEFAULT_COLLECTION_NAMESPACE_NAME]: [userCollection] + [DEFAULT_DATA_SOURCE_NAME]: [userCollection] } }) ``` @@ -274,7 +274,7 @@ import { Plugin } from '@nocobase/client'; class MyPlugin extends Plugin { async load() { - this.app.collectionManager.addCollectionNamespaces({ + this.app.collectionManager.addDataSources({ "db2": "DB2" }); @@ -286,7 +286,7 @@ class MyPlugin extends Plugin { ## 实例方法 -### cm.addCollectionNamespaces(collectionNamespaces) +### cm.addDataSources(dataSources) 添加数据表命名空间。 @@ -294,7 +294,7 @@ class MyPlugin extends Plugin { ```tsx | pure class CollectionManagerV2 { - addCollectionNamespaces(collectionNamespaces: Record): void; + addDataSources(dataSources: Record): void; } ``` @@ -305,14 +305,14 @@ import { Plugin } from '@nocobase/client'; class MyPlugin extends Plugin { async load() { - this.app.collectionManager.addCollectionNamespaces({ + this.app.collectionManager.addDataSources({ "db2": "DB2" }); } } ``` -### cm.getCollectionNamespaces() +### cm.getDataSources() 获取数据表命名空间。 @@ -320,14 +320,14 @@ class MyPlugin extends Plugin { ```tsx | pure class CollectionManagerV2 { - getCollectionNamespaces(): { name: string; title: string }[]; + getDataSources(): { name: string; title: string }[]; } ``` - 示例 ```tsx | pure -collectionManager.getCollectionNamespaces(); // [ { name: 'main', title: '主数据源' }, { name: 'db2', title: 'DB2' }] +collectionManager.getDataSources(); // [ { name: 'main', title: '主数据源' }, { name: 'db2', title: 'DB2' }] ``` ### cm.addCollectionTemplates(templates) diff --git a/packages/core/client/docs/zh-CN/core/collection/collection-provider.md b/packages/core/client/docs/zh-CN/core/collection/collection-provider.md index eabcea6301..5d80d8052e 100644 --- a/packages/core/client/docs/zh-CN/core/collection/collection-provider.md +++ b/packages/core/client/docs/zh-CN/core/collection/collection-provider.md @@ -11,7 +11,7 @@ ```tsx | pure interface CollectionProviderProps { name: string; - namespace?: string; + dataSource?: string; children?: ReactNode; } ``` diff --git a/packages/core/client/docs/zh-CN/core/collection/collection.md b/packages/core/client/docs/zh-CN/core/collection/collection.md index 5797dc37e0..257a1bd5ee 100644 --- a/packages/core/client/docs/zh-CN/core/collection/collection.md +++ b/packages/core/client/docs/zh-CN/core/collection/collection.md @@ -55,7 +55,7 @@ const usersCollection = new CollectionV2({ export interface CollectionOptionsV2 { name: string; title?: string; - namespace?: string; + dataSource?: string; isLocal?: boolean; /** * Used for @nocobase/plugin-duplicator diff --git a/packages/core/client/src/acl/ACLProvider.tsx b/packages/core/client/src/acl/ACLProvider.tsx index 5ea1834b93..b5bca5b1b4 100644 --- a/packages/core/client/src/acl/ACLProvider.tsx +++ b/packages/core/client/src/acl/ACLProvider.tsx @@ -11,7 +11,7 @@ import { useResourceActionContext } from '../collection-manager/ResourceActionPr import { useRecord } from '../record-provider'; import { SchemaComponentOptions, useDesignable } from '../schema-component'; import { useApp } from '../application'; -import { useCollectionNamespace } from '../block-provider/BlockProvider'; +import { useDataSourceName } from '../block-provider/BlockProvider'; export const ACLContext = createContext({}); @@ -93,9 +93,9 @@ export const ACLActionParamsContext = createContext({}); export const useACLRolesCheck = () => { const ctx = useContext(ACLContext); - const ns = useCollectionNamespace(); + const dataSourceName = useDataSourceName(); const { dataSources: dataSourcesAcl } = ctx?.data?.meta || {}; - const data = { ...ctx?.data?.data, ...omit(dataSourcesAcl?.[ns], 'snippets') }; + const data = { ...ctx?.data?.data, ...omit(dataSourcesAcl?.[dataSourceName], 'snippets') }; const getActionAlias = (actionPath: string) => { const actionName = actionPath.split(':').pop(); return data?.actionAlias?.[actionName] || actionName; diff --git a/packages/core/client/src/application/collection/AssociationProvider.tsx b/packages/core/client/src/application/collection/AssociationProvider.tsx index 182668fd34..d3c32d84ae 100644 --- a/packages/core/client/src/application/collection/AssociationProvider.tsx +++ b/packages/core/client/src/application/collection/AssociationProvider.tsx @@ -6,23 +6,23 @@ import { useCollectionManagerV2 } from './CollectionManagerProvider'; import { DeletedPlaceholder } from './DeletedPlaceholder'; export interface AssociationProviderProps { - namespace?: string; + dataSource?: string; name: string; children?: ReactNode; } export const AssociationProviderV2: FC = (props) => { - const { name, namespace, children } = props; + const { name, dataSource, children } = props; const collectionManager = useCollectionManagerV2(); - const collectionName = collectionManager.getCollectionName(name, { namespace }); + const collectionName = collectionManager.getCollectionName(name, { dataSource }); if (!collectionName) return ; return ( - + - + {children} diff --git a/packages/core/client/src/application/collection/Collection.tsx b/packages/core/client/src/application/collection/Collection.tsx index d0cb11a064..4a97300196 100644 --- a/packages/core/client/src/application/collection/Collection.tsx +++ b/packages/core/client/src/application/collection/Collection.tsx @@ -20,7 +20,7 @@ export interface CollectionFieldOptionsV2 { export interface CollectionOptionsV2 { name: string; title?: string; - namespace?: string; + dataSource?: string; isLocal?: boolean; /** * Used for @nocobase/plugin-duplicator diff --git a/packages/core/client/src/application/collection/CollectionManager.tsx b/packages/core/client/src/application/collection/CollectionManager.tsx index ec29b39266..9f41d641a9 100644 --- a/packages/core/client/src/application/collection/CollectionManager.tsx +++ b/packages/core/client/src/application/collection/CollectionManager.tsx @@ -3,7 +3,6 @@ import { CollectionTemplateBase } from './CollectionTemplate'; import { CollectionFieldOptionsV2, CollectionOptionsV2, CollectionV2 } from './Collection'; import type { Application } from '../Application'; import { SchemaKey } from '@formily/react'; -import { merge } from 'lodash'; export type CollectionMixinConstructor = new (...args: any[]) => T; @@ -47,45 +46,46 @@ const defaultCollectionTransform = (collection: CollectionOptionsV2, app: Applic }; }; -export const DEFAULT_COLLECTION_NAMESPACE_TITLE = '{{t("main")}}'; -export const DEFAULT_COLLECTION_NAMESPACE_NAME = 'main'; +export const DEFAULT_DATA_SOURCE_TITLE = '{{t("main")}}'; +export const DEFAULT_DATA_SOURCE_NAME = 'main'; export interface GetCollectionOptions { - namespace?: string; + dataSource?: string; } -type NamespacesType = Record; +interface DataSource { + name: string; + description: string; + collections?: CollectionOptionsV2[]; + [key: string]: any; +} + +type DataSourceName = string; export interface CollectionManagerOptionsV2 { - collections?: CollectionOptionsV2[] | Record; + collections?: CollectionOptionsV2[]; collectionTemplates?: (typeof CollectionTemplateBase)[]; fieldInterfaces?: (typeof CollectionFieldInterfaceBase)[]; fieldGroups?: Record; - collectionNamespaces?: Record; collectionMixins?: CollectionMixinConstructor[]; } -type ThirdResource = ( - ...args: any[] -) => Promise<{ name: string; description: string; collections: CollectionOptionsV2[] }[]>; +type ThirdDataResourceFn = () => Promise; +type MainDataSOurceFn = () => Promise; +type ReloadCallback = (collections: CollectionOptionsV2[]) => void; export class CollectionManagerV2 { public app: Application; - protected collections: Record> = {}; + protected collections: Record> = {}; protected collectionTemplateInstances: Record = {}; protected fieldInterfaceInstances: Record = {}; protected collectionMixins: CollectionMixinConstructor[] = []; - protected collectionNamespaces: NamespacesType = { - [DEFAULT_COLLECTION_NAMESPACE_NAME]: DEFAULT_COLLECTION_NAMESPACE_NAME, - }; + protected dataSourceMap: Record> = {}; protected collectionFieldGroups: Record = {}; - protected mainResource: (...args: any[]) => Promise; - protected thirdResources: Record = {}; - protected reloadCallbacks: { - [key: string]: ((collections: CollectionOptionsV2[]) => void)[]; - } = {}; + protected mainDataSourceFn: MainDataSOurceFn; + protected thirdDataSourceFn: ThirdDataResourceFn; + protected reloadCallbacks: Record = {}; protected collectionArr: Record = {}; - protected sourceNamespaceMap: Record = {}; protected options: CollectionManagerOptionsV2 = {}; constructor(options: CollectionManagerOptionsV2 = {}, app: Application) { @@ -95,26 +95,21 @@ export class CollectionManagerV2 { } private init(options: CollectionManagerOptionsV2) { + this.initDataSourceMap(); this.collectionMixins.push(...(options.collectionMixins || [])); this.addCollectionTemplates(options.collectionTemplates || []); this.addFieldInterfaces(options.fieldInterfaces || []); this.addFieldGroups(options.fieldGroups || {}); - this.addCollectionNamespaces(options.collectionNamespaces || {}); - if (Array.isArray(options.collections)) { - this.addCollections(options.collections); - } else { - Object.keys(options.collections || {}).forEach((namespace) => { - this.addCollections(options.collections[namespace], { namespace }); - }); - } + this.addCollections(options.collections || []); } - private checkNamespace(namespace: string) { - if (!this.collectionNamespaces[namespace]) { - throw new Error( - `[@nocobase/client]: CollectionManager "${namespace}" does not exist in namespace, you should call collectionManager.addNamespaces() to add it`, - ); - } + private initDataSourceMap() { + this.dataSourceMap = { + [DEFAULT_DATA_SOURCE_NAME]: { + name: DEFAULT_DATA_SOURCE_NAME, + description: DEFAULT_DATA_SOURCE_TITLE, + }, + }; } // collection mixins @@ -124,17 +119,16 @@ export class CollectionManagerV2 { this.collectionMixins.push(...newMixins); // 重新添加数据表 - Object.keys(this.collections).forEach((namespace) => { - const collections = this.getCollections({ namespace }); - this.addCollections(collections, { namespace }); + Object.keys(this.collections).forEach((dataSource) => { + const collections = this.getCollections({ dataSource }).map((item) => item.getOptions()); + this.addCollections(collections, { dataSource }); }); } // collections addCollections(collections: CollectionOptionsV2[], options: GetCollectionOptions = {}) { - const { namespace = DEFAULT_COLLECTION_NAMESPACE_NAME } = options; - this.checkNamespace(namespace); - this.collectionArr[namespace] = undefined; + const { dataSource = DEFAULT_DATA_SOURCE_NAME } = options; + this.collectionArr[dataSource] = undefined; collections .map((collection) => { @@ -142,46 +136,46 @@ export class CollectionManagerV2 { const Cls = collectionTemplateInstance?.Collection || CollectionV2; const transform = collectionTemplateInstance?.transform || defaultCollectionTransform; const transformedCollection = transform(collection, this.app); - const instance = new Cls({ ...transformedCollection, namespace: namespace }, this.app, this); + const instance = new Cls({ ...transformedCollection, dataSource }, this.app, this); applyMixins(instance, this.collectionMixins); return instance; }) .forEach((collectionInstance) => { - if (!this.collections[namespace]) { - this.collections[namespace] = {}; + if (!this.collections[dataSource]) { + this.collections[dataSource] = {}; } - this.collections[namespace][collectionInstance.name] = collectionInstance; + this.collections[dataSource][collectionInstance.name] = collectionInstance; }); } setCollections(collections: CollectionOptionsV2[], options: GetCollectionOptions = {}) { - const { namespace = DEFAULT_COLLECTION_NAMESPACE_NAME } = options; - this.checkNamespace(namespace); - this.collections[namespace] = {}; + const { dataSource = DEFAULT_DATA_SOURCE_NAME } = options; + this.collections[dataSource] = {}; this.addCollections(collections, options); } getAllCollections( predicate?: (collection: CollectionV2) => boolean, - ): { nsName: string; nsTitle: string; source?: string; collections: CollectionV2[] }[] { - return Object.keys(this.collectionNamespaces).reduce< - { nsName: string; nsTitle: string; source?: string; collections: CollectionV2[] }[] - >((acc, namespace) => { - acc.push({ - nsName: namespace, - nsTitle: this.collectionNamespaces[namespace], - collections: this.getCollections({ predicate, namespace }), - }); - return acc; - }, []); + ): (Omit & { collections: CollectionV2[] })[] { + return Object.keys(this.dataSourceMap).reduce & { collections: CollectionV2[] }[]>( + (acc, dataSourceName) => { + const dataSource = this.dataSourceMap[dataSourceName]; + acc.push({ + ...dataSource, + collections: this.getCollections({ predicate, dataSource: dataSourceName }), + }); + return acc; + }, + [], + ); } - getCollections(options: { predicate?: (collection: CollectionV2) => boolean; namespace?: string } = {}) { - const { namespace = DEFAULT_COLLECTION_NAMESPACE_NAME, predicate } = options; - if (!this.collectionArr[namespace]?.length) { - this.collectionArr[namespace] = Object.values(this.collections[namespace] || {}); + getCollections(options: { predicate?: (collection: CollectionV2) => boolean; dataSource?: string } = {}) { + const { dataSource = DEFAULT_DATA_SOURCE_NAME, predicate } = options; + if (!this.collectionArr[dataSource]?.length) { + this.collectionArr[dataSource] = Object.values(this.collections[dataSource] || {}); } if (predicate) { - return this.collectionArr[namespace].filter(predicate); + return this.collectionArr[dataSource].filter(predicate); } - return this.collectionArr[namespace]; + return this.collectionArr[dataSource]; } /** * 获取数据表 @@ -191,15 +185,15 @@ export class CollectionManagerV2 { * getCollection('a.b.c'); // 获取 a 表的 b 字段的关联表,然后 b.target 表对应的 c 字段的关联表 */ getCollection(path: string, options: GetCollectionOptions = {}): (Mixins & CollectionV2) | undefined { - const { namespace = DEFAULT_COLLECTION_NAMESPACE_NAME } = options; + const { dataSource = DEFAULT_DATA_SOURCE_NAME } = options; if (!path || typeof path !== 'string') return undefined; if (path.split('.').length > 1) { // 获取到关联字段 const associationField = this.getCollectionField(path); - return this.getCollection(associationField.target, { namespace }); + return this.getCollection(associationField.target, { dataSource }); } - return this.collections[namespace]?.[path] as Mixins & CollectionV2; + return this.collections[dataSource]?.[path] as Mixins & CollectionV2; } getCollectionName(path: string, options: GetCollectionOptions = {}): string | undefined { const res = this.getCollection(path, options); @@ -222,23 +216,20 @@ export class CollectionManagerV2 { return; } const [collectionName, ...fieldNames] = String(path).split('.'); - const { namespace = DEFAULT_COLLECTION_NAMESPACE_NAME } = options || {}; - const collection = this.getCollection(collectionName, { namespace }); + const { dataSource = DEFAULT_DATA_SOURCE_NAME } = options || {}; + const collection = this.getCollection(collectionName, { dataSource }); if (!collection) { return; } return collection.getField(fieldNames.join('.')); } - // collectionNamespaces - addCollectionNamespaces(collectionNamespaces: NamespacesType) { - this.collectionNamespaces = merge(this.collectionNamespaces, collectionNamespaces); + // dataSources + getDataSources() { + return Object.values(this.dataSourceMap); } - setCollectionNamespaces(collectionNamespaces: NamespacesType) { - Object.assign(this.collectionNamespaces, collectionNamespaces); - } - getCollectionNamespaces() { - return this.collectionNamespaces; + getDataSource(name: string) { + return this.dataSourceMap[name]; } // CollectionTemplates @@ -252,20 +243,20 @@ export class CollectionManagerV2 { // 重新添加数据表 const reAddCollections = Object.keys(this.collections).reduce>( - (acc, namespace) => { - acc[namespace] = this.getCollections({ + (acc, dataSource) => { + acc[dataSource] = this.getCollections({ predicate: (collection) => { return newCollectionTemplateInstances[collection.template]; }, - namespace, + dataSource, }).map((collection) => collection.getOptions()); return acc; }, {}, ); - Object.keys(reAddCollections).forEach((namespace) => { - this.addCollections(reAddCollections[namespace], { namespace }); + Object.keys(reAddCollections).forEach((dataSource) => { + this.addCollections(reAddCollections[dataSource], { dataSource }); }); } getCollectionTemplates() { @@ -302,58 +293,50 @@ export class CollectionManagerV2 { return this.collectionFieldGroups[name]; } - setMainResource(fn: (...args: any[]) => Promise) { - this.mainResource = fn; + setMainDataSource(fn: MainDataSOurceFn) { + this.mainDataSourceFn = fn; } - addThirdResource(name: string, fn: ThirdResource) { - this.thirdResources[name] = fn; + setThirdDataSource(fn: ThirdDataResourceFn) { + this.thirdDataSourceFn = fn; } - async reloadMain(callback?: (collections?: CollectionOptionsV2[]) => void) { - const collections = await this.mainResource(); + async reloadMain(callback?: ReloadCallback) { + const collections = await this.mainDataSourceFn(); this.setCollections(collections); callback && callback(collections); - this.reloadCallbacks[DEFAULT_COLLECTION_NAMESPACE_NAME]?.forEach((cb) => cb(collections)); + this.reloadCallbacks[DEFAULT_DATA_SOURCE_NAME]?.forEach((cb) => cb(collections)); } - async reloadThirdResource(sourceName: string) { - const thirdResource = this.thirdResources[sourceName]; - const oldNamespaces = this.sourceNamespaceMap[sourceName] || []; - const data = await thirdResource(); - oldNamespaces.forEach((namespace) => { - delete this.collectionNamespaces[namespace]; + async reloadThirdDataSource(callback?: () => void) { + if (!this.thirdDataSourceFn) return; + const data = await this.thirdDataSourceFn(); + this.initDataSourceMap(); + data.forEach((dataSource) => { + const { collections: _unUse, ...rest } = dataSource; + this.dataSourceMap[dataSource.name] = rest; }); - this.sourceNamespaceMap[sourceName] = data.map(({ name }) => name); - data.forEach(({ name, description, collections }) => { - this.addCollectionNamespaces({ [name]: description }); - this.setCollections(collections, { namespace: name }); + + data.forEach(({ name, collections, ...others }) => { + this.dataSourceMap[name] = { ...others, name }; + this.setCollections(collections, { dataSource: name }); this.reloadCallbacks[name]?.forEach((cb) => cb(collections)); }); - } - - async reloadThirdResources(callback?: () => void) { - await Promise.all( - Object.keys(this.thirdResources).map((thirdResourceName) => this.reloadThirdResource(thirdResourceName)), - ); callback && callback(); } async reloadAll(callback?: () => void) { await this.reloadMain(); - await this.reloadThirdResources(); + await this.reloadThirdDataSource(); callback && callback(); } - addReloadCallback( - callback: (collections: CollectionOptionsV2[]) => void, - namespace = DEFAULT_COLLECTION_NAMESPACE_NAME, - ) { - if (!this.reloadCallbacks[namespace]) { - this.reloadCallbacks[namespace] = []; + addReloadCallback(callback: ReloadCallback, dataSource = DEFAULT_DATA_SOURCE_NAME) { + if (!this.reloadCallbacks[dataSource]) { + this.reloadCallbacks[dataSource] = []; } - this.reloadCallbacks[namespace].push(callback); + this.reloadCallbacks[dataSource].push(callback); } private getInheritData() { @@ -362,11 +345,10 @@ export class CollectionManagerV2 { collectionTemplateInstances: this.collectionTemplateInstances, fieldInterfaceInstances: this.fieldInterfaceInstances, collectionMixins: this.collectionMixins, - collectionNamespaces: this.collectionNamespaces, + dataSourceMap: this.dataSourceMap, collectionFieldGroups: this.collectionFieldGroups, - mainResource: this.mainResource, - thirdResources: this.thirdResources, - sourceNamespaceMap: this.sourceNamespaceMap, + mainDataSourceFn: this.mainDataSourceFn, + thirdDataSourceFn: this.thirdDataSourceFn, reloadCallbacks: this.reloadCallbacks, collectionArr: this.collectionArr, options: this.options, diff --git a/packages/core/client/src/application/collection/CollectionManagerProvider.tsx b/packages/core/client/src/application/collection/CollectionManagerProvider.tsx index 6bbd131536..42e5edc0b3 100644 --- a/packages/core/client/src/application/collection/CollectionManagerProvider.tsx +++ b/packages/core/client/src/application/collection/CollectionManagerProvider.tsx @@ -1,5 +1,5 @@ import React, { FC, ReactNode, createContext, useContext, useMemo } from 'react'; -import type { CollectionManagerV2, GetCollectionOptions } from './CollectionManager'; +import type { CollectionManagerV2 } from './CollectionManager'; import type { CollectionV2 } from './Collection'; export const CollectionManagerContextV2 = createContext(null); @@ -23,7 +23,7 @@ export function useCollectionManagerV2() { export const useCollectionsV2 = (options?: { predicate?: (collection: CollectionV2) => boolean; - namespace?: string; + dataSources?: string; }) => { const collectionManager = useCollectionManagerV2(); const collections = useMemo(() => collectionManager.getCollections(options), [collectionManager, options]); diff --git a/packages/core/client/src/application/collection/CollectionProvider.tsx b/packages/core/client/src/application/collection/CollectionProvider.tsx index 1dde7edc35..7a375de317 100644 --- a/packages/core/client/src/application/collection/CollectionProvider.tsx +++ b/packages/core/client/src/application/collection/CollectionProvider.tsx @@ -11,15 +11,15 @@ export interface CollectionProviderProps { name: string; children?: ReactNode; allowNull?: boolean; - namespace?: string; + dataSource?: string; } export const CollectionProviderV2: FC = (props) => { - const { name, children, allowNull, namespace } = props; + const { name, children, allowNull, dataSource } = props; const collectionManager = useCollectionManagerV2(); const collection = useMemo( - () => collectionManager.getCollection(name, { namespace }), - [collectionManager, name, namespace], + () => collectionManager.getCollection(name, { dataSource }), + [collectionManager, name, dataSource], ); if (!collection && allowNull) return <>{props.children}; if (!collection && !allowNull) return ; diff --git a/packages/core/client/src/application/collection/DeletedPlaceholder.tsx b/packages/core/client/src/application/collection/DeletedPlaceholder.tsx index 15bbb06f42..cd8f86667f 100644 --- a/packages/core/client/src/application/collection/DeletedPlaceholder.tsx +++ b/packages/core/client/src/application/collection/DeletedPlaceholder.tsx @@ -7,7 +7,7 @@ export const DeletedPlaceholder: FC<{ type: string; name?: string | number }> = const { designable } = useDesignable(); const { t } = useTranslation(); if (!name) { - console.warn('DeletedPlaceholder: name is required'); + console.error(`DeletedPlaceholder: ${type} name is required`); return null; } if (!designable && process.env.NODE_ENV !== 'development') return null; diff --git a/packages/core/client/src/block-provider/BlockProvider.tsx b/packages/core/client/src/block-provider/BlockProvider.tsx index 96d9f0dcdf..bd78f1f773 100644 --- a/packages/core/client/src/block-provider/BlockProvider.tsx +++ b/packages/core/client/src/block-provider/BlockProvider.tsx @@ -8,7 +8,7 @@ import template from 'lodash/template'; import React, { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react'; import { Link } from 'react-router-dom'; import { - DEFAULT_COLLECTION_NAMESPACE_NAME, + DEFAULT_DATA_SOURCE_NAME, TableFieldResource, WithoutTableFieldResource, useAPIClient, @@ -46,7 +46,7 @@ interface UseResourceProps { association?: any; useSourceId?: any; collection?: any; - namespace?: any; + dataSource?: any; block?: any; } @@ -61,7 +61,7 @@ export const useAssociation = (props) => { }; const useResource = (props: UseResourceProps) => { - const { block, collection, namespace, resource, useSourceId } = props; + const { block, collection, dataSource, resource, useSourceId } = props; const record = useRecord(); const api = useAPIClient(); const { fieldSchema } = useActionContext(); @@ -72,10 +72,10 @@ const useResource = (props: UseResourceProps) => { const withoutTableFieldResource = useContext(WithoutTableFieldResource); const __parent = useContext(BlockRequestContext); const headers = useMemo(() => { - if (namespace && namespace !== DEFAULT_COLLECTION_NAMESPACE_NAME) { - return { 'x-connection': namespace }; + if (dataSource && dataSource !== DEFAULT_DATA_SOURCE_NAME) { + return { 'x-connection': dataSource }; } - }, [namespace]); + }, [dataSource]); if (block === 'TableField') { const options = { @@ -303,9 +303,9 @@ export const useBlockContext = () => { return useContext(BlockContext); }; -export const CollectionNamespace = createContext(undefined); -export const useCollectionNamespace = () => { - return useContext(CollectionNamespace); +export const DataSourceName = createContext(undefined); +export const useDataSourceName = () => { + return useContext(DataSourceName); }; export const BlockProvider = (props: { @@ -313,13 +313,13 @@ export const BlockProvider = (props: { resource: any; collection?: any; association?: any; - namespace?: string; + dataSource?: string; params?: any; children?: any; }) => { - const { collection, association, name, namespace } = props; + const { collection, association, name, dataSource } = props; const resource = useResource(props); - const { getAssociationAppends } = useAssociationNames(namespace); + const { getAssociationAppends } = useAssociationNames(dataSource); const { appends, updateAssociationValues } = getAssociationAppends(); const params = useMemo(() => { if (!props.params?.['appends']) { @@ -331,7 +331,7 @@ export const BlockProvider = (props: { return ( - + @@ -345,7 +345,7 @@ export const BlockProvider = (props: { - + ); }; diff --git a/packages/core/client/src/block-provider/TableBlockProvider.tsx b/packages/core/client/src/block-provider/TableBlockProvider.tsx index 62b8364840..45fbd290f3 100644 --- a/packages/core/client/src/block-provider/TableBlockProvider.tsx +++ b/packages/core/client/src/block-provider/TableBlockProvider.tsx @@ -77,7 +77,7 @@ export const TableBlockProvider = (props) => { const resourceName = props.resource; const params = useMemo(() => ({ ...props.params }), [props.params]); const fieldSchema = useFieldSchema(); - const { getCollection, getCollectionField } = useCollectionManager(props.namespace); + const { getCollection, getCollectionField } = useCollectionManager(props.dataSource); const record = useRecord(); const collection = getCollection(props.collection); const { treeTable, dragSortBy } = fieldSchema?.['x-decorator-props'] || {}; diff --git a/packages/core/client/src/block-provider/hooks/index.ts b/packages/core/client/src/block-provider/hooks/index.ts index dfaef7676d..54c05d98a9 100644 --- a/packages/core/client/src/block-provider/hooks/index.ts +++ b/packages/core/client/src/block-provider/hooks/index.ts @@ -1296,10 +1296,10 @@ export function getAssociationPath(str) { return str; } -export const useAssociationNames = (namespace?: string) => { +export const useAssociationNames = (dataSource?: string) => { let updateAssociationValues = new Set([]); let appends = new Set([]); - const { getCollectionJoinField, getCollection } = useCollectionManager(namespace); + const { getCollectionJoinField, getCollection } = useCollectionManager(dataSource); const fieldSchema = useFieldSchema(); const _getAssociationAppends = (schema, str) => { schema.reduceProperties((pre, s) => { diff --git a/packages/core/client/src/collection-manager/CollectionProvider.tsx b/packages/core/client/src/collection-manager/CollectionProvider.tsx index e42eac072e..f7f8cdf4ff 100644 --- a/packages/core/client/src/collection-manager/CollectionProvider.tsx +++ b/packages/core/client/src/collection-manager/CollectionProvider.tsx @@ -4,7 +4,7 @@ import { CollectionOptions } from './types'; import React from 'react'; import { DeletedPlaceholder } from '../application/collection/DeletedPlaceholder'; import { CollectionExtendsProvider } from './CollectionManagerProvider'; -import { useCollectionNamespace } from '../block-provider/BlockProvider'; +import { useDataSourceName } from '../block-provider/BlockProvider'; function getCollectionName(name?: string | CollectionOptions): string { if (!name) return undefined; @@ -17,16 +17,16 @@ export const CollectionProvider: FC<{ collection?: CollectionOptions | string; allowNull?: boolean; children?: ReactNode; - namespace?: string; -}> = ({ children, allowNull, name, namespace, collection }) => { + dataSource?: string; +}> = ({ children, allowNull, name, dataSource, collection }) => { const collectionName = getCollectionName(name || collection); - const collectionNamespace = useCollectionNamespace(); - const namespaceValue = namespace || collectionNamespace || undefined; + const dataSourceName = useDataSourceName(); + const dataSourceValue = dataSource || dataSourceName || undefined; const cm = useCollectionManagerV2(); - const hasCollection = cm.getCollection(collectionName, { namespace: namespaceValue }); + const hasCollection = cm.getCollection(collectionName, { dataSource: dataSourceValue }); if (hasCollection || (allowNull && !collection)) return ( - + {children} ); diff --git a/packages/core/client/src/collection-manager/collectionPlugin.ts b/packages/core/client/src/collection-manager/collectionPlugin.ts index 25e785602f..75abd73060 100644 --- a/packages/core/client/src/collection-manager/collectionPlugin.ts +++ b/packages/core/client/src/collection-manager/collectionPlugin.ts @@ -57,7 +57,7 @@ export class CollectionPlugin extends Plugin { this.addFieldInterfaces(); this.addFieldGroups(); - this.collectionManager.setMainResource(this.reloadCollections.bind(this)); + this.collectionManager.setMainDataSource(this.reloadCollections.bind(this)); } addFieldGroups() { diff --git a/packages/core/client/src/collection-manager/hooks/useCollectionManager.ts b/packages/core/client/src/collection-manager/hooks/useCollectionManager.ts index 8cfc740b5f..0071e36720 100644 --- a/packages/core/client/src/collection-manager/hooks/useCollectionManager.ts +++ b/packages/core/client/src/collection-manager/hooks/useCollectionManager.ts @@ -6,12 +6,12 @@ import { CollectionFieldOptions, CollectionOptions } from '../types'; import { useCollectionManagerV2 } from '../../application'; import { InheritanceCollectionMixin } from '../mixins/InheritanceCollectionMixin'; import { uid } from '@formily/shared'; -import { useCollectionNamespace } from '../../block-provider/BlockProvider'; +import { useDataSourceName } from '../../block-provider/BlockProvider'; -export const useCollectionManager = (namespace?: string) => { +export const useCollectionManager = (dataSourceName?: string) => { const cm = useCollectionManagerV2(); - const blockNamespaceValue = useCollectionNamespace(); - const namespaceValue = namespace || blockNamespaceValue || undefined; + const blockDataSourceName = useDataSourceName(); + const dataSourceNameValue = dataSourceName || blockDataSourceName || undefined; const [random, setRandom] = useState(uid()); const { refresh } = useSchemaComponentContext(); const interfaces = useMemo(() => cm?.getFieldInterfaces(), [cm, random]); @@ -46,7 +46,7 @@ export const useCollectionManager = (namespace?: string) => { (name: string, customNamespace?: string) => { return ( cm - ?.getCollection(name, { namespace: customNamespace || namespaceValue }) + ?.getCollection(name, { dataSource: customNamespace || dataSourceNameValue }) ?.getInheritedFields() || [] ); }, @@ -59,7 +59,7 @@ export const useCollectionManager = (namespace?: string) => { return ( cm ?.getCollection(typeof name === 'object' ? name.name : name, { - namespace: customNamespace || namespaceValue, + dataSource: customNamespace || dataSourceNameValue, }) ?.getAllFields() || [] ); @@ -69,7 +69,7 @@ export const useCollectionManager = (namespace?: string) => { const getCollectionField = useCallback( (name: string, customNamespace?: string) => { if (!name || name.split('.').length < 2) return; - return cm?.getCollectionField(name, { namespace: customNamespace || namespaceValue }); + return cm?.getCollectionField(name, { dataSource: customNamespace || dataSourceNameValue }); }, [cm], ); @@ -78,7 +78,7 @@ export const useCollectionManager = (namespace?: string) => { if (!name) return []; return ( cm - ?.getCollection(name, { namespace: customNamespace || namespaceValue }) + ?.getCollection(name, { dataSource: customNamespace || dataSourceNameValue }) ?.getParentCollectionsName() || [] ); }, @@ -90,7 +90,7 @@ export const useCollectionManager = (namespace?: string) => { if (!name) return []; return ( cm - ?.getCollection(name, { namespace: customNamespace || namespaceValue }) + ?.getCollection(name, { dataSource: customNamespace || dataSourceNameValue }) ?.getChildrenCollections(isSupportView) || [] ); }, @@ -101,7 +101,7 @@ export const useCollectionManager = (namespace?: string) => { if (!name) return []; return ( cm - ?.getCollection(name, { namespace: customNamespace || namespaceValue }) + ?.getCollection(name, { dataSource: customNamespace || dataSourceNameValue }) ?.getCurrentFields() || [] ); }, @@ -114,7 +114,7 @@ export const useCollectionManager = (namespace?: string) => { collectionName: string, type: string | string[] = 'string', opts?: { - namespace?: string; + dataSource?: string; cached?: Record; collectionNames?: string[]; /** @@ -150,7 +150,7 @@ export const useCollectionManager = (namespace?: string) => { exceptInterfaces = [], prefixFieldValue = '', usePrefix = false, - namespace: customNamespace, + dataSource: customDataSourceNameValue, } = opts || {}; if (collectionNames.length - 1 > maxDepth) { @@ -165,7 +165,7 @@ export const useCollectionManager = (namespace?: string) => { if (typeof type === 'string') { type = [type]; } - const fields = getCollectionFields(collectionName, customNamespace); + const fields = getCollectionFields(collectionName, customDataSourceNameValue); const options = fields ?.filter( (field) => @@ -189,7 +189,7 @@ export const useCollectionManager = (namespace?: string) => { : getCollectionFieldsOptions(field.target, type, { ...opts, cached, - namespace: customNamespace, + dataSource: customDataSourceNameValue, collectionNames: [...collectionNames, field.target], prefixFieldValue: usePrefix ? prefixFieldValue @@ -215,7 +215,7 @@ export const useCollectionManager = (namespace?: string) => { const getCollection = useCallback( (name: any, customNamespace?: string): CollectionOptions => { - return cm?.getCollection(name, { namespace: customNamespace || namespaceValue }); + return cm?.getCollection(name, { dataSource: customNamespace || dataSourceNameValue }); }, [cm], ); @@ -224,7 +224,9 @@ export const useCollectionManager = (namespace?: string) => { const getAllCollectionsInheritChain = useCallback( (collectionName: string, customNamespace?: string) => { return cm - ?.getCollection(collectionName, { namespace: customNamespace || namespaceValue }) + ?.getCollection(collectionName, { + dataSource: customNamespace || dataSourceNameValue, + }) ?.getAllCollectionsInheritChain(); }, [cm], @@ -238,7 +240,9 @@ export const useCollectionManager = (namespace?: string) => { const getInheritCollectionsChain = useCallback( (collectionName: string, customNamespace?: string) => () => { return cm - ?.getCollection(collectionName, { namespace: customNamespace || namespaceValue }) + ?.getCollection(collectionName, { + dataSource: customNamespace || dataSourceNameValue, + }) ?.getInheritCollectionsChain(); }, [cm], @@ -258,7 +262,9 @@ export const useCollectionManager = (namespace?: string) => { const getParentCollectionFields = (parentCollection, currentCollection, customNamespace?: string) => { return cm - ?.getCollection(currentCollection, { namespace: customNamespace || namespaceValue }) + ?.getCollection(currentCollection, { + dataSource: customNamespace || dataSourceNameValue, + }) ?.getParentCollectionFields(parentCollection); }; diff --git a/packages/core/client/src/schema-initializer/items/CreateFormBlockInitializer.tsx b/packages/core/client/src/schema-initializer/items/CreateFormBlockInitializer.tsx index af4b3b8b47..d6dc16828a 100644 --- a/packages/core/client/src/schema-initializer/items/CreateFormBlockInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/CreateFormBlockInitializer.tsx @@ -26,7 +26,7 @@ export const CreateFormBlockInitializer = () => { const blockSchema = createFormBlockSchema({ actionInitializers: 'CreateFormActionInitializers', association, - namespace: collection.namespace, + dataSource: collection.dataSource, collection: collection.name, template: s, }); @@ -42,7 +42,7 @@ export const CreateFormBlockInitializer = () => { createFormBlockSchema({ actionInitializers: 'CreateFormActionInitializers', association, - namespace: collection.namespace, + dataSource: collection.dataSource, collection: collection.name, }), ); diff --git a/packages/core/client/src/schema-initializer/items/DataBlockInitializer.tsx b/packages/core/client/src/schema-initializer/items/DataBlockInitializer.tsx index 0bfa286a02..e798977c59 100644 --- a/packages/core/client/src/schema-initializer/items/DataBlockInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/DataBlockInitializer.tsx @@ -289,7 +289,7 @@ export const DataBlockInitializer = (props: DataBlockInitializerProps) => { insert( createBlockSchema({ collection: item.collectionName || item.name, - namespace: item.namespace, + dataSource: item.dataSource, isCusomeizeCreate, }), ); diff --git a/packages/core/client/src/schema-initializer/items/DetailsBlockInitializer.tsx b/packages/core/client/src/schema-initializer/items/DetailsBlockInitializer.tsx index 5eb1cc66c1..87cc1b6773 100644 --- a/packages/core/client/src/schema-initializer/items/DetailsBlockInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/DetailsBlockInitializer.tsx @@ -15,10 +15,10 @@ export const DetailsBlockInitializer = () => { icon={} componentType={'Details'} onCreateBlockSchema={async ({ item }) => { - const collection = getCollection(item.name, item.namespace); + const collection = getCollection(item.name, item.dataSource); const schema = createDetailsBlockSchema({ collection: item.name, - namespace: item.namespace, + dataSource: item.dataSource, rowKey: collection.filterTargetKey || 'id', actionInitializers: (collection.template !== 'view' || collection?.writableView) && diff --git a/packages/core/client/src/schema-initializer/items/FilterCollapseBlockInitializer.tsx b/packages/core/client/src/schema-initializer/items/FilterCollapseBlockInitializer.tsx index 9bd70c6626..08e50e7835 100644 --- a/packages/core/client/src/schema-initializer/items/FilterCollapseBlockInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/FilterCollapseBlockInitializer.tsx @@ -17,7 +17,7 @@ export const FilterCollapseBlockInitializer = () => { isItem={itemConfig?.name === 'filterCollapseBlockInTableSelector'} onCreateBlockSchema={async ({ item }) => { const schema = createCollapseBlockSchema({ - namespace: item.namespace, + dataSource: item.dataSource, collection: item.collectionName || item.name, // 与数据区块做区分 blockType: 'filter', diff --git a/packages/core/client/src/schema-initializer/items/FilterFormBlockInitializer.tsx b/packages/core/client/src/schema-initializer/items/FilterFormBlockInitializer.tsx index 3f5a400c82..3917d24ae7 100644 --- a/packages/core/client/src/schema-initializer/items/FilterFormBlockInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/FilterFormBlockInitializer.tsx @@ -16,7 +16,7 @@ export const FilterFormBlockInitializer = () => { templateWrap={(templateSchema, { item }) => { const s = createFilterFormBlockSchema({ template: templateSchema, - namespace: item.namespace, + dataSource: item.dataSource, collection: item.collectionName, }); if (item.template && item.mode === 'reference') { diff --git a/packages/core/client/src/schema-initializer/items/FormBlockInitializer.tsx b/packages/core/client/src/schema-initializer/items/FormBlockInitializer.tsx index 7533a33b3f..2d92ef2f16 100644 --- a/packages/core/client/src/schema-initializer/items/FormBlockInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/FormBlockInitializer.tsx @@ -15,7 +15,7 @@ export const FormBlockInitializer = () => { templateWrap={(templateSchema, { item }) => { const s = createFormBlockSchema({ isCusomeizeCreate, - namespace: item.namespace, + dataSource: item.dataSource, template: templateSchema, collection: item.name, }); diff --git a/packages/core/client/src/schema-initializer/items/GridCardBlockInitializer.tsx b/packages/core/client/src/schema-initializer/items/GridCardBlockInitializer.tsx index 1fce95bf23..cef6184e87 100644 --- a/packages/core/client/src/schema-initializer/items/GridCardBlockInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/GridCardBlockInitializer.tsx @@ -15,10 +15,10 @@ export const GridCardBlockInitializer = () => { icon={} componentType={'GridCard'} onCreateBlockSchema={async ({ item }) => { - const collection = getCollection(item.name, item.namespace); + const collection = getCollection(item.name, item.dataSource); const schema = createGridCardBlockSchema({ collection: item.name, - namespace: item.namespace, + dataSource: item.dataSource, rowKey: collection.filterTargetKey || 'id', }); insert(schema); diff --git a/packages/core/client/src/schema-initializer/items/ListBlockInitializer.tsx b/packages/core/client/src/schema-initializer/items/ListBlockInitializer.tsx index 4f4dac010f..5bd5dcc5b2 100644 --- a/packages/core/client/src/schema-initializer/items/ListBlockInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/ListBlockInitializer.tsx @@ -15,10 +15,10 @@ export const ListBlockInitializer = () => { icon={} componentType={'List'} onCreateBlockSchema={async ({ item }) => { - const collection = getCollection(item.name, item.namespace); + const collection = getCollection(item.name, item.dataSource); const schema = createListBlockSchema({ collection: item.name, - namespace: item.namespace, + dataSource: item.dataSource, rowKey: collection.filterTargetKey || 'id', }); insert(schema); diff --git a/packages/core/client/src/schema-initializer/items/RecordAssociationBlockInitializer.tsx b/packages/core/client/src/schema-initializer/items/RecordAssociationBlockInitializer.tsx index bce64c87f0..10dd251617 100644 --- a/packages/core/client/src/schema-initializer/items/RecordAssociationBlockInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/RecordAssociationBlockInitializer.tsx @@ -28,7 +28,7 @@ export const RecordAssociationBlockInitializer = () => { createTableBlockSchema({ rowKey: collection.filterTargetKey, collection: field.target, - namespace: collection.namespace, + dataSource: collection.dataSource, resource, association: resource, }), diff --git a/packages/core/client/src/schema-initializer/items/RecordAssociationDetailsBlockInitializer.tsx b/packages/core/client/src/schema-initializer/items/RecordAssociationDetailsBlockInitializer.tsx index 49b5c55dbf..b44e3b2bb3 100644 --- a/packages/core/client/src/schema-initializer/items/RecordAssociationDetailsBlockInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/RecordAssociationDetailsBlockInitializer.tsx @@ -28,7 +28,7 @@ export const RecordAssociationDetailsBlockInitializer = () => { createDetailsBlockSchema({ collection: field.target, resource, - namespace: collection.namespace, + dataSource: collection.dataSource, association: resource, rowKey: collection.filterTargetKey || 'id', }), diff --git a/packages/core/client/src/schema-initializer/items/RecordAssociationFormBlockInitializer.tsx b/packages/core/client/src/schema-initializer/items/RecordAssociationFormBlockInitializer.tsx index 75fd100695..7a965fe725 100644 --- a/packages/core/client/src/schema-initializer/items/RecordAssociationFormBlockInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/RecordAssociationFormBlockInitializer.tsx @@ -31,7 +31,7 @@ export const RecordAssociationFormBlockInitializer = () => { if (item.template.componentName === 'FormItem') { const blockSchema = createFormBlockSchema({ collection: collectionName, - namespace: collection.namespace, + dataSource: collection.dataSource, resource, association: resource, action, @@ -52,7 +52,7 @@ export const RecordAssociationFormBlockInitializer = () => { createFormBlockSchema({ collection: collectionName, resource, - namespace: collection.namespace, + dataSource: collection.dataSource, association: resource, action, useSourceId: '{{ useSourceIdFromParentRecord }}', diff --git a/packages/core/client/src/schema-initializer/items/RecordAssociationGridCardBlockInitializer.tsx b/packages/core/client/src/schema-initializer/items/RecordAssociationGridCardBlockInitializer.tsx index 21e85b97b8..da84804480 100644 --- a/packages/core/client/src/schema-initializer/items/RecordAssociationGridCardBlockInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/RecordAssociationGridCardBlockInitializer.tsx @@ -30,7 +30,7 @@ export const RecordAssociationGridCardBlockInitializer = () => { rowKey: collection.filterTargetKey, collection: field.target, resource, - namespace: collection.namespace, + dataSource: collection.dataSource, association: resource, }), ); diff --git a/packages/core/client/src/schema-initializer/items/RecordAssociationListBlockInitializer.tsx b/packages/core/client/src/schema-initializer/items/RecordAssociationListBlockInitializer.tsx index dbcdd3e50b..ce7fa18c30 100644 --- a/packages/core/client/src/schema-initializer/items/RecordAssociationListBlockInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/RecordAssociationListBlockInitializer.tsx @@ -30,7 +30,7 @@ export const RecordAssociationListBlockInitializer = () => { rowKey: collection.filterTargetKey, collection: field.target, resource, - namespace: collection.namespace, + dataSource: collection.dataSource, association: resource, }), ); diff --git a/packages/core/client/src/schema-initializer/items/RecordFormBlockInitializer.tsx b/packages/core/client/src/schema-initializer/items/RecordFormBlockInitializer.tsx index b72d3264af..40c89d672c 100644 --- a/packages/core/client/src/schema-initializer/items/RecordFormBlockInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/RecordFormBlockInitializer.tsx @@ -25,7 +25,7 @@ export const RecordFormBlockInitializer = () => { const blockSchema = createFormBlockSchema({ association, collection: collection.name, - namespace: collection.namespace, + dataSource: collection.dataSource, action: 'get', useSourceId: '{{ useSourceIdFromParentRecord }}', useParams: '{{ useParamsFromRecord }}', @@ -44,7 +44,7 @@ export const RecordFormBlockInitializer = () => { createFormBlockSchema({ association, collection: collection.name, - namespace: collection.namespace, + dataSource: collection.dataSource, action: 'get', useSourceId: '{{ useSourceIdFromParentRecord }}', useParams: '{{ useParamsFromRecord }}', diff --git a/packages/core/client/src/schema-initializer/items/RecordReadPrettyAssociationFormBlockInitializer.tsx b/packages/core/client/src/schema-initializer/items/RecordReadPrettyAssociationFormBlockInitializer.tsx index 7ce6c31f0e..c3a53eba71 100644 --- a/packages/core/client/src/schema-initializer/items/RecordReadPrettyAssociationFormBlockInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/RecordReadPrettyAssociationFormBlockInitializer.tsx @@ -33,7 +33,7 @@ export const RecordReadPrettyAssociationFormBlockInitializer = () => { const blockSchema = createReadPrettyFormBlockSchema({ actionInitializers, collection: collectionName, - namespace: collection.namespace, + dataSource: collection.dataSource, resource, association: resource, action: 'get', @@ -55,7 +55,7 @@ export const RecordReadPrettyAssociationFormBlockInitializer = () => { collection: collectionName, resource, association: resource, - namespace: collection.namespace, + dataSource: collection.dataSource, action: 'get', useSourceId: '{{ useSourceIdFromParentRecord }}', useParams: '{{ useParamsFromRecord }}', diff --git a/packages/core/client/src/schema-initializer/items/RecordReadPrettyFormBlockInitializer.tsx b/packages/core/client/src/schema-initializer/items/RecordReadPrettyFormBlockInitializer.tsx index 94381c3218..c1f333c4d8 100644 --- a/packages/core/client/src/schema-initializer/items/RecordReadPrettyFormBlockInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/RecordReadPrettyFormBlockInitializer.tsx @@ -37,7 +37,7 @@ export const RecordReadPrettyFormBlockInitializer = () => { actionInitializers, association, collection: collection.name, - namespace: collection.namespace, + dataSource: collection.dataSource, action: 'get', useSourceId: '{{ useSourceIdFromParentRecord }}', useParams: '{{ useParamsFromRecord }}', @@ -56,7 +56,7 @@ export const RecordReadPrettyFormBlockInitializer = () => { actionInitializers, association, collection: collection.name, - namespace: collection.namespace, + dataSource: collection.dataSource, action: 'get', useSourceId: '{{ useSourceIdFromParentRecord }}', useParams: '{{ useParamsFromRecord }}', diff --git a/packages/core/client/src/schema-initializer/items/TableBlockInitializer.tsx b/packages/core/client/src/schema-initializer/items/TableBlockInitializer.tsx index 98305af99a..cdd08756db 100644 --- a/packages/core/client/src/schema-initializer/items/TableBlockInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/TableBlockInitializer.tsx @@ -15,10 +15,10 @@ export const TableBlockInitializer = () => { icon={} componentType={'Table'} onCreateBlockSchema={async ({ item }) => { - const collection = getCollection(item.name, item.namespace); + const collection = getCollection(item.name, item.dataSource); const schema = createTableBlockSchema({ collection: item.name, - namespace: item.namespace, + dataSource: item.dataSource, rowKey: collection.filterTargetKey || 'id', }); insert(schema); diff --git a/packages/core/client/src/schema-initializer/items/TableSelectorInitializer.tsx b/packages/core/client/src/schema-initializer/items/TableSelectorInitializer.tsx index ed5e75ab97..393253d990 100644 --- a/packages/core/client/src/schema-initializer/items/TableSelectorInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/TableSelectorInitializer.tsx @@ -19,7 +19,7 @@ export const TableSelectorInitializer = () => { createTableSelectorSchema({ rowKey: collection.filterTargetKey, collection: collection.name, - namespace: collection.namespace, + dataSource: collection.dataSource, resource: collection.name, }), ); diff --git a/packages/core/client/src/schema-initializer/utils.ts b/packages/core/client/src/schema-initializer/utils.ts index 6d48c79d3b..354f8dcf77 100644 --- a/packages/core/client/src/schema-initializer/utils.ts +++ b/packages/core/client/src/schema-initializer/utils.ts @@ -874,16 +874,16 @@ export const useCollectionDataSourceItems = ( const allCollections = cm.getAllCollections((collection) => notLocal(collection) && filter(collection)); const { getTemplatesByCollection } = useSchemaTemplateManager(); const res = useMemo(() => { - return allCollections.map(({ nsName, nsTitle, collections }) => ({ - name: nsName, - label: nsTitle, + return allCollections.map(({ name, description, collections }) => ({ + name: name, + label: description, type: 'subMenu', - children: getChildrenV3({ + children: getChildren({ collections, collectionManager: cm, componentName, searchValue: '', - namespace: nsName, + dataSource: name, getTemplatesByCollection, t, }), @@ -898,7 +898,7 @@ export const createDetailsBlockSchema = (options) => { formItemInitializers = 'ReadPrettyFormItemInitializers', actionInitializers = 'DetailsActionInitializers', collection, - namespace, + dataSource, association, resource, template, @@ -911,7 +911,7 @@ export const createDetailsBlockSchema = (options) => { 'x-decorator': 'DetailsBlockProvider', 'x-decorator-props': { resource: resourceName, - namespace, + dataSource, collection, association, readPretty: true, @@ -970,7 +970,7 @@ export const createListBlockSchema = (options) => { actionInitializers = 'ListActionInitializers', itemActionInitializers = 'ListItemActionInitializers', collection, - namespace, + dataSource, association, resource, template, @@ -984,7 +984,7 @@ export const createListBlockSchema = (options) => { 'x-decorator-props': { resource: resourceName, collection, - namespace, + dataSource, association, readPretty: true, action: 'list', @@ -1061,7 +1061,7 @@ export const createGridCardBlockSchema = (options) => { association, resource, template, - namespace, + dataSource, ...others } = options; const resourceName = resource || association || collection; @@ -1073,7 +1073,7 @@ export const createGridCardBlockSchema = (options) => { resource: resourceName, collection, association, - namespace, + dataSource, readPretty: true, action: 'list', params: { @@ -1148,7 +1148,7 @@ export const createFormBlockSchema = (options) => { actionInitializers = 'FormActionInitializers', collection, resource, - namespace, + dataSource, association, action, actions = {}, @@ -1168,7 +1168,7 @@ export const createFormBlockSchema = (options) => { 'x-decorator-props': { ...others, action, - namespace, + dataSource, resource: resourceName, collection, association, @@ -1220,7 +1220,7 @@ export const createFilterFormBlockSchema = (options) => { collection, resource, association, - namespace, + dataSource, action, template, ...others @@ -1233,7 +1233,7 @@ export const createFilterFormBlockSchema = (options) => { ...others, action, resource: resourceName, - namespace, + dataSource, collection, association, }, @@ -1282,7 +1282,7 @@ export const createReadPrettyFormBlockSchema = (options) => { actionInitializers = 'ReadPrettyFormActionInitializers', collection, association, - namespace, + dataSource, resource, template, ...others @@ -1296,7 +1296,7 @@ export const createReadPrettyFormBlockSchema = (options) => { resource: resourceName, collection, association, - namespace, + dataSource, readPretty: true, action: 'get', useParams: '{{ useParamsFromRecord }}', @@ -1349,7 +1349,7 @@ export const createTableBlockSchema = (options) => { tableBlockProvider, disableTemplate, TableBlockDesigner, - namespace, + dataSource, blockType, pageSize = 20, ...others @@ -1360,7 +1360,7 @@ export const createTableBlockSchema = (options) => { 'x-acl-action': `${resource || collection}:list`, 'x-decorator-props': { collection, - namespace, + dataSource, resource: resource || collection, action: 'list', params: { @@ -1429,13 +1429,13 @@ export const createTableBlockSchema = (options) => { }; export const createCollapseBlockSchema = (options) => { - const { collection, namespace, blockType } = options; + const { collection, dataSource, blockType } = options; const schema: ISchema = { type: 'void', 'x-decorator': 'AssociationFilter.Provider', 'x-decorator-props': { collection, - namespace, + dataSource, blockType, associationFilterStyle: { width: '100%', @@ -1460,7 +1460,7 @@ export const createCollapseBlockSchema = (options) => { }; export const createTableSelectorSchema = (options) => { - const { collection, namespace, resource, rowKey, ...others } = options; + const { collection, dataSource, resource, rowKey, ...others } = options; const schema: ISchema = { type: 'void', 'x-acl-action': `${resource || collection}:list`, @@ -1468,7 +1468,7 @@ export const createTableSelectorSchema = (options) => { 'x-decorator-props': { collection, resource: resource || collection, - namespace, + dataSource, action: 'list', params: { pageSize: 20, @@ -1509,114 +1509,9 @@ export const createTableSelectorSchema = (options) => { }; const getChildren = ({ - collections, - getCollectionFields, - componentName, - searchValue, - getTemplatesByCollection, - t, -}: { - collections: any[]; - getCollectionFields: (name: any) => CollectionFieldOptions[]; - componentName: string; - searchValue: string; - getTemplatesByCollection: (collectionName: string, resourceName?: string) => any; - t; -}) => { - return collections - ?.filter((item) => { - if (item.inherit) { - return false; - } - const fields = getCollectionFields(item.name); - if (item.autoGenId === false && !fields.find((v) => v.primaryKey)) { - return false; - } else if ( - ['Kanban', 'FormItem'].includes(componentName) && - ((item.template === 'view' && !item.writableView) || item.template === 'sql') - ) { - return false; - } else if (item.template === 'file' && ['Kanban', 'FormItem', 'Calendar'].includes(componentName)) { - return false; - } else { - if (!item.title) { - return false; - } - return item.title.toUpperCase().includes(searchValue.toUpperCase()) && !(item?.isThrough && item?.autoCreate); - } - }) - ?.map((item, index) => { - const templates = getTemplatesByCollection(item.name).filter((template) => { - return ( - componentName && - template.componentName === componentName && - (!template.resourceName || template.resourceName === item.name) - ); - }); - if (!templates.length) { - return { - type: 'item', - name: item.name, - title: item.title, - }; - } - return { - key: `${componentName}_table_subMenu_${index}`, - type: 'subMenu', - name: `${item.name}_${index}`, - title: item.title, - children: [ - { - type: 'item', - name: item.name, - title: t('Blank block'), - }, - { - type: 'divider', - }, - { - key: `${componentName}_table_subMenu_${index}_copy`, - type: 'subMenu', - name: 'copy', - title: t('Duplicate template'), - children: templates.map((template) => { - const templateName = - template?.componentName === 'FormItem' ? `${template?.name} ${t('(Fields only)')}` : template?.name; - return { - type: 'item', - mode: 'copy', - name: item.name, - template, - title: templateName || t('Untitled'), - }; - }), - }, - { - key: `${componentName}_table_subMenu_${index}_ref`, - type: 'subMenu', - name: 'ref', - title: t('Reference template'), - children: templates.map((template) => { - const templateName = - template?.componentName === 'FormItem' ? `${template?.name} ${t('(Fields only)')}` : template?.name; - return { - type: 'item', - mode: 'reference', - name: item.name, - template, - title: templateName || t('Untitled'), - }; - }), - }, - ], - }; - }); -}; - -const getChildrenV3 = ({ collections, collectionManager, - namespace, + dataSource, componentName, searchValue, getTemplatesByCollection, @@ -1626,7 +1521,7 @@ const getChildrenV3 = ({ collectionManager: CollectionManagerV2; componentName: string; searchValue: string; - namespace: string; + dataSource: string; getTemplatesByCollection: (collectionName: string, resourceName?: string) => any; t; }) => { @@ -1635,7 +1530,7 @@ const getChildrenV3 = ({ if (item.inherit) { return false; } - const fields = collectionManager.getCollectionFields(item.name, { namespace }); + const fields = collectionManager.getCollectionFields(item.name, { dataSource }); if (item.autoGenId === false && !fields.find((v) => v.primaryKey)) { return false; } else if ( @@ -1667,7 +1562,7 @@ const getChildrenV3 = ({ type: 'item', name: item.name, title, - namespace, + dataSource, }; } return { @@ -1675,12 +1570,12 @@ const getChildrenV3 = ({ type: 'subMenu', name: `${item.name}_${index}`, title, - namespace, + dataSource, children: [ { type: 'item', name: item.name, - namespace, + dataSource, title: t('Blank block'), }, { @@ -1690,7 +1585,7 @@ const getChildrenV3 = ({ key: `${componentName}_table_subMenu_${index}_copy`, type: 'subMenu', name: 'copy', - namespace, + dataSource, title: t('Duplicate template'), children: templates.map((template) => { const templateName = @@ -1700,7 +1595,7 @@ const getChildrenV3 = ({ mode: 'copy', name: item.name, template, - namespace, + dataSource, title: templateName || t('Untitled'), }; }), @@ -1709,7 +1604,7 @@ const getChildrenV3 = ({ key: `${componentName}_table_subMenu_${index}_ref`, type: 'subMenu', name: 'ref', - namespace, + dataSource, title: t('Reference template'), children: templates.map((template) => { const templateName = @@ -1719,7 +1614,7 @@ const getChildrenV3 = ({ mode: 'reference', name: item.name, template, - namespace, + dataSource, title: templateName || t('Untitled'), }; }), diff --git a/packages/plugins/@nocobase/plugin-action-bulk-edit/src/client/CreateFormBulkEditBlockInitializer.tsx b/packages/plugins/@nocobase/plugin-action-bulk-edit/src/client/CreateFormBulkEditBlockInitializer.tsx index 08887b7cd0..e0db4461f5 100644 --- a/packages/plugins/@nocobase/plugin-action-bulk-edit/src/client/CreateFormBulkEditBlockInitializer.tsx +++ b/packages/plugins/@nocobase/plugin-action-bulk-edit/src/client/CreateFormBulkEditBlockInitializer.tsx @@ -30,7 +30,7 @@ export const CreateFormBulkEditBlockInitializer = () => { actionInitializers: 'CreateFormActionInitializers', association, collection: collection.name, - namespace: collection.namespace, + dataSource: collection.dataSource, template: s, }); if (item.mode === 'reference') { @@ -47,7 +47,7 @@ export const CreateFormBulkEditBlockInitializer = () => { actionInitializers: 'BulkEditFormActionInitializers', association, collection: collection.name, - namespace: collection.namespace, + dataSource: collection.dataSource, }), ); } diff --git a/packages/plugins/@nocobase/plugin-calendar/src/client/schema-initializer/items/CalendarBlockInitializer.tsx b/packages/plugins/@nocobase/plugin-calendar/src/client/schema-initializer/items/CalendarBlockInitializer.tsx index eda07e02b2..847fb94380 100644 --- a/packages/plugins/@nocobase/plugin-calendar/src/client/schema-initializer/items/CalendarBlockInitializer.tsx +++ b/packages/plugins/@nocobase/plugin-calendar/src/client/schema-initializer/items/CalendarBlockInitializer.tsx @@ -29,10 +29,10 @@ export const CalendarBlockInitializer = () => { componentType={'Calendar'} icon={} onCreateBlockSchema={async ({ item }) => { - const stringFieldsOptions = getCollectionFieldsOptions(item.name, 'string', { namespace: item.namespace }); + const stringFieldsOptions = getCollectionFieldsOptions(item.name, 'string', { dataSource: item.dataSource }); const dateFieldsOptions = getCollectionFieldsOptions(item.name, 'date', { association: ['o2o', 'obo', 'oho', 'm2o'], - namespace: item.namespace, + dataSource: item.dataSource, }); const values = await FormDialog( @@ -79,7 +79,7 @@ export const CalendarBlockInitializer = () => { insert( createCalendarBlockSchema({ collection: item.name, - namespace: item.namespace, + dataSource: item.dataSource, fieldNames: { ...values, }, diff --git a/packages/plugins/@nocobase/plugin-calendar/src/client/schema-initializer/utils.ts b/packages/plugins/@nocobase/plugin-calendar/src/client/schema-initializer/utils.ts index 4db3c4caa9..a5541fe03b 100644 --- a/packages/plugins/@nocobase/plugin-calendar/src/client/schema-initializer/utils.ts +++ b/packages/plugins/@nocobase/plugin-calendar/src/client/schema-initializer/utils.ts @@ -3,14 +3,14 @@ import { uid } from '@formily/shared'; import { generateNTemplate } from '../../locale'; export const createCalendarBlockSchema = (options) => { - const { collection, namespace, resource, fieldNames, ...others } = options; + const { collection, dataSource, resource, fieldNames, ...others } = options; const schema: ISchema = { type: 'void', 'x-acl-action': `${resource || collection}:list`, 'x-decorator': 'CalendarBlockProvider', 'x-decorator-props': { collection: collection, - namespace, + dataSource, resource: resource || collection, action: 'list', fieldNames: { diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/client/block/ChartBlockInitializer.tsx b/packages/plugins/@nocobase/plugin-data-visualization/src/client/block/ChartBlockInitializer.tsx index 098431d769..7683f13274 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/client/block/ChartBlockInitializer.tsx +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/client/block/ChartBlockInitializer.tsx @@ -36,7 +36,7 @@ const ChartInitializer = () => { schema: {}, field: null, collection: item.name, - namespace: item.namespace, + dataSource: item.dataSource, service: null, data: undefined, }); diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/client/configure/ChartConfigProvider.tsx b/packages/plugins/@nocobase/plugin-data-visualization/src/client/configure/ChartConfigProvider.tsx index 057c6ec33d..0202462e27 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/client/configure/ChartConfigProvider.tsx +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/client/configure/ChartConfigProvider.tsx @@ -10,7 +10,7 @@ export type ChartConfigCurrent = { schema: ISchema; field: any; collection: string; - namespace: string; + dataSource: string; service: any; initialValues?: any; data: any[]; diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/client/configure/ChartConfigure.tsx b/packages/plugins/@nocobase/plugin-data-visualization/src/client/configure/ChartConfigure.tsx index ea653590e3..ef5d620e4d 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/client/configure/ChartConfigure.tsx +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/client/configure/ChartConfigure.tsx @@ -320,7 +320,7 @@ ChartConfigure.Query = function Query() { schema, field, collection: value, - namespace: current.namespace, + dataSource: current.dataSource, service: current.service, initialValues: {}, data: undefined, diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/client/renderer/ChartRenderer.tsx b/packages/plugins/@nocobase/plugin-data-visualization/src/client/renderer/ChartRenderer.tsx index bf3bc96c3c..0cc4d1b2a2 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/client/renderer/ChartRenderer.tsx +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/client/renderer/ChartRenderer.tsx @@ -84,14 +84,14 @@ ChartRenderer.Designer = function Designer() { const field = useField(); const schema = useFieldSchema(); const { insertAdjacent } = useDesignable(); - const { name, title, namespace } = useCollection(); + const { name, title, dataSource } = useCollection(); return ( { - setCurrent({ schema, field, namespace, collection: name, service, data: service.data }); + setCurrent({ schema, field, dataSource, collection: name, service, data: service.data }); setVisible(true); }} > diff --git a/packages/plugins/@nocobase/plugin-gantt/src/client/GanttBlockInitializer.tsx b/packages/plugins/@nocobase/plugin-gantt/src/client/GanttBlockInitializer.tsx index b25753e9fb..16bba92140 100644 --- a/packages/plugins/@nocobase/plugin-gantt/src/client/GanttBlockInitializer.tsx +++ b/packages/plugins/@nocobase/plugin-gantt/src/client/GanttBlockInitializer.tsx @@ -30,7 +30,7 @@ export const GanttBlockInitializer = () => { componentType={'Gantt'} icon={} onCreateBlockSchema={async ({ item }) => { - const collectionFields = getCollectionFields(item.name, item.namespace); + const collectionFields = getCollectionFields(item.name, item.dataSource); const stringFields = collectionFields ?.filter((field) => field.type === 'string') ?.map((field) => { @@ -122,7 +122,7 @@ export const GanttBlockInitializer = () => { insert( createGanttBlockSchema({ collection: item.name, - namespace: item.namespace, + dataSource: item.dataSource, fieldNames: { ...values, }, diff --git a/packages/plugins/@nocobase/plugin-kanban/src/client/KanbanBlockInitializer.tsx b/packages/plugins/@nocobase/plugin-kanban/src/client/KanbanBlockInitializer.tsx index 2b8cc294d8..4e4d4db675 100644 --- a/packages/plugins/@nocobase/plugin-kanban/src/client/KanbanBlockInitializer.tsx +++ b/packages/plugins/@nocobase/plugin-kanban/src/client/KanbanBlockInitializer.tsx @@ -32,7 +32,7 @@ export const KanbanBlockInitializer = () => { componentType={'Kanban'} icon={} onCreateBlockSchema={async ({ item }) => { - const collectionFields = getCollectionFields(item.name, item.namespace); + const collectionFields = getCollectionFields(item.name, item.dataSource); const fields = collectionFields ?.filter((field) => ['select', 'radioGroup'].includes(field.interface)) ?.map((field) => { @@ -93,7 +93,7 @@ export const KanbanBlockInitializer = () => { createKanbanBlockSchema({ groupField: values.groupField.value, collection: item.name, - namespace: item.namespace, + dataSource: item.dataSource, params: { sort: [sortName], paginate: false, diff --git a/packages/plugins/@nocobase/plugin-kanban/src/client/KanbanBlockProvider.tsx b/packages/plugins/@nocobase/plugin-kanban/src/client/KanbanBlockProvider.tsx index 63a7d3dc0d..1470a41666 100644 --- a/packages/plugins/@nocobase/plugin-kanban/src/client/KanbanBlockProvider.tsx +++ b/packages/plugins/@nocobase/plugin-kanban/src/client/KanbanBlockProvider.tsx @@ -75,7 +75,7 @@ const recursiveProperties = (schema: Schema, component = 'CollectionField', asso }; const useAssociationNames = (collection) => { - const { getCollectionFields } = useCollectionManager(collection.namespace); + const { getCollectionFields } = useCollectionManager(collection.dataSource); const collectionFields = getCollectionFields(collection); const associationFields = new Set(); for (const collectionField of collectionFields) { diff --git a/packages/plugins/@nocobase/plugin-map/src/client/block/MapBlockInitializer.tsx b/packages/plugins/@nocobase/plugin-map/src/client/block/MapBlockInitializer.tsx index 5ceacbf8b5..0cfe5b512d 100644 --- a/packages/plugins/@nocobase/plugin-map/src/client/block/MapBlockInitializer.tsx +++ b/packages/plugins/@nocobase/plugin-map/src/client/block/MapBlockInitializer.tsx @@ -29,10 +29,10 @@ export const MapBlockInitializer = () => { onCreateBlockSchema={async ({ item }) => { const mapFieldOptions = getCollectionFieldsOptions(item.name, ['point', 'lineString', 'polygon'], { association: ['o2o', 'obo', 'oho', 'o2m', 'm2o', 'm2m'], - namespace: item.namespace, + dataSource: item.dataSource, }); const markerFieldOptions = getCollectionFieldsOptions(item.name, 'string', { - namespace: item.namespace, + dataSource: item.dataSource, }); const values = await FormDialog( t('Create map block'), @@ -86,7 +86,7 @@ export const MapBlockInitializer = () => { insert( createMapBlockSchema({ collection: item.name, - namespace: item.namespace, + dataSource: item.dataSource, fieldNames: { ...values, }, diff --git a/packages/plugins/@nocobase/plugin-snapshot-field/src/client/SnapshotBlock/SnapshotBlockProvider.tsx b/packages/plugins/@nocobase/plugin-snapshot-field/src/client/SnapshotBlock/SnapshotBlockProvider.tsx index bf33550992..ffa0ea531a 100644 --- a/packages/plugins/@nocobase/plugin-snapshot-field/src/client/SnapshotBlock/SnapshotBlockProvider.tsx +++ b/packages/plugins/@nocobase/plugin-snapshot-field/src/client/SnapshotBlock/SnapshotBlockProvider.tsx @@ -90,7 +90,7 @@ const BlockProvider = (props) => { export const SnapshotBlockProvider = (props) => { const record = useRecord(); const { __tableName } = record; - const { getInheritCollections } = useCollectionManager(props.namespace); + const { getInheritCollections } = useCollectionManager(props.dataSource); const inheritCollections = getInheritCollections(__tableName); const { designable } = useDesignable(); const flag = diff --git a/packages/plugins/@nocobase/plugin-workflow-manual/src/client/instruction/FormBlockInitializer.tsx b/packages/plugins/@nocobase/plugin-workflow-manual/src/client/instruction/FormBlockInitializer.tsx index b568eb1732..69c664454a 100644 --- a/packages/plugins/@nocobase/plugin-workflow-manual/src/client/instruction/FormBlockInitializer.tsx +++ b/packages/plugins/@nocobase/plugin-workflow-manual/src/client/instruction/FormBlockInitializer.tsx @@ -65,7 +65,7 @@ function InternalFormBlockInitializer({ schema, ...others }) { export function FormBlockInitializer() { const itemConfig = useSchemaInitializerItem(); return ( - + ); diff --git a/packages/plugins/@nocobase/plugin-workflow-manual/src/client/instruction/FormBlockProvider.tsx b/packages/plugins/@nocobase/plugin-workflow-manual/src/client/instruction/FormBlockProvider.tsx index 1153b62f8e..d6580f57f5 100644 --- a/packages/plugins/@nocobase/plugin-workflow-manual/src/client/instruction/FormBlockProvider.tsx +++ b/packages/plugins/@nocobase/plugin-workflow-manual/src/client/instruction/FormBlockProvider.tsx @@ -2,9 +2,9 @@ import { createForm } from '@formily/core'; import { RecursionField, useField, useFieldSchema } from '@formily/react'; import { BlockRequestContext, - CollectionNamespace, CollectionProvider, - DEFAULT_COLLECTION_NAMESPACE_NAME, + DEFAULT_DATA_SOURCE_NAME, + DataSourceName, FormActiveFieldsProvider, FormBlockContext, FormV2, @@ -21,9 +21,9 @@ export function FormBlockProvider(props) { const fieldSchema = useFieldSchema(); const field = useField(); const formBlockRef = useRef(null); - const namespace = props.namespace || DEFAULT_COLLECTION_NAMESPACE_NAME; + const dataSource = props.dataSource || DEFAULT_DATA_SOURCE_NAME; - const { getAssociationAppends } = useAssociationNames(namespace); + const { getAssociationAppends } = useAssociationNames(dataSource); const { appends, updateAssociationValues } = getAssociationAppends(); const [formKey] = Object.keys(fieldSchema.toJSON().properties ?? {}); const values = userJob?.result?.[formKey]; @@ -55,10 +55,10 @@ export function FormBlockProvider(props) { }, [values]); const api = useAPIClient(); const headers = useMemo(() => { - if (namespace && namespace !== DEFAULT_COLLECTION_NAMESPACE_NAME) { - return { 'x-connection': namespace }; + if (dataSource && dataSource !== DEFAULT_DATA_SOURCE_NAME) { + return { 'x-connection': dataSource }; } - }, [namespace]); + }, [dataSource]); const resource = api.resource(props.collection, undefined, headers); const __parent = useContext(BlockRequestContext); @@ -75,7 +75,7 @@ export function FormBlockProvider(props) { }, [field, form, params, service, updateAssociationValues]); return !userJob.status || values ? ( - + @@ -92,6 +92,6 @@ export function FormBlockProvider(props) { - + ) : null; } diff --git a/packages/plugins/@nocobase/plugin-workflow-manual/src/client/instruction/forms/create.tsx b/packages/plugins/@nocobase/plugin-workflow-manual/src/client/instruction/forms/create.tsx index cac689dc4b..eecf7fdbdb 100644 --- a/packages/plugins/@nocobase/plugin-workflow-manual/src/client/instruction/forms/create.tsx +++ b/packages/plugins/@nocobase/plugin-workflow-manual/src/client/instruction/forms/create.tsx @@ -43,10 +43,10 @@ export default { useInitializer({ allCollections }) { const childItems = useMemo( () => - allCollections.map(({ nsName, nsTitle, collections }) => ({ - key: nsName, - name: nsName, - label: nsTitle, + allCollections.map(({ dataSourceName, dataSourceDescription, collections }) => ({ + key: dataSourceName, + name: dataSourceName, + label: dataSourceDescription, type: 'subMenu', children: collections.map((item) => ({ name: _.camelCase(`createRecordForm-child-${item.name}`), @@ -54,7 +54,7 @@ export default { title: item.title || item.tableName, schema: { collection: item.name, - namespace: nsName, + dataSource: dataSourceName, title: `{{t("Create record", { ns: "${NAMESPACE}" })}}`, formType: 'create', 'x-designer': 'CreateFormDesigner', diff --git a/packages/plugins/@nocobase/plugin-workflow-manual/src/client/instruction/forms/update.tsx b/packages/plugins/@nocobase/plugin-workflow-manual/src/client/instruction/forms/update.tsx index bf6bdb96b9..fe3158ebcf 100644 --- a/packages/plugins/@nocobase/plugin-workflow-manual/src/client/instruction/forms/update.tsx +++ b/packages/plugins/@nocobase/plugin-workflow-manual/src/client/instruction/forms/update.tsx @@ -80,10 +80,10 @@ export default { useInitializer({ allCollections }) { const childItems = useMemo( () => - allCollections.map(({ nsName, nsTitle, collections }) => ({ - key: nsName, - name: nsName, - label: nsTitle, + allCollections.map(({ dataSourceName, dataSourceDescription, collections }) => ({ + key: dataSourceName, + name: dataSourceName, + label: dataSourceDescription, type: 'subMenu', children: collections.map((item) => ({ name: _.camelCase(`updateRecordForm-child-${item.name}`), @@ -91,7 +91,7 @@ export default { title: item.title || item.tableName, schema: { collection: item.name, - namespace: nsName, + dataSource: dataSourceName, title: `{{t("Update record", { ns: "${NAMESPACE}" })}}`, formType: 'update', 'x-designer': 'UpdateFormDesigner',