Use the ReactTable Cell property and define the column as is:
import Moment from 'moment';
import * as React from "react";
import CSSModules from "react-css-modules";
import ReactTable from "react-table";
import "react-table/react-table.css";
import { Button, Confirm, Dimmer, Icon, Loader, Menu } from "semantic-ui-react";
import { history } from "../../_helpers";
import { ModifyButtons } from "../ModifyButtons";
import { TableMenu } from "../TableMenu";
import { WrappedButton } from "../WrappedButton";
const styles = require("./ServicesTable.less");
import "../../_style/custom-semantic.css";
const options = {
allowMultiple: true
};
@CSSModules(styles, options)
export class ServicesTable extends React.Component<any, any> {
public state = { open: false };
public columns = [
{
Header: "Name",
accessor: "name",
className: "column-center"
},...,
{
filterable: false,
sortable: false,
width: 100,
Cell: row => (
<TableMenu
rowprops={row}
onRemoveService={this.props.onRemoveService}
/>
),
className: "column-center"
}
public render() {
const { services } = this.props;
if (!services) {
return null;
}
if (services.loading) {
return (
<Dimmer active>
<Loader>Loading</Loader>
</Dimmer>
);
}
if (services.error) {
return <div>Error! {services.error.message}</div>;
}
return (
<ReactTable
filterable
defaultPageSize={10}
data={this.props.services.services}
columns={this.columns}
className="-striped -highlight"
/>
);
}
}
TableMenu.tsx
import * as React from "react";
import { confirmAlert } from "react-confirm-alert";
import "react-confirm-alert/src/react-confirm-alert.css";
import CSSModules from "react-css-modules";
import { Button, Dropdown, Icon, Menu } from "semantic-ui-react";
import { history } from "../../_helpers";
const styles = undefined;
const options = {
allowMultiple: true
};
@CSSModules(styles, options)
export class TableMenu extends React.Component<any, any> {
public onClickEditHandler = (e, data) => {
if (this.props.rowprops.original.team) {
history.push({
pathname: `customer/${
this.props.rowprops.original.team.customer.id
}/team/${this.props.rowprops.original.team.id}/service/account-rep
/${this.props.rowprops.original.location}/${
this.props.rowprops.original.id
}`
});
}
// Edit team
else if (this.props.rowprops.original.customer) {
history.push({
pathname: `customer/${this.props.rowprops.original.customer.id}/team/${
this.props.rowprops.row.id
}`
});
}
// Edit customer
else if (this.props.rowprops.original.id) {
history.push({
pathname: `customer/${this.props.rowprops.original.id}`
});
}
};
public onClickDeleteHandler = (e, data) => {
confirmAlert({
title: "Confirm delete",
message: "Are you sure?",
buttons: [
{
label: "No",
onClick: () => {
return;
}
},
{
label: "Yes",
onClick: () => {
if (this.props.onRemoveCustomer) {
this.props.onRemoveCustomer(this.props.rowprops.original.id);
}
if (this.props.onRemoveTeam) {
this.props.onRemoveTeam(
this.props.rowprops.original.customer.id,
this.props.rowprops.row.id
);
}
if (this.props.onRemoveService) {
this.props.onRemoveService(
this.props.rowprops.original.team.customer.id,
this.props.rowprops.original.team.id,
this.props.rowprops.original.location,
this.props.rowprops.original.id
);
}
}
}
]
});
};
public render() {
const {
rowprops,
onRemoveService,
onRemoveTeam,
onRemoveCustomer
} = this.props;
return (
<Dropdown icon="sidebar" floating>
<Dropdown.Menu>
<Dropdown.Item
text="Edit"
icon="edit"
onClick={this.onClickEditHandler}
/>
<Dropdown.Item
text="Delete"
icon="trash"
onClick={this.onClickDeleteHandler}
/>
</Dropdown.Menu>
</Dropdown>
);
}
}
custom-semantic.css
.column-center {
display: flex;
justify-content: center;
align-items: center;
}
/*Update for grid menu*/
.rt-tr .rt-td:last-child {
overflow: visible !important;
}
.rt-tr .rt-td .ui.floating.dropdown .menu {
left: -50px;
top: -13px;
}
No comments:
Post a Comment