diff --git a/packages/core/client/src/schema-component/antd/action/Action.Designer.tsx b/packages/core/client/src/schema-component/antd/action/Action.Designer.tsx index 88d11731b3..bff60c09e6 100644 --- a/packages/core/client/src/schema-component/antd/action/Action.Designer.tsx +++ b/packages/core/client/src/schema-component/antd/action/Action.Designer.tsx @@ -745,6 +745,10 @@ export function SecondConFirm() { /> ); } + +/** + * @deprecated + */ export const actionSettings = new SchemaSettings({ name: 'ActionSettings', items: actionSettingsItems, diff --git a/packages/core/client/src/schema-component/antd/form-item/FormItem.Settings.tsx b/packages/core/client/src/schema-component/antd/form-item/FormItem.Settings.tsx index 77849fa3a6..b103aa4c04 100644 --- a/packages/core/client/src/schema-component/antd/form-item/FormItem.Settings.tsx +++ b/packages/core/client/src/schema-component/antd/form-item/FormItem.Settings.tsx @@ -32,6 +32,9 @@ import { getTempFieldState } from '../form-v2/utils'; import { useColorFields } from '../table-v2/Table.Column.Designer'; import { useColumnSchema } from '../../../schema-component/antd/table-v2/Table.Column.Decorator'; +/** + * @deprecated + */ export const formItemSettings = new SchemaSettings({ name: 'FormItemSettings', items: [ diff --git a/packages/core/client/src/schema-component/antd/form-v2/Form.Settings.tsx b/packages/core/client/src/schema-component/antd/form-v2/Form.Settings.tsx index f163e09e87..463fcf5aad 100644 --- a/packages/core/client/src/schema-component/antd/form-v2/Form.Settings.tsx +++ b/packages/core/client/src/schema-component/antd/form-v2/Form.Settings.tsx @@ -17,6 +17,9 @@ import { SchemaSettingsDataScope } from '../../../schema-settings/SchemaSettings import { useDesignable } from '../../hooks'; import { removeNullCondition } from '../filter'; +/** + * @deprecated + */ export const formSettings = new SchemaSettings({ name: 'FormSettings', items: [ @@ -83,6 +86,9 @@ export const formSettings = new SchemaSettings({ ], }); +/** + * @deprecated + */ export const readPrettyFormSettings = new SchemaSettings({ name: 'ReadPrettyFormSettings', items: [ @@ -122,6 +128,9 @@ export const readPrettyFormSettings = new SchemaSettings({ ], }); +/** + * @deprecated + */ export const formDetailsSettings = new SchemaSettings({ name: 'FormDetailsSettings', items: [ diff --git a/packages/core/client/src/schema-component/antd/form/Form.Settings.tsx b/packages/core/client/src/schema-component/antd/form/Form.Settings.tsx index 54b711f5a8..de11dd456f 100644 --- a/packages/core/client/src/schema-component/antd/form/Form.Settings.tsx +++ b/packages/core/client/src/schema-component/antd/form/Form.Settings.tsx @@ -2,6 +2,9 @@ import { SchemaSettings } from '../../../application/schema-settings'; import { useCollection_deprecated } from '../../../collection-manager'; import { SchemaSettingsTemplate } from '../../../schema-settings/SchemaSettings'; +/** + * @deprecated + */ export const formV1Settings = new SchemaSettings({ name: 'FormV1Settings', items: [ diff --git a/packages/core/client/src/schema-component/antd/page/Page.Settings.tsx b/packages/core/client/src/schema-component/antd/page/Page.Settings.tsx index 5fdc6c610c..4d9576cf97 100644 --- a/packages/core/client/src/schema-component/antd/page/Page.Settings.tsx +++ b/packages/core/client/src/schema-component/antd/page/Page.Settings.tsx @@ -9,6 +9,9 @@ function useNotDisableHeader() { return !fieldSchema['x-component-props']?.disablePageHeader; } +/** + * @deprecated + */ export const pageSettings = new SchemaSettings({ name: 'PageSettings', items: [ diff --git a/packages/core/client/src/schema-component/antd/page/PageTab.Settings.tsx b/packages/core/client/src/schema-component/antd/page/PageTab.Settings.tsx index 029fb46874..8c5ae397cc 100644 --- a/packages/core/client/src/schema-component/antd/page/PageTab.Settings.tsx +++ b/packages/core/client/src/schema-component/antd/page/PageTab.Settings.tsx @@ -5,6 +5,9 @@ import { useDesignable } from '../../hooks'; import { useSchemaToolbar } from '../../../application/schema-toolbar'; import { SchemaSettings } from '../../../application/schema-settings/SchemaSettings'; +/** + * @deprecated + */ export const pageTabSettings = new SchemaSettings({ name: 'PageTabSettings', items: [ diff --git a/packages/plugins/@nocobase/plugin-iframe-block/src/client/index.ts b/packages/plugins/@nocobase/plugin-iframe-block/src/client/index.ts index c19b0ab02c..fc575e195b 100644 --- a/packages/plugins/@nocobase/plugin-iframe-block/src/client/index.ts +++ b/packages/plugins/@nocobase/plugin-iframe-block/src/client/index.ts @@ -1,9 +1,10 @@ import { Plugin } from '@nocobase/client'; import { IframeBlockProvider } from './IframeBlockProvider'; -import { iframeBlockSchemaSettings } from './schemaSettings'; +import { iframeBlockSchemaSettings, iframeBlockSchemaSettings_deprecated } from './schemaSettings'; export class IframeBlockPlugin extends Plugin { async load() { + this.app.schemaSettingsManager.add(iframeBlockSchemaSettings_deprecated); this.app.schemaSettingsManager.add(iframeBlockSchemaSettings); this.app.use(IframeBlockProvider); const blockInitializers = this.app.schemaInitializerManager.get('BlockInitializers'); diff --git a/packages/plugins/@nocobase/plugin-iframe-block/src/client/schemaSettings.ts b/packages/plugins/@nocobase/plugin-iframe-block/src/client/schemaSettings.ts index d4141a7c94..771a14d6e7 100644 --- a/packages/plugins/@nocobase/plugin-iframe-block/src/client/schemaSettings.ts +++ b/packages/plugins/@nocobase/plugin-iframe-block/src/client/schemaSettings.ts @@ -3,7 +3,10 @@ import { uid } from '@formily/shared'; import { SchemaSettings, useAPIClient, useDesignable } from '@nocobase/client'; import { useTranslation } from 'react-i18next'; -export const iframeBlockSchemaSettings = new SchemaSettings({ +/** + * @deprecated + */ +export const iframeBlockSchemaSettings_deprecated = new SchemaSettings({ name: 'iframeBlockSchemaSettings', items: [ { @@ -143,3 +146,144 @@ export const iframeBlockSchemaSettings = new SchemaSettings({ }, ], }); + +export const iframeBlockSchemaSettings = new SchemaSettings({ + name: 'blockSettings:iframe', + items: [ + { + name: 'EditIframe', + type: 'modal', + useComponentProps() { + const field = useField(); + const fieldSchema = useFieldSchema(); + const { t } = useTranslation(); + const { dn } = useDesignable(); + const api = useAPIClient(); + const { mode, url, htmlId, height = '60vh' } = fieldSchema['x-component-props'] || {}; + + const saveHtml = async (html: string) => { + const options = { + values: { html }, + }; + if (htmlId) { + // eslint-disable-next-line no-unsafe-optional-chaining + const { data } = await api.resource('iframeHtml').update?.({ ...options, filterByTk: htmlId }); + return data?.data?.[0] || { id: htmlId }; + } else { + // eslint-disable-next-line no-unsafe-optional-chaining + const { data } = await api.resource('iframeHtml').create?.(options); + return data?.data; + } + }; + + const submitHandler = async ({ mode, url, html, height }) => { + const componentProps = fieldSchema['x-component-props'] || {}; + componentProps['mode'] = mode; + componentProps['height'] = height; + componentProps['url'] = url; + if (mode === 'html') { + const data = await saveHtml(html); + componentProps['htmlId'] = data.id; + } + fieldSchema['x-component-props'] = componentProps; + field.componentProps = { ...componentProps }; + field.data = { v: uid() }; + dn.emit('patch', { + schema: { + 'x-uid': fieldSchema['x-uid'], + 'x-component-props': componentProps, + }, + }); + }; + + return { + title: t('Edit iframe'), + asyncGetInitialValues: async () => { + const values = { + mode, + url, + height, + }; + if (htmlId) { + // eslint-disable-next-line no-unsafe-optional-chaining + const { data } = await api.resource('iframeHtml').get?.({ filterByTk: htmlId }); + values['html'] = data?.data?.html || ''; + } + return values; + }, + schema: { + type: 'object', + title: t('Edit iframe'), + properties: { + mode: { + title: '{{t("Mode")}}', + 'x-component': 'Radio.Group', + 'x-decorator': 'FormItem', + required: true, + default: 'url', + enum: [ + { value: 'url', label: t('URL') }, + { value: 'html', label: t('html') }, + ], + }, + url: { + title: t('URL'), + type: 'string', + 'x-decorator': 'FormItem', + 'x-component': 'Input', + required: true, + 'x-reactions': { + dependencies: ['mode'], + fulfill: { + state: { + hidden: '{{$deps[0] === "html"}}', + }, + }, + }, + }, + html: { + title: t('html'), + type: 'string', + 'x-decorator': 'FormItem', + 'x-component': 'Input.TextArea', + required: true, + 'x-reactions': { + dependencies: ['mode'], + fulfill: { + state: { + hidden: '{{$deps[0] === "url"}}', + }, + }, + }, + }, + height: { + title: t('Height'), + type: 'string', + 'x-decorator': 'FormItem', + 'x-component': 'Input', + required: true, + }, + }, + } as ISchema, + onSubmit: submitHandler, + }; + }, + }, + { + name: 'divider', + type: 'divider', + }, + { + name: 'delete', + type: 'remove', + useComponentProps() { + return { + removeParentsIfNoChildren: true, + breakRemoveOn: { + 'x-component': 'Grid', + }, + }; + }, + }, + ], +});