mirror of
https://github.com/nocobase/nocobase
synced 2024-11-15 09:38:51 +00:00
fix(client/table-selector-provider): make data range config effective (#960)
* fix(client/table-selector-provider): make data range config effective * fix(client/table-selector): fix when save data range config filter lose
This commit is contained in:
parent
9a81b1b8ee
commit
b9910cdc1f
@ -9,7 +9,7 @@ import { useFormBlockContext } from './FormBlockProvider';
|
|||||||
export const TableSelectorContext = createContext<any>({});
|
export const TableSelectorContext = createContext<any>({});
|
||||||
|
|
||||||
const InternalTableSelectorProvider = (props) => {
|
const InternalTableSelectorProvider = (props) => {
|
||||||
const { params, rowKey } = props;
|
const { params, rowKey, extraFilter } = props;
|
||||||
const field = useField();
|
const field = useField();
|
||||||
const { resource, service } = useBlockRequestContext();
|
const { resource, service } = useBlockRequestContext();
|
||||||
// if (service.loading) {
|
// if (service.loading) {
|
||||||
@ -22,6 +22,7 @@ const InternalTableSelectorProvider = (props) => {
|
|||||||
service,
|
service,
|
||||||
resource,
|
resource,
|
||||||
params,
|
params,
|
||||||
|
extraFilter,
|
||||||
rowKey,
|
rowKey,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
@ -39,21 +40,23 @@ const useAssociationNames = (collection) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const recursiveParent = (schema: Schema, component) => {
|
const recursiveParent = (schema: Schema, component) => {
|
||||||
return schema['x-component'] === component
|
return schema['x-component'] === component
|
||||||
? schema
|
? schema
|
||||||
: (schema.parent ? recursiveParent(schema.parent, component) : null);
|
: schema.parent
|
||||||
}
|
? recursiveParent(schema.parent, component)
|
||||||
|
: null;
|
||||||
|
};
|
||||||
|
|
||||||
export const TableSelectorProvider = (props) => {
|
export const TableSelectorProvider = (props) => {
|
||||||
const fieldSchema = useFieldSchema();
|
const fieldSchema = useFieldSchema();
|
||||||
const ctx = useFormBlockContext()
|
const ctx = useFormBlockContext();
|
||||||
const { getCollectionJoinField, getCollectionFields } = useCollectionManager();
|
const { getCollectionJoinField, getCollectionFields } = useCollectionManager();
|
||||||
const record = useRecord();
|
const record = useRecord();
|
||||||
|
|
||||||
const collectionFieldSchema = recursiveParent(fieldSchema, 'CollectionField');
|
const collectionFieldSchema = recursiveParent(fieldSchema, 'CollectionField');
|
||||||
// const value = ctx.form.query(collectionFieldSchema?.name).value();
|
// const value = ctx.form.query(collectionFieldSchema?.name).value();
|
||||||
const collectionField = getCollectionJoinField(collectionFieldSchema?.['x-collection-field']);
|
const collectionField = getCollectionJoinField(collectionFieldSchema?.['x-collection-field']);
|
||||||
|
|
||||||
console.log('TableSelectorProvider', collectionFieldSchema, collectionField, record);
|
console.log('TableSelectorProvider', collectionFieldSchema, collectionField, record);
|
||||||
const params = { ...props.params };
|
const params = { ...props.params };
|
||||||
const appends = useAssociationNames(props.collection);
|
const appends = useAssociationNames(props.collection);
|
||||||
@ -63,57 +66,74 @@ export const TableSelectorProvider = (props) => {
|
|||||||
if (!Object.keys(params).includes('appends')) {
|
if (!Object.keys(params).includes('appends')) {
|
||||||
params['appends'] = appends;
|
params['appends'] = appends;
|
||||||
}
|
}
|
||||||
|
let extraFilter;
|
||||||
if (collectionField) {
|
if (collectionField) {
|
||||||
if (['oho', 'o2m'].includes(collectionField.interface)) {
|
if (['oho', 'o2m'].includes(collectionField.interface)) {
|
||||||
if (record?.[collectionField.sourceKey]) {
|
if (record?.[collectionField.sourceKey]) {
|
||||||
params['filter'] = {
|
extraFilter = {
|
||||||
$or: [{
|
$or: [
|
||||||
[collectionField.foreignKey]: {
|
{
|
||||||
$is: null,
|
[collectionField.foreignKey]: {
|
||||||
}
|
$is: null,
|
||||||
}, {
|
},
|
||||||
[collectionField.foreignKey]: {
|
},
|
||||||
$eq: record?.[collectionField.sourceKey],
|
{
|
||||||
}
|
[collectionField.foreignKey]: {
|
||||||
}]
|
$eq: record?.[collectionField.sourceKey],
|
||||||
}
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
} else {
|
} else {
|
||||||
params['filter'] = {
|
extraFilter = {
|
||||||
[collectionField.foreignKey]: {
|
[collectionField.foreignKey]: {
|
||||||
$is: null,
|
$is: null,
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (['obo'].includes(collectionField.interface)) {
|
if (['obo'].includes(collectionField.interface)) {
|
||||||
const fields = getCollectionFields(collectionField.target);
|
const fields = getCollectionFields(collectionField.target);
|
||||||
const targetField = fields.find(f => f.foreignKey && f.foreignKey === collectionField.foreignKey);
|
const targetField = fields.find((f) => f.foreignKey && f.foreignKey === collectionField.foreignKey);
|
||||||
if (targetField) {
|
if (targetField) {
|
||||||
if (record?.[collectionField.foreignKey]) {
|
if (record?.[collectionField.foreignKey]) {
|
||||||
params['filter'] = {
|
extraFilter = {
|
||||||
$or: [{
|
$or: [
|
||||||
[`${targetField.name}.${targetField.foreignKey}`]: {
|
{
|
||||||
$is: null,
|
[`${targetField.name}.${targetField.foreignKey}`]: {
|
||||||
}
|
$is: null,
|
||||||
}, {
|
},
|
||||||
[`${targetField.name}.${targetField.foreignKey}`]: {
|
},
|
||||||
$eq: record?.[collectionField.foreignKey],
|
{
|
||||||
}
|
[`${targetField.name}.${targetField.foreignKey}`]: {
|
||||||
}]
|
$eq: record?.[collectionField.foreignKey],
|
||||||
}
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
} else {
|
} else {
|
||||||
params['filter'] = {
|
extraFilter = {
|
||||||
[`${targetField.name}.${targetField.foreignKey}`]: {
|
[`${targetField.name}.${targetField.foreignKey}`]: {
|
||||||
$is: null,
|
$is: null,
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (extraFilter) {
|
||||||
|
if (params?.filter) {
|
||||||
|
params['filter'] = {
|
||||||
|
$and: [extraFilter, params['filter']],
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
params['filter'] = extraFilter;
|
||||||
|
}
|
||||||
|
}
|
||||||
return (
|
return (
|
||||||
<BlockProvider {...props} params={params}>
|
<BlockProvider {...props} params={params}>
|
||||||
<InternalTableSelectorProvider {...props} params={params} />
|
<InternalTableSelectorProvider {...props} params={params} extraFilter={extraFilter} />
|
||||||
</BlockProvider>
|
</BlockProvider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -8,6 +8,7 @@ import { useCollectionFilterOptions, useSortFields } from '../../../collection-m
|
|||||||
import { GeneralSchemaDesigner, SchemaSettings } from '../../../schema-settings';
|
import { GeneralSchemaDesigner, SchemaSettings } from '../../../schema-settings';
|
||||||
import { useSchemaTemplate } from '../../../schema-templates';
|
import { useSchemaTemplate } from '../../../schema-templates';
|
||||||
import { useDesignable } from '../../hooks';
|
import { useDesignable } from '../../hooks';
|
||||||
|
import { cloneDeep } from 'lodash';
|
||||||
|
|
||||||
export const TableSelectorDesigner = () => {
|
export const TableSelectorDesigner = () => {
|
||||||
const { name, title } = useCollection();
|
const { name, title } = useCollection();
|
||||||
@ -15,7 +16,7 @@ export const TableSelectorDesigner = () => {
|
|||||||
const fieldSchema = useFieldSchema();
|
const fieldSchema = useFieldSchema();
|
||||||
const dataSource = useCollectionFilterOptions(name);
|
const dataSource = useCollectionFilterOptions(name);
|
||||||
const sortFields = useSortFields(name);
|
const sortFields = useSortFields(name);
|
||||||
const { service } = useTableSelectorContext();
|
const { service, extraFilter } = useTableSelectorContext();
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { dn } = useDesignable();
|
const { dn } = useDesignable();
|
||||||
const defaultFilter = fieldSchema?.['x-decorator-props']?.params?.filter || {};
|
const defaultFilter = fieldSchema?.['x-decorator-props']?.params?.filter || {};
|
||||||
@ -57,7 +58,17 @@ export const TableSelectorDesigner = () => {
|
|||||||
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;
|
||||||
service.run({ ...service.params?.[0], filter, page: 1 });
|
let serviceFilter = cloneDeep(filter);
|
||||||
|
if (extraFilter) {
|
||||||
|
if (serviceFilter) {
|
||||||
|
serviceFilter = {
|
||||||
|
$and: [extraFilter, serviceFilter],
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
serviceFilter = extraFilter;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
service.run({ ...service.params?.[0], filter: serviceFilter, page: 1 });
|
||||||
dn.emit('patch', {
|
dn.emit('patch', {
|
||||||
schema: {
|
schema: {
|
||||||
['x-uid']: fieldSchema['x-uid'],
|
['x-uid']: fieldSchema['x-uid'],
|
||||||
|
Loading…
Reference in New Issue
Block a user