feat(admin-next): add file list

pull/90/head
moonrailgun 2 years ago
parent 2b20aee3dd
commit d68108b21a

@ -1602,6 +1602,9 @@ importers:
express-mongoose-ra-json-server: express-mongoose-ra-json-server:
specifier: ^0.1.0 specifier: ^0.1.0
version: 0.1.0(express@4.18.2)(mongoose@6.1.1) version: 0.1.0(express@4.18.2)(mongoose@6.1.1)
filesize:
specifier: ^8.0.7
version: 8.0.7
jsonwebtoken: jsonwebtoken:
specifier: ^8.5.1 specifier: ^8.5.1
version: 8.5.1 version: 8.5.1

@ -15,6 +15,7 @@
"compression": "^1.7.4", "compression": "^1.7.4",
"express": "^4.18.2", "express": "^4.18.2",
"express-mongoose-ra-json-server": "^0.1.0", "express-mongoose-ra-json-server": "^0.1.0",
"filesize": "^8.0.7",
"jsonwebtoken": "^8.5.1", "jsonwebtoken": "^8.5.1",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"md5": "^2.3.0", "md5": "^2.3.0",

@ -5,9 +5,9 @@ import {
Resource, Resource,
Tushan, Tushan,
} from 'tushan'; } from 'tushan';
import { IconMessage, IconUser } from 'tushan/icon'; import { IconFile, IconMessage, IconUser, IconUserGroup } from 'tushan/icon';
import { authProvider } from './auth'; import { authProvider } from './auth';
import { groupFields, messageFields, userFields } from './fields'; import { fileFields, groupFields, messageFields, userFields } from './fields';
import { httpClient } from './request'; import { httpClient } from './request';
const dataProvider = jsonServerProvider('/admin/api', httpClient); const dataProvider = jsonServerProvider('/admin/api', httpClient);
@ -56,7 +56,7 @@ function App() {
<Resource <Resource
name="groups" name="groups"
label="Groups" label="Groups"
icon={<IconMessage />} icon={<IconUserGroup />}
list={ list={
<ListTable <ListTable
filter={[ filter={[
@ -69,6 +69,23 @@ function App() {
/> />
} }
/> />
<Resource
name="file"
label="Files"
icon={<IconFile />}
list={
<ListTable
filter={[
createTextField('q', {
label: 'Search',
}),
]}
fields={fileFields}
action={{ detail: true }}
/>
}
/>
</Tushan> </Tushan>
); );
} }

@ -0,0 +1,13 @@
import React from 'react';
import filesize from 'filesize';
import { createFieldFactory, FieldDetailComponent } from 'tushan';
export const FileSizeFieldDetail: FieldDetailComponent = React.memo((props) => {
return <span>{filesize(Number(props.value))}</span>;
});
FileSizeFieldDetail.displayName = 'FileSizeFieldDetail';
export const createFileSizeField = createFieldFactory({
detail: FileSizeFieldDetail,
edit: FileSizeFieldDetail,
});

@ -1,10 +1,13 @@
import { import {
createAvatarField,
createEmailField, createEmailField,
createImageField,
createTextField, createTextField,
createBooleanField, createBooleanField,
createAvatarField,
createJSONField,
createDateTimeField,
createUrlField,
} from 'tushan'; } from 'tushan';
import { createFileSizeField } from './components/field/filesize';
export const userFields = [ export const userFields = [
createTextField('id', { createTextField('id', {
@ -25,22 +28,21 @@ export const userFields = [
createBooleanField('temporary', { createBooleanField('temporary', {
label: 'Temporary', label: 'Temporary',
}), }),
createImageField('avatar', { createAvatarField('avatar', {
label: 'Avatar', label: 'Avatar',
height: 42,
}), }),
createTextField('settings', { createJSONField('settings', {
label: 'Settings', label: 'Settings',
list: { list: {
width: 200, width: 200,
}, },
}),
createDateTimeField('createdAt', {
format: 'iso',
edit: { edit: {
hidden: true, // wait for json field hidden: true,
}, },
}), }),
createTextField('createdAt', {
label: 'Created At',
}),
]; ];
export const messageFields = [ export const messageFields = [
@ -56,8 +58,13 @@ export const messageFields = [
createTextField('groupId'), createTextField('groupId'),
createTextField('converseId'), createTextField('converseId'),
createBooleanField('hasRecall'), createBooleanField('hasRecall'),
createTextField('reactions'), createJSONField('reactions'),
createTextField('createdAt'), createDateTimeField('createdAt', {
format: 'iso',
edit: {
hidden: true,
},
}),
]; ];
export const groupFields = [ export const groupFields = [
@ -76,7 +83,28 @@ export const groupFields = [
hidden: true, hidden: true,
}, },
}), }),
createTextField('roles'), createJSONField('roles'),
createTextField('fallbackPermissions'), createJSONField('fallbackPermissions'),
createTextField('createdAt'), createDateTimeField('createdAt', {
format: 'iso',
edit: {
hidden: true,
},
}),
];
export const fileFields = [
createTextField('objectName'),
createUrlField('url'),
createFileSizeField('size', {
list: {
width: 120,
},
}),
createTextField('metaData.content-type', {
label: 'Content Type',
}),
createTextField('etag'),
createTextField('userId'),
createDateTimeField('createdAt'),
]; ];

Loading…
Cancel
Save