Files
chat/server/admin/src/client/fields.ts
2026-04-25 16:36:34 +08:00

229 lines
4.1 KiB
TypeScript

import {
createEmailField,
createTextField,
createBooleanField,
createAvatarField,
createJSONField,
createDateTimeField,
createUrlField,
emailValidator,
createNumberField,
createReferenceField,
createTextAreaField,
} from 'tushan';
import { createFileSizeField } from './components/field/filesize';
import { createUserField } from './components/field/user';
import { parseUrlStr } from './utils';
import { createImageUrlField } from './components/field/imageUrl';
export const userFields = [
createTextField('id', {
list: {
sort: true,
},
}),
createEmailField('email', {
edit: {
rules: [
{
required: true,
},
{
validator: emailValidator,
},
],
},
}),
createTextField('nickname'),
createTextField('discriminator', {
edit: {
rules: [
{
required: true,
},
{
match: /\d{4}/,
},
],
},
}),
createBooleanField('temporary'),
createAvatarField('avatar', {
preRenderTransform: (val) =>
typeof val === 'string' ? parseUrlStr(val) : val,
}),
createTextField('type', {
edit: {
hidden: true,
},
}),
createBooleanField('emailVerified'),
createBooleanField('banned', {
edit: {
hidden: true,
},
}),
createJSONField('settings', {
list: {
width: 200,
},
}),
createDateTimeField('createdAt', {
format: 'iso',
edit: {
hidden: true,
},
}),
];
export const messageFields = [
createTextField('id', {
list: {
sort: true,
},
}),
createTextAreaField('content', {
list: {
width: 400,
ellipsis: true,
},
}),
createUserField('author', {
reference: 'users',
displayField: 'nickname',
list: {
width: 80,
},
}),
createReferenceField('groupId', {
reference: 'groups',
displayField: 'name',
list: {
width: 80,
},
}),
createTextField('converseId'),
createBooleanField('hasRecall'),
createJSONField('reactions'),
createDateTimeField('createdAt', {
format: 'iso',
edit: {
hidden: true,
},
}),
];
export const groupFields = [
createTextField('id'),
createTextField('name'),
createReferenceField('owner', {
reference: 'users',
displayField: (record) => `${record.nickname}#${record.discriminator}`,
list: {
width: 160,
},
}),
createTextField('members.length', {
edit: {
hidden: true,
},
}),
createTextField('panels.length', {
edit: {
hidden: true,
},
}),
createJSONField('roles', {
edit: {
hidden: true,
},
}),
createJSONField('fallbackPermissions', {
edit: {
hidden: true,
},
}),
createDateTimeField('createdAt', {
format: 'iso',
edit: {
hidden: true,
},
}),
];
export const fileFields = [
createTextField('objectName', {
list: {
width: 320,
},
}),
createImageUrlField('url', {
preRenderTransform: parseUrlStr,
list: {
width: 140,
},
}),
createTextField('usage', {
list: {
width: 100,
},
}),
createFileSizeField('size', {
list: {
width: 120,
sort: true,
},
}),
createTextField('metaData.content-type'),
createTextField('etag', {
list: {
width: 300,
},
}),
createUserField('userId', {
reference: 'users',
displayField: 'nickname',
list: {
width: 200,
ellipsis: true,
},
}),
createDateTimeField('createdAt', {
list: {
sort: true,
},
}),
];
export const mailFields = [
createTextField('to'),
createTextField('subject'),
createTextField('host'),
createNumberField('port'),
createBooleanField('secure'),
createBooleanField('is_success'),
createJSONField('data'),
createTextField('error'),
createDateTimeField('createdAt'),
];
export const discoverFields = [
createReferenceField('groupId', {
reference: 'groups',
displayField: 'name',
}),
createBooleanField('active', {
edit: {
default: true,
},
}),
createNumberField('order', {
edit: {
default: 0,
},
list: {
sort: true,
},
}),
];