static.console-fe.src.pages.ServiceManagement.ServiceDetail.InstanceTable.js Maven / Gradle / Ivy
/*
* Copyright 1999-2018 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import PropTypes from 'prop-types';
import { request } from '../../../globalLib';
import { Button, ConfigProvider, Message, Pagination, Table } from '@alifd/next';
import { HEALTHY_COLOR_MAPPING } from './constant';
import EditInstanceDialog from './EditInstanceDialog';
@ConfigProvider.config
class InstanceTable extends React.Component {
static displayName = 'InstanceTable';
static propTypes = {
locale: PropTypes.object,
clusterName: PropTypes.string,
serviceName: PropTypes.string,
groupName: PropTypes.string,
};
constructor(props) {
super(props);
this.editInstanceDialog = React.createRef();
this.state = {
loading: false,
instance: { count: 0, list: [] },
pageNum: 1,
pageSize: 10,
};
}
componentDidMount() {
this.getInstanceList();
}
openLoading() {
this.setState({ loading: true });
}
closeLoading() {
this.setState({ loading: false });
}
getInstanceList() {
const { clusterName, serviceName, groupName } = this.props;
if (!clusterName) return;
const { pageSize, pageNum } = this.state;
request({
url: 'v1/ns/catalog/instances',
data: {
serviceName,
clusterName,
groupName,
pageSize,
pageNo: pageNum,
},
beforeSend: () => this.openLoading(),
success: instance => this.setState({ instance }),
complete: () => this.closeLoading(),
});
}
openInstanceDialog(instance) {
this.editInstanceDialog.current.getInstance().show(instance);
}
switchState(index, record) {
const { instance } = this.state;
const { ip, port, ephemeral, weight, enabled, metadata } = record;
const { clusterName, serviceName, groupName } = this.props;
request({
method: 'PUT',
url: 'v1/ns/instance',
data: {
serviceName,
clusterName,
groupName,
ip,
port,
ephemeral,
weight,
enabled: !enabled,
metadata: JSON.stringify(metadata),
},
dataType: 'text',
beforeSend: () => this.openLoading(),
success: () => {
const newVal = Object.assign({}, instance);
newVal.list[index].enabled = !enabled;
this.setState({ instance: newVal });
},
error: e => Message.error(e.responseText || 'error'),
complete: () => this.closeLoading(),
});
}
onChangePage(pageNum) {
this.setState({ pageNum }, () => this.getInstanceList());
}
rowColor = ({ healthy }) => ({ className: `row-bg-${HEALTHY_COLOR_MAPPING[`${healthy}`]}` });
render() {
const { locale = {} } = this.props;
const { clusterName, serviceName, groupName } = this.props;
const { instance, pageSize, loading } = this.state;
return instance.count ? (
`${val}`}
/>
`${val}`}
/>
{
if (!metadata) return null;
return Object.keys(metadata).map(k => (
{k}={metadata[k]}
));
}}
/>
(
)}
/>
{instance.count > pageSize ? (
this.onChangePage(currentPage)}
/>
) : null}
this.openLoading()}
closeLoading={() => this.closeLoading()}
getInstanceList={() => this.getInstanceList()}
/>
) : null;
}
}
export default InstanceTable;