162 lines
4.7 KiB
JavaScript
162 lines
4.7 KiB
JavaScript
import React from "react";
|
|
import {Link} from "react-router-dom";
|
|
import {Button, Col, Popconfirm, Row, Table} from "antd";
|
|
import moment from "moment";
|
|
import * as Setting from "./Setting";
|
|
import * as StoreBackend from "./backend/StoreBackend";
|
|
import i18next from "i18next";
|
|
|
|
class StoreListPage extends React.Component {
|
|
constructor(props) {
|
|
super(props);
|
|
this.state = {
|
|
classes: props,
|
|
stores: null,
|
|
};
|
|
}
|
|
|
|
UNSAFE_componentWillMount() {
|
|
this.getStores();
|
|
}
|
|
|
|
getStores() {
|
|
StoreBackend.getGlobalStores()
|
|
.then((res) => {
|
|
this.setState({
|
|
stores: res,
|
|
});
|
|
});
|
|
}
|
|
|
|
newStore() {
|
|
return {
|
|
owner: this.props.account.name,
|
|
name: `store_${this.state.stores.length}`,
|
|
createdTime: moment().format(),
|
|
displayName: `Store ${this.state.stores.length}`,
|
|
bucket: "bucket_name",
|
|
domain: "https://cdn.example.com",
|
|
propertiesMap: {},
|
|
};
|
|
}
|
|
|
|
addStore() {
|
|
const newStore = this.newStore();
|
|
StoreBackend.addStore(newStore)
|
|
.then((res) => {
|
|
Setting.showMessage("success", "Store added successfully");
|
|
this.setState({
|
|
stores: Setting.prependRow(this.state.stores, newStore),
|
|
});
|
|
})
|
|
.catch(error => {
|
|
Setting.showMessage("error", `Store failed to add: ${error}`);
|
|
});
|
|
}
|
|
|
|
deleteStore(i) {
|
|
StoreBackend.deleteStore(this.state.stores[i])
|
|
.then((res) => {
|
|
Setting.showMessage("success", "Store deleted successfully");
|
|
this.setState({
|
|
stores: Setting.deleteRow(this.state.stores, i),
|
|
});
|
|
})
|
|
.catch(error => {
|
|
Setting.showMessage("error", `Store failed to delete: ${error}`);
|
|
});
|
|
}
|
|
|
|
renderTable(stores) {
|
|
const columns = [
|
|
{
|
|
title: i18next.t("general:Name"),
|
|
dataIndex: "name",
|
|
key: "name",
|
|
width: "300px",
|
|
sorter: (a, b) => a.name.localeCompare(b.name),
|
|
render: (text, record, index) => {
|
|
return (
|
|
<Link to={`/stores/${record.owner}/${text}/view`}>
|
|
{text}
|
|
</Link>
|
|
);
|
|
},
|
|
},
|
|
{
|
|
title: i18next.t("general:Display name"),
|
|
dataIndex: "displayName",
|
|
key: "displayName",
|
|
// width: '200px',
|
|
sorter: (a, b) => a.displayName.localeCompare(b.displayName),
|
|
},
|
|
{
|
|
title: i18next.t("general:Action"),
|
|
dataIndex: "action",
|
|
key: "action",
|
|
width: "240px",
|
|
render: (text, record, index) => {
|
|
return (
|
|
<div>
|
|
<Button style={{marginTop: "10px", marginBottom: "10px", marginRight: "10px"}} onClick={() => this.props.history.push(`/stores/${record.owner}/${record.name}/view`)}>{i18next.t("general:View")}</Button>
|
|
{
|
|
!Setting.isLocalAdminUser(this.props.account) ? null : (
|
|
<React.Fragment>
|
|
<Button style={{marginBottom: "10px", marginRight: "10px"}} type="primary" onClick={() => this.props.history.push(`/stores/${record.owner}/${record.name}`)}>{i18next.t("general:Edit")}</Button>
|
|
<Popconfirm
|
|
title={`Sure to delete store: ${record.name} ?`}
|
|
onConfirm={() => this.deleteStore(index)}
|
|
okText="OK"
|
|
cancelText="Cancel"
|
|
>
|
|
<Button style={{marginBottom: "10px"}} type="danger">{i18next.t("general:Delete")}</Button>
|
|
</Popconfirm>
|
|
</React.Fragment>
|
|
)
|
|
}
|
|
</div>
|
|
);
|
|
},
|
|
},
|
|
];
|
|
|
|
return (
|
|
<div>
|
|
<Table columns={columns} dataSource={stores} rowKey="name" size="middle" bordered pagination={{pageSize: 100}}
|
|
title={() => (
|
|
<div>
|
|
{i18next.t("general:Stores")}
|
|
{
|
|
!Setting.isLocalAdminUser(this.props.account) ? null : (
|
|
<Button type="primary" size="small" onClick={this.addStore.bind(this)}>{i18next.t("general:Add")}</Button>
|
|
)
|
|
}
|
|
</div>
|
|
)}
|
|
loading={stores === null}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
render() {
|
|
return (
|
|
<div>
|
|
<Row style={{width: "100%"}}>
|
|
<Col span={1}>
|
|
</Col>
|
|
<Col span={22}>
|
|
{
|
|
this.renderTable(this.state.stores)
|
|
}
|
|
</Col>
|
|
<Col span={1}>
|
|
</Col>
|
|
</Row>
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
|
|
export default StoreListPage;
|