();
+ const remove = useContext(RemoveConditionContext);
+ const { option, options, dataIndex, operator, setDataIndex, setOperator, value, setValue } = useValues();
return (
-
-
-
-
-
-
-
+
+
+ {
+ setDataIndex(value);
+ }}
+ />
+
+
);
-};
-
-export default FilterItem;
+});
diff --git a/packages/client/src/schema-component/antd/filter/FilterItems.tsx b/packages/client/src/schema-component/antd/filter/FilterItems.tsx
new file mode 100644
index 000000000..2f5d4dba0
--- /dev/null
+++ b/packages/client/src/schema-component/antd/filter/FilterItems.tsx
@@ -0,0 +1,21 @@
+import { ArrayField as ArrayFieldModel } from '@formily/core';
+import { ObjectField, observer, useField } from '@formily/react';
+import React from 'react';
+import { RemoveConditionContext } from './context';
+import { FilterGroup } from './FilterGroup';
+import { FilterItem } from './FilterItem';
+
+export const FilterItems = observer((props) => {
+ const field = useField();
+ return (
+
+ {field?.value?.map((item, index) => {
+ return (
+ field.remove(index)}>
+
+
+ );
+ })}
+
+ );
+});
diff --git a/packages/client/src/schema-component/antd/filter/FilterList.tsx b/packages/client/src/schema-component/antd/filter/FilterList.tsx
deleted file mode 100644
index 1a622752d..000000000
--- a/packages/client/src/schema-component/antd/filter/FilterList.tsx
+++ /dev/null
@@ -1,83 +0,0 @@
-import { onFormReset } from '@formily/core';
-import { useForm } from '@formily/react';
-import { uid } from '@formily/shared';
-import { useMap } from 'ahooks';
-import React, { useEffect } from 'react';
-import { useTranslation } from 'react-i18next';
-import { FilterGroup } from './FilterGroup';
-import { FilterItem } from './FilterItem';
-
-export function FilterList(props) {
- const { initialValue = [] } = props;
- const form = useForm();
- const { t } = useTranslation();
-
- const [map, { set, setAll, remove, reset }] = useMap(
- initialValue.map((item, index) => {
- return [`index-${index}`, item];
- }),
- );
- useEffect(() => {
- const id = uid();
- form.addEffects(id, () => {
- onFormReset((form) => {
- setAll([]);
- setTimeout(() => {
- reset();
- }, 0);
- });
- return () => {
- form.removeEffects(id);
- };
- });
- }, []);
- useEffect(() => {
- props.onChange?.([...map.values()]);
- }, [map]);
-
- return (
-
-
- {[...map.entries()].map(([index, item]) => {
- if (item.and || item.or) {
- return (
- set(index, value)}
- onRemove={() => remove(index)}
- />
- );
- }
- return (
- set(index, value)}
- onRemove={() => remove(index)}
- />
- );
- })}
-
-
-
- );
-}
diff --git a/packages/client/src/schema-component/antd/filter/SaveDefaultValue.tsx b/packages/client/src/schema-component/antd/filter/SaveDefaultValue.tsx
new file mode 100644
index 000000000..f6fa346d5
--- /dev/null
+++ b/packages/client/src/schema-component/antd/filter/SaveDefaultValue.tsx
@@ -0,0 +1,19 @@
+import { css } from '@emotion/css';
+import { Button } from 'antd';
+import React from 'react';
+import { useTranslation } from 'react-i18next';
+
+export const SaveDefaultValue = (props) => {
+ const { t } = useTranslation();
+ return (
+
+ );
+};
diff --git a/packages/client/src/schema-component/antd/filter/context.ts b/packages/client/src/schema-component/antd/filter/context.ts
index 25ac6b27a..06ccc7848 100644
--- a/packages/client/src/schema-component/antd/filter/context.ts
+++ b/packages/client/src/schema-component/antd/filter/context.ts
@@ -1,8 +1,4 @@
import { createContext } from 'react';
-export const FilterContext = createContext({});
-
-export interface FilterContextProps {
- visible?: boolean;
- setVisible?: (v: boolean) => void;
-}
+export const RemoveConditionContext = createContext(null);
+export const FilterContext = createContext(null);
diff --git a/packages/client/src/schema-component/antd/filter/demos/demo1.tsx b/packages/client/src/schema-component/antd/filter/demos/demo1.tsx
deleted file mode 100644
index ad5dfa973..000000000
--- a/packages/client/src/schema-component/antd/filter/demos/demo1.tsx
+++ /dev/null
@@ -1,92 +0,0 @@
-/**
- * title: Filter
- */
-import { observer, useForm } from '@formily/react';
-import { AntdSchemaComponentProvider, SchemaComponent, SchemaComponentProvider } from '@nocobase/client';
-import React from 'react';
-
-const schema = {
- type: 'void',
- properties: {
- demo: {
- name: 'filter',
- type: 'array',
- 'x-component': 'Filter',
- 'x-component-props': {
- onChange: (value) => {
- console.log('=====', JSON.stringify(value, null, 2));
- },
- },
- default: {
- and: [
- {
- field1: {
- eq: 'aa',
- },
- },
- {
- field1: {
- eq: 500,
- },
- },
- ],
- },
- properties: {
- column1: {
- type: 'void',
- title: '字段1',
- 'x-component': 'Filter.Column',
- 'x-component-props': {
- operations: [
- { label: '等于', value: 'eq' },
- { label: '不等于', value: 'ne' },
- ],
- },
- properties: {
- field1: {
- type: 'string',
- 'x-component': 'Input',
- },
- },
- },
- column2: {
- type: 'void',
- title: '字段2',
- 'x-component': 'Filter.Column',
- 'x-component-props': {
- operations: [
- { label: '大于', value: 'gt' },
- { label: '小于', value: 'lt' },
- { label: '非空', value: 'notNull', noValue: true },
- ],
- },
- properties: {
- field2: {
- type: 'number',
- 'x-component': 'InputNumber',
- },
- },
- },
- },
- },
- output: {
- type: 'string',
- 'x-component': 'Output',
- },
- },
-};
-
-const Output = observer(() => {
- const form = useForm();
- return {JSON.stringify(form.values, null, 2)}
;
-});
-
-export default () => {
- return (
-
-
-
-
-
- );
-};
diff --git a/packages/client/src/schema-component/antd/filter/demos/demo2.tsx b/packages/client/src/schema-component/antd/filter/demos/demo2.tsx
new file mode 100644
index 000000000..d937adff6
--- /dev/null
+++ b/packages/client/src/schema-component/antd/filter/demos/demo2.tsx
@@ -0,0 +1,101 @@
+import { AntdSchemaComponentProvider, Filter, Input, SchemaComponent, SchemaComponentProvider } from '@nocobase/client';
+import React from 'react';
+
+const schema: any = {
+ type: 'void',
+ properties: {
+ demo: {
+ name: 'filter',
+ type: 'object',
+ enum: [
+ {
+ name: 'name',
+ title: 'Name',
+ operators: [
+ { label: 'eq', value: '$eq' },
+ { label: 'ne', value: '$ne' },
+ ],
+ schema: {
+ type: 'string',
+ title: 'Name',
+ 'x-component': 'Input',
+ },
+ },
+ {
+ name: 'age',
+ title: 'Age',
+ operators: [
+ { label: 'in', value: '$in' },
+ { label: 'not', value: '$not' },
+ ],
+ schema: {
+ type: 'string',
+ title: 'Age',
+ 'x-component': 'InputNumber',
+ },
+ },
+ {
+ name: 'tags',
+ title: 'Tags',
+ schema: {
+ title: 'Tags',
+ },
+ children: [
+ {
+ name: 'slug',
+ title: 'Slug',
+ operators: [
+ { label: 'in', value: '$in' },
+ { label: 'not', value: '$not' },
+ ],
+ schema: {
+ title: 'Slug',
+ type: 'string',
+ 'x-component': 'Input',
+ },
+ },
+ {
+ name: 'title',
+ title: 'Title',
+ operators: [
+ { label: 'eq', value: '$eq' },
+ { label: 'ne', value: '$ne' },
+ ],
+ schema: {
+ title: 'Title',
+ type: 'string',
+ 'x-component': 'Input',
+ },
+ },
+ ],
+ },
+ ],
+ default: {
+ $or: [
+ {
+ name: {
+ $ne: null,
+ },
+ },
+ {
+ 'tags.title': {
+ $eq: 'aaa',
+ },
+ },
+ ],
+ },
+ 'x-component': 'Filter',
+ 'x-component-props': {},
+ },
+ },
+};
+
+export default () => {
+ return (
+
+
+
+
+
+ );
+};
diff --git a/packages/client/src/schema-component/antd/filter/demos/demo3.tsx b/packages/client/src/schema-component/antd/filter/demos/demo3.tsx
new file mode 100644
index 000000000..20ae24622
--- /dev/null
+++ b/packages/client/src/schema-component/antd/filter/demos/demo3.tsx
@@ -0,0 +1,180 @@
+import { ISchema, useForm } from '@formily/react';
+import {
+ AntdSchemaComponentProvider,
+ Filter,
+ Input,
+ SchemaComponent,
+ SchemaComponentProvider,
+ useActionContext,
+ useRequest
+} from '@nocobase/client';
+import React from 'react';
+
+const dataSource = [
+ {
+ name: 'name',
+ title: 'Name',
+ operators: [
+ { label: 'eq', value: '$eq' },
+ { label: 'ne', value: '$ne' },
+ ],
+ schema: {
+ type: 'string',
+ title: 'Name',
+ 'x-component': 'Input',
+ },
+ },
+ {
+ name: 'age',
+ title: 'Age',
+ operators: [
+ { label: 'in', value: '$in' },
+ { label: 'not', value: '$not' },
+ ],
+ schema: {
+ type: 'string',
+ title: 'Age',
+ 'x-component': 'InputNumber',
+ },
+ },
+ {
+ name: 'tags',
+ title: 'Tags',
+ schema: {
+ title: 'Tags',
+ },
+ children: [
+ {
+ name: 'slug',
+ title: 'Slug',
+ operators: [
+ { label: 'in', value: '$in' },
+ { label: 'not', value: '$not' },
+ ],
+ schema: {
+ title: 'Slug',
+ type: 'string',
+ 'x-component': 'Input',
+ },
+ },
+ {
+ name: 'title',
+ title: 'Title',
+ operators: [
+ { label: 'eq', value: '$eq' },
+ { label: 'ne', value: '$ne' },
+ ],
+ schema: {
+ title: 'Title',
+ type: 'string',
+ 'x-component': 'Input',
+ },
+ },
+ ],
+ },
+];
+
+const schema: ISchema = {
+ type: 'object',
+ properties: {
+ action1: {
+ 'x-component': 'Action',
+ 'x-component-props': {
+ type: 'primary',
+ popover: true,
+ openMode: 'popover',
+ },
+ type: 'void',
+ title: 'Open',
+ properties: {
+ popover: {
+ type: 'void',
+ 'x-decorator': 'Form',
+ 'x-decorator-props': {},
+ 'x-component': 'Action.Popover',
+ 'x-component-props': {
+ trigger: 'click',
+ placement: 'bottomLeft',
+ },
+ properties: {
+ filter: {
+ type: 'object',
+ default: {
+ $or: [
+ {
+ name: {
+ $ne: 'aa',
+ },
+ },
+ {
+ 'tags.title': {
+ $eq: 'aaa',
+ },
+ },
+ ],
+ },
+ 'x-component': 'Filter',
+ 'x-component-props': {
+ useDataSource(options) {
+ return useRequest(
+ () =>
+ Promise.resolve({
+ data: dataSource,
+ }),
+ options,
+ );
+ },
+ },
+ },
+ footer: {
+ type: 'void',
+ 'x-component': 'Action.Popover.Footer',
+ properties: {
+ actions: {
+ type: 'void',
+ 'x-component': 'ActionBar',
+ properties: {
+ saveDefault: {
+ type: 'void',
+ title: 'Submit',
+ 'x-component': 'Filter.SaveDefaultValue',
+ 'x-component-props': {},
+ },
+ submit: {
+ type: 'void',
+ title: 'Submit',
+ 'x-component': 'Action',
+ 'x-component-props': {
+ type: 'primary',
+ useAction() {
+ const form = useForm();
+ const ctx = useActionContext();
+ return {
+ async run() {
+ ctx.setVisible(false);
+ console.log('form.values', JSON.stringify(form.values, null, 2));
+ },
+ };
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+};
+
+export default () => {
+ return (
+
+
+
+
+
+ );
+};
diff --git a/packages/client/src/schema-component/antd/filter/demos/demo4.tsx b/packages/client/src/schema-component/antd/filter/demos/demo4.tsx
new file mode 100644
index 000000000..80f634617
--- /dev/null
+++ b/packages/client/src/schema-component/antd/filter/demos/demo4.tsx
@@ -0,0 +1,170 @@
+import { ISchema } from '@formily/react';
+import {
+ AntdSchemaComponentProvider,
+ Filter,
+ Input,
+ SchemaComponent,
+ SchemaComponentProvider,
+ Select
+} from '@nocobase/client';
+import { Space } from 'antd';
+import React, { useState } from 'react';
+
+const options: any = [
+ {
+ name: 'name',
+ title: 'Name',
+ operators: [
+ { label: 'eq', value: '$eq' },
+ { label: 'ne', value: '$ne' },
+ ],
+ schema: {
+ type: 'string',
+ title: 'Name',
+ 'x-component': 'Input',
+ },
+ },
+ {
+ name: 'age',
+ title: 'Age',
+ operators: [
+ { label: 'in', value: '$in' },
+ { label: 'not', value: '$not' },
+ ],
+ schema: {
+ type: 'string',
+ title: 'Age',
+ 'x-component': 'InputNumber',
+ },
+ },
+ {
+ name: 'tags',
+ title: 'Tags',
+ schema: {
+ title: 'Tags',
+ },
+ children: [
+ {
+ name: 'slug',
+ title: 'Slug',
+ operators: [
+ { label: 'in', value: '$in' },
+ { label: 'not', value: '$not' },
+ ],
+ schema: {
+ title: 'Slug',
+ type: 'string',
+ 'x-component': 'Input',
+ },
+ },
+ {
+ name: 'title',
+ title: 'Title',
+ operators: [
+ { label: 'eq', value: '$eq' },
+ { label: 'ne', value: '$ne' },
+ ],
+ schema: {
+ title: 'Title',
+ type: 'string',
+ 'x-component': 'Input',
+ },
+ },
+ ],
+ },
+];
+
+const defaultValue = {
+ $or: [
+ {
+ name: {
+ $ne: '{{node1.field1}}',
+ },
+ },
+ {
+ 'tags.title': {
+ $eq: 'aaa',
+ },
+ },
+ ],
+};
+
+const schema: ISchema = {
+ type: 'void',
+ properties: {
+ demo: {
+ name: 'filter',
+ type: 'object',
+ enum: options,
+ default: defaultValue,
+ 'x-component': 'Filter',
+ 'x-component-props': {
+ dynamicComponent: 'CustomDynamicComponent',
+ },
+ },
+ },
+};
+const ExpRE = /^\s*\{\{([\s\S]*)\}\}\s*$/;
+
+const CustomDynamicComponent = (props) => {
+ const { value, onChange, renderSchemaComponent } = props;
+ let matched = null;
+ if (typeof value === 'string') {
+ matched = ExpRE.exec(value);
+ }
+ const [source, setSource] = useState(matched ? 'node1' : 'default');
+ const options = [
+ {
+ label: '字段1',
+ value: `{{${source}.field1}}`,
+ },
+ {
+ label: '字段2',
+ value: `{{${source}.field2}}`,
+ },
+ ];
+ return (
+
+
+ );
+};
+
+export default () => {
+ return (
+
+
+
+
+
+ );
+};
diff --git a/packages/client/src/schema-component/antd/filter/hooks.ts b/packages/client/src/schema-component/antd/filter/hooks.ts
deleted file mode 100644
index 3f7798d17..000000000
--- a/packages/client/src/schema-component/antd/filter/hooks.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { useContext } from 'react';
-import { FilterContext } from './context';
-
-export const useFilterContext = () => {
- const ctx = useContext(FilterContext);
- return {
- ...ctx,
- };
-};
diff --git a/packages/client/src/schema-component/antd/filter/index.md b/packages/client/src/schema-component/antd/filter/index.md
index 6a62f51fb..e86fd8677 100644
--- a/packages/client/src/schema-component/antd/filter/index.md
+++ b/packages/client/src/schema-component/antd/filter/index.md
@@ -9,6 +9,14 @@ group:
## Examples
-### Filter usage
+### Filter Action
-
+
+
+### Filter Default Value
+
+
+
+### Custom Dynamic Component
+
+
diff --git a/packages/client/src/schema-component/antd/filter/useValues.ts b/packages/client/src/schema-component/antd/filter/useValues.ts
new file mode 100644
index 000000000..e2305b99c
--- /dev/null
+++ b/packages/client/src/schema-component/antd/filter/useValues.ts
@@ -0,0 +1,65 @@
+import { useField } from '@formily/react';
+import { Input } from 'antd';
+import flat from 'flat';
+import { useContext } from 'react';
+import { FilterContext } from './context';
+
+export const useValues = () => {
+ const { options } = useContext(FilterContext);
+ const field = useField();
+ const obj = flat(field.value || {});
+ const key = Object.keys(obj).shift() || '';
+ const [path, others = ''] = key.split('.$');
+ let [operator] = others.split('.');
+ const dataIndex = path.split('.');
+ let maxDepth = dataIndex.length;
+ if (operator) {
+ operator = '$' + operator;
+ ++maxDepth;
+ }
+ const values = flat(field.value || {}, { maxDepth });
+ const value = Object.values(values).shift();
+ const findOption = (dataIndex) => {
+ let items = options;
+ let option;
+ dataIndex.forEach((name, index) => {
+ const item = items.find((item) => item.name === name);
+ if (item) {
+ option = item;
+ }
+ items = item?.children || [];
+ });
+ return option;
+ };
+ const option = findOption(dataIndex);
+ console.log('option', option);
+ const operators = option?.operators;
+ return {
+ option,
+ dataIndex,
+ options,
+ operators,
+ operator,
+ value,
+ component: [Input, {}],
+ // 当 dataIndex 变化,value 清空
+ setDataIndex(di: string[]) {
+ const option = findOption(di);
+ const op = option?.operators?.[0]?.value || '$eq';
+ field.value = flat.unflatten({
+ [`${di.join('.')}.${op}`]: null,
+ });
+ },
+ // 如果只是 Operator 变化,value 要保留
+ setOperator(op: string) {
+ field.value = flat.unflatten({
+ [`${dataIndex.join('.')}.${op}`]: value,
+ });
+ },
+ setValue(v: any) {
+ field.value = flat.unflatten({
+ [`${dataIndex.join('.')}.${operator || '$eq'}`]: v,
+ });
+ },
+ };
+};
diff --git a/packages/client/src/schema-component/core/SchemaComponentProvider.tsx b/packages/client/src/schema-component/core/SchemaComponentProvider.tsx
index c7af1693b..6e768dfd8 100644
--- a/packages/client/src/schema-component/core/SchemaComponentProvider.tsx
+++ b/packages/client/src/schema-component/core/SchemaComponentProvider.tsx
@@ -1,5 +1,5 @@
import { createForm } from '@formily/core';
-import { FormProvider } from '@formily/react';
+import { FormProvider, Schema } from '@formily/react';
import { uid } from '@formily/shared';
import { useCookieState } from 'ahooks';
import React, { useMemo, useState } from 'react';
@@ -12,6 +12,26 @@ const randomString = (prefix: string = '') => {
return `${prefix}${uid()}`;
};
+Schema.silent(true);
+
+const Registry = {
+ silent: true,
+ compile(expression: string, scope = {}) {
+ console.log('expression', expression);
+ if (Registry.silent) {
+ try {
+ return new Function('$root', `with($root) { return (${expression}); }`)(scope);
+ } catch {
+ return `{{${expression}}}`;
+ }
+ } else {
+ return new Function('$root', `with($root) { return (${expression}); }`)(scope);
+ }
+ },
+};
+
+Schema.registerCompiler(Registry.compile);
+
export const SchemaComponentProvider: React.FC = (props) => {
const { designable, components, children } = props;
const [, setUid] = useState(uid());
diff --git a/packages/client/src/schema-initializer/Initializers/GridFormItemInitializers.tsx b/packages/client/src/schema-initializer/Initializers/GridFormItemInitializers.tsx
index 048f42d23..a42b5281a 100644
--- a/packages/client/src/schema-initializer/Initializers/GridFormItemInitializers.tsx
+++ b/packages/client/src/schema-initializer/Initializers/GridFormItemInitializers.tsx
@@ -1,3 +1,4 @@
+import flat from 'flat';
import React from 'react';
import { useTranslation } from 'react-i18next';
import { SchemaInitializer } from '../SchemaInitializer';
@@ -33,6 +34,28 @@ export const GridFormItemInitializers = (props: any) => {
},
},
},
+ {
+ type: 'item',
+ title: t('Add Filter'),
+ component: 'GeneralInitializer',
+ schema: {
+ name: 'filter',
+ type: 'object',
+ default: flat.unflatten({
+ $or: [
+ { 'aa.$eq': 'b' },
+ { 'bb.field.$eq': ['aabb', 'aaa'] },
+ {
+ 'bb.field': {
+ $eq: ['aabb', 'aaa'],
+ },
+ },
+ ],
+ }),
+ 'x-component': 'Filter',
+ 'x-component-props': {},
+ },
+ },
]}
>
{t('Configure fields')}
diff --git a/packages/client/src/schema-initializer/Initializers/Items/FilterActionInitializer.tsx b/packages/client/src/schema-initializer/Initializers/Items/FilterActionInitializer.tsx
new file mode 100644
index 000000000..40c6b2e3f
--- /dev/null
+++ b/packages/client/src/schema-initializer/Initializers/Items/FilterActionInitializer.tsx
@@ -0,0 +1,42 @@
+import { Switch } from 'antd';
+import flat from 'flat';
+import React from 'react';
+import { SchemaInitializer } from '../../SchemaInitializer';
+import { useCurrentSchema } from '../utils';
+
+export const FilterActionInitializer = (props) => {
+ const { item, insert } = props;
+ const { exists, remove } = useCurrentSchema(item.schema['x-action'], 'x-action', item.find);
+
+ return (
+ {
+ if (exists) {
+ return remove();
+ }
+ insert({
+ ...item.schema,
+ name: 'filter',
+ type: 'object',
+ default: flat.unflatten({
+ $or: [
+ { 'aa.$eq': 'b' },
+ { 'bb.field.$eq': ['aabb', 'aaa'] },
+ {
+ 'bb.field': {
+ $eq: ['aabb', 'aaa'],
+ },
+ },
+ ],
+ }),
+ 'x-component': 'Filter',
+ 'x-component-props': {},
+ });
+ }}
+ >
+
+ {item.title}
+
+
+ );
+};
diff --git a/packages/client/src/schema-initializer/Initializers/Items/index.ts b/packages/client/src/schema-initializer/Initializers/Items/index.ts
index 46aa57269..fb9d51511 100644
--- a/packages/client/src/schema-initializer/Initializers/Items/index.ts
+++ b/packages/client/src/schema-initializer/Initializers/Items/index.ts
@@ -2,6 +2,7 @@ export * from './ActionInitializer';
export * from './AddNewActionInitializer';
export * from './CalendarBlockInitializer';
export * from './CollectionFieldInitializer';
+export * from './FilterActionInitializer';
export * from './FormBlockInitializer';
export * from './GeneralInitializer';
export * from './MarkdownBlockInitializer';
diff --git a/packages/client/src/schema-initializer/Initializers/TableActionInitializers.tsx b/packages/client/src/schema-initializer/Initializers/TableActionInitializers.tsx
index d623453be..2a6179646 100644
--- a/packages/client/src/schema-initializer/Initializers/TableActionInitializers.tsx
+++ b/packages/client/src/schema-initializer/Initializers/TableActionInitializers.tsx
@@ -12,7 +12,7 @@ export const TableActionInitializers = {
{
type: 'item',
title: "{{t('Filter')}}",
- component: 'ActionInitializer',
+ component: 'FilterActionInitializer',
schema: {
title: '{{ t("Filter") }}',
'x-action': 'filter',
diff --git a/yarn.lock b/yarn.lock
index 1b8ad5f00..74dad30c3 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4125,10 +4125,10 @@ ansi-styles@^5.0.0:
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
-antd@^4.18.5:
- version "4.18.5"
- resolved "https://registry.npmjs.org/antd/-/antd-4.18.5.tgz#e5ffbe238fd6fdfcd1ed39ba96e4b1bd5f589757"
- integrity sha512-5fN3C2lWAzonhOYYlNpzIw2OHl7vxFZ+4cJ7DK/XZrV+75OY61Y+OkanqMJwrFtDDamIez35OM7cAezGko9tew==
+antd@^4.18.9:
+ version "4.18.9"
+ resolved "https://registry.npmjs.org/antd/-/antd-4.18.9.tgz#a0d246786d5076ea7a53b67191cd39295fc2322a"
+ integrity sha512-MbtFY2J8LvXUnxYH2QehdhP9qMEpHvOp7PmiTIHc7v6aSb+LILCibskRIMGNEKvvhBvsTdq0cnjanR9/IbqEAw==
dependencies:
"@ant-design/colors" "^6.0.0"
"@ant-design/icons" "^4.7.0"
@@ -4145,8 +4145,8 @@ antd@^4.18.5:
rc-collapse "~3.1.0"
rc-dialog "~8.6.0"
rc-drawer "~4.4.2"
- rc-dropdown "~3.2.0"
- rc-field-form "~1.22.0-2"
+ rc-dropdown "~3.2.5"
+ rc-field-form "~1.23.0"
rc-image "~5.2.5"
rc-input-number "~7.3.0"
rc-mentions "~1.6.1"
@@ -4162,7 +4162,7 @@ antd@^4.18.5:
rc-slider "~9.7.4"
rc-steps "~4.1.0"
rc-switch "~3.2.0"
- rc-table "~7.22.2"
+ rc-table "~7.23.0"
rc-tabs "~11.10.0"
rc-textarea "~0.3.0"
rc-tooltip "~5.1.1"
@@ -13360,7 +13360,7 @@ rc-drawer@~4.4.2:
classnames "^2.2.6"
rc-util "^5.7.0"
-rc-dropdown@^3.2.0, rc-dropdown@~3.2.0:
+rc-dropdown@^3.2.0:
version "3.2.0"
resolved "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-3.2.0.tgz#da6c2ada403842baee3a9e909a0b1a91ba3e1090"
integrity sha512-j1HSw+/QqlhxyTEF6BArVZnTmezw2LnSmRk6I9W7BCqNCKaRwleRmMMs1PHbuaG8dKHVqP6e21RQ7vPBLVnnNw==
@@ -13369,10 +13369,19 @@ rc-dropdown@^3.2.0, rc-dropdown@~3.2.0:
classnames "^2.2.6"
rc-trigger "^5.0.4"
-rc-field-form@~1.22.0-2:
- version "1.22.1"
- resolved "https://registry.npmjs.org/rc-field-form/-/rc-field-form-1.22.1.tgz#0bd2f4e730ff2f071529d00bef28e062362890f5"
- integrity sha512-LweU7nBeqmC5r3HDUjRprcOXXobHXp/TGIxD7ppBq5FX6Iptt3ibdpRVg4RSyNulBNGHOuknHlRcguuIpvVMVg==
+rc-dropdown@~3.2.5:
+ version "3.2.5"
+ resolved "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-3.2.5.tgz#c211e571d29d15e7f725b5a75fc8c7f371fc3348"
+ integrity sha512-dVO2eulOSbEf+F4OyhCY5iGiMVhUYY/qeXxL7Ex2jDBt/xc89jU07mNoowV6aWxwVOc70pxEINff0oM2ogjluA==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.6"
+ rc-trigger "^5.0.4"
+
+rc-field-form@~1.23.0:
+ version "1.23.0"
+ resolved "https://registry.npmjs.org/rc-field-form/-/rc-field-form-1.23.0.tgz#71e1430be5934118f1d00733e89896ffd81aa970"
+ integrity sha512-Zv5rrkbc/KJ5EDoUxX28Wy6Y8FOas03hffcYeSE821z7b7V6YtLrtQyJlv+0725xdCphqUoD/S+7b2KLl67Hew==
dependencies:
"@babel/runtime" "^7.8.4"
async-validator "^4.0.2"
@@ -13576,10 +13585,10 @@ rc-switch@~3.2.0:
classnames "^2.2.1"
rc-util "^5.0.1"
-rc-table@~7.22.2:
- version "7.22.2"
- resolved "https://registry.npmjs.org/rc-table/-/rc-table-7.22.2.tgz#218f3f53bc91660560a344c8290a91a841a60b0a"
- integrity sha512-Ng2gNkGi6ybl6dzneRn2H4Gp8XhIbRa5rXQ7ZhZcgWVmfVMok70UHGPXcf68tXW6O0/qckTf/eOVsoviSvK4sw==
+rc-table@~7.23.0:
+ version "7.23.0"
+ resolved "https://registry.npmjs.org/rc-table/-/rc-table-7.23.0.tgz#e5f76998ecf3246147d45ed311417c08886e6507"
+ integrity sha512-Q1gneB2+lUa8EzCCfbrq+jO1qNSwQv1RUUXKB84W/Stdp4EvGOt2+QqGyfotMNM4JUw0fgGLwY+WjnhUhnLuQQ==
dependencies:
"@babel/runtime" "^7.10.1"
classnames "^2.2.5"