diff --git a/server/admin/src/client/components/field/imageUrl.tsx b/server/admin/src/client/components/field/imageUrl.tsx new file mode 100644 index 00000000..2ce4427b --- /dev/null +++ b/server/admin/src/client/components/field/imageUrl.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import { createFieldFactory, FieldDetailComponent, Image, Link } from 'tushan'; + +export const ImageUrlFieldDetail: FieldDetailComponent = React.memo((props) => { + const url = props.value; + const isImage = ['.png', '.jpg', '.gif', '.jpeg', '.webp'].some((ext) => + String(url).endsWith(ext) + ); + + if (isImage) { + return ; + } + + return ( + + {props.value} + + ); +}); +ImageUrlFieldDetail.displayName = 'ImageUrlFieldDetail'; + +export const createImageUrlField = createFieldFactory({ + detail: ImageUrlFieldDetail, + edit: ImageUrlFieldDetail, +}); diff --git a/server/admin/src/client/fields.ts b/server/admin/src/client/fields.ts index 91b95289..99f8e18d 100644 --- a/server/admin/src/client/fields.ts +++ b/server/admin/src/client/fields.ts @@ -14,6 +14,7 @@ import { 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', { @@ -152,7 +153,7 @@ export const groupFields = [ export const fileFields = [ createTextField('objectName'), - createUrlField('url', { + createImageUrlField('url', { preRenderTransform: parseUrlStr, }), createFileSizeField('size', {