fix: hide the paired linkTo field in the table/form view

This commit is contained in:
chenos 2020-12-28 11:38:23 +08:00
parent 976bc5d66e
commit 0754c5979a
2 changed files with 24 additions and 3 deletions

View File

@ -46,6 +46,7 @@ export default function ViewFactory(props: ViewProps) {
associatedKey, associatedKey,
resourceName, resourceName,
resourceTarget, resourceTarget,
resourceFieldName,
viewName, viewName,
mode, mode,
reference, reference,
@ -58,6 +59,7 @@ export default function ViewFactory(props: ViewProps) {
values: { values: {
associatedKey: associatedKey, associatedKey: associatedKey,
associatedName: associatedName, associatedName: associatedName,
resourceFieldName: resourceName,
mode mode
}, },
}; };

View File

@ -1,4 +1,4 @@
import { Model, ModelCtor } from '@nocobase/database'; import { Model, ModelCtor, BELONGSTOMANY } from '@nocobase/database';
import { get, set } from 'lodash'; import { get, set } from 'lodash';
import { Op } from 'sequelize'; import { Op } from 'sequelize';
@ -130,7 +130,7 @@ const transforms = {
}; };
export default async (ctx, next) => { export default async (ctx, next) => {
const { resourceName, resourceKey } = ctx.action.params; const { resourceName, resourceKey, values = {} } = ctx.action.params;
const [View, Collection, Field, Action] = ctx.db.getModels(['views', 'collections', 'fields', 'actions']) as ModelCtor<Model>[]; const [View, Collection, Field, Action] = ctx.db.getModels(['views', 'collections', 'fields', 'actions']) as ModelCtor<Model>[];
let view = await View.findOne(View.parseApiJson({ let view = await View.findOne(View.parseApiJson({
filter: { filter: {
@ -141,6 +141,16 @@ export default async (ctx, next) => {
// appends: ['actions', 'fields'], // appends: ['actions', 'fields'],
// }, // },
})); }));
let throughName;
const {associatedName, resourceFieldName} = values;
if (associatedName) {
const table = ctx.db.getTable(associatedName);
const resourceField = table.getField(resourceFieldName);
if (resourceField instanceof BELONGSTOMANY) {
console.log({associatedName, resourceField});
throughName = resourceField.options.through;
}
}
if (!view) { if (!view) {
// 如果不存在 view新建一个 // 如果不存在 view新建一个
view = new View({type: resourceKey, template: 'FilterForm'}); view = new View({type: resourceKey, template: 'FilterForm'});
@ -158,12 +168,20 @@ export default async (ctx, next) => {
[Op.not]: 'sort', [Op.not]: 'sort',
}; };
} }
const fields = await collection.getFields({ let fields = await collection.getFields({
where, where,
order: [ order: [
['sort', 'asc'], ['sort', 'asc'],
] ]
}); });
fields = fields.filter(field => {
if (field.get('interface') === 'linkTo') {
if (throughName && throughName === field.get('through')) {
return false;
}
}
return true;
})
const actions = await collection.getActions({ const actions = await collection.getActions({
where: { where: {
developerMode: ctx.state.developerMode, developerMode: ctx.state.developerMode,
@ -202,6 +220,7 @@ export default async (ctx, next) => {
const viewType = view.get('type'); const viewType = view.get('type');
const actionDefaultParams:any = {}; const actionDefaultParams:any = {};
const appends = []; const appends = [];
for (const field of fields) { for (const field of fields) {
if (!['subTable', 'linkTo', 'attachment'].includes(field.get('interface'))) { if (!['subTable', 'linkTo', 'attachment'].includes(field.get('interface'))) {
continue; continue;