From 2fcd584846330a6058368d1b53d9fd8ad84341da Mon Sep 17 00:00:00 2001 From: Katherine Date: Mon, 2 Dec 2024 12:38:23 +0800 Subject: [PATCH] feat: support attachment file fields in public forms (#5749) * feat: support attachment file fields in public forms * fix: bug --- .../antd/association-field/FileManager.tsx | 9 +++++++-- .../@nocobase/plugin-public-forms/src/server/plugin.ts | 8 +++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/core/client/src/schema-component/antd/association-field/FileManager.tsx b/packages/core/client/src/schema-component/antd/association-field/FileManager.tsx index 75b8494cd9..73c9d3dc4c 100644 --- a/packages/core/client/src/schema-component/antd/association-field/FileManager.tsx +++ b/packages/core/client/src/schema-component/antd/association-field/FileManager.tsx @@ -20,7 +20,7 @@ import { SchemaComponentOptions, Uploader, useActionContext, - useSchemaOptionsContext, + useDesignable, } from '../..'; import { TableSelectorParamsProvider, @@ -157,6 +157,7 @@ const InternalFileManager = (props) => { const [selectedRows, setSelectedRows] = useState([]); const insertSelector = useInsertSchema('Selector'); const fieldNames = useFieldNames(props); + const { designable } = useDesignable(); const field: any = useField(); const [options, setOptions] = useState([]); const { getField } = useCollection_deprecated(); @@ -167,7 +168,11 @@ const InternalFileManager = (props) => { const handleSelect = (ev) => { ev.stopPropagation(); ev.preventDefault(); - insertSelector(schema.Selector); + if (designable) { + insertSelector(schema.Selector); + } else { + fieldSchema.addProperty('selector', schema.Selector); + } setVisibleSelector(true); setSelectedRows([]); }; diff --git a/packages/plugins/@nocobase/plugin-public-forms/src/server/plugin.ts b/packages/plugins/@nocobase/plugin-public-forms/src/server/plugin.ts index 243e9669dd..221eb00506 100644 --- a/packages/plugins/@nocobase/plugin-public-forms/src/server/plugin.ts +++ b/packages/plugins/@nocobase/plugin-public-forms/src/server/plugin.ts @@ -162,11 +162,17 @@ export class PluginPublicFormsServer extends Plugin { return next(); } const { resourceName, actionName } = ctx.action; + const collection = this.db.getCollection(resourceName); if (actionName === 'create' && ctx.PublicForm['collectionName'] === resourceName) { ctx.permission = { skip: true, }; - } else if (actionName === 'list' && ctx.PublicForm['targetCollections'].includes(resourceName)) { + } else if ( + (actionName === 'list' && ctx.PublicForm['targetCollections'].includes(resourceName)) || + (collection.options.template === 'file' && actionName === 'create') || + (resourceName === 'storages' && actionName === 'getRules') || + (resourceName === 'map-configuration' && actionName === 'get') + ) { ctx.permission = { skip: true, };