简体   繁体   English

如何在 react-admin 中更改数据网格行文本颜色?

[英]How to change datagrid rows text color in react-admin?

I want change a text color for row, but can't find decision.我想更改行的文本颜色,但找不到决定。 I tried this code.我试过这段代码。 "color" not working, but "backgroundColor" working. “颜色”不起作用,但“背景颜色”起作用。

export const CustomersList = props => {
    const DatagridUsersProps = {
        rowStyle: (record, index) => {
            return {
                color: "#FFCC00",
                backgroundColor: (record.is_blocked || record['is_deleted']) && "silver",
            };
        }
    };
    return (
        <List
            {...props}
        >
            <ScrollingWrapper>
                <Datagrid {...DatagridUsersProps}>
                    <TextField source="id" />
                    <LinkField source="first_name" />
                    <LinkField source="last_name" />
                    <EmailField source="email" />
                    <PhoneField source="phone" />
                </Datagrid>
            </ScrollingWrapper>
        </List>
    );
}

Thank you for any sample code or link to do that!感谢您提供任何示例代码或链接!

I believe you can override component class using their makeStyle hooks.我相信您可以使用他们的 makeStyle 钩子覆盖组件 class 。 Find the component class name using inspect element.使用检查元素查找组件 class 名称。

const useStyles = makeStyles({
table: {
    backgroundColor: 'Lavender',
},
headerCell: {
    backgroundColor: 'MistyRose',
}
cell: {
    backgroundColor: 'Pink',
}, });

as per their documentation here https://marmelab.com/react-admin/doc/3.19/Theming.html根据他们的文档https://marmelab.com/react-admin/doc/3.19/Theming.html

you may want to override not only the root component style, but also the style of components inside the root.您可能不仅要覆盖根组件样式,还要覆盖根内部组件的样式。 In this case, the className property isn't enough.在这种情况下,className 属性是不够的。 You can take advantage of the classes property to customize the classes that the component uses internally.您可以利用 classes 属性来自定义组件内部使用的类。

hope this helps希望这可以帮助

For decide this problem i used combination of styled components, useStyles and rowStyle for Datagrid.为了确定这个问题,我使用了样式组件的组合,用于 Datagrid 的 useStyles 和 rowStyle。

StyledEmailField.js: StyledEmailField.js:

import {makeStyles} from "@material-ui/core/styles";
import {EmailField} from "react-admin";
import React from "react";
import classnames from 'classnames';

const useStyles = makeStyles({
    isDeleted: {
        textDecoration: "line-through",
    },
});

export const DatagridUsersProps = {
    rowStyle: (record, index) => {
        return {
            backgroundColor: (record.is_blocked) && "silver",
            color: (record.is_deleted) && "#616161",
        };
    }
};
export const StyledEmailField = props => {
    const classes = useStyles();
    return (
        <EmailField
            className={classnames({
                [classes.isDeleted]: props.record.is_deleted,
            })}
            {...props}
        />
    );
};

UseStales.js: UseStales.js:

import React from "react";
import {makeStyles} from "@material-ui/core/styles";

export const stylesForUsersList = makeStyles({
    root: {
        "& td": {
            color: 'inherit',
        },
        "& table": {
            color: 'inherit',
        },
        "& td a, & td a span": {
            color: 'inherit',
        },
        "& td span": {
            color: 'inherit',
        }
    }
});

List.jsx:列表.jsx:

import React from "react";
import { List, Datagrid, TextField, EditButton,usePermissions} from 'react-admin';

import { ScrollingWrapper } from '../../../components/ScrollingWrapper';
import { StyledEmailField } from '../../../components/fields/StyledEmailField';
import { CustomersFilter } from './ListFilters';
import {HideBlockUnblockButtonIfDeleted} from '../../../components/toolbars/BlockUnblockButton';
import DeleteRestoreButtons from '../../../components/toolbars/DeleteRestoreButtons';
import {DatagridUsersProps} from "../../../components/_helpers/props/DatagridProps";
import {stylesForUsersList,
} from "../../../components/_helpers/useStyles";
import {UserRole} from "../../../entities";

const defaultSort = { field: 'id', order: 'DESC' };


export const CustomersList = props => {
    const classes = stylesForUsersList()

    const { permissions } = usePermissions();
    if (!permissions) {
        return null;

    }
    return (
        <List
            {...props}
            sort={defaultSort}
            exporter={false}
            bulkActionButtons={false}
            filters={<CustomersFilter />}
            perPage={22}
            classes={classes}
        >
            <ScrollingWrapper>
                <Datagrid {...DatagridUsersProps}>
                    <TextField source="id" />
                    <TextField source="first_name" />
                    <TextField source="last_name" />
                    <StyledEmailField source="email" />     
                    <HideBlockUnblockButtonIfDeleted entity={"user"}/>
                    {(permissions.role === UserRole.admin) &&
                        <DeleteRestoreButtons/>}
                </Datagrid>
            </ScrollingWrapper>
        </List>
    );
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM