From 618a65deeceea5a856b4a95028d6cbb96bf76b46 Mon Sep 17 00:00:00 2001 From: chenos Date: Tue, 10 Jan 2023 14:54:04 +0800 Subject: [PATCH] fix: skip field validation when fields are hidden --- packages/core/client/src/acl/ACLProvider.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/core/client/src/acl/ACLProvider.tsx b/packages/core/client/src/acl/ACLProvider.tsx index 00e3b5b57..c129d2e19 100644 --- a/packages/core/client/src/acl/ACLProvider.tsx +++ b/packages/core/client/src/acl/ACLProvider.tsx @@ -1,6 +1,7 @@ -import { Schema, useFieldSchema } from '@formily/react'; +import { Field } from '@formily/core'; +import { Schema, useField, useFieldSchema } from '@formily/react'; import { Spin } from 'antd'; -import React, { createContext, useContext } from 'react'; +import React, { createContext, useContext, useEffect } from 'react'; import { Redirect } from 'react-router-dom'; import { useAPIClient, useRequest } from '../api-client'; import { useBlockRequestContext } from '../block-provider/BlockProvider'; @@ -251,6 +252,7 @@ export const useACLFieldWhitelist = () => { export const ACLCollectionFieldProvider = (props) => { const fieldSchema = useFieldSchema(); + const field = useField(); const { allowAll } = useACLRoleContext(); if (allowAll) { return <>{props.children}; @@ -260,6 +262,12 @@ export const ACLCollectionFieldProvider = (props) => { } const { whitelist } = useACLFieldWhitelist(); const allowed = whitelist.length > 0 ? whitelist.includes(fieldSchema.name) : true; + useEffect(() => { + if (!allowed) { + field.required = false; + field.display = 'hidden'; + } + }, [allowed]); if (!allowed) { return null; }