/** * This file is part of the NocoBase (R) project. * Copyright (c) 2020-2024 NocoBase Co., Ltd. * Authors: NocoBase Team. * * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License. * For more information, please refer to: https://www.nocobase.com/agreement. */ import { Application, Plugin, type CollectionTemplateField } from '@nocobase/client-v2'; import React, { ComponentType } from 'react'; import { FieldInterfaceConfigureOptions } from './field-interfaces'; import { DataSourcePermissionTabRegistry, type DataSourcePermissionTabOptionResolver, type DataSourcePermissionTabProps } from './registries'; export interface DataSourceSettingsFormProps { mode: 'create' | 'edit'; type: DataSourceTypeOptions; initialValues?: Record; loadCollections: (key: string) => Promise; } export interface DataSourceCollectionActionProps { dataSourceKey: string; record?: Record; selectedRowKeys?: React.Key[]; onSubmitted?: () => void; children?: React.ReactNode; isBulk?: boolean; } export interface DataSourceFieldInterfaceFilterOptions { groups?: string[]; include?: string[]; exclude?: string[]; } export interface DataSourceFieldInterfaceReadOnlyContext { collection: Record; field: Record; fieldInterface?: { name?: string; group?: string; isAssociation?: boolean; }; } export interface DataSourceTypeOptions { name?: string; label?: React.ReactNode; defaultValues?: Record; createFieldInterfaces?: DataSourceFieldInterfaceFilterOptions | ((context: { collection: Record; }) => DataSourceFieldInterfaceFilterOptions | undefined); disableAddFields?: boolean; disableConfigureFields?: boolean; disableTestConnection?: boolean; capabilities?: { query?: boolean; runSQL?: boolean; }; AddCollection?: ComponentType; EditCollection?: ComponentType; DeleteCollection?: ComponentType; allowCollectionCreate?: boolean; allowCollectionDeletion?: boolean; isFieldInterfaceReadOnly?: (context: DataSourceFieldInterfaceReadOnlyContext) => boolean | undefined; normalizeValues?: (values: Record) => Record; SettingsForm?: ComponentType; } export interface CollectionPresetFieldOptions { name?: string; order?: number; field?: React.ReactNode; interfaceLabel?: React.ReactNode; description?: React.ReactNode; defaultSelected?: boolean; value: CollectionTemplateField & { name: string; interface?: string; primaryKey?: boolean; uiSchema?: Record; [key: string]: any; }; } export interface CollectionTemplateFormProps { mode: 'create' | 'edit'; template: CollectionTemplateOptions; form: any; } export interface CollectionTemplateConfigureItemProps extends CollectionTemplateFormProps { item: CollectionTemplateConfigureItem; } export interface CollectionTemplateSyncFieldsProps { collection: Record; dataSourceKey: string; onSubmitted: () => void; } export interface CollectionTemplateSyncFieldsOptions { Component?: ComponentType; visible?: boolean | ((props: { collection: Record; dataSourceKey: string; }) => boolean); } export interface CollectionTemplateConfigureItem { name?: string; label?: React.ReactNode; component?: 'Input' | 'Input.TextArea' | 'Select' | 'Checkbox'; options?: Array<{ label: React.ReactNode; value: string | number | boolean; }>; Component?: ComponentType; componentProps?: Record; required?: boolean; hidden?: boolean | ((props: CollectionTemplateFormProps) => boolean); } export interface CollectionTemplateOptions { name?: string; title: React.ReactNode; description?: React.ReactNode; order?: number; color?: string; divider?: boolean; collection?: { options?: Record | (() => Record); fields?: CollectionTemplateField[] | (() => CollectionTemplateField[]); }; capabilities?: { inherits?: boolean; recordUniqueKey?: boolean; simplePaginate?: boolean; }; configure?: { items?: CollectionTemplateConfigureItem[]; Form?: ComponentType; syncFields?: CollectionTemplateSyncFieldsOptions; transformSubmitValues?: (values: Record) => Record | void; }; fieldInterfaces?: { include?: Array; }>; exclude?: string[]; create?: { include?: Array; }>; exclude?: string[]; }; }; /** * @deprecated Use fieldInterfaces instead. */ availableFieldInterfaces?: { include?: Array; }>; exclude?: string[]; create?: { include?: Array; }>; exclude?: string[]; }; }; presetFields?: { disabled?: boolean; disabledIncludes?: string[]; }; actions?: unknown[]; /** * @deprecated Use collection.options instead. */ defaultValues?: Record | (() => Record); /** * @deprecated Use presetFields.disabled instead. */ presetFieldsDisabled?: boolean; /** * @deprecated Use presetFields.disabledIncludes instead. */ presetFieldsDisabledIncludes?: string[]; /** * @deprecated Use configure.Form instead. */ ConfigureForm?: ComponentType; /** * @deprecated Use configure.transformSubmitValues instead. */ beforeSubmit?: (values: Record) => void; } declare class CollectionTemplateRegistry { protected templates: Map; register(nameOrOptions: string | CollectionTemplateOptions, options?: CollectionTemplateOptions): void; get(name?: string): CollectionTemplateOptions; getAll(): CollectionTemplateOptions[]; } declare class CollectionPresetFieldRegistry { protected fields: Map; register(options: CollectionPresetFieldOptions): void; remove(name: string): void; getAll(): CollectionPresetFieldOptions[]; } declare class ExtensionManager { protected managerActions: Array<{ order: number; component: ComponentType; }>; registerManagerAction({ order, component }: { order?: number; component: ComponentType; }): void; getManagerActions(): { order: number; component: React.ComponentType; }[]; } export declare class PluginDataSourceManagerClientV2 extends Plugin { types: Map; extensionManager: ExtensionManager; collectionTemplateRegistry: CollectionTemplateRegistry; collectionPresetFieldRegistry: CollectionPresetFieldRegistry; permissionTabRegistry: DataSourcePermissionTabRegistry; load(): Promise; registerType(name: string, options: DataSourceTypeOptions): void; getType(name?: string): DataSourceTypeOptions; registerFieldInterfaceConfigure(options: FieldInterfaceConfigureOptions): void; registerCollectionTemplate(nameOrOptions: string | CollectionTemplateOptions, options?: CollectionTemplateOptions): void; registerCollectionPresetField(options: CollectionPresetFieldOptions): void; registerPermissionTab(options: DataSourcePermissionTabOptionResolver): void; getPermissionTabs(props: DataSourcePermissionTabProps): import("./registries").DataSourcePermissionTabOptions[]; addCollectionPresetField(options: CollectionPresetFieldOptions): void; removeCollectionPresetField(name: string): void; getCollectionPresetFields(): CollectionPresetFieldOptions[]; getCollectionTemplate(name?: string): CollectionTemplateOptions; getCollectionTemplates(): CollectionTemplateOptions[]; private registerBuiltInCollectionPresetFields; private registerBuiltInCollectionTemplates; } export default PluginDataSourceManagerClientV2;