Revert "fix: the edit drawer's audit logs block can only get records by this … (#1917)"

This reverts commit 42ad77da68.

# Conflicts:
#	packages/core/client/src/block-provider/TableBlockProvider.tsx
#	packages/core/client/src/schema-component/antd/filter/useValues.ts
This commit is contained in:
chenos 2023-06-07 20:14:02 +08:00
parent 5e4682be72
commit a1872fa75b
6 changed files with 56 additions and 114 deletions

View File

@ -1,7 +1,7 @@
import { ArrayField, createForm } from '@formily/core'; import { ArrayField, createForm } from '@formily/core';
import { FormContext, useField, useFieldSchema } from '@formily/react'; import { FormContext, useField, useFieldSchema } from '@formily/react';
import React, { createContext, useContext, useEffect, useMemo, useState } from 'react'; import React, { createContext, useContext, useEffect, useMemo, useState } from 'react';
import { useCollection, useCollectionManager } from '../collection-manager'; import { useCollectionManager } from '../collection-manager';
import { useFilterBlock } from '../filter-provider/FilterProvider'; import { useFilterBlock } from '../filter-provider/FilterProvider';
import { useRecord } from '../record-provider'; import { useRecord } from '../record-provider';
import { FixedBlockWrapper, SchemaComponentOptions, removeNullCondition } from '../schema-component'; import { FixedBlockWrapper, SchemaComponentOptions, removeNullCondition } from '../schema-component';
@ -102,13 +102,8 @@ export const TableBlockProvider = (props) => {
const record = useRecord(); const record = useRecord();
const fieldSchema = useFieldSchema(); const fieldSchema = useFieldSchema();
const { getCollection, getCollectionField } = useCollectionManager(); const { getCollection, getCollectionField } = useCollectionManager();
const parent = useCollection();
const filter = generateFilterParams(record, parent.name, parent.filterTargetKey, {});
const collection = getCollection(props.collection); const collection = getCollection(props.collection);
const { treeTable } = fieldSchema?.['x-decorator-props'] || {}; const { treeTable } = fieldSchema?.['x-decorator-props'] || {};
if (filter) {
params.filter = filter;
}
if (props.dragSort) { if (props.dragSort) {
params['sort'] = ['sort']; params['sort'] = ['sort'];
} }
@ -255,28 +250,3 @@ export const useTableBlockProps = () => {
}, },
}; };
}; };
export const generateFilterParams = (record, parentName, filterTargetKey, defaultFilter) => {
let filter = defaultFilter;
if (parentName) {
const filterByTk = `${record?.[filterTargetKey || 'id']}`;
if (filter) {
filter = {
$and: [
filter,
{
collectionName: parentName,
recordId: filterByTk,
},
],
};
} else {
filter = {
collectionName: parentName,
recordId: filterByTk,
};
}
}
return filter;
};

View File

@ -13,8 +13,6 @@ import { useCompile, useDesignable } from '../../hooks';
import { removeNullCondition } from '../filter'; import { removeNullCondition } from '../filter';
import { FixedBlockDesignerItem } from '../page'; import { FixedBlockDesignerItem } from '../page';
import { FilterDynamicComponent } from './FilterDynamicComponent'; import { FilterDynamicComponent } from './FilterDynamicComponent';
import cloneDeep from 'lodash/cloneDeep';
import isEmpty from 'lodash/isEmpty';
export const TableBlockDesigner = () => { export const TableBlockDesigner = () => {
const { name, title, sortable } = useCollection(); const { name, title, sortable } = useCollection();
@ -27,9 +25,7 @@ export const TableBlockDesigner = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const { dn } = useDesignable(); const { dn } = useDesignable();
const compile = useCompile(); const compile = useCompile();
const defaultFilter = removeNullCondition(fieldSchema?.['x-decorator-props']?.params?.filter || {}); const defaultFilter = fieldSchema?.['x-decorator-props']?.params?.filter || {};
// 当前filter 不需要在 "设置数据范围" 表单里初始化,只需要在查询的时候合并到查询条件 filter中
const crypticFilter = fieldSchema?.['x-decorator-props']?.params?.crypticFilter;
const defaultSort = fieldSchema?.['x-decorator-props']?.params?.sort || []; const defaultSort = fieldSchema?.['x-decorator-props']?.params?.sort || [];
const defaultResource = fieldSchema?.['x-decorator-props']?.resource; const defaultResource = fieldSchema?.['x-decorator-props']?.resource;
const supportTemplate = !fieldSchema?.['x-decorator-props']?.disableTemplate; const supportTemplate = !fieldSchema?.['x-decorator-props']?.disableTemplate;
@ -71,16 +67,12 @@ export const TableBlockDesigner = () => {
({ filter }) => { ({ filter }) => {
filter = removeNullCondition(filter); filter = removeNullCondition(filter);
const params = field.decoratorProps.params || {}; const params = field.decoratorProps.params || {};
let tempFilter = !isEmpty(crypticFilter) ? crypticFilter : filter;
if (!isEmpty(filter)) {
tempFilter = !isEmpty(crypticFilter) ? mergeFilter([filter, tempFilter]) : cloneDeep(filter);
}
params.filter = filter; params.filter = filter;
field.decoratorProps.params = params; field.decoratorProps.params = params;
fieldSchema['x-decorator-props']['params'] = params; fieldSchema['x-decorator-props']['params'] = params;
const filters = service.params?.[1]?.filters || {}; const filters = service.params?.[1]?.filters || {};
service.run( service.run(
{ ...service.params?.[0], filter: mergeFilter([...Object.values(filters), tempFilter]), page: 1 }, { ...service.params?.[0], filter: mergeFilter([...Object.values(filters), filter]), page: 1 },
{ filters }, { filters },
); );
dn.emit('patch', { dn.emit('patch', {
@ -90,7 +82,7 @@ export const TableBlockDesigner = () => {
}, },
}); });
}, },
[field, crypticFilter], [field],
); );
return ( return (

View File

@ -1323,8 +1323,6 @@ export const createTableBlockSchema = (options) => {
TableBlockDesigner, TableBlockDesigner,
blockType, blockType,
pageSize = 20, pageSize = 20,
// 当前filter 不需要在 "设置数据范围" 表单里初始化,只需要在查询的时候合并到查询条件 filter中
crypticFilter = {},
...others ...others
} = options; } = options;
const schema: ISchema = { const schema: ISchema = {
@ -1337,7 +1335,6 @@ export const createTableBlockSchema = (options) => {
action: 'list', action: 'list',
params: { params: {
pageSize, pageSize,
crypticFilter,
}, },
rowKey, rowKey,
showIndex: true, showIndex: true,

View File

@ -1,30 +1,13 @@
import { TableOutlined } from '@ant-design/icons'; import { TableOutlined } from '@ant-design/icons';
import { ISchema, useFieldSchema } from '@formily/react'; import { ISchema } from '@formily/react';
import { import { createTableBlockSchema, SchemaInitializer } from '@nocobase/client';
createTableBlockSchema,
generateFilterParams,
SchemaInitializer,
useCollection,
useRecord,
} from '@nocobase/client';
import React from 'react'; import React from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { getResourceOfBlockDesigner } from './utils';
export const AuditLogsBlockInitializer = (props) => { export const AuditLogsBlockInitializer = (props) => {
const { filterTargetKey } = useCollection();
const { insert } = props; const { insert } = props;
const { t } = useTranslation(); const { t } = useTranslation();
const record = useRecord();
const fieldSchema = useFieldSchema();
const crypticFilterFromAuditLogs = generateFilterParams(
record,
getResourceOfBlockDesigner(fieldSchema),
filterTargetKey,
{},
);
const schema = createTableBlockSchema({ const schema = createTableBlockSchema({
collection: 'auditLogs', collection: 'auditLogs',
rowKey: 'id', rowKey: 'id',
@ -33,8 +16,6 @@ export const AuditLogsBlockInitializer = (props) => {
tableActionColumnInitializers: 'AuditLogsTableActionColumnInitializers', tableActionColumnInitializers: 'AuditLogsTableActionColumnInitializers',
tableBlockProvider: 'AuditLogsBlockProvider', tableBlockProvider: 'AuditLogsBlockProvider',
disableTemplate: true, disableTemplate: true,
// 当前filter 不需要在 "设置数据范围" 表单里初始化,只需要在查询的时候合并到查询条件 filter中
crypticFilter: crypticFilterFromAuditLogs,
}); });
return ( return (

View File

@ -4,7 +4,6 @@ import {
CollectionManagerContext, CollectionManagerContext,
CollectionManagerProvider, CollectionManagerProvider,
FormProvider, FormProvider,
generateFilterParams,
SchemaComponent, SchemaComponent,
TableBlockProvider, TableBlockProvider,
useCollection, useCollection,
@ -459,35 +458,55 @@ export const AuditLogs: any = () => {
); );
}; };
AuditLogs.Decorator = observer((props: any) => { AuditLogs.Decorator = observer(
const parent = useCollection(); (props: any) => {
const record = useRecord(); const parent = useCollection();
const { interfaces } = useContext(CollectionManagerContext); const record = useRecord();
const filter = generateFilterParams(record, parent.name, parent.filterTargetKey, props?.params?.filter) || {}; const { interfaces } = useContext(CollectionManagerContext);
const defaults = { let filter = props?.params?.filter;
collection: 'auditLogs', if (parent.name) {
resource: 'auditLogs', const filterByTk = record?.[parent.filterTargetKey || 'id'];
action: 'list', if (filter) {
params: { filter = {
pageSize: 20, $and: [
appends: ['collection', 'user'], filter,
...props.params, {
filter, collectionName: parent.name,
sort: '-createdAt', recordId: `${filterByTk}`,
}, },
rowKey: 'id', ],
showIndex: true, };
dragSort: false, } else {
}; filter = {
return ( collectionName: parent.name,
<IsAssociationBlock.Provider value={!!parent.name}> recordId: `${filterByTk}`,
<CollectionManagerProvider collections={[collection]} interfaces={interfaces}> };
<TableBlockProvider {...defaults}>{props.children}</TableBlockProvider> }
</CollectionManagerProvider> }
</IsAssociationBlock.Provider> const defaults = {
); collection: 'auditLogs',
}, { resource: 'auditLogs',
displayName: 'AuditLogs.Decorator' action: 'list',
}); params: {
pageSize: 20,
appends: ['collection', 'user'],
...props.params,
filter,
sort: '-createdAt',
},
rowKey: 'id',
showIndex: true,
dragSort: false,
};
return (
<IsAssociationBlock.Provider value={!!parent.name}>
<CollectionManagerProvider collections={[collection]} interfaces={interfaces}>
<TableBlockProvider {...defaults}>{props.children}</TableBlockProvider>
</CollectionManagerProvider>
</IsAssociationBlock.Provider>
);
},
{ displayName: 'AuditLogs.Decorator' },
);
AuditLogs.Designer = AuditLogsDesigner; AuditLogs.Designer = AuditLogsDesigner;

View File

@ -1,6 +1,4 @@
import { uid } from '@formily/shared'; import { uid } from '@formily/shared';
import { Schema } from '@formily/react';
import cloneDeep from 'lodash/cloneDeep';
export const createSchema = () => { export const createSchema = () => {
const filterSchema = { const filterSchema = {
@ -303,18 +301,3 @@ export const createSchema = () => {
}; };
return schema; return schema;
}; };
/**
* TableBlockDesigner DetailsDesigner resource
*/
export function getResourceOfBlockDesigner(schema: Schema) {
let tempSchema = cloneDeep(schema);
while (
tempSchema &&
((tempSchema?.['x-designer'] !== 'TableBlockDesigner' && tempSchema?.['x-designer'] !== 'DetailsDesigner') ||
tempSchema?.['x-decorator-props']?.['resource'] === 'auditLogs')
) {
tempSchema = tempSchema.parent;
}
return tempSchema?.['x-decorator-props']?.['resource'];
}