diff --git a/src/components/ModalButton/index.jsx b/src/components/ModalButton/index.jsx index d85f0bd7..66b8da92 100644 --- a/src/components/ModalButton/index.jsx +++ b/src/components/ModalButton/index.jsx @@ -65,6 +65,34 @@ export default class ModalButton extends Component { }; } + componentWillUnmount() { + this.removeListener(); + } + + addListener = () => { + const modalTarget = + document.getElementsByClassName('modal-button-modal')[0]; + this.modalTarget = modalTarget; + if (modalTarget) { + this.listenerResult = modalTarget.addEventListener( + 'click', + this.onClickModal + ); + } + }; + + removeListener = () => { + const modalTarget = + document.getElementsByClassName('modal-button-modal')[0]; + if (modalTarget) { + this.listenerResult = modalTarget.removeEventListener( + 'click', + this.onClickModal + ); + } + this.modalTarget = null; + }; + getModalWidth = (size) => { switch (size) { case 'small': @@ -79,7 +107,7 @@ export default class ModalButton extends Component { }; onClick = (e) => { - e && e.stopPropagation(); + this.stopEvent(e); const { onClickButton } = this.props; onClickButton && onClickButton(); this.showModal(); @@ -90,7 +118,8 @@ export default class ModalButton extends Component { onFinishAction && onFinishAction(); }; - handleOk = () => { + handleOk = (e) => { + this.stopEvent(e); const { handleOk } = this.props; if (handleOk) { this.setState({ @@ -118,22 +147,66 @@ export default class ModalButton extends Component { } }; - handleCancel = () => { + handleCancel = (e) => { + this.stopEvent(e); const { onCancelAction } = this.props; onCancelAction && onCancelAction(); this.hideModal(); }; hideModal = () => { + this.removeListener(); this.setState({ visible: false, }); }; showModal = () => { - this.setState({ - visible: true, - }); + this.setState( + { + visible: true, + }, + () => { + setTimeout(() => { + this.addListener(); + }, 0); + } + ); + }; + + stopEvent = (e) => { + if (e && e.preventDefault) { + e.preventDefault(); + } + if (e && e.stopPropagation) { + e.stopPropagation(); + } + }; + + onClickModal = (e) => { + if (!this.modalTarget) { + this.stopEvent(e); + return; + } + const buttons = this.modalTarget.getElementsByTagName('button'); + const { innerHTML = '' } = e.target || {}; + let isButton = false; + for (let i = 0; i < buttons.length; i++) { + if (isButton) { + return; + } + const specialInner = ['-', '']; + if ( + !specialInner.includes(innerHTML) && + buttons[i].innerHTML.includes(innerHTML) + ) { + isButton = true; + } + } + if (isButton) { + return; + } + this.stopEvent(e); }; renderModal() { @@ -171,7 +244,11 @@ export default class ModalButton extends Component { style: { display: 'none' }, }; } - return {content}; + return ( + + {content} + + ); } render() { diff --git a/src/components/TableButton/RuleButton.jsx b/src/components/TableButton/RuleButton.jsx index 19d15634..bec56a86 100644 --- a/src/components/TableButton/RuleButton.jsx +++ b/src/components/TableButton/RuleButton.jsx @@ -34,6 +34,7 @@ export default class RuleButton extends Component { modalSize: 'middle', columns: getSelfColumns(this), data, + hasPagination: false, }; return ; } diff --git a/src/components/TableButton/index.jsx b/src/components/TableButton/index.jsx index 5d7cabaa..3dfc8f6c 100644 --- a/src/components/TableButton/index.jsx +++ b/src/components/TableButton/index.jsx @@ -29,6 +29,7 @@ export default class TableButton extends Component { className: PropTypes.func, buttonText: PropTypes.string, style: PropTypes.string, + hasPagination: PropTypes.bool, }; } @@ -41,11 +42,19 @@ export default class TableButton extends Component { className: '', buttonText: t('View Detail'), title: t('Detail'), + hasPagination: true, }; renderTable = () => { - const { data, columns } = this.props; - return ; + const { data, columns, hasPagination } = this.props; + const configs = { + columns, + dataSource: data, + }; + if (!hasPagination) { + configs.pagination = false; + } + return
; }; render() { diff --git a/src/pages/compute/containers/Instance/Detail/SecurityGroup/action/ManageSecurityGroup.jsx b/src/pages/compute/containers/Instance/Detail/SecurityGroup/action/ManageSecurityGroup.jsx index d24a80ca..f5187702 100644 --- a/src/pages/compute/containers/Instance/Detail/SecurityGroup/action/ManageSecurityGroup.jsx +++ b/src/pages/compute/containers/Instance/Detail/SecurityGroup/action/ManageSecurityGroup.jsx @@ -76,7 +76,6 @@ export class ManageSecurityGroup extends ModalAction { isMulti: true, filterParams: securityGroupFilter, columns: securityGroupColumns, - onRow: () => {}, }, ]; } diff --git a/src/pages/compute/containers/Instance/actions/CreateIronic/NetworkStep/index.jsx b/src/pages/compute/containers/Instance/actions/CreateIronic/NetworkStep/index.jsx index 50bdef91..6e18c33e 100644 --- a/src/pages/compute/containers/Instance/actions/CreateIronic/NetworkStep/index.jsx +++ b/src/pages/compute/containers/Instance/actions/CreateIronic/NetworkStep/index.jsx @@ -254,7 +254,6 @@ export class NetworkStep extends Base { ), filterParams: securityGroupFilter, columns: securityGroupColumns, - onRow: () => {}, }, ]; } diff --git a/src/pages/compute/containers/Instance/actions/ManageSecurityGroup.jsx b/src/pages/compute/containers/Instance/actions/ManageSecurityGroup.jsx index 2802bdf3..1214550a 100644 --- a/src/pages/compute/containers/Instance/actions/ManageSecurityGroup.jsx +++ b/src/pages/compute/containers/Instance/actions/ManageSecurityGroup.jsx @@ -187,7 +187,6 @@ export class ManageSecurityGroup extends ModalAction { isMulti: true, filterParams: securityGroupFilter, columns: securityGroupColumns, - onRow: () => {}, }, ]; } diff --git a/src/pages/compute/containers/Instance/actions/StepCreate/NetworkStep/index.jsx b/src/pages/compute/containers/Instance/actions/StepCreate/NetworkStep/index.jsx index 4b36c7d4..0c12a5c8 100644 --- a/src/pages/compute/containers/Instance/actions/StepCreate/NetworkStep/index.jsx +++ b/src/pages/compute/containers/Instance/actions/StepCreate/NetworkStep/index.jsx @@ -293,7 +293,6 @@ export class NetworkStep extends Base { ), filterParams: securityGroupFilter, columns: securityGroupColumns, - onRow: () => {}, }, ]; } diff --git a/src/pages/network/containers/Port/actions/ManageSecurityGroup.jsx b/src/pages/network/containers/Port/actions/ManageSecurityGroup.jsx index 9d16cfa5..795c56d1 100644 --- a/src/pages/network/containers/Port/actions/ManageSecurityGroup.jsx +++ b/src/pages/network/containers/Port/actions/ManageSecurityGroup.jsx @@ -139,7 +139,6 @@ export class ManageSecurityGroup extends ModalAction { isMulti: true, filterParams: securityGroupFilter, columns: securityGroupColumns, - onRow: () => {}, hidden: !port_security_enabled, }, ];