2 votes

Comment modifier la taille d'une image dans un ImageField ?

Lorsque je modifie la largeur et la hauteur de l'image à l'aide des styles, seule la largeur de la colonne change. La taille de l'image n'est pas affectée.

Des idées ?

Sans style Screen Shot 2019-04-06 at 2 49 47 PM

Avec des styles Screen Shot 2019-04-06 at 2 49 32 PM

Repro CodeSandbox ( https://codesandbox.io/embed/54r440jp8k )

import React from "react";
import { Datagrid, ImageField, List, TextField } from "react-admin"; // eslint-disable-line import/no-unresolved
import { withStyles } from "material-ui/styles";

const styles = {
  image: {
    width: "20px",
    height: "20px"
  }
};

export const PostList = withStyles(styles)(({ classes, ...props }) => (
  <List {...props}>
    <Datagrid>
      <ImageField source="image.url" className={classes.image} />
      <TextField source="id" />
      <TextField source="title" />
    </Datagrid>
  </List>
));

Utilisation de

  • Version de React-admin : 2.8.5
  • Version de React : 16.8.6
  • Navigateur : Chrome Version 73.0.3683.86 (Official Build) (64-bit)

4voto

Kosch Points 434

Vous aurez peut-être besoin d'un composant personnalisé pour faire quelque chose comme ça. Que diriez-vous de quelque chose comme ça ?

ListAvatar.js

import React from 'react';
import Avatar from '@material-ui/core/Avatar';

const ListAvatar = ({ record, size }) => (
    <Avatar
        src={`${record.url.image}?size=${size}x${size}`}
        size={size}
        style={{
          width: size,
          height: size
        }}
    />
);

ListAvatar.defaultProps = {
    size: 30,
};

export default ListAvatar;

PostList.js

import React from "react";
import { Datagrid, List, TextField } from "react-admin"; // eslint-disable-line import/no-unresolved
import ListAvatar from './ListAvatar.js'
import { withStyles } from "material-ui/styles";

export const PostList = ({ classes, ...props }) => (
  <List {...props}>
    <Datagrid>
      <ListAvatar />
      <TextField source="id" />
      <TextField source="title" />
    </Datagrid>
  </List>
);

1voto

Rafe Points 313

Dans le prolongement du message de Shawn K (merci pour l'orientation !)...

Je pense qu'il s'agit d'un composant complet (j'ai testé la surcharge des classes à partir de la base de données de l'entreprise). <List /> et cela fonctionne. Cela suit également react-admin y material-ui docs (et normes). Cependant, comme je suis encore assez novice en la matière, je vous invite à me faire part de toute correction et je mettrai ce document à jour.

import React from "react";
import PropTypes from "prop-types";
import { withStyles } from "@material-ui/core/styles";
import classNames from "classnames";

import Avatar from "@material-ui/core/Avatar";

const styles = {
  img: {
    width: 36,
    height: 36
  },
  root: {}
};

const ListAvatar = ({ className, record, source, classes }) => {
  return (
    <Avatar
      src={record[source]}
      className={classNames(classes.root, classes.img, className)}
    />
  );
};

ListAvatar.propTypes = {
  label: PropTypes.string,
  record: PropTypes.object,
  source: PropTypes.string.isRequired,
  classes: PropTypes.object.isRequired,
  className: PropTypes.string
};

export default withStyles(styles)(ListAvatar);

Documents de référence

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X