mirror of https://github.com/msgbyte/tailchat
				
				
				
			
							parent
							
								
									bacb5b3031
								
							
						
					
					
						commit
						4f51ec4aa8
					
				@ -0,0 +1,47 @@
 | 
			
		||||
import React from 'react';
 | 
			
		||||
import filesize from 'filesize';
 | 
			
		||||
import {
 | 
			
		||||
  NumberFieldProps,
 | 
			
		||||
  sanitizeFieldRestProps,
 | 
			
		||||
  useRecordContext,
 | 
			
		||||
  useTranslate,
 | 
			
		||||
} from 'react-admin';
 | 
			
		||||
import get from 'lodash/get';
 | 
			
		||||
import { Typography } from '@mui/material';
 | 
			
		||||
 | 
			
		||||
export const FilesizeField: React.FC<NumberFieldProps> = React.memo((props) => {
 | 
			
		||||
  const { className, emptyText, source, locales, options, textAlign, ...rest } =
 | 
			
		||||
    props;
 | 
			
		||||
  const record = useRecordContext(props);
 | 
			
		||||
  const translate = useTranslate();
 | 
			
		||||
 | 
			
		||||
  if (!record) {
 | 
			
		||||
    return null;
 | 
			
		||||
  }
 | 
			
		||||
  const value = get(record, source!);
 | 
			
		||||
 | 
			
		||||
  if (value == null) {
 | 
			
		||||
    return emptyText ? (
 | 
			
		||||
      <Typography
 | 
			
		||||
        component="span"
 | 
			
		||||
        variant="body2"
 | 
			
		||||
        className={className}
 | 
			
		||||
        {...sanitizeFieldRestProps(rest)}
 | 
			
		||||
      >
 | 
			
		||||
        {emptyText && translate(emptyText, { _: emptyText })}
 | 
			
		||||
      </Typography>
 | 
			
		||||
    ) : null;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <Typography
 | 
			
		||||
      component="span"
 | 
			
		||||
      variant="body2"
 | 
			
		||||
      className={className}
 | 
			
		||||
      {...sanitizeFieldRestProps(rest)}
 | 
			
		||||
    >
 | 
			
		||||
      {filesize(value)}
 | 
			
		||||
    </Typography>
 | 
			
		||||
  );
 | 
			
		||||
});
 | 
			
		||||
FilesizeField.displayName = 'FilesizeField';
 | 
			
		||||
@ -0,0 +1,28 @@
 | 
			
		||||
import React from 'react';
 | 
			
		||||
import {
 | 
			
		||||
  Datagrid,
 | 
			
		||||
  DateField,
 | 
			
		||||
  List,
 | 
			
		||||
  NumberField,
 | 
			
		||||
  ReferenceField,
 | 
			
		||||
  TextField,
 | 
			
		||||
  UrlField,
 | 
			
		||||
} from 'react-admin';
 | 
			
		||||
import { FilesizeField } from '../components/FilesizeField';
 | 
			
		||||
 | 
			
		||||
export const FileList: React.FC = () => (
 | 
			
		||||
  <List>
 | 
			
		||||
    <Datagrid>
 | 
			
		||||
      <TextField source="objectName" label="对象存储名" />
 | 
			
		||||
      <UrlField source="url" target="__blank" label="文件路径" />
 | 
			
		||||
      <FilesizeField source="size" noWrap={true} />
 | 
			
		||||
      <TextField source="metaData.content-type" label="文件类型" />
 | 
			
		||||
      <TextField source="etag" />
 | 
			
		||||
      <ReferenceField source="userId" reference="users" label="存储用户">
 | 
			
		||||
        <TextField source="nickname" />
 | 
			
		||||
        (<TextField source="email" />)
 | 
			
		||||
      </ReferenceField>
 | 
			
		||||
      <DateField source="createdAt" label="创建时间" />
 | 
			
		||||
    </Datagrid>
 | 
			
		||||
  </List>
 | 
			
		||||
);
 | 
			
		||||
@ -0,0 +1,22 @@
 | 
			
		||||
import { defaultTheme } from 'react-admin';
 | 
			
		||||
import { ThemeOptions } from '@mui/material';
 | 
			
		||||
 | 
			
		||||
const customRaComponents = {
 | 
			
		||||
  RaDatagrid: {
 | 
			
		||||
    styleOverrides: {
 | 
			
		||||
      root: {
 | 
			
		||||
        '& .RaDatagrid-headerCell': {
 | 
			
		||||
          whiteSpace: 'nowrap',
 | 
			
		||||
        },
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const theme: ThemeOptions = {
 | 
			
		||||
  ...defaultTheme,
 | 
			
		||||
  components: {
 | 
			
		||||
    ...defaultTheme.components,
 | 
			
		||||
    ...customRaComponents,
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
					Loading…
					
					
				
		Reference in New Issue