tachybase_todo/packages/plugins/@tachybase/plugin-audit-logs/src/client/initializers/AuditLogsTableColumnInitializers.tsx

92 lines
2.4 KiB
TypeScript

import React from 'react';
import {
SchemaInitializer,
SchemaInitializerChildren,
useAssociatedTableColumnInitializerFields,
useCompile,
useInheritsTableColumnInitializerFields,
useTableColumnInitializerFields,
} from '@tachybase/client';
import { tval, useAuditLogsTranslation } from '../locale';
// 表格列配置
const ParentCollectionFields = () => {
const inheritFields = useInheritsTableColumnInitializerFields();
const { t } = useAuditLogsTranslation();
const compile = useCompile();
if (!inheritFields?.length) return null;
const res = [];
inheritFields.forEach((inherit) => {
Object.values(inherit)[0].length &&
res.push({
type: 'itemGroup',
divider: true,
title: t(`Parent collection fields`) + '(' + compile(`${Object.keys(inherit)[0]}`) + ')',
children: Object.values(inherit)[0].filter((v: any) => !v?.field?.isForeignKey),
});
});
return <SchemaInitializerChildren>{res}</SchemaInitializerChildren>;
};
const AssociatedFields = () => {
const associatedFields = useAssociatedTableColumnInitializerFields();
const { t } = useAuditLogsTranslation();
if (!associatedFields?.length) return null;
const schema: any = [
{
type: 'itemGroup',
divider: true,
title: t('Display association fields'),
children: associatedFields,
},
];
return <SchemaInitializerChildren>{schema}</SchemaInitializerChildren>;
};
export const auditLogsTableColumnInitializers = new SchemaInitializer({
name: 'auditLogsTable:configureColumns',
insertPosition: 'beforeEnd',
icon: 'SettingOutlined',
title: tval('Configure columns'),
wrap(s) {
if (s['x-action-column']) {
return s;
}
return {
type: 'void',
'x-toolbar': 'TableColumnSchemaToolbar',
'x-settings': 'fieldSettings:TableColumn',
'x-decorator': 'TableV2.Column.Decorator',
'x-component': 'TableV2.Column',
properties: {
[s.name]: {
...s,
},
},
};
},
items: [
{
name: 'displayFields',
type: 'itemGroup',
title: tval('Display fields'),
useChildren: useTableColumnInitializerFields,
},
{
name: 'parentCollectionFields',
Component: ParentCollectionFields,
},
{
name: 'associationFields',
Component: AssociatedFields,
},
{
name: 'actionColumn',
title: tval('Action column'),
Component: 'AuditLogsTableActionColumnInitializer',
},
],
});