diff --git a/releasenotes/notes/Support-Clear-Selected-80e66080d37c96e3.yaml b/releasenotes/notes/Support-Clear-Selected-80e66080d37c96e3.yaml
new file mode 100644
index 00000000..91e17791
--- /dev/null
+++ b/releasenotes/notes/Support-Clear-Selected-80e66080d37c96e3.yaml
@@ -0,0 +1,5 @@
+---
+features:
+ - |
+ Add clear selected button to clear all the selected data for the
+ select-table and tab-select-table component.
diff --git a/src/components/FormItem/SelectTable/index.jsx b/src/components/FormItem/SelectTable/index.jsx
index e3b8dd5b..0e7cba12 100644
--- a/src/components/FormItem/SelectTable/index.jsx
+++ b/src/components/FormItem/SelectTable/index.jsx
@@ -13,7 +13,8 @@
// limitations under the License.
import React from 'react';
-import { Radio, Tag } from 'antd';
+import { Radio, Tag, Button, Tooltip } from 'antd';
+import { ClearOutlined } from '@ant-design/icons';
import { observer } from 'mobx-react';
import PropTypes from 'prop-types';
import MagicInput from 'components/MagicInput';
@@ -49,6 +50,23 @@ const getInitRows = (value, data, backendPageStore) => {
return rows;
};
+export const renderClearButton = (self, rows, props = {}) => {
+ const { showSelected = true } = props;
+ if (!showSelected) {
+ return null;
+ }
+ if (!rows || !rows.length) {
+ return null;
+ }
+ return (
+
+
+
+ );
+};
+
@observer
export default class SelectTable extends React.Component {
static propTypes = {
@@ -581,6 +599,13 @@ export default class SelectTable extends React.Component {
});
};
+ clearSelected = () => {
+ this.setState({
+ selectedRowKeys: [],
+ selectedRows: [],
+ });
+ };
+
initTabChange() {
const { defaultTabValue, onTabChange, value } = this.props;
if (defaultTabValue !== undefined && onTabChange !== undefined) {
@@ -795,6 +820,10 @@ export default class SelectTable extends React.Component {
);
+ renderClearButton = (rows) => {
+ return renderClearButton(this, rows, this.props);
+ };
+
renderSelected() {
const { showSelected = true, selectedLabel, maxSelectedCount } = this.props;
if (maxSelectedCount === -1) {
@@ -806,9 +835,11 @@ export default class SelectTable extends React.Component {
}
const rows = isEmpty(selectedRows) ? this.getSelectedRows() : selectedRows;
const items = rows.map((it) => this.renderTag(it));
+ const clearButton = this.renderClearButton(rows);
return (
- {t('Selected')} {selectedLabel}: {items}
+ {t('Selected')} {selectedLabel}: {clearButton}
+ {items}
);
}
diff --git a/src/components/FormItem/TabSelectTable/index.jsx b/src/components/FormItem/TabSelectTable/index.jsx
index eaf038e8..a36b1182 100644
--- a/src/components/FormItem/TabSelectTable/index.jsx
+++ b/src/components/FormItem/TabSelectTable/index.jsx
@@ -13,7 +13,9 @@
// limitations under the License.
import React, { Component } from 'react';
-import SelectTable from 'components/FormItem/SelectTable';
+import SelectTable, {
+ renderClearButton,
+} from 'components/FormItem/SelectTable';
import { Tabs, Tag } from 'antd';
import { isEmpty } from 'lodash';
@@ -81,6 +83,18 @@ export default class TabSelectTable extends Component {
});
};
+ clearSelected = () => {
+ this.setState(
+ {
+ selectedRowKeys: [],
+ selectedRows: [],
+ },
+ () => {
+ this.onChangeValue();
+ }
+ );
+ };
+
onTagClose = (itemKey) => {
const { selectedRowKeys, selectedRows } = this.state;
const newKeys = selectedRowKeys.filter((it) => it !== itemKey);
@@ -162,12 +176,17 @@ export default class TabSelectTable extends Component {
);
+ renderClearButton = (rows) => {
+ return renderClearButton(this, rows);
+ };
+
renderSelected() {
const { selectedRows } = this.state;
const items = selectedRows.map((it) => this.renderTag(it));
+ const clearButton = this.renderClearButton(selectedRows);
return (
- {t('Selected')} : {items}
+ {t('Selected')} : {clearButton} {items}
);
}
diff --git a/src/locales/en.json b/src/locales/en.json
index 143be4ad..188d543e 100644
--- a/src/locales/en.json
+++ b/src/locales/en.json
@@ -348,6 +348,7 @@
"Clean Wait": "Clean Wait",
"Cleaning": "Cleaning",
"Clear Gateway": "Clear Gateway",
+ "Clear selected": "Clear selected",
"Click To View": "Click To View",
"Click here for filters.": "Click here for filters.",
"Click to Upload": "Click to Upload",
diff --git a/src/locales/ko-kr.json b/src/locales/ko-kr.json
index 15ebfc39..5f3b4f3c 100644
--- a/src/locales/ko-kr.json
+++ b/src/locales/ko-kr.json
@@ -347,6 +347,7 @@
"Clean Wait": "",
"Cleaning": "",
"Clear Gateway": "",
+ "Clear selected": "선택 비우기",
"Click To View": "",
"Click here for filters.": "",
"Click to Upload": "",
diff --git a/src/locales/zh-hans.json b/src/locales/zh-hans.json
index 43984a28..5d57b3fb 100644
--- a/src/locales/zh-hans.json
+++ b/src/locales/zh-hans.json
@@ -347,6 +347,7 @@
"Clean Wait": "等待清除",
"Cleaning": "清除中",
"Clear Gateway": "清除网关",
+ "Clear selected": "清空选中",
"Click To View": "点击查看",
"Click here for filters.": "筛选",
"Click to Upload": "点击上传文件",