【问题标题】:React Admin - List View ⋮ "More Options" ButtonReact Admin - 列表视图⋮“更多选项”按钮
【发布时间】:2018-09-19 04:50:35
【问题描述】:

我正在使用React-Admin 框架并希望将按钮操作组合到单个 选项按钮。

基本上,我想转这个:

进入这个!

我认为它看起来不那么混乱, 按钮被广泛用于更多选项。

是否有现成的解决方案?或者如何轻松完成?

编辑:我的解决方案:

MoreOptions.jsx

import * as React from "react";
import { Link, DeleteButton } from "react-admin";
import IconButton from "@material-ui/core/IconButton";
import QueueIcon from "@material-ui/icons/Queue";
import EditIcon from "@material-ui/icons/Edit";

import _objectWithoutProperties from "babel-runtime/helpers/objectWithoutProperties";

const MyEditButton = (props) => (
  <IconButton 
    component={Link} 
    to={props.basePath + "/" + props.record.id} 
    color="primary" 
    aria-label="Edit"
  >
    <EditIcon style={{ fontSize: '20px' }} />
  </IconButton >
);

const MyCloneButton = (props) => (
  <IconButton component={Link} to={{
    pathname: props.basePath + '/create',
    state: {
      record: _objectWithoutProperties(props.record, ['id', 'paxDbName'])
    }
  }} color="primary" aria-label="Clone">
    <QueueIcon style={{ fontSize: '20px' }} />
  </IconButton>
);

const EditCloneDelete = (props) => {
  let a = props;
  return <div>
    <MyEditButton {...props} />
    <MyCloneButton {...props} />
    <DeleteButton basePath={props.basePath} record={props.record} resource={props.resource} label=""/>
  </div>;
};

export default EditCloneDelete

posts.jsx

import EditCloneDelete from './MoreOptions.jsx';

效果很好!

【问题讨论】:

    标签: react-admin


    【解决方案1】:

    我的解决方案是创建一个新组件,将所有按钮封装到一个单元格中。我也不显示标签。我确信有一个更清洁的解决方案,但我的快速方法是:

    const MyEditButton = (props) => (
        <IconButton classes={{root: props.classes.buttonSize}} component={Link} to={
            ${props.basePath} + "/" + ${props.record.id}
        } color="primary" aria-label="Edit"  ><EditIcon style={{fontSize: '20px'}}/></IconButton>
    );
    
    const MyCloneButton = (props) => (
        <IconButton classes={{root: props.classes.buttonSize}} component={Link} to={{
            pathname: props.basePath + '/create',
            state: {record: _objectWithoutProperties(props.record, ['id', 'paxDbName'])}
        }} color="primary" aria-label="Clone"><QueueIcon style={{fontSize: '20px'}}/></IconButton>
    );
    
    const styles = {
        buttonSize: {
            width: "28px",
            height: "28px",
        },
    };
    
    const EditCloneDelete = (props) => {
        let a = props;
        return (
            <div>
                <a href={
                    `http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/overview?namespace=${props.record.customerName ? props.record.customerName : props.record.name}`
                } target="dashboard">
                    <IconButton classes={{root: props.classes.buttonSize}} color="primary" aria-label="Edit"><img src={K8sIcon} style={{width: '20px', height: '20px'}}/></IconButton>
                </a>
                <MyEditButton {...props}/>
                <MyCloneButton {...props}/>
                <OptionalDeleteButton {...props} classes={{deleteButton: props.classes.buttonSize}} label={""} disabled={
                    !props.showDelete(props.record)
                }/>
            </div>
        );
    };
    
    export default compose(withStyles(styles))(EditCloneDelete)
    

    你可以很容易地创建一个第一类 React 组件,它是一个按钮容器,可以使这个子表更便于重用。

    【讨论】:

    • 谢谢戴夫!这几乎正​​是我想要的!我将在上面发布我的解决方案
    猜你喜欢
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多