diff --git a/packages/plugins/@hera/plugin-core/src/client/hooks/useCustomizeUpdateActionProps.tsx b/packages/plugins/@hera/plugin-core/src/client/hooks/useCustomizeUpdateActionProps.tsx deleted file mode 100644 index 2ba11b097..000000000 --- a/packages/plugins/@hera/plugin-core/src/client/hooks/useCustomizeUpdateActionProps.tsx +++ /dev/null @@ -1,120 +0,0 @@ -import { useFieldSchema, useForm } from '@formily/react'; -import { - TableFieldResource, - __UNSAFE__, - isVariable, - transformVariableValue, - useBlockRequestContext, - useCollection_deprecated, - useCompile, - useFilterByTk, - useLocalVariables, - useVariables, -} from '@nocobase/client'; -import { useNavigate } from 'react-router-dom'; -import { App, Modal, message } from 'antd'; -import { isURL } from '@nocobase/utils/client'; - -import React from 'react'; -import { ExclamationCircleFilled } from '@ant-design/icons'; - -export const useCustomizeUpdateActionProps = () => { - const { resource, __parent, service } = useBlockRequestContext(); - const filterByTk = useFilterByTk(); - const actionSchema = useFieldSchema(); - const navigate = useNavigate(); - const compile = useCompile(); - const form = useForm(); - const { modal } = App.useApp(); - const variables = useVariables(); - const localVariables = useLocalVariables({ currentForm: form }); - const { name, getField } = useCollection_deprecated(); - const { confirm } = Modal; - return { - async onClick() { - const { - assignedValues: originalAssignedValues = {}, - onSuccess, - skipValidator, - sessionUpdate, - } = actionSchema?.['x-action-settings'] ?? {}; - if (sessionUpdate) { - confirm({ - title: '问询', - content: '确认要继续此操作?', - icon: , - onOk() { - sessionUpdatePopconfirm(); - }, - onCancel() { - message.warning('取消更新'); - }, - }); - } else { - sessionUpdatePopconfirm(); - } - - async function sessionUpdatePopconfirm() { - const assignedValues = {}; - const waitList = Object.keys(originalAssignedValues).map(async (key) => { - const value = originalAssignedValues[key]; - const collectionField = getField(key); - - if (process.env.NODE_ENV !== 'production') { - if (!collectionField) { - throw new Error(`useCustomizeUpdateActionProps: field "${key}" not found in collection "${name}"`); - } - } - - if (isVariable(value)) { - const result = await variables?.parseVariable(value, localVariables); - if (result) { - assignedValues[key] = transformVariableValue(result, { targetCollectionField: collectionField }); - } - } else if (value != null && value !== '') { - assignedValues[key] = value; - } - }); - await Promise.all(waitList); - - if (skipValidator === false) { - await form.submit(); - } - await resource.update({ - filterByTk, - values: { ...assignedValues }, - }); - service?.refresh?.(); - if (!(resource instanceof TableFieldResource)) { - __parent?.service?.refresh?.(); - } - if (!onSuccess?.successMessage) { - return; - } - if (onSuccess?.manualClose) { - modal.success({ - title: compile(onSuccess?.successMessage), - onOk: async () => { - if (onSuccess?.redirecting && onSuccess?.redirectTo) { - if (isURL(onSuccess.redirectTo)) { - window.location.href = onSuccess.redirectTo; - } else { - navigate(onSuccess.redirectTo); - } - } - }, - }); - } else { - message.success(compile(onSuccess?.successMessage)); - if (onSuccess?.redirecting && onSuccess?.redirectTo) { - if (isURL(onSuccess.redirectTo)) { - window.location.href = onSuccess.redirectTo; - } else { - navigate(onSuccess.redirectTo); - } - } - } - } - }, - }; -}; diff --git a/packages/plugins/@hera/plugin-core/src/client/index.tsx b/packages/plugins/@hera/plugin-core/src/client/index.tsx index dba968037..fdf8373e8 100644 --- a/packages/plugins/@hera/plugin-core/src/client/index.tsx +++ b/packages/plugins/@hera/plugin-core/src/client/index.tsx @@ -11,10 +11,9 @@ import { remove } from 'lodash'; import { useFieldSchema } from '@formily/react'; import { isValid } from '@formily/shared'; import { autorun } from '@formily/reactive'; -import { Locale, tval } from './locale'; +import { Locale, lang, tval } from './locale'; import { - SessionSubmit, - SessionUpdate, + PageModeSetting, EditFormulaTitleField, IsTablePageSize, useFormulaTitleVisible, @@ -27,13 +26,12 @@ import { EditDefaultValue, } from './schema-settings'; import { useCreateActionProps } from './schema-initializer/actions/hooks/useCreateActionProps'; -import { useCustomizeUpdateActionProps } from './hooks/useCustomizeUpdateActionProps'; import { useFilterBlockActionProps } from './hooks/useFilterBlockActionProps'; import { useFilterFormCustomProps } from './hooks/useFilterFormCustomProps'; import { useGetCustomAssociatedComponents } from './hooks/useGetCustomAssociatedComponents'; import { useGetCustomComponents } from './hooks/useGetCustomComponents'; import { AdminLayout, DetailsPage, HomePage, OutboundPage, PageLayout } from './pages'; -import { Configuration, HomePageConfiguration, LinkManager } from './settings-manager-components'; +import { PluginSettingsHelper } from './settings-manager-components'; import { AssociatedFieldInterface, CalcFieldInterface, @@ -63,9 +61,7 @@ import { Select, } from './schema-components'; import { - CalendarBlockInitializer, CreateSubmitActionInitializer, - FilterAssociatedFields, FilterFormItem, FilterFormItemCustom, FilterItemCustomDesigner, @@ -73,8 +69,6 @@ import { GroupBlockProvider, GroupBlockToolbar, OutboundActionHelper, - OutboundButton, - OutboundLinkActionInitializer, PDFViewerBlockInitializer, PDFViewerPrintActionInitializer, PDFViewerProvider, @@ -97,21 +91,6 @@ export class PluginCoreClient extends Plugin { locale: Locale; async registerSettings() { - this.app.pluginSettingsManager.add('home_page', { - title: this.locale.lang('HomePage Config'), - icon: 'HomeOutlined', - Component: HomePageConfiguration, - }); - this.app.pluginSettingsManager.add('token', { - title: '第三方接入配置', - icon: 'ShareAltOutlined', - Component: Configuration, - }); - this.app.pluginSettingsManager.add('linkmanage', { - title: '配置链接', - icon: 'ShareAltOutlined', - Component: LinkManager, - }); this.schemaSettingsManager.add(groupBlockSettings); this.schemaSettingsManager.add(sheetBlockSettings); this.schemaSettingsManager.add(customComponentDispatcherSettings); @@ -152,6 +131,13 @@ export class PluginCoreClient extends Plugin { }; }, }); + this.app.schemaSettingsManager.addItem('actionSettings:submit', '', { + Component: PageModeSetting, + useVisible() { + const fieldSchema = useFieldSchema(); + return isValid(fieldSchema?.['x-action-settings']?.sessionSubmit); + }, + }); const SchemaSettingOptionItems = this.schemaSettingsManager .get('ActionSettings') .items.filter((item) => item.name === 'Customize')[0].children; @@ -171,28 +157,9 @@ export class PluginCoreClient extends Plugin { this.app.schemaInitializerManager.get('popup:common:addBlock').add(previewBlockItem.name, previewBlockItem); } - async registerActions() { - const actionSettings = this.app.schemaSettingsManager.get('ActionSettings'); - actionSettings.add('sessionSubmit', { - Component: SessionSubmit, - useVisible() { - const fieldSchema = useFieldSchema(); - return isValid(fieldSchema?.['x-action-settings']?.sessionSubmit); - }, - }); - actionSettings.add('sessionUpdate', { - Component: SessionUpdate, - useVisible() { - const fieldSchema = useFieldSchema(); - return isValid(fieldSchema?.['x-action-settings']?.sessionUpdate); - }, - }); - } - async registerScopesAndComponents() { this.app.addScopes({ useCreateActionProps, - useCustomizeUpdateActionProps, useFilterBlockActionProps, useFilterFormCustomProps, useGetCustomAssociatedComponents, @@ -216,8 +183,6 @@ export class PluginCoreClient extends Plugin { EditTitle, EditTitleField, Expression, - ExtendedCalendarBlockInitializer: CalendarBlockInitializer, - FilterAssociatedFields, FilterFormItem, FilterFormItemCustom, FilterItemCustomDesigner, @@ -269,17 +234,6 @@ export class PluginCoreClient extends Plugin { } async registerSchemaInitializer() { - const associationFields = { - type: 'item', - name: 'associationFields', - title: '筛选区块添加一对一的引用', - Component: 'FilterAssociatedFields', - }; - const calendarBlockItem = { - name: 'calendarV2', - title: '{{t("Calendar")}}', - Component: 'ExtendedCalendarBlockInitializer', - }; const settingBlockItem = { name: 'setting', title: tval('System setting'), @@ -288,39 +242,36 @@ export class PluginCoreClient extends Plugin { const refreshActionItem = { type: 'item', name: 'refreshAction', - title: "{{t('Refresh')}}", + title: tval('Refresh'), Component: 'RefreshActionInitializer', schema: { 'x-align': 'right', }, }; const customItem = { - title: '自定义', + title: tval('Custom filter field'), name: 'custom', type: 'item', Component: 'FilterFormItemCustom', }; this.schemaInitializerManager.add(pdfViewActionInitializer); - this.app.schemaInitializerManager.get('BlockInitializers').add(calendarBlockItem.name, calendarBlockItem); - this.app.schemaInitializerManager.get('BlockInitializers').add(settingBlockItem.name, settingBlockItem); - this.app.schemaInitializerManager.get('BlockInitializers').add('dataBlocks.groupBlock', { - title: tval('Group block'), + this.app.schemaInitializerManager.addItem('page:addBlock', settingBlockItem.name, settingBlockItem); + this.app.schemaInitializerManager.addItem('page:addBlock', 'dataBlocks.groupBlock', { + title: tval('Group'), Component: 'GroupBlockInitializer', }); - this.app.schemaInitializerManager.get('BlockInitializers').add('dataBlocks.sheetBlock', { + this.app.schemaInitializerManager.addItem('page:addBlock', 'dataBlocks.sheetBlock', { title: tval('Sheet'), Component: 'SheetBlockInitializer', }); - this.app.schemaInitializerManager.get('KanbanActionInitializers').add(refreshActionItem.name, refreshActionItem); - this.app.schemaInitializerManager.get('FilterFormItemInitializers').add(associationFields.name, associationFields); - this.app.schemaInitializerManager.addItem('FilterFormItemInitializers', 'custom-item-divider', { + this.app.schemaInitializerManager.addItem('kanban:configureActions', refreshActionItem.name, refreshActionItem); + this.app.schemaInitializerManager.addItem('filterForm:configureFields', 'custom-item-divider', { type: 'divider', }); - this.app.schemaInitializerManager.addItem('FilterFormItemInitializers', customItem.name, customItem); - + this.app.schemaInitializerManager.addItem('filterForm:configureFields', customItem.name, customItem); const addCustomComponent = { name: 'addCustomComponent', - title: this.locale.lang('Add custom component'), + title: tval('Add custom component'), Component: 'BlockItemInitializer', schema: { type: 'void', @@ -333,12 +284,8 @@ export class PluginCoreClient extends Plugin { }, }, }; - this.app.schemaInitializerManager.addItem('FormItemInitializers', addCustomComponent.name, addCustomComponent); - this.app.schemaInitializerManager.addItem( - 'ReadPrettyFormItemInitializers', - addCustomComponent.name, - addCustomComponent, - ); + this.app.schemaInitializerManager.addItem('form:configureFields', addCustomComponent.name, addCustomComponent); + this.app.schemaInitializerManager.addItem('details:configureFields', addCustomComponent.name, addCustomComponent); } async registerInterfaces() { @@ -365,10 +312,10 @@ export class PluginCoreClient extends Plugin { async load() { this.locale = new Locale(this.app); await new OutboundActionHelper(this.app).load(); + await new PluginSettingsHelper(this.app).load(); await this.registerTricks(); await this.registerScopesAndComponents(); await this.registerSettings(); - await this.registerActions(); await this.registerRouters(); await this.registerInterfaces(); diff --git a/packages/plugins/@hera/plugin-core/src/client/schema-initializer/FilterAssociatedFields.tsx b/packages/plugins/@hera/plugin-core/src/client/schema-initializer/FilterAssociatedFields.tsx deleted file mode 100644 index 569fabd22..000000000 --- a/packages/plugins/@hera/plugin-core/src/client/schema-initializer/FilterAssociatedFields.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { SchemaInitializerChildren } from '@nocobase/client'; -import { useFilterAssociatedFormItemInitializerFields } from './utils'; -import { useTranslation } from 'react-i18next'; -import React from 'react'; -export const FilterAssociatedFields = () => { - const associationFields = useFilterAssociatedFormItemInitializerFields(); - const { t } = useTranslation(); - const res: any[] = [ - { - type: 'itemGroup', - title: t('Display association fields'), - children: associationFields, - }, - ]; - return {res}; -}; diff --git a/packages/plugins/@hera/plugin-core/src/client/schema-initializer/blocks/CalendarBlockInitializer.tsx b/packages/plugins/@hera/plugin-core/src/client/schema-initializer/blocks/CalendarBlockInitializer.tsx deleted file mode 100644 index 384b0edd4..000000000 --- a/packages/plugins/@hera/plugin-core/src/client/schema-initializer/blocks/CalendarBlockInitializer.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import { FormOutlined } from '@ant-design/icons'; -import { FormLayout } from '@formily/antd-v5'; -import { SchemaOptionsContext } from '@formily/react'; -import { - DataBlockInitializer, - FormDialog, - SchemaComponent, - SchemaComponentOptions, - useCollectionManager_deprecated, - useGlobalTheme, - useSchemaInitializer, - useSchemaInitializerItem, -} from '@nocobase/client'; -import React, { useContext } from 'react'; -import { useTranslation } from 'react-i18next'; -import { createCalendarBlockSchema } from '../utils'; - -export const CalendarBlockInitializer = () => { - const { insert } = useSchemaInitializer(); - const { t } = useTranslation(); - const { getCollectionField, getCollectionFieldsOptions } = useCollectionManager_deprecated(); - const options = useContext(SchemaOptionsContext); - const { theme } = useGlobalTheme(); - const itemConfig = useSchemaInitializerItem(); - - return ( - } - onCreateBlockSchema={async ({ item }) => { - const stringFieldsOptions = getCollectionFieldsOptions(item.name, 'string'); - const dateFieldsOptions = getCollectionFieldsOptions(item.name, 'date', { - association: ['o2o', 'obo', 'oho', 'm2o'], - }); - - const values = await FormDialog( - t('Create calendar block'), - () => { - return ( - - - - - - ); - }, - theme, - ).open({ - initialValues: {}, - }); - insert( - createCalendarBlockSchema({ - collection: item.name, - fieldNames: { - ...values, - }, - }), - ); - }} - /> - ); -}; diff --git a/packages/plugins/@hera/plugin-core/src/client/schema-initializer/index.ts b/packages/plugins/@hera/plugin-core/src/client/schema-initializer/index.ts index 12ee3def2..acdb18600 100644 --- a/packages/plugins/@hera/plugin-core/src/client/schema-initializer/index.ts +++ b/packages/plugins/@hera/plugin-core/src/client/schema-initializer/index.ts @@ -1,8 +1,6 @@ export * from './FilterFormItemCustomInitializer/FilterFormItemCustom'; -export * from './blocks/CalendarBlockInitializer'; export * from './blocks/PDFVIewerBlockInitializer'; export * from './actions/OutboundLinkActionInitializer'; export * from './actions/CreateSubmitActionInitializer'; -export * from './FilterAssociatedFields'; export * from './blocks/SettingBlockInitializer'; export * from './blocks/GroupBlockInitializer'; diff --git a/packages/plugins/@hera/plugin-core/src/client/schema-initializer/utils.tsx b/packages/plugins/@hera/plugin-core/src/client/schema-initializer/utils.tsx deleted file mode 100644 index 2cea051c1..000000000 --- a/packages/plugins/@hera/plugin-core/src/client/schema-initializer/utils.tsx +++ /dev/null @@ -1,295 +0,0 @@ -import { ISchema, Schema } from '@formily/react'; -import { uid } from '@formily/shared'; -import { - FieldOptions, - isAssocField, - useCollection_deprecated, - useCollectionManager_deprecated, - __UNSAFE__, - SchemaInitializerItemType, -} from '@nocobase/client'; -import _ from 'lodash'; -const { removeGridFormItem } = __UNSAFE__; - -// 筛选表单相关 -export const useFilterAssociatedFormItemInitializerFields = () => { - const { name, fields } = useCollection_deprecated(); - const { getCollectionFields } = useCollectionManager_deprecated(); - const interfaces = ['m2o', 'obo']; - const groups = fields - ?.filter((field) => { - return interfaces.includes(field.interface); - }) - ?.map((field) => getItem(field, field.name, name, getCollectionFields, [])); - return groups; -}; - -const getItem = ( - field: FieldOptions, - schemaName: string, - collectionName: string, - getCollectionFields, - processedCollections: string[], -) => { - if (field.interface === 'm2o' || field.interface === 'obo') { - if (processedCollections.includes(field.target)) return null; - - const subFields = getCollectionFields(field.target); - - const extendedChildren = []; - const children = subFields - .map((subField) => - // 使用 | 分隔,是为了防止 form.values 中出现 { a: { b: 1 } } 的情况 - // 使用 | 分隔后,form.values 中会出现 { 'a|b': 1 } 的情况,这种情况下 - // 就可以知道该字段是一个关系字段中的输入框,进而特殊处理 - { - if (isAssocField(subField)) { - const subFieldSchema = { - type: 'string', - name: `${schemaName}.${subField.name}`, - required: false, - 'x-designer': 'FormItem.FilterFormDesigner', - 'x-component': 'CollectionField', - 'x-decorator': 'FormItem', - 'x-collection-field': `${collectionName}.${schemaName}.${subField.name}`, - 'x-component-props': subField.uiSchema?.['x-component-props'], - }; - const subFieldItem = { - name: subField.uiSchema?.title || subField.name, - type: 'item', - title: subField.uiSchema?.title || subField.name, - Component: 'CollectionFieldInitializer', - remove: removeGridFormItem, - schema: subFieldSchema, - } as SchemaInitializerItemType; - extendedChildren.push(subFieldItem); - } - return getItem(subField, `${schemaName}.${subField.name}`, collectionName, getCollectionFields, [ - ...processedCollections, - field.target, - ]); - }, - ) - .filter(Boolean); - - return { - type: 'subMenu', - title: field.uiSchema?.title, - children: _.unionBy([...extendedChildren, ...children], 'title'), - } as SchemaInitializerItemType; - } - - if (isAssocField(field)) return null; - - const schema = { - type: 'string', - name: schemaName, - 'x-designer': 'FormItem.FilterFormDesigner', - 'x-designer-props': { - // 在 useOperatorList 中使用,用于获取对应的操作符列表 - interface: field.interface, - }, - 'x-component': 'CollectionField', - 'x-read-pretty': false, - 'x-decorator': 'FormItem', - 'x-collection-field': `${collectionName}.${schemaName}`, - }; - - return { - name: field.uiSchema?.title || field.name, - type: 'item', - title: field.uiSchema?.title || field.name, - Component: 'CollectionFieldInitializer', - remove: removeGridFormItem, - schema, - } as SchemaInitializerItemType; -}; - -export const createCalendarBlockSchema = (options) => { - const { collection, resource, fieldNames, ...others } = options; - const schema: ISchema = { - type: 'void', - 'x-acl-action': `${resource || collection}:list`, - 'x-decorator': 'CalendarBlockProvider', - 'x-decorator-props': { - collection: collection, - resource: resource || collection, - action: 'list', - fieldNames: { - id: 'id', - ...fieldNames, - }, - params: { - paginate: false, - }, - ...others, - }, - 'x-designer': 'CalendarV2.Designer', - 'x-component': 'CardItem', - properties: { - [uid()]: { - type: 'void', - 'x-component': 'CalendarV2', - 'x-component-props': { - useProps: '{{ useCalendarBlockProps }}', - }, - properties: { - toolBar: { - type: 'void', - 'x-component': 'CalendarV2.ActionBar', - 'x-component-props': { - style: { - marginBottom: 24, - }, - }, - 'x-initializer': 'CalendarActionInitializers', - properties: {}, - }, - event: { - type: 'void', - 'x-component': 'CalendarV2.Event', - properties: { - drawer: { - type: 'void', - 'x-component': 'Action.Drawer', - 'x-component-props': { - className: 'nb-action-popup', - }, - title: '{{ t("View record") }}', - properties: { - tabs: { - type: 'void', - 'x-component': 'Tabs', - 'x-component-props': {}, - 'x-initializer': 'TabPaneInitializers', - 'x-initializer-props': { - gridInitializer: 'RecordBlockInitializers', - }, - properties: { - tab1: { - type: 'void', - title: '{{t("Details")}}', - 'x-component': 'Tabs.TabPane', - 'x-designer': 'Tabs.Designer', - 'x-component-props': {}, - properties: { - grid: { - type: 'void', - 'x-component': 'Grid', - 'x-initializer-props': { - actionInitializers: 'CalendarFormActionInitializers', - }, - 'x-initializer': 'RecordBlockInitializers', - properties: {}, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }; - Object.values(fieldNames).forEach((fieldName) => { - if (Array.isArray(fieldName)) { - schema.properties[fieldName[0]] = { - 'x-collection-field': collection + '.' + fieldName[0], - }; - } else if (typeof fieldName === 'string') { - schema.properties[fieldName] = { - 'x-collection-field': collection + '.' + fieldName, - }; - } - }); - return schema; -}; - -const findSchema = (schema: Schema, key: string, action: string) => { - if (!Schema.isSchemaInstance(schema)) return null; - return schema.reduceProperties((buf, s) => { - if (s[key] === action) { - return s; - } - if (s['x-component'] !== 'Action.Container') { - const c = findSchema(s, key, action); - if (c) { - return c; - } - } - - return buf; - }); -}; - -export const createFormBlockSchema = (options) => { - const { - formItemInitializers = 'FormItemInitializers', - actionInitializers = 'FormActionInitializers', - collection, - resource, - association, - action, - actions = {}, - 'x-designer': designer = 'FormV2.Designer', - template, - title, - ...others - } = options; - - const resourceName = resource || association || collection; - const schema: ISchema = { - type: 'void', - 'x-acl-action-props': { - skipScopeCheck: !action, - }, - 'x-acl-action': action ? `${resourceName}:update` : `${resourceName}:create`, - 'x-decorator': 'FormBlockProvider', - 'x-decorator-props': { - ...others, - action, - resource: resourceName, - collection, - association, - // action: 'get', - // useParams: '{{ useParamsFromRecord }}', - }, - 'x-designer': designer, - 'x-component': 'CardItem', - 'x-component-props': { - title, - }, - properties: { - [uid()]: { - type: 'void', - 'x-component': 'FormV2', - 'x-component-props': { - useProps: '{{ useFormBlockProps }}', - }, - properties: { - actions: { - type: 'void', - 'x-initializer': actionInitializers, - 'x-component': 'ActionBar', - 'x-component-props': { - style: { - marginBottom: 'var(--nb-spacing)', - }, - }, - properties: actions, - }, - grid: template || { - type: 'void', - 'x-component': 'Grid', - 'x-initializer': formItemInitializers, - properties: {}, - }, - }, - }, - }, - }; - return schema; -}; diff --git a/packages/plugins/@hera/plugin-core/src/client/schema-settings/index.tsx b/packages/plugins/@hera/plugin-core/src/client/schema-settings/index.tsx index 84d50bc35..12c9c4eb7 100644 --- a/packages/plugins/@hera/plugin-core/src/client/schema-settings/index.tsx +++ b/packages/plugins/@hera/plugin-core/src/client/schema-settings/index.tsx @@ -552,7 +552,7 @@ export function AfterSuccess() { } // 添加跳转页面选项 -export const SessionSubmit = () => { +export const PageModeSetting = () => { const { dn } = useDesignable(); const { t } = useTranslation(); const fieldSchema = useFieldSchema(); @@ -575,29 +575,6 @@ export const SessionSubmit = () => { ); }; -export function SessionUpdate() { - const { dn } = useDesignable(); - const { t } = useTranslation(); - const fieldSchema = useFieldSchema(); - return ( - { - fieldSchema['x-action-settings'].sessionUpdate = value; - dn.emit('patch', { - schema: { - ['x-uid']: fieldSchema['x-uid'], - 'x-action-settings': { - ...fieldSchema['x-action-settings'], - }, - }, - }); - }} - /> - ); -} - export const SchemaSettingComponent = () => { const fieldSchema = useFieldSchema(); const field = useField(); diff --git a/packages/plugins/@hera/plugin-core/src/client/settings-manager-components/index.ts b/packages/plugins/@hera/plugin-core/src/client/settings-manager-components/index.ts index 9f6162f1a..ccd3c1270 100644 --- a/packages/plugins/@hera/plugin-core/src/client/settings-manager-components/index.ts +++ b/packages/plugins/@hera/plugin-core/src/client/settings-manager-components/index.ts @@ -1,3 +1,30 @@ +import { Application } from '@nocobase/client'; +import { lang } from '../locale'; +import { Configuration } from './TokenConfiguration'; +import { HomePageConfiguration } from './HomePageConfiguration'; +import { LinkManager } from './LinkManager'; + export * from './HomePageConfiguration'; export * from './LinkManager'; export * from './TokenConfiguration'; + +export class PluginSettingsHelper { + constructor(private app: Application) {} + async load() { + this.app.pluginSettingsManager.add('home_page', { + title: lang('HomePage Config'), + icon: 'HomeOutlined', + Component: HomePageConfiguration, + }); + this.app.pluginSettingsManager.add('token', { + title: lang('Third-party integration configuration'), + icon: 'ShareAltOutlined', + Component: Configuration, + }); + this.app.pluginSettingsManager.add('linkmanage', { + title: lang('Link manager'), + icon: 'ShareAltOutlined', + Component: LinkManager, + }); + } +}