import omit from 'omit.js' import Tabs from '../tabs' import Row from '../row' import Col from '../col' import PropTypes from '../_util/vue-types' import addEventListener from '../_util/Dom/addEventListener' import { getComponentFromProp, getSlotOptions, isEmptyElement, filterEmpty } from '../_util/props-util' import throttleByAnimationFrame from '../_util/throttleByAnimationFrame' import BaseMixin from '../_util/BaseMixin' const { TabPane } = Tabs export default { name: 'ACard', mixins: [BaseMixin], props: { prefixCls: PropTypes.string.def('ant-card'), title: PropTypes.any, extra: PropTypes.any, bordered: PropTypes.bool.def(true), bodyStyle: PropTypes.object, headStyle: PropTypes.object, loading: PropTypes.bool.def(false), hoverable: PropTypes.bool.def(false), type: PropTypes.string, actions: PropTypes.any, tabList: PropTypes.array, activeTabKey: PropTypes.string, defaultActiveTabKey: PropTypes.string, }, data () { this.updateWiderPaddingCalled = false return { widerPadding: false, } }, beforeMount () { this.updateWiderPadding = throttleByAnimationFrame(this.updateWiderPadding) }, mounted () { this.updateWiderPadding() this.resizeEvent = addEventListener(window, 'resize', this.updateWiderPadding) }, beforeDestroy () { if (this.resizeEvent) { this.resizeEvent.remove() } this.updateWiderPadding.cancel && this.updateWiderPadding.cancel() }, methods: { updateWiderPadding () { const cardContainerRef = this.$refs.cardContainerRef if (!cardContainerRef) { return } // 936 is a magic card width pixel number indicated by designer const WIDTH_BOUNDARY_PX = 936 if (cardContainerRef.offsetWidth >= WIDTH_BOUNDARY_PX && !this.widerPadding) { this.setState({ widerPadding: true }, () => { this.updateWiderPaddingCalled = true // first render without css transition }) } if (cardContainerRef.offsetWidth < WIDTH_BOUNDARY_PX && this.widerPadding) { this.setState({ widerPadding: false }, () => { this.updateWiderPaddingCalled = true // first render without css transition }) } }, onHandleTabChange (key) { this.$emit('tabChange', key) }, isContainGrid (obj = []) { let containGrid obj.forEach((element) => { if ( element && getSlotOptions(element).__ANT_CARD_GRID ) { containGrid = true } }) return containGrid }, getAction (actions) { if (!actions || !actions.length) { return null } const actionList = actions.map((action, index) => (