From d68108b21a1b7e9da6edf56d0bc41443927fe461 Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Tue, 9 May 2023 15:44:43 +0800 Subject: [PATCH] feat(admin-next): add file list --- pnpm-lock.yaml | 3 + server/admin-next/package.json | 1 + server/admin-next/src/client/App.tsx | 23 +++++++- .../src/client/components/field/filesize.tsx | 13 +++++ server/admin-next/src/client/fields.ts | 56 ++++++++++++++----- 5 files changed, 79 insertions(+), 17 deletions(-) create mode 100644 server/admin-next/src/client/components/field/filesize.tsx diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c263a243..dfbc5fe0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1602,6 +1602,9 @@ importers: express-mongoose-ra-json-server: specifier: ^0.1.0 version: 0.1.0(express@4.18.2)(mongoose@6.1.1) + filesize: + specifier: ^8.0.7 + version: 8.0.7 jsonwebtoken: specifier: ^8.5.1 version: 8.5.1 diff --git a/server/admin-next/package.json b/server/admin-next/package.json index 171597e1..e94bdee5 100644 --- a/server/admin-next/package.json +++ b/server/admin-next/package.json @@ -15,6 +15,7 @@ "compression": "^1.7.4", "express": "^4.18.2", "express-mongoose-ra-json-server": "^0.1.0", + "filesize": "^8.0.7", "jsonwebtoken": "^8.5.1", "lodash": "^4.17.21", "md5": "^2.3.0", diff --git a/server/admin-next/src/client/App.tsx b/server/admin-next/src/client/App.tsx index 7d562d3a..aca31cf7 100644 --- a/server/admin-next/src/client/App.tsx +++ b/server/admin-next/src/client/App.tsx @@ -5,9 +5,9 @@ import { Resource, Tushan, } from 'tushan'; -import { IconMessage, IconUser } from 'tushan/icon'; +import { IconFile, IconMessage, IconUser, IconUserGroup } from 'tushan/icon'; import { authProvider } from './auth'; -import { groupFields, messageFields, userFields } from './fields'; +import { fileFields, groupFields, messageFields, userFields } from './fields'; import { httpClient } from './request'; const dataProvider = jsonServerProvider('/admin/api', httpClient); @@ -56,7 +56,7 @@ function App() { } + icon={} list={ } /> + + } + list={ + + } + /> ); } diff --git a/server/admin-next/src/client/components/field/filesize.tsx b/server/admin-next/src/client/components/field/filesize.tsx new file mode 100644 index 00000000..960963b6 --- /dev/null +++ b/server/admin-next/src/client/components/field/filesize.tsx @@ -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 {filesize(Number(props.value))}; +}); +FileSizeFieldDetail.displayName = 'FileSizeFieldDetail'; + +export const createFileSizeField = createFieldFactory({ + detail: FileSizeFieldDetail, + edit: FileSizeFieldDetail, +}); diff --git a/server/admin-next/src/client/fields.ts b/server/admin-next/src/client/fields.ts index 03392ee9..6715fc09 100644 --- a/server/admin-next/src/client/fields.ts +++ b/server/admin-next/src/client/fields.ts @@ -1,10 +1,13 @@ import { - createAvatarField, createEmailField, - createImageField, createTextField, createBooleanField, + createAvatarField, + createJSONField, + createDateTimeField, + createUrlField, } from 'tushan'; +import { createFileSizeField } from './components/field/filesize'; export const userFields = [ createTextField('id', { @@ -25,22 +28,21 @@ export const userFields = [ createBooleanField('temporary', { label: 'Temporary', }), - createImageField('avatar', { + createAvatarField('avatar', { label: 'Avatar', - height: 42, }), - createTextField('settings', { + createJSONField('settings', { label: 'Settings', list: { width: 200, }, + }), + createDateTimeField('createdAt', { + format: 'iso', edit: { - hidden: true, // wait for json field + hidden: true, }, }), - createTextField('createdAt', { - label: 'Created At', - }), ]; export const messageFields = [ @@ -56,8 +58,13 @@ export const messageFields = [ createTextField('groupId'), createTextField('converseId'), createBooleanField('hasRecall'), - createTextField('reactions'), - createTextField('createdAt'), + createJSONField('reactions'), + createDateTimeField('createdAt', { + format: 'iso', + edit: { + hidden: true, + }, + }), ]; export const groupFields = [ @@ -76,7 +83,28 @@ export const groupFields = [ hidden: true, }, }), - createTextField('roles'), - createTextField('fallbackPermissions'), - createTextField('createdAt'), + createJSONField('roles'), + createJSONField('fallbackPermissions'), + 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'), ];