tachybase_todo/packages/plugins/@nocobase/plugin-export/src/client/useFields.ts
2024-04-02 18:13:33 +08:00

42 lines
1.2 KiB
TypeScript

import { useFieldSchema } from '@nocobase/schema';
import { useCollectionManager_deprecated } from '@nocobase/client';
export const useFields = (collectionName: string) => {
const fieldSchema = useFieldSchema();
const nonfilterable = fieldSchema?.['x-component-props']?.nonfilterable || [];
const { getCollectionFields } = useCollectionManager_deprecated();
const fields = getCollectionFields(collectionName);
const field2option = (field, depth) => {
if (!field.interface) {
return;
}
const option = {
name: field.name,
title: field?.uiSchema?.title || field.name,
schema: field?.uiSchema,
};
if (!field.target || depth >= 3) {
return option;
}
if (field.target) {
const targetFields = getCollectionFields(field.target);
const options = getOptions(targetFields, depth + 1).filter(Boolean);
option['children'] = option['children'] || [];
option['children'].push(...options);
}
return option;
};
const getOptions = (fields, depth) => {
const options = [];
fields.forEach((field) => {
const option = field2option(field, depth);
if (option) {
options.push(option);
}
});
return options;
};
return getOptions(fields, 1);
};